diff --git a/.gitignore b/.gitignore index f69dfd5..d6b84d0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1 @@ -*~ -*.pyc -dist/ rattail_mailchimp.egg-info/ diff --git a/CHANGELOG.md b/CHANGELOG.md index 9009e56..7fc0322 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,46 +5,6 @@ All notable changes to rattail-mailchimp will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). -## v0.3.3 (2024-07-05) - -### Fix - -- define `host_key` for MailChimp -> Rattail import - -## v0.3.2 (2024-07-01) - -### Fix - -- remove legacy command definitions - -## v0.3.1 (2024-06-14) - -### Fix - -- fallback to `importlib_metadata` on older python - -## v0.3.0 (2024-06-10) - -### Feat - -- switch from setup.cfg to pyproject.toml + hatchling - -## [0.2.1] - 2024-06-04 -### Changed -- Setup default handler for Mailchimp -> Rattail import. - -## [0.2.0] - 2024-06-03 -### Changed -- Migrate all commands to use `typer`. - -## [0.1.5] - 2023-11-30 -### Changed -- Update subcommand entry point group names, per wuttjamaican. - -## [0.1.4] - 2023-06-01 -### Changed -- Replace `setup.py` contents with `setup.cfg`. - ## [0.1.3] - 2023-05-13 ### Changed - Avoid deprecated import for `OrderedDict`. diff --git a/README.md b/README.md deleted file mode 100644 index 5b17139..0000000 --- a/README.md +++ /dev/null @@ -1,11 +0,0 @@ - -# rattail_mailchimp - -Rattail is a retail software framework, released under the GNU General -Public License. - -This package contains software interfaces for the -[MailChimp](https://mailchimp.com/) system. - -Please see the [Rattail Project](https://rattailproject.org/) for more -information. diff --git a/README.rst b/README.rst new file mode 100644 index 0000000..25dc9c3 --- /dev/null +++ b/README.rst @@ -0,0 +1,14 @@ + +rattail_mailchimp +================= + +Rattail is a retail software framework, released under the GNU General +Public License. + +This package contains software interfaces for the `MailChimp`_ system. + +.. _`MailChimp`: https://mailchimp.com/ + +Please see the `Rattail Project`_ for more information. + +.. _`Rattail Project`: https://rattailproject.org/ diff --git a/pyproject.toml b/pyproject.toml deleted file mode 100644 index 335d26c..0000000 --- a/pyproject.toml +++ /dev/null @@ -1,54 +0,0 @@ - -[build-system] -requires = ["hatchling"] -build-backend = "hatchling.build" - - -[project] -name = "rattail-mailchimp" -version = "0.3.3" -description = "Rattail Software Interfaces for MailChimp" -readme = "README.md" -authors = [{name = "Lance Edgar", email = "lance@edbob.org"}] -license = {text = "GNU GPL v3+"} -classifiers = [ - "Development Status :: 4 - Beta", - "Environment :: Console", - "Environment :: Web Environment", - "Intended Audience :: Developers", - "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", - "Natural Language :: English", - "Operating System :: OS Independent", - "Programming Language :: Python", - "Programming Language :: Python :: 3", - "Topic :: Office/Business", - "Topic :: Software Development :: Libraries :: Python Modules", -] -dependencies = [ - "mailchimp3", - "rattail", -] - - -[project.entry-points."rattail.config.extensions"] -rattail_mailchimp = "rattail_mailchimp.config:MailchimpConfigExtension" - - -[project.entry-points."rattail.typer_imports"] -rattail_mailchimp = "rattail_mailchimp.commands" - - -[project.entry-points."rattail.emails"] -rattail_mailchimp = "rattail_mailchimp.emails" - - -[project.urls] -Homepage = "https://rattailproject.org" -Repository = "https://kallithea.rattailproject.org/rattail-project/rattail-mailchimp" -Changelog = "https://kallithea.rattailproject.org/rattail-project/rattail-mailchimp/files/master/CHANGELOG.md" - - -[tool.commitizen] -version_provider = "pep621" -tag_format = "v$version" -update_changelog_on_bump = true diff --git a/rattail_mailchimp/_version.py b/rattail_mailchimp/_version.py index 1c2e56d..d60824a 100644 --- a/rattail_mailchimp/_version.py +++ b/rattail_mailchimp/_version.py @@ -1,9 +1,3 @@ # -*- coding: utf-8; -*- -try: - from importlib.metadata import version -except ImportError: - from importlib_metadata import version - - -__version__ = version('rattail-mailchimp') +__version__ = '0.1.3' diff --git a/rattail_mailchimp/commands.py b/rattail_mailchimp/commands.py index bc3bdef..8808fbb 100644 --- a/rattail_mailchimp/commands.py +++ b/rattail_mailchimp/commands.py @@ -2,7 +2,7 @@ ################################################################################ # # Rattail -- Retail Software Framework -# Copyright © 2010-2024 Lance Edgar +# Copyright © 2010-2021 Lance Edgar # # This file is part of Rattail. # @@ -24,25 +24,23 @@ Rattail Commands for MailChimp integration """ -import typer - -from rattail.commands import rattail_typer -from rattail.commands.typer import importer_command, typer_get_runas_user -from rattail.commands.importing import ImportCommandHandler +from rattail import commands +from rattail.util import load_object -@rattail_typer.command() -@importer_command -def import_mailchimp( - ctx: typer.Context, - **kwargs -): +class ImportMailChimp(commands.ImportSubcommand): """ Import data to Rattail, from MailChimp API """ - config = ctx.parent.rattail_config - progress = ctx.parent.rattail_progress - handler = ImportCommandHandler( - config, import_handler_key='to_rattail.from_mailchimp.import') - kwargs['user'] = typer_get_runas_user(ctx) - handler.run(kwargs, progress=progress) + name = 'import-mailchimp' + description = __doc__.strip() + default_handler_spec = 'rattail_mailchimp.importing.mailchimp:FromMailChimpToRattail' + + def get_handler_factory(self, **kwargs): + if self.config: + spec = self.config.get('rattail.importing', 'mailchimp.handler', + default=self.default_handler_spec) + else: + # just use default, for sake of cmd line help + spec = self.default_handler_spec + return load_object(spec) diff --git a/rattail_mailchimp/config.py b/rattail_mailchimp/config.py deleted file mode 100644 index 4bad837..0000000 --- a/rattail_mailchimp/config.py +++ /dev/null @@ -1,42 +0,0 @@ -# -*- coding: utf-8; -*- -################################################################################ -# -# Rattail -- Retail Software Framework -# Copyright © 2010-2024 Lance Edgar -# -# This file is part of Rattail. -# -# Rattail is free software: you can redistribute it and/or modify it under the -# terms of the GNU General Public License as published by the Free Software -# Foundation, either version 3 of the License, or (at your option) any later -# version. -# -# Rattail is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -# details. -# -# You should have received a copy of the GNU General Public License along with -# Rattail. If not, see . -# -################################################################################ -""" -Config extensions for rattail-mailchimp -""" - -from wuttjamaican.conf import WuttaConfigExtension - - -class MailchimpConfigExtension(WuttaConfigExtension): - """ - Config extension for rattail-mailchimp - """ - key = 'rattail_mailchimp' - - def configure(self, config): - - # rattail import-mailchimp - config.setdefault('rattail.importing', 'to_rattail.from_mailchimp.import.default_handler', - 'rattail_mailchimp.importing.mailchimp:FromMailChimpToRattail') - config.setdefault('rattail.importing', 'to_rattail.from_mailchimp.import.default_cmd', - 'rattail import-mailchimp') diff --git a/rattail_mailchimp/importing/mailchimp.py b/rattail_mailchimp/importing/mailchimp.py index c5f9a35..6c194fb 100644 --- a/rattail_mailchimp/importing/mailchimp.py +++ b/rattail_mailchimp/importing/mailchimp.py @@ -2,7 +2,7 @@ ################################################################################ # # Rattail -- Retail Software Framework -# Copyright © 2010-2024 Lance Edgar +# Copyright © 2010-2023 Lance Edgar # # This file is part of Rattail. # @@ -30,6 +30,7 @@ from collections import OrderedDict from mailchimp3 import MailChimp from rattail import importing +from rattail.time import localtime, make_utc from rattail_mailchimp import importing as mailchimp_importing @@ -37,9 +38,7 @@ class FromMailChimpToRattail(importing.ToRattailHandler): """ Handler for MailChimp -> Rattail cache import """ - host_key = 'mailchimp' host_title = "MailChimp" - generic_host_title = "MailChimp" def get_importers(self): importers = OrderedDict() @@ -54,7 +53,7 @@ class FromMailChimp(importing.Importer): """ def setup(self): - super().setup() + super(FromMailChimp, self).setup() self.api_key = self.config.require('mailchimp', 'api_key') self.mailchimp = MailChimp(self.api_key) @@ -66,10 +65,10 @@ class FromMailChimp(importing.Importer): # issue..since we clearly have a UTC value value = value[:-6] dt = datetime.datetime.strptime(value, '%Y-%m-%dT%H:%M:%S') - dt = self.app.localtime(dt, from_utc=True) + dt = localtime(self.config, dt, from_utc=True) else: dt = datetime.datetime.strptime(value, '%Y-%m-%dT%H:%M:%S%z') - dt = self.app.localtime(dt) + dt = localtime(self.config, dt) return dt @@ -96,7 +95,7 @@ class MailChimpListImporter(FromMailChimp, mailchimp_importing.model.MailChimpLi return { 'id': mclist['id'], 'name': mclist['name'], - 'date_created': self.app.make_utc(date_created), + 'date_created': make_utc(date_created), } @@ -161,6 +160,6 @@ class MailChimpListMemberImporter(FromMailChimp, mailchimp_importing.model.MailC 'status': member['status'], # TODO: this API endpoint does not appear to include this field? # 'unsubscribe_reason': member.get('unsubscribe_reason'), - 'last_changed': self.app.make_utc(last_changed), + 'last_changed': make_utc(last_changed), 'source': member['source'], } diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..7235ac6 --- /dev/null +++ b/setup.py @@ -0,0 +1,107 @@ +# -*- coding: utf-8; -*- +################################################################################ +# +# Rattail -- Retail Software Framework +# Copyright © 2010-2022 Lance Edgar +# +# This file is part of Rattail. +# +# Rattail is free software: you can redistribute it and/or modify it under the +# terms of the GNU General Public License as published by the Free Software +# Foundation, either version 3 of the License, or (at your option) any later +# version. +# +# Rattail is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# Rattail. If not, see . +# +################################################################################ + +import os +from setuptools import setup, find_packages + + +here = os.path.abspath(os.path.dirname(__file__)) +exec(open(os.path.join(here, 'rattail_mailchimp', '_version.py')).read()) +README = open(os.path.join(here, 'README.rst')).read() + + +requires = [ + # + # Version numbers within comments below have specific meanings. + # Basically the 'low' value is a "soft low," and 'high' a "soft high." + # In other words: + # + # If either a 'low' or 'high' value exists, the primary point to be + # made about the value is that it represents the most current (stable) + # version available for the package (assuming typical public access + # methods) whenever this project was started and/or documented. + # Therefore: + # + # If a 'low' version is present, you should know that attempts to use + # versions of the package significantly older than the 'low' version + # may not yield happy results. (A "hard" high limit may or may not be + # indicated by a true version requirement.) + # + # Similarly, if a 'high' version is present, and especially if this + # project has laid dormant for a while, you may need to refactor a bit + # when attempting to support a more recent version of the package. (A + # "hard" low limit should be indicated by a true version requirement + # when a 'high' version is present.) + # + # In any case, developers and other users are encouraged to play + # outside the lines with regard to these soft limits. If bugs are + # encountered then they should be filed as such. + # + # package # low high + + 'mailchimp3', # 3.0.14 + 'rattail', # 0.9.214 +] + + +setup( + name = "rattail-mailchimp", + version = __version__, + author = "Lance Edgar", + author_email = "lance@edbob.org", + url = "https://rattailproject.org/", + license = "GNU GPL v3", + description = "Rattail Software Interfaces for MailChimp", + long_description = README, + + classifiers = [ + 'Development Status :: 4 - Beta', + 'Environment :: Console', + 'Environment :: Web Environment', + 'Intended Audience :: Developers', + 'License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)', + 'Natural Language :: English', + 'Operating System :: OS Independent', + 'Programming Language :: Python', + 'Programming Language :: Python :: 3', + 'Topic :: Office/Business', + 'Topic :: Software Development :: Libraries :: Python Modules', + ], + + install_requires = requires, + packages = find_packages(), + include_package_data = True, + zip_safe = False, + + entry_points = { + + 'rattail.commands': [ + 'import-mailchimp = rattail_mailchimp.commands:ImportMailChimp', + ], + + + 'rattail.emails': [ + 'rattail_mailchimp = rattail_mailchimp.emails', + ], + }, +) diff --git a/tasks.py b/tasks.py index 912f111..ac9fab3 100644 --- a/tasks.py +++ b/tasks.py @@ -2,7 +2,7 @@ ################################################################################ # # Rattail -- Retail Software Framework -# Copyright © 2010-2024 Lance Edgar +# Copyright © 2010-2022 Lance Edgar # # This file is part of Rattail. # @@ -30,15 +30,17 @@ import shutil from invoke import task +here = os.path.abspath(os.path.dirname(__file__)) +exec(open(os.path.join(here, 'rattail_mailchimp', '_version.py')).read()) + + @task -def release(c): +def release(ctx): """ Release a new version of 'rattail-mailchimp'. """ - if os.path.exists('dist'): - shutil.rmtree('dist') - if os.path.exists('rattail_mailchimp.egg-info'): - shutil.rmtree('rattail_mailchimp.egg-info') - c.run('python -m build --sdist') + shutil.rmtree('rattail_mailchimp.egg-info') + ctx.run('python -m build --sdist') - c.run('twine upload dist/*') + filename = 'rattail-mailchimp-{}.tar.gz'.format(__version__) + ctx.run('twine upload dist/{}'.format(filename))