diff options
| author | Barry Warsaw | 2010-12-29 23:54:08 -0500 |
|---|---|---|
| committer | Barry Warsaw | 2010-12-29 23:54:08 -0500 |
| commit | 534e90fea33c52585c74fa9127cca8b70178d5e0 (patch) | |
| tree | 3a5d4088b5af1a4b310dffba711389ac67792dd2 /src/mailman/rules/moderation.py | |
| parent | a31184862fc52a3c38059f832d533b137135c1f9 (diff) | |
| download | mailman-534e90fea33c52585c74fa9127cca8b70178d5e0.tar.gz mailman-534e90fea33c52585c74fa9127cca8b70178d5e0.tar.zst mailman-534e90fea33c52585c74fa9127cca8b70178d5e0.zip | |
Diffstat (limited to 'src/mailman/rules/moderation.py')
| -rw-r--r-- | src/mailman/rules/moderation.py | 49 |
1 files changed, 25 insertions, 24 deletions
diff --git a/src/mailman/rules/moderation.py b/src/mailman/rules/moderation.py index 4bf6ba1c8..efca78fd4 100644 --- a/src/mailman/rules/moderation.py +++ b/src/mailman/rules/moderation.py @@ -21,48 +21,49 @@ from __future__ import absolute_import, unicode_literals __metaclass__ = type __all__ = [ - 'MemberModeration', - 'NonMemberModeration', + 'Moderation', ] from zope.interface import implements from mailman.core.i18n import _ +from mailman.interfaces.action import Action from mailman.interfaces.rules import IRule -class MemberModeration: +class Moderation: """The member moderation rule.""" implements(IRule) - name = 'member-moderation' - description = _('Match messages sent by moderated members.') + name = 'moderation' + description = _('Match messages sent by moderated members and nonmembers.') record = True def check(self, mlist, msg, msgdata): """See `IRule`.""" for sender in msg.senders: member = mlist.members.get_member(sender) - if member is not None and member.is_moderated: + action = (Action.defer if member is None + else member.moderation_action) + if action is not Action.defer: + # We must stringify the moderation action so that it can be + # stored in the pending request table. + msgdata['moderation_action'] = action.enumname + msgdata['moderation_sender'] = sender return True - return False - - - -class NonMemberModeration: - """The non-membership rule.""" - implements(IRule) - - name = 'non-member' - description = _('Match messages sent by non-members.') - record = True - - def check(self, mlist, msg, msgdata): - """See `IRule`.""" for sender in msg.senders: - if mlist.members.get_member(sender) is not None: - # The sender is a member of the mailing list. - return False - return True + nonmember = mlist.nonmembers.get_member(sender) + action = (Action.defer if nonmember is None + else nonmember.moderation_action) + if action is not Action.defer: + # We must stringify the moderation action so that it can be + # stored in the pending request table. + msgdata['moderation_action'] = action.enumname + msgdata['moderation_sender'] = sender + return True + # XXX This is not correct. If the sender is neither a member nor a + # nonmember, we need to register them as a nonmember and give them the + # default action. + return False |
