~barry/mailman/events-and-web

« back to all changes in this revision

Viewing changes to src/mailman/runners/lmtp.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:
15
15
# You should have received a copy of the GNU General Public License along with
16
16
# GNU Mailman.  If not, see <http://www.gnu.org/licenses/>.
17
17
 
 
18
# XXX This module needs to be refactored to avoid direct access to the
 
19
# config.db global.
 
20
 
18
21
"""Mailman LMTP runner (server).
19
22
 
20
23
Most mail servers can be configured to deliver local messages via 'LMTP'[1].
31
34
    http://www.faqs.org/rfcs/rfc2033.html
32
35
"""
33
36
 
 
37
from __future__ import absolute_import, print_function, unicode_literals
 
38
 
 
39
__metaclass__ = type
 
40
__all__ = [
 
41
    'LMTPRunner',
 
42
    ]
 
43
 
 
44
 
34
45
import email
35
46
import smtpd
36
47
import logging
80
91
    )
81
92
 
82
93
DASH    = '-'
83
 
CRLF    = '\r\n'
84
 
ERR_451 = '451 Requested action aborted: error in processing'
85
 
ERR_501 = '501 Message has defects'
86
 
ERR_502 = '502 Error: command HELO not implemented'
87
 
ERR_550 = '550 Requested action not taken: mailbox unavailable'
88
 
ERR_550_MID = '550 No Message-ID header provided'
 
94
CRLF    = b'\r\n'
 
95
ERR_451 = b'451 Requested action aborted: error in processing'
 
96
ERR_501 = b'501 Message has defects'
 
97
ERR_502 = b'502 Error: command HELO not implemented'
 
98
ERR_550 = b'550 Requested action not taken: mailbox unavailable'
 
99
ERR_550_MID = b'550 No Message-ID header provided'
89
100
 
90
101
# XXX Blech
91
 
smtpd.__version__ = 'Python LMTP runner 1.0'
 
102
smtpd.__version__ = b'Python LMTP runner 1.0'
92
103
 
93
104
 
94
105
 
228
239
                    config.switchboards[queue].enqueue(msg, msgdata)
229
240
                    slog.debug('%s subaddress: %s, queue: %s',
230
241
                               message_id, canonical_subaddress, queue)
231
 
                    status.append('250 Ok')
 
242
                    status.append(b'250 Ok')
232
243
            except Exception:
233
244
                slog.exception('Queue detection: %s', msg['message-id'])
234
245
                config.db.abort()