------------------------------------------------------------
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