summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAurélien Bompard2015-06-16 00:04:35 +0200
committerAurélien Bompard2015-06-17 08:24:22 +0200
commitb0e36af9d28404a54e435d9427ddffb8c7b6d4c3 (patch)
treed9b86c415d6a95f1ff67919c3b59e91c4660be03 /src
parent1e20893957cb7124567d26779db681cf10a91d0e (diff)
downloadmailman-b0e36af9d28404a54e435d9427ddffb8c7b6d4c3.tar.gz
mailman-b0e36af9d28404a54e435d9427ddffb8c7b6d4c3.tar.zst
mailman-b0e36af9d28404a54e435d9427ddffb8c7b6d4c3.zip
Diffstat (limited to 'src')
-rw-r--r--src/mailman/utilities/importer.py15
-rw-r--r--src/mailman/utilities/tests/test_import.py27
2 files changed, 39 insertions, 3 deletions
diff --git a/src/mailman/utilities/importer.py b/src/mailman/utilities/importer.py
index 31abbe38e..85eb951af 100644
--- a/src/mailman/utilities/importer.py
+++ b/src/mailman/utilities/importer.py
@@ -399,12 +399,20 @@ def import_config_pck(mlist, config_dict):
MemberRole.owner)
import_roster(mlist, config_dict, config_dict.get('moderator', []),
MemberRole.moderator)
+ import_roster(mlist, config_dict, config_dict.get('accept_these_nonmembers', []),
+ MemberRole.nonmember, Action.accept)
+ import_roster(mlist, config_dict, config_dict.get('hold_these_nonmembers', []),
+ MemberRole.nonmember, Action.hold)
+ import_roster(mlist, config_dict, config_dict.get('reject_these_nonmembers', []),
+ MemberRole.nonmember, Action.reject)
+ import_roster(mlist, config_dict, config_dict.get('discard_these_nonmembers', []),
+ MemberRole.nonmember, Action.discard)
finally:
mlist.send_welcome_message = send_welcome_message
-def import_roster(mlist, config_dict, members, role):
+def import_roster(mlist, config_dict, members, role, action=None):
"""Import members lists from a config.pck configuration dictionary.
:param mlist: The mailing list.
@@ -447,8 +455,7 @@ def import_roster(mlist, config_dict, members, role):
address = usermanager.create_address(original_email)
address.verified_on = datetime.datetime.now()
user.link(address)
- mlist.subscribe(address, role)
- member = roster.get_member(email)
+ member = mlist.subscribe(address, role)
assert member is not None
prefs = config_dict.get('user_options', {}).get(email, 0)
if email in config_dict.get('members', {}):
@@ -488,6 +495,8 @@ def import_roster(mlist, config_dict, members, role):
elif oldds == 4:
member.preferences.delivery_status = DeliveryStatus.by_bounces
# Moderation.
+ if action is not None:
+ member.moderation_action = action
if prefs & 128:
member.moderation_action = Action.hold
# Other preferences.
diff --git a/src/mailman/utilities/tests/test_import.py b/src/mailman/utilities/tests/test_import.py
index aa2888af6..13c23b32c 100644
--- a/src/mailman/utilities/tests/test_import.py
+++ b/src/mailman/utilities/tests/test_import.py
@@ -648,6 +648,18 @@ class TestRosterImport(unittest.TestCase):
'bob@example.com',
'fred@example.com',
],
+ 'accept_these_nonmembers': [
+ 'gene@example.com',
+ ],
+ 'hold_these_nonmembers': [
+ 'homer@example.com',
+ ],
+ 'reject_these_nonmembers': [
+ 'iris@example.com',
+ ],
+ 'discard_these_nonmembers': [
+ 'kenny@example.com',
+ ],
}
self._usermanager = getUtility(IUserManager)
language_manager = getUtility(ILanguageManager)
@@ -831,6 +843,21 @@ class TestRosterImport(unittest.TestCase):
queue, file_count))
self.assertTrue(self._mlist.send_welcome_message)
+ def test_nonmembers(self):
+ import_config_pck(self._mlist, self._pckdict)
+ expected = {"gene": Action.accept,
+ "homer": Action.hold,
+ "iris": Action.reject,
+ "kenny": Action.discard,
+ }
+ for name, action in expected.items():
+ self.assertIn('{}@example.com'.format(name),
+ [a.email for a in self._mlist.nonmembers.addresses],
+ 'Address {} was not imported'.format(name))
+ member = self._mlist.nonmembers.get_member(
+ '{}@example.com'.format(name))
+ self.assertEqual(member.moderation_action, action)
+
class TestPreferencesImport(unittest.TestCase):