~barry/mailman/events-and-web

« back to all changes in this revision

Viewing changes to src/mailman/testing/helpers.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
"""Various test helpers."""
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__ = [
64
64
 
65
65
from mailman.bin.master import Loop as Master
66
66
from mailman.config import config
 
67
from mailman.database.transaction import transaction
67
68
from mailman.email.message import Message
68
69
from mailman.interfaces.member import MemberRole
69
70
from mailman.interfaces.messages import IMessageStore
237
238
    # It's possible the process has started but is not yet accepting
238
239
    # connections.  Wait a little while.
239
240
    lmtp = LMTP()
 
241
    #lmtp.debuglevel = 1
240
242
    until = datetime.datetime.now() + as_timedelta(config.devmode.wait)
241
243
    while datetime.datetime.now() < until:
242
244
        try:
243
245
            response = lmtp.connect(
244
246
                config.mta.lmtp_host, int(config.mta.lmtp_port))
245
247
            if not quiet:
246
 
                print response
 
248
                print(response)
247
249
            return lmtp
248
250
        except socket.error as error:
249
251
            if error[0] == errno.ECONNREFUSED:
397
399
    user_manager = getUtility(IUserManager)
398
400
    email = '{0}person@example.com'.format(first_name[0].lower())
399
401
    full_name = '{0} Person'.format(first_name)
400
 
    person = user_manager.get_user(email)
401
 
    if person is None:
402
 
        address = user_manager.get_address(email)
403
 
        if address is None:
404
 
            person = user_manager.create_user(email, full_name)
 
402
    with transaction():
 
403
        person = user_manager.get_user(email)
 
404
        if person is None:
 
405
            address = user_manager.get_address(email)
 
406
            if address is None:
 
407
                person = user_manager.create_user(email, full_name)
 
408
                preferred_address = list(person.addresses)[0]
 
409
                mlist.subscribe(preferred_address, role)
 
410
            else:
 
411
                mlist.subscribe(address, role)
 
412
        else:
405
413
            preferred_address = list(person.addresses)[0]
406
414
            mlist.subscribe(preferred_address, role)
407
 
        else:
408
 
            mlist.subscribe(address, role)
409
 
    else:
410
 
        preferred_address = list(person.addresses)[0]
411
 
        mlist.subscribe(preferred_address, role)
412
 
    config.db.commit()
413
415
 
414
416
 
415
417
 
437
439
            os.remove(os.path.join(dirpath, filename))
438
440
    # Clear out messages in the message store.
439
441
    message_store = getUtility(IMessageStore)
440
 
    for message in message_store.messages:
441
 
        message_store.delete_message(message['message-id'])
442
 
    config.db.commit()
 
442
    with transaction():
 
443
        for message in message_store.messages:
 
444
            message_store.delete_message(message['message-id'])
443
445
    # Reset the global style manager.
444
446
    getUtility(IStyleManager).populate()
445
447
    # Remove all dynamic header-match rules.