~barry/mailman/events-and-web

« back to all changes in this revision

Viewing changes to src/mailman/runners/incoming.py

  • Committer: Barry Warsaw
  • Date: 2012-04-22 21:33:33 UTC
  • mfrom: (7150.1.11 transactions)
  • Revision ID: barry@list.org-20120422213333-3skjqsjktooesgsl
Several non-functional improvements to the code base.

Reduce the explicit use of the config.db global by introducing two new
helpers:
 - A new transaction() context manager which will commit the transaction on
   successful exit, otherwise it will abort the transaction
 - A new dbconnection decorator which calls the decorated method with the
   Storm store object as the first argument (after self).  This can be used
   instead of config.db.store.

By reducing the explicit use of this global, we have a better chance of
refactoring it away in the future.  Still TODO: runner.py and lmtp.py.

Be explicit about the `store` attribute on the IDatabase interface.

More consistent use of __future__ imports.

Remove an obsolete command line script.

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
immediately.
27
27
"""
28
28
 
29
 
from __future__ import absolute_import, unicode_literals
 
29
from __future__ import absolute_import, print_function, unicode_literals
30
30
 
31
31
__metaclass__ = type
32
32
__all__ = [
36
36
 
37
37
from zope.component import getUtility
38
38
 
39
 
from mailman.config import config
40
39
from mailman.core.chains import process
41
40
from mailman.core.runner import Runner
 
41
from mailman.database.transaction import transaction
42
42
from mailman.interfaces.address import ExistingAddressError
43
43
from mailman.interfaces.usermanager import IUserManager
44
44
 
54
54
        # Ensure that the email addresses of the message's senders are known
55
55
        # to Mailman.  This will be used in nonmember posting dispositions.
56
56
        user_manager = getUtility(IUserManager)
57
 
        for sender in msg.senders:
58
 
            try:
59
 
                user_manager.create_address(sender)
60
 
            except ExistingAddressError:
61
 
                pass
62
 
        config.db.commit()
 
57
        with transaction():
 
58
            for sender in msg.senders:
 
59
                try:
 
60
                    user_manager.create_address(sender)
 
61
                except ExistingAddressError:
 
62
                    pass
63
63
        # Process the message through the mailing list's start chain.
64
64
        start_chain = (mlist.owner_chain
65
65
                       if msgdata.get('to_owner', False)