summaryrefslogtreecommitdiff
path: root/src/mailman/chains
diff options
context:
space:
mode:
authorBarry Warsaw2012-07-03 10:36:39 -0400
committerBarry Warsaw2012-07-03 10:36:39 -0400
commit01415190ab44e69a8f09a6411564a7cb288404e8 (patch)
tree869503cb83afa74a17446363a6dbda5ba62d2b8d /src/mailman/chains
parent3c8a07fc76176a8ea89ee6b73aef571d0b2c81ed (diff)
parent011677d7457f1d4c9cea3b030c8a50e941657812 (diff)
downloadmailman-01415190ab44e69a8f09a6411564a7cb288404e8.tar.gz
mailman-01415190ab44e69a8f09a6411564a7cb288404e8.tar.zst
mailman-01415190ab44e69a8f09a6411564a7cb288404e8.zip
* `passlib`_ is now used for all password hashing instead of flufl.password.
The default hash is `sha512_crypt`. (LP: #1015758) * Events renamed and moved: * `mailman.chains.accept.AcceptNotification` * `mailman.chains.base.ChainNotification` * `mailman.chains.discard.DiscardNotification` * `mailman.chains.hold.HoldNotification` * `mailman.chains.owner.OwnerNotification` * `mailman.chains.reject.RejectNotification` changed to (respectively): * `mailman.interfaces.chains.AcceptEvent` * `mailman.interfaces.chains.ChainEvent` * `mailman.interfaces.chains.DiscardEvent` * `mailman.interfaces.chains.HoldEvent` * `mailman.interfaces.chains.AcceptOwnerEvent` * `mailman.interfaces.chains.RejectEvent` * A `ConfigurationUpdatedEvent` is triggered when the system-wide global configuration stack is pushed or popped. * With the switch to `passlib`_, `[passwords]password_scheme` has been removed. Instead use `[passwords]path` to specify where to find the `passlib.cfg` file. See the comments in `schema.cfg` for details.
Diffstat (limited to 'src/mailman/chains')
-rw-r--r--src/mailman/chains/accept.py11
-rw-r--r--src/mailman/chains/base.py12
-rw-r--r--src/mailman/chains/discard.py11
-rw-r--r--src/mailman/chains/docs/moderation.rst14
-rw-r--r--src/mailman/chains/hold.py10
-rw-r--r--src/mailman/chains/owner.py10
-rw-r--r--src/mailman/chains/reject.py12
-rw-r--r--src/mailman/chains/tests/test_hold.py12
-rw-r--r--src/mailman/chains/tests/test_owner.py8
9 files changed, 32 insertions, 68 deletions
diff --git a/src/mailman/chains/accept.py b/src/mailman/chains/accept.py
index 4b326142b..852ca8c06 100644
--- a/src/mailman/chains/accept.py
+++ b/src/mailman/chains/accept.py
@@ -22,7 +22,6 @@ from __future__ import absolute_import, unicode_literals
__metaclass__ = type
__all__ = [
'AcceptChain',
- 'AcceptNotification',
]
@@ -30,9 +29,10 @@ import logging
from zope.event import notify
-from mailman.chains.base import ChainNotification, TerminalChainBase
+from mailman.chains.base import TerminalChainBase
from mailman.config import config
from mailman.core.i18n import _
+from mailman.interfaces.chain import AcceptEvent
log = logging.getLogger('mailman.vette')
@@ -40,11 +40,6 @@ SEMISPACE = '; '
-class AcceptNotification(ChainNotification):
- """A notification event signaling that a message is being accepted."""
-
-
-
class AcceptChain(TerminalChainBase):
"""Accept the message for posting."""
@@ -64,4 +59,4 @@ class AcceptChain(TerminalChainBase):
msg['X-Mailman-Rule-Misses'] = SEMISPACE.join(rule_misses)
config.switchboards['pipeline'].enqueue(msg, msgdata)
log.info('ACCEPT: %s', msg.get('message-id', 'n/a'))
- notify(AcceptNotification(mlist, msg, msgdata, self))
+ notify(AcceptEvent(mlist, msg, msgdata, self))
diff --git a/src/mailman/chains/base.py b/src/mailman/chains/base.py
index b75d66989..d317bf803 100644
--- a/src/mailman/chains/base.py
+++ b/src/mailman/chains/base.py
@@ -22,7 +22,6 @@ from __future__ import absolute_import, print_function, unicode_literals
__metaclass__ = type
__all__ = [
'Chain',
- 'ChainNotification',
'Link',
'TerminalChainBase',
]
@@ -134,14 +133,3 @@ class ChainIterator:
def __iter__(self):
"""See `IChainIterator`."""
return self._chain.get_iterator()
-
-
-
-class ChainNotification:
- """Base class for chain notification events."""
-
- def __init__(self, mlist, msg, msgdata, chain):
- self.mlist = mlist
- self.msg = msg
- self.msgdata = msgdata
- self.chain = chain
diff --git a/src/mailman/chains/discard.py b/src/mailman/chains/discard.py
index 0a4bfe9ac..a52d25d7a 100644
--- a/src/mailman/chains/discard.py
+++ b/src/mailman/chains/discard.py
@@ -22,26 +22,21 @@ from __future__ import absolute_import, unicode_literals
__metaclass__ = type
__all__ = [
'DiscardChain',
- 'DiscardNotification',
]
import logging
from zope.event import notify
-from mailman.chains.base import ChainNotification, TerminalChainBase
+from mailman.chains.base import TerminalChainBase
from mailman.core.i18n import _
+from mailman.interfaces.chain import DiscardEvent
log = logging.getLogger('mailman.vette')
-class DiscardNotification(ChainNotification):
- """A notification event signaling that a message is being discarded."""
-
-
-
class DiscardChain(TerminalChainBase):
"""Discard a message."""
@@ -55,5 +50,5 @@ class DiscardChain(TerminalChainBase):
message away.
"""
log.info('DISCARD: %s', msg.get('message-id', 'n/a'))
- notify(DiscardNotification(mlist, msg, msgdata, self))
+ notify(DiscardEvent(mlist, msg, msgdata, self))
# Nothing more needs to happen.
diff --git a/src/mailman/chains/docs/moderation.rst b/src/mailman/chains/docs/moderation.rst
index fed120147..1e968ee68 100644
--- a/src/mailman/chains/docs/moderation.rst
+++ b/src/mailman/chains/docs/moderation.rst
@@ -45,9 +45,9 @@ In order to find out whether the message is held or accepted, we can subscribe
to Zope events that are triggered on each case.
::
- >>> from mailman.chains.base import ChainNotification
+ >>> from mailman.interfaces.chain import ChainEvent
>>> def on_chain(event):
- ... if isinstance(event, ChainNotification):
+ ... if isinstance(event, ChainEvent):
... print event
... print event.chain
... print 'Subject:', event.msg['subject']
@@ -74,7 +74,7 @@ built-in chain. No rules hit and so the message is accepted.
>>> from mailman.testing.helpers import event_subscribers
>>> with event_subscribers(on_chain):
... process(mlist, msg, {}, 'default-posting-chain')
- <mailman.chains.accept.AcceptNotification ...>
+ <mailman.interfaces.chain.AcceptEvent ...>
<mailman.chains.accept.AcceptChain ...>
Subject: aardvark
Hits:
@@ -109,7 +109,7 @@ moderator approval.
>>> with event_subscribers(on_chain):
... process(mlist, msg, {}, 'default-posting-chain')
- <mailman.chains.hold.HoldNotification ...>
+ <mailman.interfaces.chain.HoldEvent ...>
<mailman.chains.hold.HoldChain ...>
Subject: badger
Hits:
@@ -134,7 +134,7 @@ The list's member moderation action can also be set to `discard`...
>>> with event_subscribers(on_chain):
... process(mlist, msg, {}, 'default-posting-chain')
- <mailman.chains.discard.DiscardNotification ...>
+ <mailman.interfaces.chain.DiscardEvent ...>
<mailman.chains.discard.DiscardChain ...>
Subject: cougar
Hits:
@@ -158,7 +158,7 @@ The list's member moderation action can also be set to `discard`...
>>> with event_subscribers(on_chain):
... process(mlist, msg, {}, 'default-posting-chain')
- <mailman.chains.reject.RejectNotification ...>
+ <mailman.interfaces.chain.RejectEvent ...>
<mailman.chains.reject.RejectChain ...>
Subject: dingo
Hits:
@@ -197,7 +197,7 @@ moderator approval.
>>> with event_subscribers(on_chain):
... process(mlist, msg, {}, 'default-posting-chain')
- <mailman.chains.hold.HoldNotification ...>
+ <mailman.interfaces.chain.HoldEvent ...>
<mailman.chains.hold.HoldChain ...>
Subject: elephant
Hits:
diff --git a/src/mailman/chains/hold.py b/src/mailman/chains/hold.py
index a8b7ec57b..34389f82e 100644
--- a/src/mailman/chains/hold.py
+++ b/src/mailman/chains/hold.py
@@ -22,7 +22,6 @@ from __future__ import absolute_import, print_function, unicode_literals
__metaclass__ = type
__all__ = [
'HoldChain',
- 'HoldNotification',
]
@@ -37,11 +36,12 @@ from zope.interface import implementer
from mailman.app.moderator import hold_message
from mailman.app.replybot import can_acknowledge
-from mailman.chains.base import ChainNotification, TerminalChainBase
+from mailman.chains.base import TerminalChainBase
from mailman.config import config
from mailman.core.i18n import _
from mailman.email.message import UserNotification
from mailman.interfaces.autorespond import IAutoResponseSet, Response
+from mailman.interfaces.chain import HoldEvent
from mailman.interfaces.languages import ILanguageManager
from mailman.interfaces.pending import IPendable, IPendings
from mailman.interfaces.usermanager import IUserManager
@@ -59,10 +59,6 @@ class HeldMessagePendable(dict):
PEND_KEY = 'held message'
-class HoldNotification(ChainNotification):
- """A notification event signaling that a message is being held."""
-
-
def autorespond_to_sender(mlist, sender, language=None):
"""Should Mailman automatically respond to this sender?
@@ -249,4 +245,4 @@ also appear in the first line of the body of the reply.""")),
log.info('HOLD: %s post from %s held, message-id=%s: %s',
mlist.fqdn_listname, msg.sender,
msg.get('message-id', 'n/a'), reason)
- notify(HoldNotification(mlist, msg, msgdata, self))
+ notify(HoldEvent(mlist, msg, msgdata, self))
diff --git a/src/mailman/chains/owner.py b/src/mailman/chains/owner.py
index ad0a04cea..22ed4b996 100644
--- a/src/mailman/chains/owner.py
+++ b/src/mailman/chains/owner.py
@@ -29,20 +29,16 @@ import logging
from zope.event import notify
-from mailman.chains.base import ChainNotification, TerminalChainBase
+from mailman.chains.base import TerminalChainBase
from mailman.config import config
from mailman.core.i18n import _
+from mailman.interfaces.chain import AcceptOwnerEvent
log = logging.getLogger('mailman.vette')
-class OwnerNotification(ChainNotification):
- """An event signaling that a message is accepted to the -owner address."""
-
-
-
class BuiltInOwnerChain(TerminalChainBase):
"""Default built-in -owner address chain."""
@@ -53,4 +49,4 @@ class BuiltInOwnerChain(TerminalChainBase):
# At least for now, everything posted to -owners goes through.
config.switchboards['pipeline'].enqueue(msg, msgdata)
log.info('OWNER: %s', msg.get('message-id', 'n/a'))
- notify(OwnerNotification(mlist, msg, msgdata, self))
+ notify(AcceptOwnerEvent(mlist, msg, msgdata, self))
diff --git a/src/mailman/chains/reject.py b/src/mailman/chains/reject.py
index cf1b86fb2..3adc69e3a 100644
--- a/src/mailman/chains/reject.py
+++ b/src/mailman/chains/reject.py
@@ -22,16 +22,17 @@ from __future__ import absolute_import, unicode_literals
__metaclass__ = type
__all__ = [
'RejectChain',
- 'RejectNotification',
]
import logging
+
from zope.event import notify
from mailman.app.bounces import bounce_message
-from mailman.chains.base import ChainNotification, TerminalChainBase
+from mailman.chains.base import TerminalChainBase
from mailman.core.i18n import _
+from mailman.interfaces.chain import RejectEvent
log = logging.getLogger('mailman.vette')
@@ -39,11 +40,6 @@ SEMISPACE = '; '
-class RejectNotification(ChainNotification):
- """A notification event signaling that a message is being rejected."""
-
-
-
class RejectChain(TerminalChainBase):
"""Reject/bounce a message."""
@@ -64,4 +60,4 @@ class RejectChain(TerminalChainBase):
# XXX Exception/reason
bounce_message(mlist, msg)
log.info('REJECT: %s', msg.get('message-id', 'n/a'))
- notify(RejectNotification(mlist, msg, msgdata, self))
+ notify(RejectEvent(mlist, msg, msgdata, self))
diff --git a/src/mailman/chains/tests/test_hold.py b/src/mailman/chains/tests/test_hold.py
index f2cd1dabf..515894505 100644
--- a/src/mailman/chains/tests/test_hold.py
+++ b/src/mailman/chains/tests/test_hold.py
@@ -30,10 +30,9 @@ from zope.component import getUtility
from mailman.app.lifecycle import create_list
from mailman.chains.hold import autorespond_to_sender
-from mailman.config import config
from mailman.interfaces.autorespond import IAutoResponseSet, Response
from mailman.interfaces.usermanager import IUserManager
-from mailman.testing.helpers import get_queue_messages
+from mailman.testing.helpers import configuration, get_queue_messages
from mailman.testing.layers import ConfigLayer
@@ -49,15 +48,12 @@ class TestAutorespond(unittest.TestCase):
self.maxDiff = None
self.eq = getattr(self, 'assertMultiLineEqual', self.assertEqual)
+ @configuration('mta', max_autoresponses_per_day=1)
def test_max_autoresponses_per_day(self):
# The last one we sent was the last one we should send today. Instead
# of sending an automatic response, send them the "no more today"
- # message.
- config.push('max-1', """
- [mta]
- max_autoresponses_per_day: 1
- """)
- # Simulate a response having been sent to an address already.
+ # message. Start by simulating a response having been sent to an
+ # address already.
anne = getUtility(IUserManager).create_address('anne@example.com')
response_set = IAutoResponseSet(self._mlist)
response_set.response_sent(anne, Response.hold)
diff --git a/src/mailman/chains/tests/test_owner.py b/src/mailman/chains/tests/test_owner.py
index db85d4967..b50c08e31 100644
--- a/src/mailman/chains/tests/test_owner.py
+++ b/src/mailman/chains/tests/test_owner.py
@@ -28,8 +28,9 @@ __all__ = [
import unittest
from mailman.app.lifecycle import create_list
-from mailman.chains.owner import BuiltInOwnerChain, OwnerNotification
+from mailman.chains.owner import BuiltInOwnerChain
from mailman.core.chains import process
+from mailman.interfaces.chain import AcceptOwnerEvent
from mailman.testing.helpers import (
event_subscribers,
get_queue_messages,
@@ -60,12 +61,13 @@ Message-ID: <ant>
# is processed by the owner chain.
events = []
def catch_event(event):
- events.append(event)
+ if isinstance(event, AcceptOwnerEvent):
+ events.append(event)
with event_subscribers(catch_event):
process(self._mlist, self._msg, {}, 'default-owner-chain')
self.assertEqual(len(events), 1)
event = events[0]
- self.assertTrue(isinstance(event, OwnerNotification))
+ self.assertTrue(isinstance(event, AcceptOwnerEvent))
self.assertEqual(event.mlist, self._mlist)
self.assertEqual(event.msg['message-id'], '<ant>')
self.assertTrue(isinstance(event.chain, BuiltInOwnerChain))