diff options
| author | Barry Warsaw | 2010-02-16 18:45:55 -0500 |
|---|---|---|
| committer | Barry Warsaw | 2010-02-16 18:45:55 -0500 |
| commit | 006515005077b7b4b6fbb18d593800264ed307c4 (patch) | |
| tree | 53c04cdb1572e7d6683aebfd3fb58c526bf3f345 /src/mailman/testing/helpers.py | |
| parent | 24631a0aad7c1be8b71303b509552f69240743b5 (diff) | |
| download | mailman-006515005077b7b4b6fbb18d593800264ed307c4.tar.gz mailman-006515005077b7b4b6fbb18d593800264ed307c4.tar.zst mailman-006515005077b7b4b6fbb18d593800264ed307c4.zip | |
Diffstat (limited to 'src/mailman/testing/helpers.py')
| -rw-r--r-- | src/mailman/testing/helpers.py | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/src/mailman/testing/helpers.py b/src/mailman/testing/helpers.py index 0897d1d74..b9936ac71 100644 --- a/src/mailman/testing/helpers.py +++ b/src/mailman/testing/helpers.py @@ -23,6 +23,7 @@ __metaclass__ = type __all__ = [ 'TestableMaster', 'digest_mbox', + 'event_subscribers', 'get_lmtp_client', 'get_queue_messages', 'make_testable_runner', @@ -40,6 +41,9 @@ import smtplib import datetime import threading +from contextlib import contextmanager +from zope import event + from mailman.bin.master import Loop as Master from mailman.config import config from mailman.utilities.mailbox import Mailbox @@ -88,10 +92,12 @@ class _Bag: setattr(self, key, value) -def get_queue_messages(queue_name): +def get_queue_messages(queue_name, sort_on=None): """Return and clear all the messages in the given queue. :param queue_name: A string naming a queue. + :param sort_on: The message header to sort on. If None (the default), + no sorting is performed. :return: A list of 2-tuples where each item contains the message and message metadata. """ @@ -101,6 +107,8 @@ def get_queue_messages(queue_name): msg, msgdata = queue.dequeue(filebase) messages.append(_Bag(msg=msg, msgdata=msgdata)) queue.finish(filebase) + if sort_on is not None: + messages.sort(key=lambda item: item.msg[sort_on]) return messages @@ -229,3 +237,18 @@ def wait_for_webservice(): time.sleep(0.1) else: break + + + +@contextmanager +def event_subscribers(*subscribers): + """Temporarily set the Zope event subscribers list. + + :param subscribers: A sequence of event subscribers. + :type subscribers: sequence of callables, each receiving one argument, the + event. + """ + old_subscribers = event.subscribers[:] + event.subscribers = list(subscribers) + yield + event.subscribers[:] = old_subscribers |
