summaryrefslogtreecommitdiff
path: root/mailman/queue
diff options
context:
space:
mode:
Diffstat (limited to 'mailman/queue')
-rw-r--r--mailman/queue/command.py9
-rw-r--r--mailman/queue/docs/command.txt65
-rw-r--r--mailman/queue/docs/outgoing.txt9
3 files changed, 75 insertions, 8 deletions
diff --git a/mailman/queue/command.py b/mailman/queue/command.py
index e9009809e..9c547184c 100644
--- a/mailman/queue/command.py
+++ b/mailman/queue/command.py
@@ -44,7 +44,7 @@ from mailman import Utils
from mailman.app.replybot import autorespond_to_sender
from mailman.configuration import config
from mailman.i18n import _
-from mailman.interfaces import IEmailResults
+from mailman.interfaces import ContinueProcessing, IEmailResults
from mailman.queue import Runner
NL = '\n'
@@ -179,7 +179,12 @@ class CommandRunner(Runner):
if command is None:
print >> results, _('No such command: $command_name')
else:
- command.process(mlist, msg, msgdata, arguments, results)
+ status = command.process(
+ mlist, msg, msgdata, arguments, results)
+ assert status in ContinueProcessing, (
+ 'Invalid status: %s' % status)
+ if status == ContinueProcessing.no:
+ break
# All done, send the response.
if len(finder.command_lines) > 0:
print >> results, _('\n- Unprocessed:')
diff --git a/mailman/queue/docs/command.txt b/mailman/queue/docs/command.txt
index c18e7a34c..470a632b7 100644
--- a/mailman/queue/docs/command.txt
+++ b/mailman/queue/docs/command.txt
@@ -104,3 +104,68 @@ message is plain text.
<BLANKLINE>
- Done.
<BLANKLINE>
+
+
+Stopping command processing
+---------------------------
+
+The 'end' command stops email processing, so that nothing following is looked
+at by the command queue.
+
+ >>> msg = message_from_string("""\
+ ... From: cperson@example.com
+ ... To: test-request@example.com
+ ... Message-ID: <caribou>
+ ...
+ ... echo foo bar
+ ... end ignored
+ ... echo baz qux
+ ... """)
+
+ >>> inject_message(mlist, msg, qdir=config.CMDQUEUE_DIR)
+ >>> command.run()
+ >>> len(virgin_queue.files)
+ 1
+ >>> item = get_queue_messages(virgin_queue)[0]
+ >>> print item.msg.as_string()
+ Subject: The results of your email commands
+ ...
+ <BLANKLINE>
+ - Results:
+ echo foo bar
+ <BLANKLINE>
+ - Unprocessed:
+ echo baz qux
+ <BLANKLINE>
+ - Done.
+ <BLANKLINE>
+
+The 'stop' command is an alias for 'end'.
+
+ >>> msg = message_from_string("""\
+ ... From: cperson@example.com
+ ... To: test-request@example.com
+ ... Message-ID: <caribou>
+ ...
+ ... echo foo bar
+ ... stop ignored
+ ... echo baz qux
+ ... """)
+
+ >>> inject_message(mlist, msg, qdir=config.CMDQUEUE_DIR)
+ >>> command.run()
+ >>> len(virgin_queue.files)
+ 1
+ >>> item = get_queue_messages(virgin_queue)[0]
+ >>> print item.msg.as_string()
+ Subject: The results of your email commands
+ ...
+ <BLANKLINE>
+ - Results:
+ echo foo bar
+ <BLANKLINE>
+ - Unprocessed:
+ echo baz qux
+ <BLANKLINE>
+ - Done.
+ <BLANKLINE>
diff --git a/mailman/queue/docs/outgoing.txt b/mailman/queue/docs/outgoing.txt
index cfb6c6988..edc806d47 100644
--- a/mailman/queue/docs/outgoing.txt
+++ b/mailman/queue/docs/outgoing.txt
@@ -17,14 +17,11 @@ move messages to the 'retry queue' for handling delivery failures.
>>> from mailman.app.membership import add_member
>>> from mailman.interfaces import DeliveryMode
>>> add_member(mlist, u'aperson@example.com', u'Anne Person',
- ... u'password', DeliveryMode.regular, u'en',
- ... ack=False, admin_notif=False)
+ ... u'password', DeliveryMode.regular, u'en')
>>> add_member(mlist, u'bperson@example.com', u'Bart Person',
- ... u'password', DeliveryMode.regular, u'en',
- ... ack=False, admin_notif=False)
+ ... u'password', DeliveryMode.regular, u'en')
>>> add_member(mlist, u'cperson@example.com', u'Cris Person',
- ... u'password', DeliveryMode.regular, u'en',
- ... ack=False, admin_notif=False)
+ ... u'password', DeliveryMode.regular, u'en')
By setting the mailing list to personalize messages, each recipient will get a
unique copy of the message, with certain headers tailored for that recipient.