Hello community, here is the log from the commit of package python-mailmanclient for openSUSE:Factory checked in at 2020-08-04 20:23:31 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-mailmanclient (Old) and /work/SRC/openSUSE:Factory/.python-mailmanclient.new.3592 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-mailmanclient" Tue Aug 4 20:23:31 2020 rev:4 rq:824275 version:3.3.1 Changes: -------- --- /work/SRC/openSUSE:Factory/python-mailmanclient/python-mailmanclient.changes 2020-01-24 13:12:41.993470101 +0100 +++ /work/SRC/openSUSE:Factory/.python-mailmanclient.new.3592/python-mailmanclient.changes 2020-08-04 20:23:43.917011694 +0200 @@ -1,0 +2,15 @@ +Tue Aug 4 02:03:44 UTC 2020 - Stasiek Michalski <stas...@michalski.cc> + +- Update to 3.3.1 + * Held message moderation now supports an optional keyword, reason to + specify the reason to reject the message. + * Fix a bug where missing display_name attribute with + MalingList.subscribe would subscribe the user with a display name of + "None". + * Add advertised flag to MailingList object. + * MailingList.nonmembers now uses roster/nonmembers resource instead of + the find/ API for consistency. + * Add Client.get_nonmember and MailingList.get_nonmember to get a + non-member by address. + +------------------------------------------------------------------- Old: ---- mailmanclient-3.3.0.tar.gz New: ---- mailmanclient-3.3.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-mailmanclient.spec ++++++ --- /var/tmp/diff_new_pack.0krcyJ/_old 2020-08-04 20:23:46.001011960 +0200 +++ /var/tmp/diff_new_pack.0krcyJ/_new 2020-08-04 20:23:46.005011960 +0200 @@ -19,7 +19,7 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} %define skip_python2 1 Name: python-mailmanclient -Version: 3.3.0 +Version: 3.3.1 Release: 0 Summary: mailmanclient -- Python bindings for Mailman REST API License: LGPL-3.0-only ++++++ mailmanclient-3.3.0.tar.gz -> mailmanclient-3.3.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mailmanclient-3.3.0/.gitignore new/mailmanclient-3.3.1/.gitignore --- old/mailmanclient-3.3.0/.gitignore 2019-01-04 14:14:13.000000000 +0100 +++ new/mailmanclient-3.3.1/.gitignore 1970-01-01 01:00:00.000000000 +0100 @@ -1,8 +0,0 @@ -build -dist -mailman.client.egg-info -.tox -__pycache__ -*.egg-info -*.pyc -_build/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mailmanclient-3.3.0/.gitlab-ci.yml new/mailmanclient-3.3.1/.gitlab-ci.yml --- old/mailmanclient-3.3.0/.gitlab-ci.yml 2019-05-07 00:08:23.000000000 +0200 +++ new/mailmanclient-3.3.1/.gitlab-ci.yml 1970-01-01 01:00:00.000000000 +0100 @@ -1,44 +0,0 @@ -image: maxking/mailman-ci-runner - -variables: - LC_ALL: C.UTF-8 - LANG: C.UTF-8 - -python3.5: - script: - - tox -e py35 - except: - variables: - - $CORE_COMMIT_SHA - -python3.6: - script: - - tox -e py36 - except: - variables: - - $CORE_COMMIT_SHA - -python3.7: - script: - - tox -e py37 - except: - variables: - - $CORE_COMMIT_SHA - -lint: - script: - - tox -e lint - except: - variables: - - $CORE_COMMIT_SHA - -docs: - script: - - tox -e docs - except: - variables: - - $CORE_COMMIT_SHA - -upstream: - script: - - tox -e py37 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mailmanclient-3.3.0/PKG-INFO new/mailmanclient-3.3.1/PKG-INFO --- old/mailmanclient-3.3.0/PKG-INFO 2019-09-03 18:06:57.000000000 +0200 +++ new/mailmanclient-3.3.1/PKG-INFO 2020-06-02 05:39:22.932331300 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: mailmanclient -Version: 3.3.0 +Version: 3.3.1 Summary: mailmanclient -- Python bindings for Mailman REST API Home-page: http://www.list.org/ Maintainer: Barry Warsaw diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mailmanclient-3.3.0/conftest.py new/mailmanclient-3.3.1/conftest.py --- old/mailmanclient-3.3.0/conftest.py 2019-05-07 00:08:23.000000000 +0200 +++ new/mailmanclient-3.3.1/conftest.py 2020-05-10 01:14:40.000000000 +0200 @@ -1,4 +1,4 @@ -# Copyright (C) 2017-2019 by the Free Software Foundation, Inc. +# Copyright (C) 2017-2020 by the Free Software Foundation, Inc. # # This file is part of mailman.client. # diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mailmanclient-3.3.0/mailman_test.cfg new/mailmanclient-3.3.1/mailman_test.cfg --- old/mailmanclient-3.3.0/mailman_test.cfg 2019-05-07 00:08:23.000000000 +0200 +++ new/mailmanclient-3.3.1/mailman_test.cfg 2020-03-26 07:38:51.000000000 +0100 @@ -21,3 +21,11 @@ [archiver.prototype] enable: yes + +[logging.master] +path: /dev/stdout +level: info + +[logging.http] +path: /dev/stdout +level: error diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mailmanclient-3.3.0/setup.py new/mailmanclient-3.3.1/setup.py --- old/mailmanclient-3.3.0/setup.py 2019-05-07 00:08:23.000000000 +0200 +++ new/mailmanclient-3.3.1/setup.py 2020-05-10 01:14:40.000000000 +0200 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2019 by the Free Software Foundation, Inc. +# Copyright (C) 2010-2020 by the Free Software Foundation, Inc. # # This file is part of mailman.client. # @@ -55,13 +55,13 @@ extras_require={ 'testing': [ 'pytest', - 'pytest-vcr', 'pytest-services', - 'mailman', + 'mailman>=3.3.1', 'falcon==1.4.1', ], 'lint': [ - 'flake8>3.0' + 'flake8>3.0', + 'flake8-bugbear', ] }, ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mailmanclient-3.3.0/setup_helpers.py new/mailmanclient-3.3.1/setup_helpers.py --- old/mailmanclient-3.3.0/setup_helpers.py 2019-05-07 00:08:23.000000000 +0200 +++ new/mailmanclient-3.3.1/setup_helpers.py 2020-05-10 01:14:40.000000000 +0200 @@ -1,4 +1,4 @@ -# Copyright (C) 2009-2019 by the Free Software Foundation, Inc. +# Copyright (C) 2009-2020 by the Free Software Foundation, Inc. # # This file is part of mailman.client # @@ -115,7 +115,7 @@ :rtype: list """ doctests = [] - for dirpath, dirnames, filenames in os.walk(start): + for dirpath, _, filenames in os.walk(start): doctests.extend(os.path.join(dirpath, filename) for filename in filenames if filename.endswith(extension)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mailmanclient-3.3.0/src/mailmanclient/__init__.py new/mailmanclient-3.3.1/src/mailmanclient/__init__.py --- old/mailmanclient-3.3.0/src/mailmanclient/__init__.py 2019-09-03 17:00:28.000000000 +0200 +++ new/mailmanclient-3.3.1/src/mailmanclient/__init__.py 2020-05-10 01:14:40.000000000 +0200 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2019 by the Free Software Foundation, Inc. +# Copyright (C) 2010-2020 by the Free Software Foundation, Inc. # # This file is part of mailmanclient. # diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mailmanclient-3.3.0/src/mailmanclient/_client.py new/mailmanclient-3.3.1/src/mailmanclient/_client.py --- old/mailmanclient-3.3.0/src/mailmanclient/_client.py 2019-05-07 00:08:23.000000000 +0200 +++ new/mailmanclient-3.3.1/src/mailmanclient/_client.py 2020-05-10 01:14:40.000000000 +0200 @@ -1,4 +1,4 @@ -# Copyright (C) 2017-2019 by the Free Software Foundation, Inc. +# Copyright (C) 2017-2020 by the Free Software Foundation, Inc. # # This file is part of mailmanclient. # diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mailmanclient-3.3.0/src/mailmanclient/client.py new/mailmanclient-3.3.1/src/mailmanclient/client.py --- old/mailmanclient-3.3.0/src/mailmanclient/client.py 2019-09-03 17:00:28.000000000 +0200 +++ new/mailmanclient-3.3.1/src/mailmanclient/client.py 2020-05-10 01:14:55.000000000 +0200 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2019 by the Free Software Foundation, Inc. +# Copyright (C) 2010-2020 by the Free Software Foundation, Inc. # # This file is part of mailmanclient. # @@ -218,6 +218,16 @@ """ return self.get_list(fqdn_listname).get_member(subscriber_address) + def get_nonmember(self, fqdn_listname, nonmember_address): + """Get the Member object for a given MailingList and Non-member's Email. + + :param str fqdn_listname: Fully qualified address for the MailingList. + :param str subscriber_address: Email Address for the non-member. + :returns: A member of a list. + :rtype: :class:`Member` + """ + return self.get_list(fqdn_listname).get_nonmember(nonmember_address) + def get_member_page(self, count=50, page=1): """Return a paginated list of Members. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mailmanclient-3.3.0/src/mailmanclient/conftest.py new/mailmanclient-3.3.1/src/mailmanclient/conftest.py --- old/mailmanclient-3.3.0/src/mailmanclient/conftest.py 2019-05-07 00:08:23.000000000 +0200 +++ new/mailmanclient-3.3.1/src/mailmanclient/conftest.py 2020-05-10 01:14:40.000000000 +0200 @@ -1,4 +1,4 @@ -# Copyright (C) 2017-2019 by the Free Software Foundation, Inc. +# Copyright (C) 2017-2020 by the Free Software Foundation, Inc. # # This file is part of mailman.client. # diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mailmanclient-3.3.0/src/mailmanclient/constants.py new/mailmanclient-3.3.1/src/mailmanclient/constants.py --- old/mailmanclient-3.3.0/src/mailmanclient/constants.py 2019-09-03 17:49:46.000000000 +0200 +++ new/mailmanclient-3.3.1/src/mailmanclient/constants.py 2020-06-02 05:37:27.000000000 +0200 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2019 by the Free Software Foundation, Inc. +# Copyright (C) 2010-2020 by the Free Software Foundation, Inc. # # This file is part of mailmanclient. # @@ -15,7 +15,7 @@ # along with mailmanclient. If not, see <http://www.gnu.org/licenses/>. -__version__ = '3.3.0' +__version__ = '3.3.1' DEFAULT_PAGE_ITEM_COUNT = 50 MISSING = object() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mailmanclient-3.3.0/src/mailmanclient/docs/NEWS.rst new/mailmanclient-3.3.1/src/mailmanclient/docs/NEWS.rst --- old/mailmanclient-3.3.0/src/mailmanclient/docs/NEWS.rst 2019-09-03 17:51:14.000000000 +0200 +++ new/mailmanclient-3.3.1/src/mailmanclient/docs/NEWS.rst 2020-06-02 05:37:27.000000000 +0200 @@ -2,6 +2,21 @@ NEWS for mailmanclient ======================= + +3.3.1 (2020-06-01) +================== + +- Held message moderation now supports an optional keyword, ``reason`` to + specify the reason to reject the message. (Closes #49) +- Fix a bug where missing ``display_name`` attribute with + ``MalingList.subscribe`` would subscribe the user with a display name of + "None". (Fixes #52) +- Add ``advertised`` flag to ``MailingList`` object. (See !115) +- ``MailingList.nonmembers`` now uses ``roster/nonmembers`` resource instead of + the ``find/`` API for consistency. +- Add ``Client.get_nonmember`` and ``MailingList.get_nonmember`` to get a + non-member by address. (Fixes #47) + 3.3.0 (2019-09-03) ================== diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mailmanclient-3.3.0/src/mailmanclient/docs/conftest.py new/mailmanclient-3.3.1/src/mailmanclient/docs/conftest.py --- old/mailmanclient-3.3.0/src/mailmanclient/docs/conftest.py 2019-05-07 00:08:23.000000000 +0200 +++ new/mailmanclient-3.3.1/src/mailmanclient/docs/conftest.py 2020-05-10 01:14:40.000000000 +0200 @@ -1,4 +1,4 @@ -# Copyright (C) 2017-2019 by the Free Software Foundation, Inc. +# Copyright (C) 2017-2020 by the Free Software Foundation, Inc. # # This file is part of mailmanclient. # @@ -15,22 +15,11 @@ # along with mailmanclient. If not, see <http://www.gnu.org/licenses/>. """Wrappers for doctests to run with pytest""" - -from __future__ import absolute_import, print_function, unicode_literals - import pytest from mailmanclient.testing.documentation import dump -def pytest_collection_modifyitems(items): - for item in items: - item.add_marker(pytest.mark.vcr) - - @pytest.fixture(autouse=True) def import_stuff(doctest_namespace): - doctest_namespace['absolute_import'] = absolute_import - doctest_namespace['print_function'] = print_function - doctest_namespace['unicode_literals'] = unicode_literals doctest_namespace['dump'] = dump diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mailmanclient-3.3.0/src/mailmanclient/docs/using.rst new/mailmanclient-3.3.1/src/mailmanclient/docs/using.rst --- old/mailmanclient-3.3.0/src/mailmanclient/docs/using.rst 2019-05-07 00:08:23.000000000 +0200 +++ new/mailmanclient-3.3.1/src/mailmanclient/docs/using.rst 2020-06-02 05:37:27.000000000 +0200 @@ -718,6 +718,7 @@ >>> settings = test_one.settings >>> for attr in sorted(settings): ... print(attr + ': ' + str(settings[attr])) + accept_these_nonmembers: [] acceptable_aliases: [] ... volume: 1 @@ -1256,6 +1257,7 @@ >>> cfg = client.configuration >>> for key in sorted(cfg): ... print(cfg[key].name) + ARC antispam archiver.mail_archive archiver.master diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mailmanclient-3.3.0/src/mailmanclient/restbase/base.py new/mailmanclient-3.3.1/src/mailmanclient/restbase/base.py --- old/mailmanclient-3.3.0/src/mailmanclient/restbase/base.py 2019-09-03 17:00:28.000000000 +0200 +++ new/mailmanclient-3.3.1/src/mailmanclient/restbase/base.py 2020-05-10 01:14:40.000000000 +0200 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2019 by the Free Software Foundation, Inc. +# Copyright (C) 2010-2020 by the Free Software Foundation, Inc. # # This file is part of mailmanclient. # diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mailmanclient-3.3.0/src/mailmanclient/restbase/connection.py new/mailmanclient-3.3.1/src/mailmanclient/restbase/connection.py --- old/mailmanclient-3.3.0/src/mailmanclient/restbase/connection.py 2019-09-03 17:00:28.000000000 +0200 +++ new/mailmanclient-3.3.1/src/mailmanclient/restbase/connection.py 2020-05-10 01:14:40.000000000 +0200 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2019 by the Free Software Foundation, Inc. +# Copyright (C) 2010-2020 by the Free Software Foundation, Inc. # # This file is part of mailmanclient. # @@ -115,5 +115,6 @@ return response, response.json() except HTTPError: raise - except IOError: - raise MailmanConnectionError('Could not connect to Mailman API') + except IOError as e: + raise MailmanConnectionError( + 'Could not connect to Mailman API: ', repr(e)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mailmanclient-3.3.0/src/mailmanclient/restbase/page.py new/mailmanclient-3.3.1/src/mailmanclient/restbase/page.py --- old/mailmanclient-3.3.0/src/mailmanclient/restbase/page.py 2019-05-07 00:08:23.000000000 +0200 +++ new/mailmanclient-3.3.1/src/mailmanclient/restbase/page.py 2020-05-10 01:14:40.000000000 +0200 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2019 by the Free Software Foundation, Inc. +# Copyright (C) 2010-2020 by the Free Software Foundation, Inc. # # This file is part of mailmanclient. # diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mailmanclient-3.3.0/src/mailmanclient/restobjects/address.py new/mailmanclient-3.3.1/src/mailmanclient/restobjects/address.py --- old/mailmanclient-3.3.0/src/mailmanclient/restobjects/address.py 2019-09-03 17:00:28.000000000 +0200 +++ new/mailmanclient-3.3.1/src/mailmanclient/restobjects/address.py 2020-05-10 01:14:40.000000000 +0200 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2019 by the Free Software Foundation, Inc. +# Copyright (C) 2010-2020 by the Free Software Foundation, Inc. # # This file is part of mailmanclient. # diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mailmanclient-3.3.0/src/mailmanclient/restobjects/archivers.py new/mailmanclient-3.3.1/src/mailmanclient/restobjects/archivers.py --- old/mailmanclient-3.3.0/src/mailmanclient/restobjects/archivers.py 2019-05-07 00:08:23.000000000 +0200 +++ new/mailmanclient-3.3.1/src/mailmanclient/restobjects/archivers.py 2020-05-10 01:14:40.000000000 +0200 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2019 by the Free Software Foundation, Inc. +# Copyright (C) 2010-2020 by the Free Software Foundation, Inc. # # This file is part of mailmanclient. # diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mailmanclient-3.3.0/src/mailmanclient/restobjects/ban.py new/mailmanclient-3.3.1/src/mailmanclient/restobjects/ban.py --- old/mailmanclient-3.3.0/src/mailmanclient/restobjects/ban.py 2019-05-07 00:08:23.000000000 +0200 +++ new/mailmanclient-3.3.1/src/mailmanclient/restobjects/ban.py 2020-05-10 01:14:40.000000000 +0200 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2019 by the Free Software Foundation, Inc. +# Copyright (C) 2010-2020 by the Free Software Foundation, Inc. # # This file is part of mailmanclient. # diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mailmanclient-3.3.0/src/mailmanclient/restobjects/configuration.py new/mailmanclient-3.3.1/src/mailmanclient/restobjects/configuration.py --- old/mailmanclient-3.3.0/src/mailmanclient/restobjects/configuration.py 2019-09-03 17:00:28.000000000 +0200 +++ new/mailmanclient-3.3.1/src/mailmanclient/restobjects/configuration.py 2020-05-10 01:14:40.000000000 +0200 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2019 by the Free Software Foundation, Inc. +# Copyright (C) 2010-2020 by the Free Software Foundation, Inc. # # This file is part of mailmanclient. # diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mailmanclient-3.3.0/src/mailmanclient/restobjects/domain.py new/mailmanclient-3.3.1/src/mailmanclient/restobjects/domain.py --- old/mailmanclient-3.3.0/src/mailmanclient/restobjects/domain.py 2019-05-07 00:08:23.000000000 +0200 +++ new/mailmanclient-3.3.1/src/mailmanclient/restobjects/domain.py 2020-05-10 01:14:40.000000000 +0200 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2019 by the Free Software Foundation, Inc. +# Copyright (C) 2010-2020 by the Free Software Foundation, Inc. # # This file is part of mailmanclient. # diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mailmanclient-3.3.0/src/mailmanclient/restobjects/header_match.py new/mailmanclient-3.3.1/src/mailmanclient/restobjects/header_match.py --- old/mailmanclient-3.3.0/src/mailmanclient/restobjects/header_match.py 2019-09-03 17:00:28.000000000 +0200 +++ new/mailmanclient-3.3.1/src/mailmanclient/restobjects/header_match.py 2020-05-10 01:14:40.000000000 +0200 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2019 by the Free Software Foundation, Inc. +# Copyright (C) 2010-2020 by the Free Software Foundation, Inc. # # This file is part of mailmanclient. # diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mailmanclient-3.3.0/src/mailmanclient/restobjects/held_message.py new/mailmanclient-3.3.1/src/mailmanclient/restobjects/held_message.py --- old/mailmanclient-3.3.0/src/mailmanclient/restobjects/held_message.py 2019-09-03 17:00:28.000000000 +0200 +++ new/mailmanclient-3.3.1/src/mailmanclient/restobjects/held_message.py 2020-05-10 01:14:40.000000000 +0200 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2019 by the Free Software Foundation, Inc. +# Copyright (C) 2010-2020 by the Free Software Foundation, Inc. # # This file is part of mailmanclient. # @@ -31,23 +31,30 @@ return '<HeldMessage {0!r} by {1}>'.format( self.request_id, self.sender) - def moderate(self, action): + def moderate(self, action, comment=None): """Moderate a held message. :param action: Action to perform on held message. :type action: String. """ + data = dict(action=action) + if comment is not None: + data['comment'] = comment + response, content = self._connection.call( - self._url, dict(action=action), 'POST') + self._url, data, 'POST') return response def discard(self): """Shortcut for moderate.""" return self.moderate('discard') - def reject(self): - """Shortcut for moderate.""" - return self.moderate('reject') + def reject(self, reason=None): + """Shortcut for moderate. + + :param reason: An optional reason for rejecting the held message. + """ + return self.moderate('reject', comment=reason) def defer(self): """Shortcut for moderate.""" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mailmanclient-3.3.0/src/mailmanclient/restobjects/mailinglist.py new/mailmanclient-3.3.1/src/mailmanclient/restobjects/mailinglist.py --- old/mailmanclient-3.3.0/src/mailmanclient/restobjects/mailinglist.py 2019-05-07 00:08:23.000000000 +0200 +++ new/mailmanclient-3.3.1/src/mailmanclient/restobjects/mailinglist.py 2020-06-02 05:37:27.000000000 +0200 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2019 by the Free Software Foundation, Inc. +# Copyright (C) 2010-2020 by the Free Software Foundation, Inc. # # This file is part of mailmanclient. # @@ -35,9 +35,9 @@ class MailingList(RESTObject): - _properties = ('display_name', 'fqdn_listname', 'list_id', 'list_name', - 'mail_host', 'member_count', 'volume', 'self_link', - 'description') + _properties = ('advertised', 'display_name', 'fqdn_listname', 'list_id', + 'list_name', 'mail_host', 'member_count', 'volume', + 'self_link', 'description') def __init__(self, connection, url, data=None): super(MailingList, self).__init__(connection, url, data) @@ -80,10 +80,8 @@ @property def nonmembers(self): - url = 'members/find' - data = {'role': 'nonmember', - 'list_id': self.list_id} - response, content = self._connection.call(url, data) + url = 'lists/{0}/roster/nonmember'.format(self.fqdn_listname) + response, content = self._connection.call(url) if 'entries' not in content: return [] return [Member(self._connection, entry['self_link'], entry) @@ -191,34 +189,53 @@ self.fqdn_listname, role, quote_plus(address)) self._connection.call(url, method='DELETE') - def moderate_message(self, request_id, action): + def moderate_message(self, request_id, action, comment=None): """Moderate a held message. :param request_id: Id of the held message. :type request_id: Int. :param action: Action to perform on held message. :type action: String. + :param comment: The reason for action, only supported for rejection. + :type comment: str """ + data = dict(action=action) + if comment is not None: + data['comment'] = comment + path = 'lists/{0}/held/{1}'.format( self.fqdn_listname, str(request_id)) response, content = self._connection.call( - path, dict(action=action), 'POST') + path, data, 'POST') return response def discard_message(self, request_id): - """Shortcut for moderate_message.""" + """Shortcut for moderate_message. + + :param str request_id: The request_id of the held message. + """ return self.moderate_message(request_id, 'discard') - def reject_message(self, request_id): - """Shortcut for moderate_message.""" - return self.moderate_message(request_id, 'reject') + def reject_message(self, request_id, reason=None): + """Shortcut for moderate_message. + + :param str request_id: The request_id of the held message. + :param str reason: An optional reason for rejection of the message. + """ + return self.moderate_message(request_id, 'reject', reason) def defer_message(self, request_id): - """Shortcut for moderate_message.""" + """Shortcut for moderate_message. + + :param str request_id: The request_id of the held message. + """ return self.moderate_message(request_id, 'defer') def accept_message(self, request_id): - """Shortcut for moderate_message.""" + """Shortcut for moderate_message. + + :param str request_id: The request_id of the held message. + """ return self.moderate_message(request_id, 'accept') def moderate_request(self, request_id, action): @@ -256,23 +273,40 @@ """Shortcut to defer a subscription request.""" return self.moderate_request(request_id, 'defer') - def get_member(self, email): + def _get_membership(self, email, role): """Get a membership. :param address: The email address of the member for this list. + :param role: The membership role. :return: A member proxy object. """ # In order to get the member object we query the REST API for # the member. Incase there is no matching subscription, an # HTTPError is returned instead. try: - path = 'lists/{0}/member/{1}'.format( - self.list_id, quote_plus(email)) + path = 'lists/{0}/{1}/{2}'.format( + self.list_id, role, quote_plus(email)) response, content = self._connection.call(path) return Member(self._connection, content['self_link'], content) except HTTPError: - raise ValueError('%s is not a member address of %s' % - (email, self.fqdn_listname)) + raise ValueError('%s is not a %s address of %s' % + (email, role, self.fqdn_listname)) + + def get_member(self, email): + """Get a membership. + + :param address: The email address of the member for this list. + :return: A member proxy object. + """ + return self._get_membership(email, 'member') + + def get_nonmember(self, email): + """Get a non-member of the list. + + :param address: The email address of the non-member for this list. + :return: A member proxy object. + """ + return self._get_membership(email, 'nonmember') def subscribe(self, address, display_name=None, pre_verified=False, pre_confirmed=False, pre_approved=False): @@ -293,8 +327,9 @@ data = dict( list_id=self.list_id, subscriber=address, - display_name=display_name, ) + if display_name: + data['display_name'] = display_name if pre_verified: data['pre_verified'] = True if pre_confirmed: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mailmanclient-3.3.0/src/mailmanclient/restobjects/member.py new/mailmanclient-3.3.1/src/mailmanclient/restobjects/member.py --- old/mailmanclient-3.3.0/src/mailmanclient/restobjects/member.py 2019-09-03 17:00:28.000000000 +0200 +++ new/mailmanclient-3.3.1/src/mailmanclient/restobjects/member.py 2020-06-02 05:37:27.000000000 +0200 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2019 by the Free Software Foundation, Inc. +# Copyright (C) 2010-2020 by the Free Software Foundation, Inc. # # This file is part of mailmanclient. # @@ -29,7 +29,8 @@ _writable_properties = ('address', 'delivery_mode', 'moderation_action') def __repr__(self): - return '<Member {0!r} on {1!r}>'.format(self.email, self.list_id) + return '<Member {0!r} on {1!r} with role {2!r}>'.format( + self.email, self.list_id, self.role) def __str__(self): return 'Member "{0}" on "{1}"'.format(self.email, self.list_id) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mailmanclient-3.3.0/src/mailmanclient/restobjects/preferences.py new/mailmanclient-3.3.1/src/mailmanclient/restobjects/preferences.py --- old/mailmanclient-3.3.0/src/mailmanclient/restobjects/preferences.py 2019-09-03 17:00:28.000000000 +0200 +++ new/mailmanclient-3.3.1/src/mailmanclient/restobjects/preferences.py 2020-05-10 01:14:40.000000000 +0200 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2019 by the Free Software Foundation, Inc. +# Copyright (C) 2010-2020 by the Free Software Foundation, Inc. # # This file is part of mailmanclient. # diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mailmanclient-3.3.0/src/mailmanclient/restobjects/queue.py new/mailmanclient-3.3.1/src/mailmanclient/restobjects/queue.py --- old/mailmanclient-3.3.0/src/mailmanclient/restobjects/queue.py 2019-09-03 17:00:28.000000000 +0200 +++ new/mailmanclient-3.3.1/src/mailmanclient/restobjects/queue.py 2020-05-10 01:14:40.000000000 +0200 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2019 by the Free Software Foundation, Inc. +# Copyright (C) 2010-2020 by the Free Software Foundation, Inc. # # This file is part of mailmanclient. # diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mailmanclient-3.3.0/src/mailmanclient/restobjects/settings.py new/mailmanclient-3.3.1/src/mailmanclient/restobjects/settings.py --- old/mailmanclient-3.3.0/src/mailmanclient/restobjects/settings.py 2019-05-07 00:08:23.000000000 +0200 +++ new/mailmanclient-3.3.1/src/mailmanclient/restobjects/settings.py 2020-05-10 01:14:40.000000000 +0200 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2019 by the Free Software Foundation, Inc. +# Copyright (C) 2010-2020 by the Free Software Foundation, Inc. # # This file is part of mailmanclient. # diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mailmanclient-3.3.0/src/mailmanclient/restobjects/styles.py new/mailmanclient-3.3.1/src/mailmanclient/restobjects/styles.py --- old/mailmanclient-3.3.0/src/mailmanclient/restobjects/styles.py 2019-09-03 17:00:28.000000000 +0200 +++ new/mailmanclient-3.3.1/src/mailmanclient/restobjects/styles.py 2020-05-10 01:14:40.000000000 +0200 @@ -1,4 +1,4 @@ -# Copyright (C) 2018-2019 by the Free Software Foundation, Inc. +# Copyright (C) 2018-2020 by the Free Software Foundation, Inc. # # This file is part of mailmanclient. # diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mailmanclient-3.3.0/src/mailmanclient/restobjects/templates.py new/mailmanclient-3.3.1/src/mailmanclient/restobjects/templates.py --- old/mailmanclient-3.3.0/src/mailmanclient/restobjects/templates.py 2019-09-03 17:00:28.000000000 +0200 +++ new/mailmanclient-3.3.1/src/mailmanclient/restobjects/templates.py 2020-05-10 01:14:40.000000000 +0200 @@ -1,4 +1,4 @@ -# Copyright (C) 2017-2019 by the Free Software Foundation, Inc. +# Copyright (C) 2017-2020 by the Free Software Foundation, Inc. # # This file is part of mailman.client. # diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mailmanclient-3.3.0/src/mailmanclient/restobjects/user.py new/mailmanclient-3.3.1/src/mailmanclient/restobjects/user.py --- old/mailmanclient-3.3.0/src/mailmanclient/restobjects/user.py 2019-09-03 17:00:28.000000000 +0200 +++ new/mailmanclient-3.3.1/src/mailmanclient/restobjects/user.py 2020-05-10 01:14:40.000000000 +0200 @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2019 by the Free Software Foundation, Inc. +# Copyright (C) 2010-2020 by the Free Software Foundation, Inc. # # This file is part of mailmanclient. # diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mailmanclient-3.3.0/src/mailmanclient/testing/documentation.py new/mailmanclient-3.3.1/src/mailmanclient/testing/documentation.py --- old/mailmanclient-3.3.0/src/mailmanclient/testing/documentation.py 2019-05-07 00:08:23.000000000 +0200 +++ new/mailmanclient-3.3.1/src/mailmanclient/testing/documentation.py 2020-05-10 01:14:40.000000000 +0200 @@ -1,4 +1,4 @@ -# Copyright (C) 2007-2019 by the Free Software Foundation, Inc. +# Copyright (C) 2007-2020 by the Free Software Foundation, Inc. # # This file is part of GNU Mailman. # diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mailmanclient-3.3.0/src/mailmanclient/testing/vcr_helpers.py new/mailmanclient-3.3.1/src/mailmanclient/testing/vcr_helpers.py --- old/mailmanclient-3.3.0/src/mailmanclient/testing/vcr_helpers.py 2019-05-07 00:08:23.000000000 +0200 +++ new/mailmanclient-3.3.1/src/mailmanclient/testing/vcr_helpers.py 2020-05-10 01:14:40.000000000 +0200 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2019 by the Free Software Foundation, Inc. +# Copyright (C) 2015-2020 by the Free Software Foundation, Inc. # # This file is part of mailmanclient. # diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mailmanclient-3.3.0/src/mailmanclient/tests/test_client.py new/mailmanclient-3.3.1/src/mailmanclient/tests/test_client.py --- old/mailmanclient-3.3.0/src/mailmanclient/tests/test_client.py 2019-05-07 00:08:23.000000000 +0200 +++ new/mailmanclient-3.3.1/src/mailmanclient/tests/test_client.py 2020-05-10 01:14:40.000000000 +0200 @@ -1,4 +1,4 @@ -# Copyright (C) 2019 by the Free Software Foundation, Inc. +# Copyright (C) 2019-2020 by the Free Software Foundation, Inc. # # This file is part of mailman.client. # diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mailmanclient-3.3.0/src/mailmanclient/tests/test_domain.py new/mailmanclient-3.3.1/src/mailmanclient/tests/test_domain.py --- old/mailmanclient-3.3.0/src/mailmanclient/tests/test_domain.py 2019-05-07 00:08:23.000000000 +0200 +++ new/mailmanclient-3.3.1/src/mailmanclient/tests/test_domain.py 2020-05-10 01:14:40.000000000 +0200 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2019 by the Free Software Foundation, Inc. +# Copyright (C) 2015-2020 by the Free Software Foundation, Inc. # # This file is part of mailmanclient. # @@ -15,12 +15,7 @@ # along with mailmanclient. If not, see <http://www.gnu.org/licenses/>. """Test domain corner cases.""" - -from __future__ import absolute_import, print_function, unicode_literals - - import unittest -import pytest from mailmanclient import Client from six.moves.urllib_error import HTTPError @@ -32,7 +27,6 @@ ] -@pytest.mark.vcr() class TestDomains(unittest.TestCase): def setUp(self): self._client = Client( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mailmanclient-3.3.0/src/mailmanclient/tests/test_list.py new/mailmanclient-3.3.1/src/mailmanclient/tests/test_list.py --- old/mailmanclient-3.3.0/src/mailmanclient/tests/test_list.py 2019-05-07 00:08:23.000000000 +0200 +++ new/mailmanclient-3.3.1/src/mailmanclient/tests/test_list.py 2020-05-10 01:14:40.000000000 +0200 @@ -1,4 +1,4 @@ -# Copyright (C) 2017-2019 by the Free Software Foundation, Inc. +# Copyright (C) 2017-2020 by the Free Software Foundation, Inc. # # This file is part of mailman.client. # @@ -16,7 +16,7 @@ """Tests for Mailing List.""" -from __future__ import absolute_import, print_function, unicode_literals +import time from urllib.error import HTTPError from unittest import TestCase @@ -114,3 +114,109 @@ subscriber_addr = 'subscri...@example.com' self.mlist.subscribe(subscriber_addr) self.assertFalse(self.mlist.is_owner_or_mod(subscriber_addr)) + + +class TestHeldMessage(TestCase): + + def setUp(self): + self._client = Client( + 'http://localhost:9001/3.1', 'restadmin', 'restpass') + + try: + self.domain = self._client.create_domain('example.com') + except HTTPError: + self.domain = self._client.get_domain('example.com') + + self.mlist = self.domain.create_list('foo') + # Test that a held message can be moderated. + msg = """\ +From: nonmem...@example.com +To: f...@example.com +Subject: Hello World +Message-ID: <msgid> + +Hello! +""" + self._inject_message(msg, self.mlist) + # Wait for the message to appear in the held queue for 10 seconds max. + self._wait_for_message_in_held_queue(self.mlist, 30) + + def tearDown(self): + self.domain.delete() + + def _inject_message(self, msg, mlist): + inq = self._client.queues['in'] + inq.inject('foo.example.com', msg) + + def _wait_for_message_in_held_queue(self, mlist, timeout): + """Wait for held message in mlist for timeout seconds.""" + start_time = time.time() + while True: + # if (start_time + timeout > time.time()): + # print('timeout trying to wait for message') + # break + all_held = mlist.held + if len(all_held) > 0: + print('Total time to wait for message:') + print(time.time() - start_time) + break + time.sleep(0.1) + + def test_held_message_moderation(self): + # Test that message was held and not timed out. + self.assertEqual(len(self.mlist.held), 1) + held = self.mlist.held[0] + held_message = self.mlist.get_held_message(held.request_id) + + # Now, let's try to reject this message with a reason. + response = self.mlist.reject_message(held_message.request_id, + reason='You shall not pass.') + self.assertEqual(response.status_code, 204) + # Make sure that the message was rejected. + self.assertEqual(len(self.mlist.held), 0) + + def test_held_message_moderation_message_object(self): + # The only difference between this and the above test is that we use + # the `held_message.reject` API, which for some reason as different + # code to make the same API call. + self.assertEqual(len(self.mlist.held), 1) + held = self.mlist.held[0] + held_message = self.mlist.get_held_message(held.request_id) + + # Now, let's try to reject this message with a reason. + response = held_message.reject(reason='You shall not pass.') + self.assertEqual(response.status_code, 204) + # Make sure that the message was rejected. + self.assertEqual(len(self.mlist.held), 0) + + +class TestMailingList(TestCase): + + def setUp(self): + self._client = Client( + 'http://localhost:9001/3.1', 'restadmin', 'restpass') + try: + self.domain = self._client.create_domain('example.com') + except HTTPError: + self.domain = self._client.get_domain('example.com') + self.mlist = self.domain.create_list('foo') + + def tearDown(self): + self.domain.delete() + + def test_subscribe_without_display_name(self): + self.mlist.subscribe('aper...@example.com', + pre_verified=True, + pre_confirmed=True, + pre_approved=True) + users = self.mlist.members[0] + self.assertEqual(users.display_name, '') + + def test_subscribe_with_display_name(self): + self.mlist.subscribe('bper...@example.com', + display_name='B Person', + pre_verified=True, + pre_confirmed=True, + pre_approved=True) + users = self.mlist.members[0] + self.assertEqual(users.display_name, 'B Person') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mailmanclient-3.3.0/src/mailmanclient/tests/test_page.py new/mailmanclient-3.3.1/src/mailmanclient/tests/test_page.py --- old/mailmanclient-3.3.0/src/mailmanclient/tests/test_page.py 2019-05-07 00:08:23.000000000 +0200 +++ new/mailmanclient-3.3.1/src/mailmanclient/tests/test_page.py 2020-05-10 01:14:40.000000000 +0200 @@ -1,4 +1,4 @@ -# Copyright (C) 2016-2019 by the Free Software Foundation, Inc. +# Copyright (C) 2016-2020 by the Free Software Foundation, Inc. # # This file is part of mailmanclient. # @@ -15,12 +15,8 @@ # along with mailmanclient. If not, see <http://www.gnu.org/licenses/>. """Test Page corner cases.""" - -from __future__ import absolute_import, print_function, unicode_literals - import unittest -import pytest from unittest.mock import Mock from urllib.parse import urlsplit, parse_qs @@ -33,7 +29,6 @@ ] -@pytest.mark.vcr() class TestPage(unittest.TestCase): def test_url_simple(self): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mailmanclient-3.3.0/src/mailmanclient/tests/test_templates.py new/mailmanclient-3.3.1/src/mailmanclient/tests/test_templates.py --- old/mailmanclient-3.3.0/src/mailmanclient/tests/test_templates.py 2019-05-07 00:08:23.000000000 +0200 +++ new/mailmanclient-3.3.1/src/mailmanclient/tests/test_templates.py 2020-05-10 01:14:40.000000000 +0200 @@ -1,4 +1,4 @@ -# Copyright (C) 2017-2019 by the Free Software Foundation, Inc. +# Copyright (C) 2017-2020 by the Free Software Foundation, Inc. # # This file is part of mailman.client. # diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mailmanclient-3.3.0/src/mailmanclient/tests/test_unicode.py new/mailmanclient-3.3.1/src/mailmanclient/tests/test_unicode.py --- old/mailmanclient-3.3.0/src/mailmanclient/tests/test_unicode.py 2019-05-07 00:08:23.000000000 +0200 +++ new/mailmanclient-3.3.1/src/mailmanclient/tests/test_unicode.py 2020-05-10 01:14:40.000000000 +0200 @@ -1,6 +1,6 @@ # coding: utf-8 -# Copyright (C) 2015-2019 by the Free Software Foundation, Inc. +# Copyright (C) 2015-2020 by the Free Software Foundation, Inc. # # This file is part of mailmanclient. # @@ -18,10 +18,6 @@ """Test unicode data when using REST endpoint.""" - -from __future__ import absolute_import, print_function, unicode_literals - -import pytest import unittest from mailmanclient import Client @@ -34,7 +30,6 @@ ] -@pytest.mark.vcr() class TestUnicode(unittest.TestCase): def setUp(self): self._client = Client( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mailmanclient-3.3.0/src/mailmanclient.egg-info/PKG-INFO new/mailmanclient-3.3.1/src/mailmanclient.egg-info/PKG-INFO --- old/mailmanclient-3.3.0/src/mailmanclient.egg-info/PKG-INFO 2019-09-03 18:06:57.000000000 +0200 +++ new/mailmanclient-3.3.1/src/mailmanclient.egg-info/PKG-INFO 2020-06-02 05:39:22.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: mailmanclient -Version: 3.3.0 +Version: 3.3.1 Summary: mailmanclient -- Python bindings for Mailman REST API Home-page: http://www.list.org/ Maintainer: Barry Warsaw diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mailmanclient-3.3.0/src/mailmanclient.egg-info/SOURCES.txt new/mailmanclient-3.3.1/src/mailmanclient.egg-info/SOURCES.txt --- old/mailmanclient-3.3.0/src/mailmanclient.egg-info/SOURCES.txt 2019-09-03 18:06:57.000000000 +0200 +++ new/mailmanclient-3.3.1/src/mailmanclient.egg-info/SOURCES.txt 2020-06-02 05:39:22.000000000 +0200 @@ -1,5 +1,3 @@ -.gitignore -.gitlab-ci.yml COPYING.LESSER MANIFEST.in Makefile diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mailmanclient-3.3.0/src/mailmanclient.egg-info/requires.txt new/mailmanclient-3.3.1/src/mailmanclient.egg-info/requires.txt --- old/mailmanclient-3.3.0/src/mailmanclient.egg-info/requires.txt 2019-09-03 18:06:57.000000000 +0200 +++ new/mailmanclient-3.3.1/src/mailmanclient.egg-info/requires.txt 2020-06-02 05:39:22.000000000 +0200 @@ -1,11 +1,11 @@ requests [lint] +flake8-bugbear flake8>3.0 [testing] +falcon==1.4.1 +mailman>=3.3.1 pytest -pytest-vcr pytest-services -mailman -falcon==1.4.1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mailmanclient-3.3.0/template.py new/mailmanclient-3.3.1/template.py --- old/mailmanclient-3.3.0/template.py 2019-05-07 00:08:23.000000000 +0200 +++ new/mailmanclient-3.3.1/template.py 2020-05-10 01:14:40.000000000 +0200 @@ -1,4 +1,4 @@ -# Copyright (C) 2017-2019 by the Free Software Foundation, Inc. +# Copyright (C) 2020 by the Free Software Foundation, Inc. # # This file is part of mailman.client. # @@ -16,7 +16,5 @@ """Module contents.""" -from __future__ import absolute_import, print_function, unicode_literals - __all__ = [ ] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mailmanclient-3.3.0/tox.ini new/mailmanclient-3.3.1/tox.ini --- old/mailmanclient-3.3.0/tox.ini 2019-05-07 00:08:23.000000000 +0200 +++ new/mailmanclient-3.3.1/tox.ini 2020-06-02 05:37:27.000000000 +0200 @@ -1,23 +1,16 @@ [tox] -envlist = py{35,36,37},lint +envlist = py{35,36,37,38},lint [testenv] usedevelop = True -commands = pytest --vcr-record=all {posargs} +commands = pytest {posargs} extras = testing -deps = - git+https://gitlab.com/mailman/mailman@cc07241af178bb6870e6043babebf0432659734a [testenv:dependency] userdevelop = True extras = testing deps = git+https://gitlab.com/mailman/mailman@{env:CORE_COMMIT_SHA} - -[testenv:record] -basepython = python3 -commands = pytest --vcr-record=once {posargs} - [testenv:lint] extras = lint commands =