------------------------------------------------------------
revno: 6791
committer: Barry Warsaw <[email protected]>
branch nick: 3.0
timestamp: Wed 2009-08-26 10:51:52 -0400
message:
  Remove the user_manager attribute from config.db and expose it as an
  IUserManager utility.
modified:
  src/mailman/app/lifecycle.py
  src/mailman/app/membership.py
  src/mailman/app/registrar.py
  src/mailman/bin/list_members.py
  src/mailman/bin/set_members.py
  src/mailman/chains/hold.py
  src/mailman/commands/docs/join.txt
  src/mailman/config/configure.zcml
  src/mailman/database/__init__.py
  src/mailman/database/usermanager.py
  src/mailman/docs/addresses.txt
  src/mailman/docs/autorespond.txt
  src/mailman/docs/lifecycle.txt
  src/mailman/docs/membership.txt
  src/mailman/docs/registration.txt
  src/mailman/docs/requests.txt
  src/mailman/docs/usermanager.txt
  src/mailman/docs/users.txt
  src/mailman/interfaces/database.py
  src/mailman/pipeline/decorate.py
  src/mailman/pipeline/docs/acknowledge.txt
  src/mailman/pipeline/docs/avoid-duplicates.txt
  src/mailman/pipeline/docs/calc-recips.txt
  src/mailman/pipeline/docs/file-recips.txt
  src/mailman/pipeline/replybot.py
  src/mailman/queue/docs/digester.txt
  src/mailman/rules/docs/moderation.txt


--
lp:mailman
https://code.launchpad.net/~mailman-coders/mailman/3.0

Your team Mailman Checkins is subscribed to branch lp:mailman.
To unsubscribe from this branch go to 
https://code.launchpad.net/~mailman-coders/mailman/3.0/+edit-subscription.
=== modified file 'src/mailman/app/lifecycle.py'
--- src/mailman/app/lifecycle.py	2009-08-26 06:27:37 +0000
+++ src/mailman/app/lifecycle.py	2009-08-26 14:51:52 +0000
@@ -38,6 +38,7 @@
     BadDomainSpecificationError, IDomainManager)
 from mailman.interfaces.listmanager import IListManager
 from mailman.interfaces.member import MemberRole
+from mailman.interfaces.usermanager import IUserManager
 from mailman.utilities.modules import call_name
 
 
@@ -61,13 +62,13 @@
     call_name(config.mta.incoming).create(mlist)
     # Create any owners that don't yet exist, and subscribe all addresses as
     # owners of the mailing list.
-    usermgr = config.db.user_manager
+    user_manager = getUtility(IUserManager)
     for owner_address in owners:
-        addr = usermgr.get_address(owner_address)
+        addr = user_manager.get_address(owner_address)
         if addr is None:
             # XXX Make this use an IRegistrar instead, but that requires
             # sussing out the IDomain stuff.  For now, fake it.
-            user = usermgr.create_user(owner_address)
+            user = user_manager.create_user(owner_address)
             addr = list(user.addresses)[0]
         addr.subscribe(mlist, MemberRole.owner)
     return mlist

=== modified file 'src/mailman/app/membership.py'
--- src/mailman/app/membership.py	2009-08-17 02:44:01 +0000
+++ src/mailman/app/membership.py	2009-08-26 14:51:52 +0000
@@ -27,15 +27,16 @@
 
 
 from email.utils import formataddr
+from zope.component import getUtility
 
 from mailman import Utils
 from mailman import i18n
 from mailman.app.notifications import send_goodbye_message
-from mailman.config import config
 from mailman.core import errors
 from mailman.email.message import OwnerNotification
 from mailman.email.validate import validate
 from mailman.interfaces.member import AlreadySubscribedError, MemberRole
+from mailman.interfaces.usermanager import IUserManager
 
 _ = i18n._
 
@@ -72,21 +73,22 @@
         raise errors.MembershipIsBanned(pattern)
     # Do the actual addition.  First, see if there's already a user linked
     # with the given address.
-    user = config.db.user_manager.get_user(address)
+    user_manager = getUtility(IUserManager)
+    user = user_manager.get_user(address)
     if user is None:
         # A user linked to this address does not yet exist.  Is the address
         # itself known but just not linked to a user?
-        address_obj = config.db.user_manager.get_address(address)
+        address_obj = user_manager.get_address(address)
         if address_obj is None:
             # Nope, we don't even know about this address, so create both the
             # user and address now.
-            user = config.db.user_manager.create_user(address, realname)
+            user = user_manager.create_user(address, realname)
             # Do it this way so we don't have to flush the previous change.
             address_obj = list(user.addresses)[0]
         else:
             # The address object exists, but it's not linked to a user.
             # Create the user and link it now.
-            user = config.db.user_manager.create_user()
+            user = user_manager.create_user()
             user.real_name = (realname if realname else address_obj.real_name)
             user.link(address_obj)
         # Since created the user, then the member, and set preferences on the
@@ -138,7 +140,7 @@
         send_goodbye_message(mlist, address, language)
     # ...and to the administrator.
     if admin_notif:
-        user = config.db.user_manager.get_user(address)
+        user = getUtility(IUserManager).get_user(address)
         realname = user.real_name
         subject = _('$mlist.real_name unsubscription notification')
         text = Utils.maketext(

=== modified file 'src/mailman/app/registrar.py'
--- src/mailman/app/registrar.py	2009-08-26 06:27:37 +0000
+++ src/mailman/app/registrar.py	2009-08-26 14:51:52 +0000
@@ -40,6 +40,7 @@
 from mailman.interfaces.member import MemberRole
 from mailman.interfaces.pending import IPendable
 from mailman.interfaces.registrar import IRegistrar
+from mailman.interfaces.usermanager import IUserManager
 
 
 
@@ -105,17 +106,17 @@
         # We are going to end up with an IAddress for the verified address
         # and an IUser linked to this IAddress.  See if any of these objects
         # currently exist in our database.
-        usermgr = config.db.user_manager
-        addr = (usermgr.get_address(address)
+        user_manager = getUtility(IUserManager)
+        addr = (user_manager.get_address(address)
                 if address is not missing else None)
-        user = (usermgr.get_user(address)
+        user = (user_manager.get_user(address)
                 if address is not missing else None)
         # If there is neither an address nor a user matching the confirmed
         # record, then create the user, which will in turn create the address
         # and link the two together
         if addr is None:
             assert user is None, 'How did we get a user but not an address?'
-            user = usermgr.create_user(address, real_name)
+            user = user_manager.create_user(address, real_name)
             # Because the database changes haven't been flushed, we can't use
             # IUserManager.get_address() to find the IAddress just created
             # under the hood.  Instead, iterate through the IUser's addresses,
@@ -126,7 +127,7 @@
             else:
                 raise AssertionError('Could not find expected IAddress')
         elif user is None:
-            user = usermgr.create_user()
+            user = user_manager.create_user()
             user.real_name = real_name
             user.link(addr)
         else:

=== modified file 'src/mailman/bin/list_members.py'
--- src/mailman/bin/list_members.py	2009-08-26 06:27:37 +0000
+++ src/mailman/bin/list_members.py	2009-08-26 14:51:52 +0000
@@ -20,12 +20,12 @@
 from email.Utils import formataddr
 from zope.component import getUtility
 
-from mailman.config import config
 from mailman.core import errors
 from mailman.email.validate import is_valid
 from mailman.i18n import _
 from mailman.interfaces.listmanager import IListManager
 from mailman.interfaces.members import DeliveryStatus
+from mailman.interfaces.usermanager import IUserManager
 from mailman.options import SingleMailingListOptions
 
 
@@ -153,17 +153,18 @@
     dmembers = set(mlist.digest_members.members)
 
     fullnames = options.options.fullnames
+    user_manager = getUtility(IUserManager)
     if options.options.invalid:
         all = sorted(member.address.address for member in rmembers + dmembers)
         for address in all:
-            user = config.db.user_manager.get_user(address)
+            user = user_manager.get_user(address)
             name = (user.real_name if fullnames and user else u'')
             if options.options.invalid and not is_valid(address):
                 print >> fp, formataddr((safe(name), address))
         return
     if options.options.regular:
         for address in sorted(member.address.address for member in rmembers):
-            user = config.db.user_manager.get_user(address)
+            user = user_manager.get_user(address)
             name = (user.real_name if fullnames and user else u'')
             # Filter out nomails
             if (options.options.nomail and
@@ -172,7 +173,7 @@
             print >> fp, formataddr((safe(name), address))
     if options.options.digest:
         for address in sorted(member.address.address for member in dmembers):
-            user = config.db.user_manager.get_user(address)
+            user = user_manager.get_user(address)
             name = (user.real_name if fullnames and user else u'')
             # Filter out nomails
             if (options.options.nomail and

=== modified file 'src/mailman/bin/set_members.py'
--- src/mailman/bin/set_members.py	2009-01-01 22:16:51 +0000
+++ src/mailman/bin/set_members.py	2009-08-26 14:51:52 +0000
@@ -18,6 +18,8 @@
 import csv
 import optparse
 
+from zope.component import getUtility
+
 from mailman import Message
 from mailman import Utils
 from mailman import i18n
@@ -27,7 +29,8 @@
     send_admin_subscription_notice, send_welcome_message)
 from mailman.configuration import config
 from mailman.initialize import initialize
-from mailman.interfaces import DeliveryMode
+from mailman.interfaces.members import DeliveryMode
+from mailman.interfaces.usermanager import IUserManager
 from mailman.version import MAILMAN_VERSION
 
 
@@ -165,7 +168,7 @@
             real_name, delivery_mode = member_data[address]
             member = mlist.members.get_member(address)
             member.preferences.delivery_mode = delivery_mode
-            user = config.db.user_manager.get_user(address)
+            user = getUtility(IUserManager).get_user(address)
             user.real_name = real_name
         for address in add_members:
             print _('adding address: $address')

=== modified file 'src/mailman/chains/hold.py'
--- src/mailman/chains/hold.py	2009-02-19 05:26:22 +0000
+++ src/mailman/chains/hold.py	2009-08-26 14:51:52 +0000
@@ -30,6 +30,7 @@
 from email.mime.message import MIMEMessage
 from email.mime.text import MIMEText
 from email.utils import formatdate, make_msgid
+from zope.component import getUtility
 from zope.interface import implements
 
 from mailman import i18n
@@ -41,6 +42,7 @@
 from mailman.email.message import UserNotification
 from mailman.interfaces.autorespond import IAutoResponseSet, Response
 from mailman.interfaces.pending import IPendable
+from mailman.interfaces.usermanager import IUserManager
 
 
 log = logging.getLogger('mailman.vette')
@@ -76,9 +78,10 @@
         # Unlimited.
         return True
     # Get an IAddress from an email address.
-    address = config.db.user_manager.get_address(sender)
+    user_manager = getUtility(IUserManager)
+    address = user_manager.get_address(sender)
     if address is None:
-        address = config.db.user_manager.create_address(sender)
+        address = user_manager.create_address(sender)
     response_set = IAutoResponseSet(mlist)
     todays_count = response_set.todays_count(address, Response.hold)
     if todays_count < max_autoresponses_per_day:

=== modified file 'src/mailman/commands/docs/join.txt'
--- src/mailman/commands/docs/join.txt	2009-07-17 05:16:27 +0000
+++ src/mailman/commands/docs/join.txt	2009-08-26 14:51:52 +0000
@@ -78,7 +78,9 @@
 Anne is not yet a member because she must confirm her subscription request
 first.
 
-    >>> print config.db.user_manager.get_user('[email protected]')
+    >>> from mailman.interfaces.usermanager import IUserManager
+    >>> from zope.component import getUtility
+    >>> print getUtility(IUserManager).get_user('[email protected]')
     None
 
 Mailman has sent her the confirmation message.
@@ -125,7 +127,7 @@
     >>> registrar.confirm(token)
     True
 
-    >>> user = config.db.user_manager.get_user('[email protected]')
+    >>> user = getUtility(IUserManager).get_user('[email protected]')
     >>> print user.real_name
     Anne Person
     >>> list(user.addresses)
@@ -151,7 +153,7 @@
 
 Anne of course, is still registered.
 
-    >>> print config.db.user_manager.get_user('[email protected]')
+    >>> print getUtility(IUserManager).get_user('[email protected]')
     <User "Anne Person" at ...>
 
 But she is not a member of the mailing list.

=== modified file 'src/mailman/config/configure.zcml'
--- src/mailman/config/configure.zcml	2009-08-26 06:27:37 +0000
+++ src/mailman/config/configure.zcml	2009-08-26 14:51:52 +0000
@@ -36,4 +36,9 @@
     provides="mailman.interfaces.listmanager.IListManager"
     />
 
+  <utility
+    factory="mailman.database.usermanager.UserManager"
+    provides="mailman.interfaces.usermanager.IUserManager"
+    />
+
 </configure>

=== modified file 'src/mailman/database/__init__.py'
--- src/mailman/database/__init__.py	2009-08-26 06:27:37 +0000
+++ src/mailman/database/__init__.py	2009-08-26 14:51:52 +0000
@@ -39,7 +39,6 @@
 from mailman.database.messagestore import MessageStore
 from mailman.database.pending import Pendings
 from mailman.database.requests import Requests
-from mailman.database.usermanager import UserManager
 from mailman.database.version import Version
 from mailman.interfaces.database import IDatabase, SchemaVersionMismatchError
 from mailman.utilities.string import expand
@@ -55,7 +54,6 @@
 
     def __init__(self):
         self.url = None
-        self.user_manager = None
         self.message_store = None
         self.pendings = None
         self.requests = None
@@ -67,7 +65,6 @@
         # the database at the same time.
         with Lock(os.path.join(config.LOCK_DIR, 'dbcreate.lck')):
             self._create(debug)
-        self.user_manager = UserManager()
         self.message_store = MessageStore()
         self.pendings = Pendings()
         self.requests = Requests()

=== modified file 'src/mailman/database/usermanager.py'
--- src/mailman/database/usermanager.py	2009-01-17 02:04:21 +0000
+++ src/mailman/database/usermanager.py	2009-08-26 14:51:52 +0000
@@ -24,6 +24,7 @@
     'UserManager',
     ]
 
+
 from zope.interface import implements
 
 from mailman.config import config

=== modified file 'src/mailman/docs/addresses.txt'
--- src/mailman/docs/addresses.txt	2009-07-17 05:16:27 +0000
+++ src/mailman/docs/addresses.txt	2009-08-26 14:51:52 +0000
@@ -7,7 +7,9 @@
 been validated.  Addresses may be linked to the users that Mailman knows
 about.  Addresses are subscribed to mailing lists though members.
 
-    >>> usermgr = config.db.user_manager
+    >>> from mailman.interfaces.usermanager import IUserManager
+    >>> from zope.component import getUtility
+    >>> user_manager = getUtility(IUserManager)
 
 
 Creating addresses
@@ -16,13 +18,13 @@
 Addresses are created directly through the user manager, which starts out with
 no addresses.
 
-    >>> sorted(address.address for address in usermgr.addresses)
+    >>> sorted(address.address for address in user_manager.addresses)
     []
 
 Creating an unlinked email address is straightforward.
 
-    >>> address_1 = usermgr.create_address('[email protected]')
-    >>> sorted(address.address for address in usermgr.addresses)
+    >>> address_1 = user_manager.create_address('[email protected]')
+    >>> sorted(address.address for address in user_manager.addresses)
     [u'[email protected]']
 
 However, such addresses have no real name.
@@ -32,11 +34,11 @@
 
 You can also create an email address object with a real name.
 
-    >>> address_2 = usermgr.create_address(
+    >>> address_2 = user_manager.create_address(
     ...     '[email protected]', 'Ben Person')
-    >>> sorted(address.address for address in usermgr.addresses)
+    >>> sorted(address.address for address in user_manager.addresses)
     [u'[email protected]', u'[email protected]']
-    >>> sorted(address.real_name for address in usermgr.addresses)
+    >>> sorted(address.real_name for address in user_manager.addresses)
     [u'', u'Ben Person']
 
 The str() of the address is the RFC 2822 preferred originator format, while
@@ -50,35 +52,36 @@
 You can assign real names to existing addresses.
 
     >>> address_1.real_name = 'Anne Person'
-    >>> sorted(address.real_name for address in usermgr.addresses)
+    >>> sorted(address.real_name for address in user_manager.addresses)
     [u'Anne Person', u'Ben Person']
 
 These addresses are not linked to users, and can be seen by searching the user
 manager for an associated user.
 
-    >>> print usermgr.get_user('[email protected]')
+    >>> print user_manager.get_user('[email protected]')
     None
-    >>> print usermgr.get_user('[email protected]')
+    >>> print user_manager.get_user('[email protected]')
     None
 
 You can create email addresses that are linked to users by using a different
 interface.
 
-    >>> user_1 = usermgr.create_user('[email protected]', u'Claire Person')
+    >>> user_1 = user_manager.create_user(
+    ...     '[email protected]', u'Claire Person')
     >>> sorted(address.address for address in user_1.addresses)
     [u'[email protected]']
-    >>> sorted(address.address for address in usermgr.addresses)
+    >>> sorted(address.address for address in user_manager.addresses)
     [u'[email protected]', u'[email protected]', u'[email protected]']
-    >>> sorted(address.real_name for address in usermgr.addresses)
+    >>> sorted(address.real_name for address in user_manager.addresses)
     [u'Anne Person', u'Ben Person', u'Claire Person']
 
 And now you can find the associated user.
 
-    >>> print usermgr.get_user('[email protected]')
-    None
-    >>> print usermgr.get_user('[email protected]')
-    None
-    >>> usermgr.get_user('[email protected]')
+    >>> print user_manager.get_user('[email protected]')
+    None
+    >>> print user_manager.get_user('[email protected]')
+    None
+    >>> user_manager.get_user('[email protected]')
     <User "Claire Person" at ...>
 
 
@@ -87,10 +90,10 @@
 
 You can remove an unlinked address from the user manager.
 
-    >>> usermgr.delete_address(address_1)
-    >>> sorted(address.address for address in usermgr.addresses)
+    >>> user_manager.delete_address(address_1)
+    >>> sorted(address.address for address in user_manager.addresses)
     [u'[email protected]', u'[email protected]']
-    >>> sorted(address.real_name for address in usermgr.addresses)
+    >>> sorted(address.real_name for address in user_manager.addresses)
     [u'Ben Person', u'Claire Person']
 
 Deleting a linked address does not delete the user, but it does unlink the
@@ -101,12 +104,12 @@
     >>> user_1.controls('[email protected]')
     True
     >>> address_3 = list(user_1.addresses)[0]
-    >>> usermgr.delete_address(address_3)
+    >>> user_manager.delete_address(address_3)
     >>> sorted(address.address for address in user_1.addresses)
     []
     >>> user_1.controls('[email protected]')
     False
-    >>> sorted(address.address for address in usermgr.addresses)
+    >>> sorted(address.address for address in user_manager.addresses)
     [u'[email protected]']
 
 
@@ -116,7 +119,7 @@
 Addresses have two dates, the date the address was registered on and the date
 the address was validated on.  Neither date is set by default.
 
-    >>> address_4 = usermgr.create_address(
+    >>> address_4 = user_manager.create_address(
     ...     '[email protected]', 'Dan Person')
     >>> print address_4.registered_on
     None
@@ -147,7 +150,7 @@
 Addresses get subscribed to mailing lists, not users.  When the address is
 subscribed, a role is specified.
 
-    >>> address_5 = usermgr.create_address(
+    >>> address_5 = user_manager.create_address(
     ...     '[email protected]', 'Elly Person')
     >>> mlist = create_list('[email protected]')
 
@@ -187,7 +190,7 @@
 when sending the user a message, but it treats addresses that are different in
 case equivalently in all other situations.
 
-    >>> address_6 = usermgr.create_address(
+    >>> address_6 = user_manager.create_address(
     ...     '[email protected]', 'Frank Person')
 
 The str() of such an address prints the RFC 2822 preferred originator format
@@ -211,15 +214,15 @@
 Because addresses are case-insensitive for all other purposes, you cannot
 create an address that differs only in case.
 
-    >>> usermgr.create_address('[email protected]')
-    Traceback (most recent call last):
-    ...
-    ExistingAddressError: [email protected]
-    >>> usermgr.create_address('[email protected]')
-    Traceback (most recent call last):
-    ...
-    ExistingAddressError: [email protected]
-    >>> usermgr.create_address('[email protected]')
+    >>> user_manager.create_address('[email protected]')
+    Traceback (most recent call last):
+    ...
+    ExistingAddressError: [email protected]
+    >>> user_manager.create_address('[email protected]')
+    Traceback (most recent call last):
+    ...
+    ExistingAddressError: [email protected]
+    >>> user_manager.create_address('[email protected]')
     Traceback (most recent call last):
     ...
     ExistingAddressError: [email protected]
@@ -227,7 +230,7 @@
 You can get the address using either the lower cased version or case-preserved
 version.  In fact, searching for an address is case insensitive.
 
-    >>> print usermgr.get_address('[email protected]').address
+    >>> print user_manager.get_address('[email protected]').address
     [email protected]
-    >>> print usermgr.get_address('[email protected]').address
+    >>> print user_manager.get_address('[email protected]').address
     [email protected]

=== modified file 'src/mailman/docs/autorespond.txt'
--- src/mailman/docs/autorespond.txt	2009-07-17 05:16:27 +0000
+++ src/mailman/docs/autorespond.txt	2009-08-26 14:51:52 +0000
@@ -28,7 +28,11 @@
 email command.  You can find out how many responses for a particular address
 have already been sent today.
 
-    >>> address = config.db.user_manager.create_address('[email protected]')
+    >>> from mailman.interfaces.usermanager import IUserManager
+    >>> from zope.component import getUtility
+    >>> address = getUtility(IUserManager).create_address(
+    ...     '[email protected]')
+
     >>> from mailman.interfaces.autorespond import Response
     >>> response_set.todays_count(address, Response.hold)
     0
@@ -99,7 +103,8 @@
 
 If there's been no response sent to a particular address, None is returned.
 
-    >>> address = config.db.user_manager.create_address('[email protected]')
+    >>> address = getUtility(IUserManager).create_address(
+    ...     '[email protected]')
     >>> response_set.todays_count(address, Response.command)
     0
     >>> print response_set.last_response(address, Response.command)

=== modified file 'src/mailman/docs/lifecycle.txt'
--- src/mailman/docs/lifecycle.txt	2009-08-26 06:27:37 +0000
+++ src/mailman/docs/lifecycle.txt	2009-08-26 14:51:52 +0000
@@ -103,11 +103,14 @@
 If you create a mailing list with owner addresses that are already known to
 the system, they won't be created again.
 
-    >>> usermgr = config.db.user_manager
-    >>> user_a = usermgr.get_user('[email protected]')
-    >>> user_b = usermgr.get_user('[email protected]')
-    >>> user_c = usermgr.get_user('[email protected]')
-    >>> user_d = usermgr.get_user('[email protected]')
+    >>> from mailman.interfaces.usermanager import IUserManager
+    >>> from zope.component import getUtility
+    >>> user_manager = getUtility(IUserManager)
+
+    >>> user_a = user_manager.get_user('[email protected]')
+    >>> user_b = user_manager.get_user('[email protected]')
+    >>> user_c = user_manager.get_user('[email protected]')
+    >>> user_d = user_manager.get_user('[email protected]')
     >>> user_a.real_name = 'Anne Person'
     >>> user_b.real_name = 'Bart Person'
     >>> user_c.real_name = 'Caty Person'

=== modified file 'src/mailman/docs/membership.txt'
--- src/mailman/docs/membership.txt	2009-07-17 05:16:27 +0000
+++ src/mailman/docs/membership.txt	2009-08-26 14:51:52 +0000
@@ -62,8 +62,10 @@
 assigning roles to users.  First we have to create the user, because there are
 no users in the user database yet.
 
-    >>> usermgr = config.db.user_manager
-    >>> user_1 = usermgr.create_user('[email protected]', 'Anne Person')
+    >>> from mailman.interfaces.usermanager import IUserManager
+    >>> from zope.component import getUtility
+    >>> user_manager = getUtility(IUserManager)
+    >>> user_1 = user_manager.create_user('[email protected]', 'Anne Person')
     >>> print user_1.real_name
     Anne Person
     >>> sorted(address.address for address in user_1.addresses)
@@ -99,7 +101,7 @@
 We can add Ben as a moderator of the list, by creating a different member role
 for him.
 
-    >>> user_2 = usermgr.create_user('[email protected]', 'Ben Person')
+    >>> user_2 = user_manager.create_user('[email protected]', 'Ben Person')
     >>> print user_2.real_name
     Ben Person
     >>> address_2 = list(user_2.addresses)[0]
@@ -136,7 +138,8 @@
 preference, then the user's preference, then the list's preference.  Start
 without any member preference to see the system defaults.
 
-    >>> user_3 = usermgr.create_user('[email protected]', 'Claire Person')
+    >>> user_3 = user_manager.create_user(
+    ...     '[email protected]', 'Claire Person')
     >>> print user_3.real_name
     Claire Person
     >>> address_3 = list(user_3.addresses)[0]

=== modified file 'src/mailman/docs/registration.txt'
--- src/mailman/docs/registration.txt	2009-07-19 02:31:45 +0000
+++ src/mailman/docs/registration.txt	2009-08-26 14:51:52 +0000
@@ -91,10 +91,12 @@
 
 There should be no records in the user manager for this address yet.
 
-    >>> usermgr = config.db.user_manager
-    >>> print usermgr.get_user('[email protected]')
+    >>> from mailman.interfaces.usermanager import IUserManager
+    >>> from zope.component import getUtility
+    >>> user_manager = getUtility(IUserManager)
+    >>> print user_manager.get_user('[email protected]')
     None
-    >>> print usermgr.get_address('[email protected]')
+    >>> print user_manager.get_address('[email protected]')
     None
 
 But this address is waiting for confirmation.
@@ -185,10 +187,10 @@
 Now, there is an IAddress in the database matching the address, as well as an
 IUser linked to this address.  The IAddress is verified.
 
-    >>> found_address = usermgr.get_address('[email protected]')
+    >>> found_address = user_manager.get_address('[email protected]')
     >>> found_address
     <Address: Anne Person <[email protected]> [verified] at ...>
-    >>> found_user = usermgr.get_user('[email protected]')
+    >>> found_user = user_manager.get_user('[email protected]')
     >>> found_user
     <User "Anne Person" at ...>
     >>> found_user.controls(found_address.address)
@@ -222,19 +224,19 @@
 and the address is not yet validated, then no user is created until the
 confirmation step is completed.
 
-    >>> usermgr.create_address('[email protected]')
+    >>> user_manager.create_address('[email protected]')
     <Address: [email protected] [not verified] at ...>
     >>> token = registrar.register('[email protected]', 'Claire Person')
-    >>> print usermgr.get_user('[email protected]')
+    >>> print user_manager.get_user('[email protected]')
     None
     >>> filebase = switchboard.files[0]
     >>> qmsg, qdata = switchboard.dequeue(filebase)
     >>> switchboard.finish(filebase)
     >>> registrar.confirm(token)
     True
-    >>> usermgr.get_user('[email protected]')
+    >>> user_manager.get_user('[email protected]')
     <User "Claire Person" at ...>
-    >>> usermgr.get_address('[email protected]')
+    >>> user_manager.get_address('[email protected]')
     <Address: [email protected] [verified] at ...>
 
 Even if the address being registered has already been verified, the
@@ -257,9 +259,9 @@
     >>> registrar.discard(token)
     >>> print pendingdb.confirm(token)
     None
-    >>> print usermgr.get_address('[email protected]')
+    >>> print user_manager.get_address('[email protected]')
     None
-    >>> print usermgr.get_user('[email protected]')
+    >>> print user_manager.get_user('[email protected]')
     None
 
 
@@ -270,10 +272,11 @@
 different except that the new address will still need to be verified before it
 can be used.
 
-    >>> dperson = usermgr.create_user('[email protected]', 'Dave Person')
+    >>> dperson = user_manager.create_user(
+    ...     '[email protected]', 'Dave Person')
     >>> dperson
     <User "Dave Person" at ...>
-    >>> address = usermgr.get_address('[email protected]')
+    >>> address = user_manager.get_address('[email protected]')
     >>> address.verified_on = datetime.now()
 
     >>> from operator import attrgetter
@@ -287,7 +290,7 @@
     >>> switchboard.finish(filebase)
     >>> registrar.confirm(token)
     True
-    >>> user = usermgr.get_user('[email protected]')
+    >>> user = user_manager.get_user('[email protected]')
     >>> user is dperson
     True
     >>> user

=== modified file 'src/mailman/docs/requests.txt'
--- src/mailman/docs/requests.txt	2009-07-19 02:31:45 +0000
+++ src/mailman/docs/requests.txt	2009-08-26 14:51:52 +0000
@@ -681,7 +681,12 @@
     <Language [en] English (USA)>
     >>> print member.delivery_mode
     DeliveryMode.regular
-    >>> user = config.db.user_manager.get_user(member.address.address)
+
+    >>> from mailman.interfaces.usermanager import IUserManager
+    >>> from zope.component import getUtility
+    >>> user_manager = getUtility(IUserManager)
+
+    >>> user = user_manager.get_user(member.address.address)
     >>> print user.real_name
     Frank Person
     >>> print user.password
@@ -697,14 +702,16 @@
 
     >>> mlist.admin_immed_notify = False
     >>> from mailman.interfaces.member import MemberRole
-    >>> user_1 = config.db.user_manager.create_user('[email protected]')
+    >>> user_1 = user_manager.create_user('[email protected]')
     >>> address_1 = list(user_1.addresses)[0]
     >>> address_1.subscribe(mlist, MemberRole.member)
     <Member: [email protected] on [email protected] as MemberRole.member>
-    >>> user_2 = config.db.user_manager.create_user('[email protected]')
+
+    >>> user_2 = user_manager.create_user('[email protected]')
     >>> address_2 = list(user_2.addresses)[0]
     >>> address_2.subscribe(mlist, MemberRole.member)
     <Member: [email protected] on [email protected] as MemberRole.member>
+
     >>> id_5 = moderator.hold_unsubscription(mlist, '[email protected]')
     >>> requests.get_request(id_5) is not None
     True

=== modified file 'src/mailman/docs/usermanager.txt'
--- src/mailman/docs/usermanager.txt	2009-07-19 02:31:45 +0000
+++ src/mailman/docs/usermanager.txt	2009-08-26 14:51:52 +0000
@@ -8,10 +8,8 @@
 config object.
 
     >>> from mailman.interfaces.usermanager import IUserManager
-    >>> from zope.interface.verify import verifyObject
-    >>> usermgr = config.db.user_manager
-    >>> verifyObject(IUserManager, usermgr)
-    True
+    >>> from zope.component import getUtility
+    >>> user_manager = getUtility(IUserManager)
 
 
 Creating users
@@ -23,9 +21,11 @@
 have a password.
 
     >>> from mailman.interfaces.user import IUser
-    >>> user = usermgr.create_user()
+    >>> from zope.interface.verify import verifyObject
+    >>> user = user_manager.create_user()
     >>> verifyObject(IUser, user)
     True
+
     >>> sorted(address.address for address in user.addresses)
     []
     >>> user.real_name
@@ -41,51 +41,51 @@
 A user can be assigned a real name.
 
     >>> user.real_name = 'Anne Person'
-    >>> sorted(user.real_name for user in usermgr.users)
+    >>> sorted(user.real_name for user in user_manager.users)
     [u'Anne Person']
 
 A user can be assigned a password.
 
     >>> user.password = 'secret'
-    >>> sorted(user.password for user in usermgr.users)
+    >>> sorted(user.password for user in user_manager.users)
     [u'secret']
 
 You can also create a user with an address to start out with.
 
-    >>> user_2 = usermgr.create_user('[email protected]')
+    >>> user_2 = user_manager.create_user('[email protected]')
     >>> verifyObject(IUser, user_2)
     True
     >>> sorted(address.address for address in user_2.addresses)
     [u'[email protected]']
-    >>> sorted(user.real_name for user in usermgr.users)
+    >>> sorted(user.real_name for user in user_manager.users)
     [u'', u'Anne Person']
 
 As above, you can assign a real name to such users.
 
     >>> user_2.real_name = 'Ben Person'
-    >>> sorted(user.real_name for user in usermgr.users)
+    >>> sorted(user.real_name for user in user_manager.users)
     [u'Anne Person', u'Ben Person']
 
 You can also create a user with just a real name.
 
-    >>> user_3 = usermgr.create_user(real_name='Claire Person')
+    >>> user_3 = user_manager.create_user(real_name='Claire Person')
     >>> verifyObject(IUser, user_3)
     True
     >>> sorted(address.address for address in user.addresses)
     []
-    >>> sorted(user.real_name for user in usermgr.users)
+    >>> sorted(user.real_name for user in user_manager.users)
     [u'Anne Person', u'Ben Person', u'Claire Person']
 
 Finally, you can create a user with both an address and a real name.
 
-    >>> user_4 = usermgr.create_user('[email protected]', 'Dan Person')
+    >>> user_4 = user_manager.create_user('[email protected]', 'Dan Person')
     >>> verifyObject(IUser, user_3)
     True
     >>> sorted(address.address for address in user_4.addresses)
     [u'[email protected]']
     >>> sorted(address.real_name for address in user_4.addresses)
     [u'Dan Person']
-    >>> sorted(user.real_name for user in usermgr.users)
+    >>> sorted(user.real_name for user in user_manager.users)
     [u'Anne Person', u'Ben Person', u'Claire Person', u'Dan Person']
 
 
@@ -95,8 +95,8 @@
 You delete users by going through the user manager.  The deleted user is no
 longer available through the user manager iterator.
 
-    >>> usermgr.delete_user(user)
-    >>> sorted(user.real_name for user in usermgr.users)
+    >>> user_manager.delete_user(user)
+    >>> sorted(user.real_name for user in user_manager.users)
     [u'Ben Person', u'Claire Person', u'Dan Person']
 
 
@@ -109,7 +109,7 @@
 object.
 
     >>> address = list(user_4.addresses)[0]
-    >>> found_user = usermgr.get_user(address.address)
+    >>> found_user = user_manager.get_user(address.address)
     >>> found_user
     <User "Dan Person" at ...>
     >>> found_user is user_4
@@ -118,8 +118,8 @@
 If the address is not in the user database or does not have a user associated
 with it, you will get None back.
 
-    >>> print usermgr.get_user('[email protected]')
+    >>> print user_manager.get_user('[email protected]')
     None
     >>> user_4.unlink(address)
-    >>> print usermgr.get_user(address.address)
+    >>> print user_manager.get_user(address.address)
     None

=== modified file 'src/mailman/docs/users.txt'
--- src/mailman/docs/users.txt	2009-07-19 02:31:45 +0000
+++ src/mailman/docs/users.txt	2009-08-26 14:51:52 +0000
@@ -6,9 +6,11 @@
 password.  Optionally a user may have some preferences and a set of addresses
 they control.  A user also knows which mailing lists they are subscribed to.
 
-See usermanager.txt for examples of how to create, delete, and find users.
+See `usermanager.txt`_ for examples of how to create, delete, and find users.
 
-    >>> usermgr = config.db.user_manager
+    >>> from mailman.interfaces.usermanager import IUserManager
+    >>> from zope.component import getUtility
+    >>> user_manager = getUtility(IUserManager)
 
 
 User data
@@ -16,21 +18,21 @@
 
 Users may have a real name and a password.
 
-    >>> user_1 = usermgr.create_user()
+    >>> user_1 = user_manager.create_user()
     >>> user_1.password = 'my password'
     >>> user_1.real_name = 'Zoe Person'
-    >>> sorted(user.real_name for user in usermgr.users)
+    >>> sorted(user.real_name for user in user_manager.users)
     [u'Zoe Person']
-    >>> sorted(user.password for user in usermgr.users)
+    >>> sorted(user.password for user in user_manager.users)
     [u'my password']
 
 The password and real name can be changed at any time.
 
     >>> user_1.real_name = 'Zoe X. Person'
     >>> user_1.password = 'another password'
-    >>> sorted(user.real_name for user in usermgr.users)
+    >>> sorted(user.real_name for user in user_manager.users)
     [u'Zoe X. Person']
-    >>> sorted(user.password for user in usermgr.users)
+    >>> sorted(user.password for user in user_manager.users)
     [u'another password']
 
 
@@ -55,7 +57,7 @@
 
 You can also create the address separately and then link it to the user.
 
-    >>> address_1 = usermgr.create_address('[email protected]')
+    >>> address_1 = user_manager.create_address('[email protected]')
     >>> user_1.link(address_1)
     >>> sorted(address.address for address in user_1.addresses)
     [u'[email protected]', u'[email protected]', u'[email protected]']
@@ -64,7 +66,7 @@
 
 But don't try to link an address to more than one user.
 
-    >>> another_user = usermgr.create_user()
+    >>> another_user = user_manager.create_user()
     >>> another_user.link(address_1)
     Traceback (most recent call last):
     ...
@@ -80,13 +82,13 @@
 Given a text email address, the user manager can find the user that controls
 that address.
 
-    >>> usermgr.get_user('[email protected]') is user_1
-    True
-    >>> usermgr.get_user('[email protected]') is user_1
-    True
-    >>> usermgr.get_user('[email protected]') is user_1
-    True
-    >>> print usermgr.get_user('[email protected]')
+    >>> user_manager.get_user('[email protected]') is user_1
+    True
+    >>> user_manager.get_user('[email protected]') is user_1
+    True
+    >>> user_manager.get_user('[email protected]') is user_1
+    True
+    >>> print user_manager.get_user('[email protected]')
     None
 
 Addresses can also be unlinked from a user.
@@ -94,7 +96,7 @@
     >>> user_1.unlink(address_1)
     >>> user_1.controls('[email protected]')
     False
-    >>> print usermgr.get_user('[email protected]')
+    >>> print user_manager.get_user('[email protected]')
     None
 
 But don't try to unlink the address from a user it's not linked to.
@@ -159,9 +161,9 @@
     >>> user_1.link(address_1)
     >>> sorted(address.address for address in user_1.addresses)
     [u'[email protected]', u'[email protected]', u'[email protected]']
-    >>> com = usermgr.get_address('[email protected]')
-    >>> org = usermgr.get_address('[email protected]')
-    >>> net = usermgr.get_address('[email protected]')
+    >>> com = user_manager.get_address('[email protected]')
+    >>> org = user_manager.get_address('[email protected]')
+    >>> net = user_manager.get_address('[email protected]')
 
     >>> from mailman.app.lifecycle import create_list
     >>> mlist_1 = create_list('[email protected]')
@@ -197,3 +199,10 @@
     [email protected] [email protected] MemberRole.moderator
     [email protected] [email protected] MemberRole.member
     [email protected] [email protected] MemberRole.owner
+
+
+Cross references
+================
+
+.. _`usermanager.txt`: usermanager.html
+

=== modified file 'src/mailman/interfaces/database.py'
--- src/mailman/interfaces/database.py	2009-08-26 06:27:37 +0000
+++ src/mailman/interfaces/database.py	2009-08-26 14:51:52 +0000
@@ -84,9 +84,6 @@
     def abort():
         """Abort the current transaction."""
 
-    user_manager = Attribute(
-        """The IUserManager instance provided by the database layer.""")
-
     message_store = Attribute(
         """The IMessageStore instance provided by the database layer.""")
 

=== modified file 'src/mailman/pipeline/decorate.py'
--- src/mailman/pipeline/decorate.py	2009-02-13 01:36:21 +0000
+++ src/mailman/pipeline/decorate.py	2009-08-26 14:51:52 +0000
@@ -29,12 +29,14 @@
 import logging
 
 from email.MIMEText import MIMEText
+from zope.component import getUtility
 from zope.interface import implements
 
 from mailman.config import config
 from mailman.email.message import Message
 from mailman.i18n import _
 from mailman.interfaces.handler import IHandler
+from mailman.interfaces.usermanager import IUserManager
 from mailman.utilities.string import expand
 
 
@@ -54,7 +56,7 @@
         assert len(recips) == 1, (
             'The number of intended recipients must be exactly 1')
         recipient = recips[0].lower()
-        user = config.db.user_manager.get_user(recipient)
+        user = getUtility(IUserManager).get_user(recipient)
         member = mlist.members.get_member(recipient)
         d['user_address'] = recipient
         if user is not None and member is not None:

=== modified file 'src/mailman/pipeline/docs/acknowledge.txt'
--- src/mailman/pipeline/docs/acknowledge.txt	2009-08-21 22:07:35 +0000
+++ src/mailman/pipeline/docs/acknowledge.txt	2009-08-26 14:51:52 +0000
@@ -21,9 +21,12 @@
 
 Subscribe a user to the mailing list.
 
-    >>> usermgr = config.db.user_manager
+    >>> from mailman.interfaces.usermanager import IUserManager
+    >>> from zope.component import getUtility
+    >>> user_manager = getUtility(IUserManager)
+
     >>> from mailman.interfaces.member import MemberRole
-    >>> user_1 = usermgr.create_user('[email protected]')
+    >>> user_1 = user_manager.create_user('[email protected]')
     >>> address_1 = list(user_1.addresses)[0]
     >>> address_1.subscribe(mlist, MemberRole.member)
     <Member: [email protected] on [email protected] as MemberRole.member>
@@ -74,7 +77,7 @@
 that sender is a member but not one who has requested acknowledgments, none
 will be sent.
 
-    >>> user_2 = usermgr.create_user('[email protected]')
+    >>> user_2 = user_manager.create_user('[email protected]')
     >>> address_2 = list(user_2.addresses)[0]
     >>> address_2.subscribe(mlist, MemberRole.member)
     <Member: [email protected] on [email protected] as MemberRole.member>

=== modified file 'src/mailman/pipeline/docs/avoid-duplicates.txt'
--- src/mailman/pipeline/docs/avoid-duplicates.txt	2009-08-21 22:07:35 +0000
+++ src/mailman/pipeline/docs/avoid-duplicates.txt	2009-08-26 14:51:52 +0000
@@ -12,11 +12,14 @@
 
 Create some members we're going to use.
 
+    >>> from mailman.interfaces.usermanager import IUserManager
+    >>> from zope.component import getUtility
+    >>> user_manager = getUtility(IUserManager)
+
+    >>> address_a = user_manager.create_address('[email protected]')
+    >>> address_b = user_manager.create_address('[email protected]')
+
     >>> from mailman.interfaces.member import MemberRole
-    >>> address_a = config.db.user_manager.create_address(
-    ...     '[email protected]')
-    >>> address_b = config.db.user_manager.create_address(
-    ...     '[email protected]')
     >>> member_a = address_a.subscribe(mlist, MemberRole.member)
     >>> member_b = address_b.subscribe(mlist, MemberRole.member)
     >>> # This is the message metadata dictionary as it would be produced by

=== modified file 'src/mailman/pipeline/docs/calc-recips.txt'
--- src/mailman/pipeline/docs/calc-recips.txt	2009-08-21 22:07:35 +0000
+++ src/mailman/pipeline/docs/calc-recips.txt	2009-08-26 14:51:52 +0000
@@ -12,13 +12,16 @@
 Recipients are calculate from the list members, so add a bunch of members to
 start out with.  First, create a bunch of addresses...
 
-    >>> usermgr = config.db.user_manager
-    >>> address_a = usermgr.create_address('[email protected]')
-    >>> address_b = usermgr.create_address('[email protected]')
-    >>> address_c = usermgr.create_address('[email protected]')
-    >>> address_d = usermgr.create_address('[email protected]')
-    >>> address_e = usermgr.create_address('[email protected]')
-    >>> address_f = usermgr.create_address('[email protected]')
+    >>> from mailman.interfaces.usermanager import IUserManager
+    >>> from zope.component import getUtility
+    >>> user_manager = getUtility(IUserManager)
+
+    >>> address_a = user_manager.create_address('[email protected]')
+    >>> address_b = user_manager.create_address('[email protected]')
+    >>> address_c = user_manager.create_address('[email protected]')
+    >>> address_d = user_manager.create_address('[email protected]')
+    >>> address_e = user_manager.create_address('[email protected]')
+    >>> address_f = user_manager.create_address('[email protected]')
 
 ...then subscribe these addresses to the mailing list as members...
 

=== modified file 'src/mailman/pipeline/docs/file-recips.txt'
--- src/mailman/pipeline/docs/file-recips.txt	2009-08-21 22:07:35 +0000
+++ src/mailman/pipeline/docs/file-recips.txt	2009-08-26 14:51:52 +0000
@@ -81,9 +81,12 @@
 their address is in the include file, the sender's address is /not/ included
 in the recipients list.
 
+    >>> from mailman.interfaces.usermanager import IUserManager
+    >>> from zope.component import getUtility
+    >>> address_1 = getUtility(IUserManager).create_address(
+    ...     '[email protected]')
+
     >>> from mailman.interfaces.member import MemberRole
-    >>> address_1 = config.db.user_manager.create_address(
-    ...     '[email protected]')
     >>> address_1.subscribe(mlist, MemberRole.member)
     <Member: [email protected] on [email protected] as MemberRole.member>
 

=== modified file 'src/mailman/pipeline/replybot.py'
--- src/mailman/pipeline/replybot.py	2009-02-20 03:23:42 +0000
+++ src/mailman/pipeline/replybot.py	2009-08-26 14:51:52 +0000
@@ -28,6 +28,7 @@
 import logging
 import datetime
 
+from zope.component import getUtility
 from zope.interface import implements
 
 from mailman import Utils
@@ -37,6 +38,7 @@
 from mailman.interfaces.autorespond import (
     ALWAYS_REPLY, IAutoResponseSet, Response, ResponseAction)
 from mailman.interfaces.handler import IHandler
+from mailman.interfaces.usermanager import IUserManager
 from mailman.utilities.datetime import today
 from mailman.utilities.string import expand
 
@@ -91,9 +93,10 @@
         # = 0 means always automatically respond, as does an "X-Ack: yes"
         # header (useful for debugging).
         response_set = IAutoResponseSet(mlist)
-        address = config.db.user_manager.get_address(msg.sender)
+        user_manager = getUtility(IUserManager)
+        address = user_manager.get_address(msg.sender)
         if address is None:
-            address = config.db.user_manager.create_address(msg.sender)
+            address = user_manager.create_address(msg.sender)
         grace_period = mlist.autoresponse_grace_period
         if grace_period > ALWAYS_REPLY and ack <> 'yes':
             last = response_set.last_response(address, response_type)

=== modified file 'src/mailman/queue/docs/digester.txt'
--- src/mailman/queue/docs/digester.txt	2009-07-19 02:31:45 +0000
+++ src/mailman/queue/docs/digester.txt	2009-08-26 14:51:52 +0000
@@ -476,9 +476,13 @@
     >>> len(get_queue_messages('virgin'))
     0
 
+    >>> from mailman.interfaces.usermanager import IUserManager
+    >>> from zope.component import getUtility
+    >>> user_manager = getUtility(IUserManager)
+
     >>> from mailman.interfaces.member import DeliveryMode, MemberRole
     >>> def subscribe(email, mode):
-    ...     address = config.db.user_manager.create_address(email)
+    ...     address = user_manager.create_address(email)
     ...     member = address.subscribe(mlist, MemberRole.member)
     ...     member.preferences.delivery_mode = mode
     ...     return member

=== modified file 'src/mailman/rules/docs/moderation.txt'
--- src/mailman/rules/docs/moderation.txt	2009-08-21 22:07:35 +0000
+++ src/mailman/rules/docs/moderation.txt	2009-08-26 14:51:52 +0000
@@ -27,8 +27,11 @@
 
 Let's add the message author as a non-moderated member.
 
-    >>> user = config.db.user_manager.create_user(
+    >>> from mailman.interfaces.usermanager import IUserManager
+    >>> from zope.component import getUtility
+    >>> user = getUtility(IUserManager).create_user(
     ...     '[email protected]', 'Anne Person')
+
     >>> address = list(user.addresses)[0]
     >>> from mailman.interfaces.member import MemberRole
     >>> member = address.subscribe(mlist, MemberRole.member)

_______________________________________________
Mailman-checkins mailing list
[email protected]
Unsubscribe: 
http://mail.python.org/mailman/options/mailman-checkins/archive%40jab.org

Reply via email to