~barry/mailman/events-and-web

« back to all changes in this revision

Viewing changes to src/mailman/commands/cli_lists.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:
17
17
 
18
18
"""The 'lists' subcommand."""
19
19
 
20
 
from __future__ import absolute_import, unicode_literals
 
20
from __future__ import absolute_import, print_function, unicode_literals
21
21
 
22
22
__metaclass__ = type
23
23
__all__ = [
31
31
from zope.interface import implements
32
32
 
33
33
from mailman.app.lifecycle import create_list, remove_list
34
 
from mailman.config import config
35
34
from mailman.core.constants import system_preferences
36
35
from mailman.core.i18n import _
 
36
from mailman.database.transaction import transaction, transactional
37
37
from mailman.email.message import UserNotification
38
38
from mailman.interfaces.address import (
39
39
    IEmailValidator, InvalidEmailAddressError)
98
98
        # Maybe no mailing lists matched.
99
99
        if len(mailing_lists) == 0:
100
100
            if not args.quiet:
101
 
                print _('No matching mailing lists found')
 
101
                print(_('No matching mailing lists found'))
102
102
            return
103
103
        count = len(mailing_lists)
104
104
        if not args.quiet:
105
 
            print _('$count matching mailing lists found:')
 
105
            print(_('$count matching mailing lists found:'))
106
106
        # Calculate the longest identifier.
107
107
        longest = 0
108
108
        output = []
120
120
        else:
121
121
            format_string = '{0:{2}}'
122
122
        for identifier, description in output:
123
 
            print format_string.format(
124
 
                identifier, description, longest, 70 - longest)
 
123
            print(format_string.format(
 
124
                identifier, description, longest, 70 - longest))
125
125
 
126
126
 
127
127
 
214
214
            self.parser.error(_('Undefined domain: $domain'))
215
215
            return
216
216
        # Find the language associated with the code, then set the mailing
217
 
        # list's preferred language to that.  The changes then must be
218
 
        # committed to the database.
219
 
        mlist.preferred_language = getUtility(ILanguageManager)[language_code]
220
 
        config.db.commit()
 
217
        # list's preferred language to that.
 
218
        language_manager = getUtility(ILanguageManager)
 
219
        with transaction():
 
220
            mlist.preferred_language = language_manager[language_code]
221
221
        # Do the notification.
222
222
        if not args.quiet:
223
 
            print _('Created mailing list: $mlist.fqdn_listname')
 
223
            print(_('Created mailing list: $mlist.fqdn_listname'))
224
224
        if args.notify:
225
225
            d = dict(
226
226
                listname        = mlist.fqdn_listname,
262
262
            The 'fully qualified list name', i.e. the posting address of the
263
263
            mailing list."""))
264
264
 
 
265
    @transactional
265
266
    def process(self, args):
266
267
        """See `ICLISubCommand`."""
267
268
        def log(message):
268
269
            if not args.quiet:
269
 
                print message
 
270
                print(message)
270
271
        assert len(args.listname) == 1, (
271
272
            'Unexpected positional arguments: %s' % args.listname)
272
273
        fqdn_listname = args.listname[0]
277
278
        else:
278
279
            log(_('Removed list: $fqdn_listname'))
279
280
        remove_list(fqdn_listname, mlist)
280
 
        config.db.commit()