summaryrefslogtreecommitdiff
path: root/src/mailman/core/runner.py
diff options
context:
space:
mode:
authorBarry Warsaw2012-07-06 21:08:41 -0400
committerBarry Warsaw2012-07-06 21:08:41 -0400
commit8d8ab1655b51e277570005b445d3b014afcfbc57 (patch)
tree6ba0147d975636e129a787c9dfa64dae8cffae89 /src/mailman/core/runner.py
parentcd3f84b301c2150fea5402129a2e7bc862fbb52b (diff)
parent01415190ab44e69a8f09a6411564a7cb288404e8 (diff)
downloadmailman-8d8ab1655b51e277570005b445d3b014afcfbc57.tar.gz
mailman-8d8ab1655b51e277570005b445d3b014afcfbc57.tar.zst
mailman-8d8ab1655b51e277570005b445d3b014afcfbc57.zip
Diffstat (limited to 'src/mailman/core/runner.py')
-rw-r--r--src/mailman/core/runner.py17
1 files changed, 11 insertions, 6 deletions
diff --git a/src/mailman/core/runner.py b/src/mailman/core/runner.py
index e86741c41..a79f19fbc 100644
--- a/src/mailman/core/runner.py
+++ b/src/mailman/core/runner.py
@@ -17,7 +17,7 @@
"""The process runner base class."""
-from __future__ import absolute_import, unicode_literals
+from __future__ import absolute_import, print_function, unicode_literals
__metaclass__ = type
__all__ = [
@@ -32,14 +32,15 @@ import traceback
from cStringIO import StringIO
from lazr.config import as_boolean, as_timedelta
from zope.component import getUtility
-from zope.interface import implements
+from zope.event import notify
+from zope.interface import implementer
from mailman.config import config
from mailman.core.i18n import _
from mailman.core.switchboard import Switchboard
from mailman.interfaces.languages import ILanguageManager
from mailman.interfaces.listmanager import IListManager
-from mailman.interfaces.runner import IRunner
+from mailman.interfaces.runner import IRunner, RunnerCrashEvent
from mailman.utilities.string import expand
@@ -48,9 +49,8 @@ elog = logging.getLogger('mailman.error')
+@implementer(IRunner)
class Runner:
- implements(IRunner)
-
intercept_signals = True
def __init__(self, name, slice=None):
@@ -217,7 +217,12 @@ class Runner:
language = mlist.preferred_language
with _.using(language.code):
msgdata['lang'] = language.code
- keepqueued = self._dispose(mlist, msg, msgdata)
+ try:
+ keepqueued = self._dispose(mlist, msg, msgdata)
+ except Exception as error:
+ # Trigger the Zope event and re-raise
+ notify(RunnerCrashEvent(self, mlist, msg, msgdata, error))
+ raise
if keepqueued:
self.switchboard.enqueue(msg, msgdata)