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


Commits:
be18a1f5 by Mark Sapiro at 2021-07-28T18:00:45-07:00
Catch SubscriptionPendingError in mailman syncmembers.

- - - - -
cf58b209 by Mark Sapiro at 2021-07-29T01:30:56+00:00
Merge branch 'sync' into 'master'

Catch SubscriptionPendingError in mailman syncmembers.

Closes #929

See merge request mailman/mailman!899
- - - - -


3 changed files:

- src/mailman/commands/cli_syncmembers.py
- src/mailman/commands/tests/test_cli_syncmembers.py
- src/mailman/docs/NEWS.rst


Changes:

=====================================
src/mailman/commands/cli_syncmembers.py
=====================================
@@ -29,7 +29,8 @@ from mailman.interfaces.command import ICLISubCommand
 from mailman.interfaces.listmanager import IListManager
 from mailman.interfaces.member import (
     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
@@ -80,6 +81,9 @@ def add_members(mlist, member, delivery, welcome_msg):
     except MembershipIsBannedError:
         print(_('Membership is banned (skipping): $email'),
               file=sys.stderr)
+    except SubscriptionPendingError:
+        print(_('Subscription already pending (skipping): $email'),
+              file=sys.stderr)
 
 
 @transactional


=====================================
src/mailman/commands/tests/test_cli_syncmembers.py
=====================================
@@ -23,7 +23,9 @@ from click.testing import CliRunner
 from mailman.app.lifecycle import create_list
 from mailman.commands.cli_syncmembers import syncmembers
 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
@@ -114,6 +116,28 @@ class TestCLISyncMembers(unittest.TestCase):
            )
         self.assertEqual(len(list(self._mlist.members.members)), 0)
 
+    def test_subscription_pending(self):
+        # Pend a subscription for Anne.
+        self._mlist.subscription_policy = SubscriptionPolicy.confirm
+        address = getUtility(IUserManager).create_address(
+            'aper...@example.com', 'Anne Person')
+        ISubscriptionManager(self._mlist).register(address)
+        with NamedTemporaryFile('w', buffering=1, encoding='utf-8') as infp:
+            print('Anne Person <aper...@example.com>', file=infp)
+            print('Bart Person <bper...@example.com>', file=infp)
+            result = self._command.invoke(syncmembers, (
+                infp.name, 'ant.example.com'))
+        self.assertEqual(result.output,
+                         '[ADD] Anne Person'
+                         ' <aper...@example.com>\n'
+                         'Subscription already pending (skipping): '
+                         'Anne Person <aper...@example.com>\n'
+                         '[ADD] Bart Person'
+                         ' <bper...@example.com>\n')
+        members = list(self._mlist.members.members)
+        self.assertEqual(len(members), 1)
+        self.assertEqual(members[0].address.email, 'bper...@example.com')
+
     def test_sync_commented_lines(self):
         subscribe(self._mlist, 'Anne')
         subscribe(self._mlist, 'Bart')


=====================================
src/mailman/docs/NEWS.rst
=====================================
@@ -94,6 +94,8 @@ Bugs
 * The tagger handler now stringifies any Header instances.  (Closes #928)
 * Invitation and (un)subscription confirmation subjects are now translated
   to the list's preferred language.  (Closes #930)
+* The ``mailman syncmembers`` command now catches and reports a
+  ``SubscriptionPendingError``.  (Closes #929)
 
 Command line
 ------------



View it on GitLab: 
https://gitlab.com/mailman/mailman/-/compare/1fadf21305920a647c6e552e43449ae4b948bf89...cf58b209170f57377d51bfbf877a11ab017520d8

-- 
View it on GitLab: 
https://gitlab.com/mailman/mailman/-/compare/1fadf21305920a647c6e552e43449ae4b948bf89...cf58b209170f57377d51bfbf877a11ab017520d8
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