summaryrefslogtreecommitdiff
path: root/src/mailman/rules/moderation.py
diff options
context:
space:
mode:
authorBarry Warsaw2010-12-29 23:54:08 -0500
committerBarry Warsaw2010-12-29 23:54:08 -0500
commit534e90fea33c52585c74fa9127cca8b70178d5e0 (patch)
tree3a5d4088b5af1a4b310dffba711389ac67792dd2 /src/mailman/rules/moderation.py
parenta31184862fc52a3c38059f832d533b137135c1f9 (diff)
downloadmailman-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.py49
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