diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/mailman/utilities/importer.py | 54 | ||||
| -rw-r--r-- | src/mailman/utilities/tests/test_import.py | 24 |
2 files changed, 56 insertions, 22 deletions
diff --git a/src/mailman/utilities/importer.py b/src/mailman/utilities/importer.py index 0d22ad2c5..583c10e27 100644 --- a/src/mailman/utilities/importer.py +++ b/src/mailman/utilities/importer.py @@ -103,6 +103,16 @@ def filter_action_mapping(value): }[value] +def member_moderation_action_mapping(value): + # Convert the member_moderation_action option to an Action enum. + # The values were: 0==Hold, 1==Reject, 2==Discard + return { + 0: Action.hold, + 1: Action.reject, + 2: Action.discard, + }[value] + + def nonmember_action_mapping(value): # For default_nonmember_action, which used to be called # generic_nonmember_action, the values were: 0==Accept, 1==Hold, @@ -114,7 +124,6 @@ def nonmember_action_mapping(value): 3: Action.discard, }[value] - def check_language_code(code): if code is None: @@ -261,11 +270,8 @@ def import_config_pck(mlist, config_dict): # action in the member_moderation_action flag, the values were: 0==Hold, # 1=Reject, 2==Discard if bool(config_dict.get("default_member_moderation", 0)): - mlist.default_member_action = { - 0: Action.hold, - 1: Action.reject, - 2: Action.discard, - }[config_dict.get("member_moderation_action")] + mlist.default_member_action = member_moderation_action_mapping( + config_dict.get("member_moderation_action")) else: mlist.default_member_action = Action.defer # Handle the archiving policy. In MM2.1 there were two boolean options @@ -461,11 +467,11 @@ def import_roster(mlist, config_dict, members, role, action=None): user.link(address) member = mlist.subscribe(address, role) assert member is not None - prefs = config_dict.get('user_options', {}).get(email, 0) + prefs = config_dict.get('user_options', {}).get(email) if email in config_dict.get('members', {}): member.preferences.delivery_mode = DeliveryMode.regular elif email in config_dict.get('digest_members', {}): - if prefs & 8: # DisableMime + if prefs is not None and prefs & 8: # DisableMime member.preferences.delivery_mode = \ DeliveryMode.plaintext_digests else: @@ -499,17 +505,27 @@ def import_roster(mlist, config_dict, members, role, action=None): elif oldds == 4: member.preferences.delivery_status = DeliveryStatus.by_bounces # Moderation. + if prefs is not None: + # we're adding a member + if prefs & 128: + # Member is moderated, check the member_moderation_action option to + # know which action should be taken. + action = member_moderation_action_mapping( + config_dict.get("member_moderation_action")) + else: + action = Action.accept if action is not None: + # either set right above or in the function's arguments for + # nonmembers member.moderation_action = action - if prefs & 128: - member.moderation_action = Action.hold - # Other preferences. # - # AcknowledgePosts - member.preferences.acknowledge_posts = bool(prefs & 4) - # ConcealSubscription - member.preferences.hide_address = bool(prefs & 16) - # DontReceiveOwnPosts - member.preferences.receive_own_postings = not bool(prefs & 2) - # DontReceiveDuplicates - member.preferences.receive_list_copy = not bool(prefs & 256) + # Other preferences. + if prefs is not None: + # AcknowledgePosts + member.preferences.acknowledge_posts = bool(prefs & 4) + # ConcealSubscription + member.preferences.hide_address = bool(prefs & 16) + # DontReceiveOwnPosts + member.preferences.receive_own_postings = not bool(prefs & 2) + # DontReceiveDuplicates + member.preferences.receive_list_copy = not bool(prefs & 256) diff --git a/src/mailman/utilities/tests/test_import.py b/src/mailman/utilities/tests/test_import.py index b2beb2f3f..d0e954fda 100644 --- a/src/mailman/utilities/tests/test_import.py +++ b/src/mailman/utilities/tests/test_import.py @@ -949,11 +949,29 @@ class TestPreferencesImport(unittest.TestCase): self.assertEqual(member.delivery_status, expected) member.unsubscribe() - def test_moderate(self): - # Option flag Moderate is translated to - # member.moderation_action = Action.hold + def test_moderate_hold(self): + # Option flag Moderate is translated to the action set in + # member_moderation_action + self._pckdict["member_moderation_action"] = 0 self._do_test(128, dict(moderation_action=Action.hold)) + def test_moderate_hold(self): + # Option flag Moderate is translated to the action set in + # member_moderation_action + self._pckdict["member_moderation_action"] = 1 + self._do_test(128, dict(moderation_action=Action.reject)) + + def test_moderate_hold(self): + # Option flag Moderate is translated to the action set in + # member_moderation_action + self._pckdict["member_moderation_action"] = 2 + self._do_test(128, dict(moderation_action=Action.discard)) + + def test_no_moderate(self): + # If option flag Moderate is not set, action is accept + self._pckdict["member_moderation_action"] = 1 # reject + self._do_test(0, dict(moderation_action=Action.accept)) + def test_multiple_options(self): # DontReceiveDuplicates & DisableMime & SuppressPasswordReminder # Keys might be Python 2 str/bytes or unicode. |
