Barry Warsaw pushed to branch rename-metadata-key at mailman / Mailman Core
Commits:
b9ef98f2 by Barry Warsaw at 2017-07-30T21:38:15-04:00
Fix flake8.
- - - - -
8ea476a3 by Barry Warsaw at 2017-07-30T21:52:14-04:00
Refactor into a base class.
- - - - -
4 changed files:
- src/mailman/chains/base.py
- src/mailman/chains/dmarc.py
- src/mailman/chains/moderation.py
- src/mailman/chains/tests/test_dmarc.py
Changes:
=====================================
src/mailman/chains/base.py
=====================================
--- a/src/mailman/chains/base.py
+++ b/src/mailman/chains/base.py
@@ -107,6 +107,31 @@ class TerminalChainBase:
@public
@abstract_component
+@implementer(IChain)
+class JumpChainBase:
+ """A base chain that simplifies jumping to another chain."""
+ def jump_to(self, mlist, msg, msgsdata):
+ """Return the chain to jump to.
+
+ This must be overridden by subclasses.
+
+ :param mlist: The mailing list.
+ :param msg: The message.
+ :param msgdata: The message metadata.
+ :return: The name of the chain to jump to.
+ :rtype: str
+ """
+ raise NotImplementedError
+
+ def get_links(self, mlist, msg, msgdata):
+ jump_chain = self.jump_to(mlist, msg, msgdata)
+ return iter([
+ Link('truth', LinkAction.jump, jump_chain),
+ ])
+
+
+@public
+@abstract_component
@implementer(IMutableChain)
class Chain:
"""Generic chain base class."""
=====================================
src/mailman/chains/dmarc.py
=====================================
--- a/src/mailman/chains/dmarc.py
+++ b/src/mailman/chains/dmarc.py
@@ -17,28 +17,23 @@
"""DMARC mitigation chain."""
-from mailman.chains.base import Link
+from mailman.chains.base import JumpChainBase
from mailman.core.i18n import _
-from mailman.interfaces.chain import IChain, LinkAction
from public import public
-from zope.interface import implementer
@public
-@implementer(IChain)
-class DMARCMitigationChain:
+class DMARCMitigationChain(JumpChainBase):
"""Perform DMARC mitigation."""
name = 'dmarc'
description = _('Process DMARC reject or discard mitigations')
- def get_links(self, mlist, msg, msgdata):
+ def jump_to(self, mlist, msg, msgdata):
# Which action should be taken?
jump_chain = msgdata['dmarc_action']
assert jump_chain in ('discard', 'reject'), (
'{}: Invalid DMARC action: {} for sender: {}'.format(
mlist.list_id, jump_chain,
msgdata.get('moderation_sender', '(unknown)')))
- return iter([
- Link('truth', LinkAction.jump, jump_chain),
- ])
+ return jump_chain
=====================================
src/mailman/chains/moderation.py
=====================================
--- a/src/mailman/chains/moderation.py
+++ b/src/mailman/chains/moderation.py
@@ -34,17 +34,14 @@ made as to the disposition of the message. `defer` is the
default for
members, while `hold` is the default for nonmembers.
"""
-from mailman.chains.base import Link
+from mailman.chains.base import JumpChainBase
from mailman.core.i18n import _
from mailman.interfaces.action import Action
-from mailman.interfaces.chain import IChain, LinkAction
from public import public
-from zope.interface import implementer
@public
-@implementer(IChain)
-class ModerationChain:
+class ModerationChain(JumpChainBase):
"""Dynamically produce a link jumping to the appropriate terminal chain.
The terminal chain will be one of the Accept, Hold, Discard, or Reject
@@ -53,8 +50,7 @@ class ModerationChain:
name = 'moderation'
description = _('Moderation chain')
- def get_links(self, mlist, msg, msgdata):
- """See `IChain`."""
+ def jump_to(self, mlist, msg, msgdata):
# Get the moderation action from the message metadata. It can only be
# one of the expected values (i.e. not Action.defer). See the
# moderation.py rule for details. This is stored in the metadata as a
@@ -71,6 +67,4 @@ class ModerationChain:
'{}: Invalid moderation action: {} for sender: {}'.format(
mlist.list_id, action,
msgdata.get('moderation_sender', '(unknown)')))
- return iter([
- Link('truth', LinkAction.jump, jump_chain),
- ])
+ return jump_chain
=====================================
src/mailman/chains/tests/test_dmarc.py
=====================================
--- a/src/mailman/chains/tests/test_dmarc.py
+++ b/src/mailman/chains/tests/test_dmarc.py
@@ -22,10 +22,10 @@ import unittest
from mailman.app.lifecycle import create_list
from mailman.core.chains import process as process_chain
from mailman.interfaces.chain import DiscardEvent, RejectEvent
-from mailman.testing.layers import ConfigLayer
from mailman.testing.helpers import (
event_subscribers, get_queue_messages,
specialized_message_from_string as mfs)
+from mailman.testing.layers import ConfigLayer
class TestDMARC(unittest.TestCase):
View it on GitLab:
https://gitlab.com/mailman/mailman/compare/99ab464a91374efb95ace61d609eb1ec92b8ff1b...8ea476a32f2adc438a9be887aec8127b8ebdae73
---
View it on GitLab:
https://gitlab.com/mailman/mailman/compare/99ab464a91374efb95ace61d609eb1ec92b8ff1b...8ea476a32f2adc438a9be887aec8127b8ebdae73
You're receiving this email because of your account on gitlab.com.
_______________________________________________
Mailman-checkins mailing list
[email protected]
Unsubscribe:
https://mail.python.org/mailman/options/mailman-checkins/archive%40jab.org