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(
+ '[email protected]', '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 <[email protected]>', file=infp)
+ result = self._command.invoke(addmembers, (
+ infp.name, 'ant.example.com'))
+ self.assertEqual(
+ result.output,
+ 'Subscription already pending (skipping): '
+ 'Anne Person <[email protected]>\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 -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/mailman-checkins.python.org/
Member address: [email protected]