diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/mailman/utilities/importer.py | 20 | ||||
| -rw-r--r-- | src/mailman/utilities/tests/test_import.py | 9 |
2 files changed, 21 insertions, 8 deletions
diff --git a/src/mailman/utilities/importer.py b/src/mailman/utilities/importer.py index 85eb951af..0d22ad2c5 100644 --- a/src/mailman/utilities/importer.py +++ b/src/mailman/utilities/importer.py @@ -399,14 +399,18 @@ 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) + # Now import the '*_these_nonmembers' properties, filtering out the + # regexps which will remain in the property + for action_name in ('accept', 'hold', 'reject', 'discard'): + prop_name = '{0}_these_nonmembers'.format(action_name) + emails = [ addr for addr in config_dict.get(prop_name, []) + if not addr.startswith('^') ] + import_roster(mlist, config_dict, emails, MemberRole.nonmember, + Action[action_name]) + # Only keep the regexes in the legacy list property + list_prop = getattr(mlist, prop_name) + for email in emails: + list_prop.remove(email) finally: mlist.send_welcome_message = send_welcome_message diff --git a/src/mailman/utilities/tests/test_import.py b/src/mailman/utilities/tests/test_import.py index 13c23b32c..b2beb2f3f 100644 --- a/src/mailman/utilities/tests/test_import.py +++ b/src/mailman/utilities/tests/test_import.py @@ -650,15 +650,19 @@ class TestRosterImport(unittest.TestCase): ], 'accept_these_nonmembers': [ 'gene@example.com', + '^gene-.*@example.com', ], 'hold_these_nonmembers': [ 'homer@example.com', + '^homer-.*@example.com', ], 'reject_these_nonmembers': [ 'iris@example.com', + '^iris-.*@example.com', ], 'discard_these_nonmembers': [ 'kenny@example.com', + '^kenny-.*@example.com', ], } self._usermanager = getUtility(IUserManager) @@ -857,6 +861,11 @@ class TestRosterImport(unittest.TestCase): member = self._mlist.nonmembers.get_member( '{}@example.com'.format(name)) self.assertEqual(member.moderation_action, action) + # Only regexps should remain in the list property + list_prop = getattr(self._mlist, + '{}_these_nonmembers'.format(action.name)) + self.assertEqual(len(list_prop), 1) + self.assertTrue(all(addr.startswith('^') for addr in list_prop)) |
