Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 1 addition & 4 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,14 +56,11 @@ jobs:
run: |
# Replace default path to CKAN core config file with the one on the container
sed -i -e 's/use = config:.*/use = config:\/srv\/app\/src\/ckan\/test-core.ini/' test.ini
pip install -r requirements.txt
pip install -r dev-requirements.txt
pip install -e .
pip install -e .[dev]

- name: Setup extension
run: |
ckan -c test.ini db init
ckan -c test.ini db pending-migrations --apply

- name: Run tests
run: pytest --ckan-ini=test.ini --cov=ckanext.subscribe --cov-report=term-missing --cov-append --disable-warnings ckanext/subscribe/tests
Expand Down
1 change: 1 addition & 0 deletions MANIFEST.in
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
include README.rst
include LICENSE
include requirements.txt
include dev-requirements.txt
recursive-include ckanext/subscribe *.html *.json *.js *.less *.css *.mo *.yml
recursive-include ckanext/subscribe/migration *.ini *.py *.mako
3 changes: 1 addition & 2 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -247,8 +247,7 @@ do::

git clone https://github.com/bellisk/ckanext-subscribe.git
cd ckanext-subscribe
python setup.py develop
pip install -r dev-requirements.txt
pip install -e .[dev]

Now continue Installation steps from step 3

Expand Down
44 changes: 12 additions & 32 deletions ckanext/subscribe/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,7 @@ def get_footer_contents(email_vars, subscription=None):
if subscription:
plain_text_footer += """
You can unsubscribe from notifications emails for {object_type}: "{object_title}" by going to {unsubscribe_link}.
""".format(
**email_vars
)
""".format(**email_vars)
else:
plain_text_footer += (
"To stop receiving all subscription emails from {site_title}: "
Expand All @@ -43,9 +41,7 @@ def get_footer_contents(email_vars, subscription=None):
).format(**email_vars)
plain_text_footer += """
Manage your settings at {manage_link}.
""".format(
**email_vars
)
""".format(**email_vars)
return plain_text_footer, html_footer


Expand Down Expand Up @@ -121,9 +117,7 @@ def get_manage_email_contents(email_vars):

--
{html_footer}
""".format(
**email_vars
)
""".format(**email_vars)
plain_text_body = """
{site_title} subscription requested:

Expand All @@ -132,9 +126,7 @@ def get_manage_email_contents(email_vars):

--
{plain_text_footer}
""".format(
**email_vars
)
""".format(**email_vars)
return subject, plain_text_body, html_body


Expand All @@ -152,9 +144,7 @@ def get_subscription_confirmation_email_contents(email_vars):

--
{html_footer}
""".format(
**email_vars
)
""".format(**email_vars)
plain_text_body = """
You have subscribed to notifications about:
{object_type}: {object_title} ({object_name})
Expand All @@ -165,9 +155,7 @@ def get_subscription_confirmation_email_contents(email_vars):

--
{plain_text_footer}
""".format(
**email_vars
)
""".format(**email_vars)
return subject, plain_text_body, html_body


Expand All @@ -176,8 +164,7 @@ def get_notification_email_contents(email_vars):
# Make sure subject is only one line
subject = subject.split("\n")[0]

html_body = Template(
"""
html_body = Template("""
<p>Changes have occurred in relation to your subscription(s)</p>

{% for notification in notifications %}
Expand All @@ -197,10 +184,8 @@ def get_notification_email_contents(email_vars):

--
{{ html_footer }}
"""
).render(**email_vars)
plain_text_body = Template(
"""
""").render(**email_vars)
plain_text_body = Template("""
Changes have occurred in relation to your subscription(s)

{% for notification in notifications %}
Expand All @@ -215,8 +200,7 @@ def get_notification_email_contents(email_vars):

--
{{ plain_text_footer }}
"""
).render(**email_vars)
""").render(**email_vars)
return subject, plain_text_body, html_body


Expand All @@ -234,9 +218,7 @@ def get_verification_email_contents(email_vars):

--
{html_footer}
""".format(
**email_vars
)
""".format(**email_vars)
plain_text_body = """
{site_title} subscription requested:
{object_type}: {object_title} ({object_name})
Expand All @@ -246,9 +228,7 @@ def get_verification_email_contents(email_vars):

--
{plain_text_footer}
""".format(
**email_vars
)
""".format(**email_vars)
return subject, plain_text_body, html_body


Expand Down
2 changes: 2 additions & 0 deletions dev-requirements.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
black
coveralls # for reporting test coverage to coveralls.io in .github/workflows/test.yml
isort
mock
44 changes: 44 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,2 +1,46 @@
[project]
name = "ckanext-subscribe"
version = "1.1.0"
dynamic = ["dependencies", "optional-dependencies"]
description = "CKAN extension that allows users to subscribe to updates WITHOUT requiring login"
authors = [
{name = "David Read", email = "[email protected]"}
]
maintainers = [
{name = "Liip AG", email = "[email protected]"}
]
license = {text = "AGPL"}
classifiers = [
"Intended Audience :: Developers",
"Development Status :: 4 - Beta",
"License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
]
keywords = [
"CKAN",
"email",
"subscription",
"notifications",
]

[project.urls]
Documentation = "https://github.com/opendata-swiss/ckanext-subscribe"
Repository = "https://github.com/opendata-swiss/ckanext-subscribe"
Issues = "https://github.com/opendata-swiss/ckanext-subscribe/issues"

[build-system]
requires = ["setuptools>=64"]
build-backend = "setuptools.build_meta"

[tool.setuptools.dynamic]
dependencies = {file = ["requirements.txt"]}
optional-dependencies = {dev = { file = ["dev-requirements.txt"] }}

[tool.isort]
profile = "black"

[project.entry-points."ckan.plugins"]
subscribe = "ckanext.subscribe.plugin:SubscribePlugin"
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
enum34
10 changes: 10 additions & 0 deletions setup.cfg
Original file line number Diff line number Diff line change
@@ -1,3 +1,13 @@
[options]
packages = find:
namespace_packages = ckanext
install_requires =
include_package_data = True

[options.entry_points]
babel.extractors =
ckan = ckan.lib.extract:extract_ckan

[extract_messages]
keywords = translate isPlural
add_comments = TRANSLATORS:
Expand Down
80 changes: 1 addition & 79 deletions setup.py
Original file line number Diff line number Diff line change
@@ -1,84 +1,6 @@
# -*- coding: utf-8 -*-
from codecs import open # To use a consistent encoding
from os import path

from setuptools import find_packages, setup # Always prefer setuptools over distutils

here = path.abspath(path.dirname(__file__))

# Get the long description from the relevant file
with open(path.join(here, "README.rst"), encoding="utf-8") as f:
long_description = f.read()
from setuptools import setup

setup(
name="""ckanext-subscribe""",
# Versions should comply with PEP440. For a discussion on single-sourcing
# the version across setup.py and the project code, see
# http://packaging.python.org/en/latest/tutorial.html#version
version="1.1.0",
description="""
CKAN extension that allows users to subscribe to updates WITHOUT requiring login""",
long_description=long_description,
long_description_content_type="text/x-rst",
# The project's main homepage.
url="https://github.com/bellisk/ckanext-subscribe",
# Author details
author="""David Read""",
author_email="""[email protected]""",
maintainer="""Liip AG""",
maintainer_email="""[email protected]""",
# Choose your license
license="AGPL",
# See https://pypi.python.org/pypi?%3Aaction=list_classifiers
classifiers=[
# How mature is this project? Common values are
# 3 - Alpha
# 4 - Beta
# 5 - Production/Stable
"Development Status :: 4 - Beta",
# Pick your license as you wish (should match "license" above)
"License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)",
# Specify the Python versions you support here. In particular, ensure
# that you indicate whether you support Python 2, Python 3 or both.
"Programming Language :: Python :: 3",
],
# What does your project relate to?
keywords="""CKAN email subscription notifications""",
# You can just specify the packages manually here if your project is
# simple. Or you can use find_packages().
packages=find_packages(exclude=["contrib", "docs", "tests*"]),
namespace_packages=["ckanext"],
install_requires=[
"enum34",
],
# If there are data files included in your packages that need to be
# installed, specify them here. If using Python 2.6 or less, then these
# have to be included in MANIFEST.in as well.
include_package_data=True,
package_data={},
# Although 'package_data' is the preferred approach, in some case you may
# need to place data files outside of your packages.
# see http://docs.python.org/3.4/distutils/setupscript.html#installing-additional-files
# In this case, 'data_file' will be installed into '<sys.prefix>/my_data'
data_files=[],
# To provide executable scripts, use entry points in preference to the
# "scripts" keyword. Entry points provide cross-platform support and allow
# pip to create the appropriate form of executable for the target platform.
entry_points="""
[ckan.plugins]
subscribe=ckanext.subscribe.plugin:SubscribePlugin

[babel.extractors]
ckan = ckan.lib.extract:extract_ckan

[paste.paster_command]
subscribe = ckanext.subscribe.cli:subscribeCommand

""",
# If you are changing from the default layout of your extension, you may
# have to change the message extractors, you can read more about babel
# message extraction at
# http://babel.pocoo.org/docs/messages/#extraction-method-mapping-and-configuration
message_extractors={
"ckanext": [
("**.py", "python", None),
Expand Down
Loading