Mark Sapiro pushed to branch master at GNU Mailman / Mailman Core


Commits:
a32ed9f4 by Mark Sapiro at 2020-12-18T10:07:14-08:00
Catch SubscriptionPendingError in mailman addmembers.

- - - - -
bbb0e944 by Mark Sapiro at 2020-12-18T18:32:19+00:00
Merge branch 'addmemb' into 'master'

Catch SubscriptionPendingError in mailman addmembers.

Closes #805

See merge request mailman/mailman!751
- - - - -


3 changed files:

- src/mailman/commands/cli_addmembers.py
- src/mailman/commands/tests/test_cli_addmembers.py
- src/mailman/docs/NEWS.rst


Changes:

=====================================
src/mailman/commands/cli_addmembers.py
=====================================
@@ -29,7 +29,8 @@ from mailman.interfaces.listmanager import IListManager
 from mailman.interfaces.member import (
     AlreadySubscribedError, DeliveryMode, DeliveryStatus,
     MembershipIsBannedError)
-from mailman.interfaces.subscriptions import ISubscriptionManager
+from mailman.interfaces.subscriptions import (ISubscriptionManager,
+                                              SubscriptionPendingError)
 from mailman.interfaces.usermanager import IUserManager
 from mailman.utilities.options import I18nCommand
 from public import public
@@ -99,6 +100,9 @@ def add_members(mlist, in_fp, delivery, invite, welcome_msg):
         except MembershipIsBannedError:
             print(_('Membership is banned (skipping): $email'),
                   file=sys.stderr)
+        except SubscriptionPendingError:
+            print(_('Subscription already pending (skipping): $email'),
+                  file=sys.stderr)
 
 
 @click.command(


=====================================
src/mailman/commands/tests/test_cli_addmembers.py
=====================================
@@ -24,7 +24,9 @@ from click.testing import CliRunner
 from mailman.app.lifecycle import create_list
 from mailman.commands.cli_addmembers import addmembers
 from mailman.interfaces.bans import IBanManager
+from mailman.interfaces.mailinglist import SubscriptionPolicy
 from mailman.interfaces.member import DeliveryMode, DeliveryStatus, MemberRole
+from mailman.interfaces.subscriptions import ISubscriptionManager
 from mailman.interfaces.usermanager import IUserManager
 from mailman.testing.helpers import get_queue_messages, subscribe
 from mailman.testing.layers import ConfigLayer
@@ -82,6 +84,24 @@ class TestCLIAddMembers(unittest.TestCase):
            )
         self.assertEqual(len(list(self._mlist.members.members)), 0)
 
+    def test_subscription_pending(self):
+        # Create an address.
+        address = getUtility(IUserManager).create_address(
+            'aper...@example.com', 'Anne Person')
+        # Pend a subscription.
+        self._mlist.subscription_policy = SubscriptionPolicy.confirm
+        ISubscriptionManager(self._mlist).register(address)
+        with NamedTemporaryFile('w', buffering=1, encoding='utf-8') as infp:
+            print('Anne Person <aper...@example.com>', file=infp)
+            result = self._command.invoke(addmembers, (
+                infp.name, 'ant.example.com'))
+        self.assertEqual(
+           result.output,
+           'Subscription already pending (skipping): '
+           'Anne Person <aper...@example.com>\n'
+           )
+        self.assertEqual(len(list(self._mlist.members.members)), 0)
+
     def test_add_invalid_email(self):
         with NamedTemporaryFile('w', buffering=1, encoding='utf-8') as infp:
             print('foobar@', file=infp)


=====================================
src/mailman/docs/NEWS.rst
=====================================
@@ -30,6 +30,8 @@ Bugs
 * A bounce for a non-existent list is now handled.  (Closes #799)
 * RFC 2047 From: headers in emailed ``join`` commands are now decoded.
   (Closes #802)
+* The ``mailman addmembers`` command now catches and reports a
+  ``SubscriptionPendingError``.  (Closes #805)
 
 New Features
 ------------



View it on GitLab: 
https://gitlab.com/mailman/mailman/-/compare/ca081d003d7166d6d4f71d3fcea3d10832b7b409...bbb0e94461d966b14f2e0b236944e28e7843b6dd

-- 
View it on GitLab: 
https://gitlab.com/mailman/mailman/-/compare/ca081d003d7166d6d4f71d3fcea3d10832b7b409...bbb0e94461d966b14f2e0b236944e28e7843b6dd
You're receiving this email because of your account on gitlab.com.


_______________________________________________
Mailman-checkins mailing list -- mailman-checkins@python.org
To unsubscribe send an email to mailman-checkins-le...@python.org
https://mail.python.org/mailman3/lists/mailman-checkins.python.org/
Member address: arch...@jab.org

Reply via email to