diff options
| author | Barry Warsaw | 2011-04-16 12:55:48 -0400 |
|---|---|---|
| committer | Barry Warsaw | 2011-04-16 12:55:48 -0400 |
| commit | 3db11b8bcb7194b5672426ad057f965734134a59 (patch) | |
| tree | f92386d56455d1325633eefce652b111598cda13 | |
| parent | c894152772595a1acbd6dc4c1ac0e033888ea923 (diff) | |
| download | mailman-3db11b8bcb7194b5672426ad057f965734134a59.tar.gz mailman-3db11b8bcb7194b5672426ad057f965734134a59.tar.zst mailman-3db11b8bcb7194b5672426ad057f965734134a59.zip | |
| -rw-r--r-- | src/mailman/app/lifecycle.py | 8 | ||||
| -rw-r--r-- | src/mailman/app/membership.py | 5 | ||||
| -rw-r--r-- | src/mailman/app/registrar.py | 2 | ||||
| -rw-r--r-- | src/mailman/interfaces/address.py | 10 | ||||
| -rw-r--r-- | src/mailman/interfaces/mailinglist.py | 16 | ||||
| -rw-r--r-- | src/mailman/model/address.py | 23 | ||||
| -rw-r--r-- | src/mailman/model/docs/addresses.txt | 41 | ||||
| -rw-r--r-- | src/mailman/model/docs/mailinglist.txt | 101 | ||||
| -rw-r--r-- | src/mailman/model/docs/membership.txt | 12 | ||||
| -rw-r--r-- | src/mailman/model/docs/requests.txt | 4 | ||||
| -rw-r--r-- | src/mailman/model/docs/users.txt | 8 | ||||
| -rw-r--r-- | src/mailman/model/mailinglist.py | 22 | ||||
| -rw-r--r-- | src/mailman/mta/docs/decorating.txt | 6 | ||||
| -rw-r--r-- | src/mailman/pipeline/docs/acknowledge.txt | 4 | ||||
| -rw-r--r-- | src/mailman/pipeline/docs/avoid-duplicates.txt | 4 | ||||
| -rw-r--r-- | src/mailman/pipeline/docs/calc-recips.txt | 12 | ||||
| -rw-r--r-- | src/mailman/pipeline/docs/file-recips.txt | 2 | ||||
| -rw-r--r-- | src/mailman/queue/docs/digester.txt | 2 | ||||
| -rw-r--r-- | src/mailman/rules/moderation.py | 2 | ||||
| -rw-r--r-- | src/mailman/testing/helpers.py | 6 |
20 files changed, 140 insertions, 150 deletions
diff --git a/src/mailman/app/lifecycle.py b/src/mailman/app/lifecycle.py index b30266f3b..689fab484 100644 --- a/src/mailman/app/lifecycle.py +++ b/src/mailman/app/lifecycle.py @@ -80,11 +80,11 @@ def create_list(fqdn_listname, owners=None): # owners of the mailing list. user_manager = getUtility(IUserManager) for owner_address in owners: - addr = user_manager.get_address(owner_address) - if addr is None: + address = user_manager.get_address(owner_address) + if address is None: user = user_manager.create_user(owner_address) - addr = list(user.addresses)[0] - addr.subscribe(mlist, MemberRole.owner) + address = list(user.addresses)[0] + mlist.subscribe(address, MemberRole.owner) return mlist diff --git a/src/mailman/app/membership.py b/src/mailman/app/membership.py index aaf7f05df..be2382a7f 100644 --- a/src/mailman/app/membership.py +++ b/src/mailman/app/membership.py @@ -99,7 +99,7 @@ def add_member(mlist, email, realname, password, delivery_mode, language): # scheme is recorded in the hashed password string. user.password = encrypt_password(password) user.preferences.preferred_language = language - member = address.subscribe(mlist, MemberRole.member) + member = mlist.subscribe(address, MemberRole.member) member.preferences.delivery_mode = delivery_mode else: # The user exists and is linked to the address. @@ -110,8 +110,7 @@ def add_member(mlist, email, realname, password, delivery_mode, language): raise AssertionError( 'User should have had linked address: {0}'.format(address)) # Create the member and set the appropriate preferences. - # pylint: disable-msg=W0631 - member = address.subscribe(mlist, MemberRole.member) + member = mlist.subscribe(address, MemberRole.member) member.preferences.preferred_language = language member.preferences.delivery_mode = delivery_mode return member diff --git a/src/mailman/app/registrar.py b/src/mailman/app/registrar.py index ec899237a..f6f2e8679 100644 --- a/src/mailman/app/registrar.py +++ b/src/mailman/app/registrar.py @@ -138,7 +138,7 @@ class Registrar: if list_name is not None: mlist = getUtility(IListManager).get(list_name) if mlist: - address.subscribe(mlist, MemberRole.member) + mlist.subscribe(address, MemberRole.member) return True def discard(self, token): diff --git a/src/mailman/interfaces/address.py b/src/mailman/interfaces/address.py index c051c9b0c..be5443437 100644 --- a/src/mailman/interfaces/address.py +++ b/src/mailman/interfaces/address.py @@ -99,16 +99,6 @@ class IAddress(Interface): None if the email address has not yet been validated. The specific method of validation is not defined here.""") - def subscribe(mailing_list, role): - """Subscribe the address to the given mailing list with the given role. - - :param mailing_list: The IMailingList being subscribed to. - :param role: A MemberRole enum value. - :return: The IMember representing this subscription. - :raises AlreadySubscribedError: If the address is already subscribed - to the mailing list with the given role. - """ - preferences = Attribute( """This address's preferences.""") diff --git a/src/mailman/interfaces/mailinglist.py b/src/mailman/interfaces/mailinglist.py index d8c0ebb26..32f21a792 100644 --- a/src/mailman/interfaces/mailinglist.py +++ b/src/mailman/interfaces/mailinglist.py @@ -182,7 +182,7 @@ class IMailingList(Interface): def confirm_address(cookie=''): """The address used for various forms of email confirmation.""" - # Rosters. + # Rosters and subscriptions. owners = Attribute( """The IUser owners of this mailing list. @@ -232,6 +232,20 @@ class IMailingList(Interface): :rtype: Roster """ + def subscribe(address, role): + """Subscribe the given address to the mailing list. + + :param address: The address to subscribe. + :type address: `IAddress` + :param role: The role being subscribed to (e.g. a member, owner, or + moderator of a mailing list. + :type role: `MemberRole` + :return: The member object representing the subscription. + :rtype: `IMember` + :raises AlreadySubscribedError: If the address is already subscribed + to the mailing list with the given role. + """ + # Posting history. last_post_at = Attribute( diff --git a/src/mailman/model/address.py b/src/mailman/model/address.py index 6fa310c48..92f7f8986 100644 --- a/src/mailman/model/address.py +++ b/src/mailman/model/address.py @@ -26,14 +26,11 @@ __all__ = [ from email.utils import formataddr -from storm.locals import DateTime, Int, Reference, Store, Unicode +from storm.locals import DateTime, Int, Reference, Unicode from zope.interface import implements from mailman.database.model import Model -from mailman.interfaces.member import AlreadySubscribedError from mailman.interfaces.address import IAddress -from mailman.model.member import Member -from mailman.model.preferences import Preferences @@ -73,24 +70,6 @@ class Address(Model): return '<Address: {0} [{1}] key: {2} at {3:#x}>'.format( address_str, verified, self.email, id(self)) - def subscribe(self, mailing_list, role): - # This member has no preferences by default. - store = Store.of(self) - member = store.find( - Member, - Member.role == role, - Member.mailing_list == mailing_list.fqdn_listname, - Member.address == self).one() - if member: - raise AlreadySubscribedError( - mailing_list.fqdn_listname, self.email, role) - member = Member(role=role, - mailing_list=mailing_list.fqdn_listname, - address=self) - member.preferences = Preferences() - store.add(member) - return member - @property def original_email(self): return (self.email if self._original is None else self._original) diff --git a/src/mailman/model/docs/addresses.txt b/src/mailman/model/docs/addresses.txt index fdcc993b5..ffbb897ab 100644 --- a/src/mailman/model/docs/addresses.txt +++ b/src/mailman/model/docs/addresses.txt @@ -153,47 +153,6 @@ And of course, you can also set the validation date. 2007-05-13 22:54:01 -Subscriptions -============= - -Addresses get subscribed to mailing lists, not users. When the address is -subscribed, a role is specified. -:: - - >>> address_5 = user_manager.create_address( - ... 'eperson@example.com', 'Elly Person') - >>> mlist = create_list('test@example.com') - - >>> from mailman.interfaces.member import MemberRole - >>> address_5.subscribe(mlist, MemberRole.owner) - <Member: Elly Person <eperson@example.com> on - test@example.com as MemberRole.owner> - >>> address_5.subscribe(mlist, MemberRole.member) - <Member: Elly Person <eperson@example.com> on - test@example.com as MemberRole.member> - -Now Elly is both an owner and a member of the mailing list. - - >>> def memberkey(member): - ... return member.mailing_list, member.address.email, int(member.role) - >>> dump_list(mlist.owners.members, key=memberkey) - <Member: Elly Person <eperson@example.com> on - test@example.com as MemberRole.owner> - >>> dump_list(mlist.moderators.members, key=memberkey) - *Empty* - >>> dump_list(mlist.administrators.members, key=memberkey) - <Member: Elly Person <eperson@example.com> on - test@example.com as MemberRole.owner> - >>> dump_list(mlist.members.members, key=memberkey) - <Member: Elly Person <eperson@example.com> on - test@example.com as MemberRole.member> - >>> dump_list(mlist.regular_members.members, key=memberkey) - <Member: Elly Person <eperson@example.com> on - test@example.com as MemberRole.member> - >>> dump_list(mlist.digest_members.members, key=memberkey) - *Empty* - - Case-preserved addresses ======================== diff --git a/src/mailman/model/docs/mailinglist.txt b/src/mailman/model/docs/mailinglist.txt index 33d681762..cc95c077c 100644 --- a/src/mailman/model/docs/mailinglist.txt +++ b/src/mailman/model/docs/mailinglist.txt @@ -9,16 +9,16 @@ the system by its posting address, i.e. the email address you would send a message to in order to post a message to the mailing list. This must be fully qualified. - >>> alpha = create_list('alpha@example.com') - >>> print alpha.fqdn_listname - alpha@example.com + >>> mlist = create_list('aardvark@example.com') + >>> print mlist.fqdn_listname + aardvark@example.com The mailing list also has convenient attributes for accessing the list's short name (i.e. local part) and host name. - >>> print alpha.list_name - alpha - >>> print alpha.host_name + >>> print mlist.list_name + aardvark + >>> print mlist.host_name example.com @@ -29,46 +29,75 @@ Mailing list membership is represented by `rosters`. Each mailing list has several rosters of members, representing the subscribers to the mailing list, the owners, the moderators, and so on. The rosters are defined by a membership role. + +Addresses can be explicitly subscribed to a mailing list. By default, a +subscription puts the address in the `member` role, meaning that address will +receive a copy of any message sent to the mailing list. :: - >>> from mailman.interfaces.member import MemberRole - >>> from mailman.testing.helpers import subscribe + >>> from mailman.interfaces.usermanager import IUserManager + >>> from zope.component import getUtility + >>> user_manager = getUtility(IUserManager) - >>> subscribe(alpha, 'Anne') - >>> subscribe(alpha, 'Bart') - >>> subscribe(alpha, 'Cris') - >>> subscribe(alpha, 'Anne', MemberRole.owner) - >>> subscribe(alpha, 'Dave', MemberRole.owner) - >>> subscribe(alpha, 'Elle', MemberRole.moderator) + >>> aperson = user_manager.create_address('aperson@example.com') + >>> bperson = user_manager.create_address('bperson@example.com') + >>> mlist.subscribe(aperson) + <Member: aperson@example.com on aardvark@example.com as MemberRole.member> + >>> mlist.subscribe(bperson) + <Member: bperson@example.com on aardvark@example.com as MemberRole.member> -We can retrieve a roster directly... +Both addresses appear on the roster of members. - >>> for member in alpha.members.members: - ... print member.address - Anne Person <aperson@example.com> - Bart Person <bperson@example.com> - Cris Person <cperson@example.com> + >>> for member in mlist.members.members: + ... print member + <Member: aperson@example.com on aardvark@example.com as MemberRole.member> + <Member: bperson@example.com on aardvark@example.com as MemberRole.member> -...or programmatically. +By explicitly specifying the role of the subscription, an address can be added +to the owner and moderator rosters. - >>> roster = alpha.get_roster(MemberRole.member) - >>> for member in roster.members: - ... print member.address - Anne Person <aperson@example.com> - Bart Person <bperson@example.com> - Cris Person <cperson@example.com> + >>> from mailman.interfaces.member import MemberRole + >>> mlist.subscribe(aperson, MemberRole.owner) + <Member: aperson@example.com on aardvark@example.com as MemberRole.owner> + >>> cperson = user_manager.create_address('cperson@example.com') + >>> mlist.subscribe(cperson, MemberRole.owner) + <Member: cperson@example.com on aardvark@example.com as MemberRole.owner> + >>> mlist.subscribe(cperson, MemberRole.moderator) + <Member: cperson@example.com on aardvark@example.com + as MemberRole.moderator> + +A Person is now both a member and an owner of the mailing list. C Person is +an owner and a moderator. +:: -This includes the roster of owners... + >>> for member in mlist.owners.members: + ... print member + <Member: aperson@example.com on aardvark@example.com as MemberRole.owner> + <Member: cperson@example.com on aardvark@example.com as MemberRole.owner> - >>> roster = alpha.get_roster(MemberRole.owner) + >>> for member in mlist.moderators.members: + ... print member + <Member: cperson@example.com on aardvark@example.com + as MemberRole.moderator> + + +All rosters can also be accessed indirectly. +:: + + >>> roster = mlist.get_roster(MemberRole.member) >>> for member in roster.members: - ... print member.address - Anne Person <aperson@example.com> - Dave Person <dperson@example.com> + ... print member + <Member: aperson@example.com on aardvark@example.com as MemberRole.member> + <Member: bperson@example.com on aardvark@example.com as MemberRole.member> -...and moderators. + >>> roster = mlist.get_roster(MemberRole.owner) + >>> for member in roster.members: + ... print member + <Member: aperson@example.com on aardvark@example.com as MemberRole.owner> + <Member: cperson@example.com on aardvark@example.com as MemberRole.owner> - >>> roster = alpha.get_roster(MemberRole.moderator) + >>> roster = mlist.get_roster(MemberRole.moderator) >>> for member in roster.members: - ... print member.address - Elle Person <eperson@example.com> + ... print member + <Member: cperson@example.com on aardvark@example.com + as MemberRole.moderator> diff --git a/src/mailman/model/docs/membership.txt b/src/mailman/model/docs/membership.txt index 6f5b82622..8a3f0da16 100644 --- a/src/mailman/model/docs/membership.txt +++ b/src/mailman/model/docs/membership.txt @@ -51,7 +51,7 @@ her. >>> from mailman.interfaces.member import MemberRole >>> address_1 = list(user_1.addresses)[0] - >>> address_1.subscribe(mlist, MemberRole.owner) + >>> mlist.subscribe(address_1, MemberRole.owner) <Member: Anne Person <aperson@example.com> on test@example.com as MemberRole.owner> >>> dump_list(member.address for member in mlist.owners.members) @@ -73,7 +73,7 @@ Bart becomes a moderator of the list. >>> print user_2 <User "Bart Person" (...) at ...> >>> address_2 = list(user_2.addresses)[0] - >>> address_2.subscribe(mlist, MemberRole.moderator) + >>> mlist.subscribe(address_2, MemberRole.moderator) <Member: Bart Person <bperson@example.com> on test@example.com as MemberRole.moderator> >>> dump_list(member.address for member in mlist.moderators.members) @@ -102,7 +102,7 @@ role. >>> user_3 = user_manager.create_user( ... 'cperson@example.com', 'Cris Person') >>> address_3 = list(user_3.addresses)[0] - >>> member = address_3.subscribe(mlist, MemberRole.member) + >>> member = mlist.subscribe(address_3, MemberRole.member) >>> member <Member: Cris Person <cperson@example.com> on test@example.com as MemberRole.member> @@ -125,7 +125,7 @@ It's easy to make the list administrators members of the mailing list too. >>> members = [] >>> for address in mlist.administrators.addresses: - ... member = address.subscribe(mlist, MemberRole.member) + ... member = mlist.subscribe(address, MemberRole.member) ... members.append(member) >>> dump_list(members, key=attrgetter('address.email')) <Member: Anne Person <aperson@example.com> on @@ -157,7 +157,7 @@ role. >>> user_6 = user_manager.create_user('fperson@example.com', 'Fred Person') >>> address_6 = list(user_6.addresses)[0] - >>> member_6 = address_6.subscribe(mlist, MemberRole.nonmember) + >>> member_6 = mlist.subscribe(address_6, MemberRole.nonmember) >>> member_6 <Member: Fred Person <fperson@example.com> on test@example.com as MemberRole.nonmember> @@ -233,7 +233,7 @@ Double subscriptions It is an error to subscribe someone to a list with the same role twice. - >>> address_1.subscribe(mlist, MemberRole.owner) + >>> mlist.subscribe(address_1, MemberRole.owner) Traceback (most recent call last): ... AlreadySubscribedError: aperson@example.com is already a MemberRole.owner diff --git a/src/mailman/model/docs/requests.txt b/src/mailman/model/docs/requests.txt index 2ff173422..bebb61259 100644 --- a/src/mailman/model/docs/requests.txt +++ b/src/mailman/model/docs/requests.txt @@ -716,12 +716,12 @@ notification. >>> from mailman.interfaces.member import MemberRole >>> user_1 = user_manager.create_user('gperson@example.com') >>> address_1 = list(user_1.addresses)[0] - >>> address_1.subscribe(mlist, MemberRole.member) + >>> mlist.subscribe(address_1, MemberRole.member) <Member: gperson@example.com on alist@example.com as MemberRole.member> >>> user_2 = user_manager.create_user('hperson@example.com') >>> address_2 = list(user_2.addresses)[0] - >>> address_2.subscribe(mlist, MemberRole.member) + >>> mlist.subscribe(address_2, MemberRole.member) <Member: hperson@example.com on alist@example.com as MemberRole.member> >>> id_5 = moderator.hold_unsubscription(mlist, 'gperson@example.com') diff --git a/src/mailman/model/docs/users.txt b/src/mailman/model/docs/users.txt index c8244c506..f15d5453b 100644 --- a/src/mailman/model/docs/users.txt +++ b/src/mailman/model/docs/users.txt @@ -207,14 +207,14 @@ membership role. >>> mlist_3 = create_list('xtest_3@example.com') >>> from mailman.interfaces.member import MemberRole - >>> com.subscribe(mlist_1, MemberRole.member) + >>> mlist_1.subscribe(com, MemberRole.member) <Member: Zoe Person <zperson@example.com> on xtest_1@example.com as MemberRole.member> - >>> org.subscribe(mlist_2, MemberRole.member) + >>> mlist_2.subscribe(org, MemberRole.member) <Member: zperson@example.org on xtest_2@example.com as MemberRole.member> - >>> org.subscribe(mlist_2, MemberRole.owner) + >>> mlist_2.subscribe(org, MemberRole.owner) <Member: zperson@example.org on xtest_2@example.com as MemberRole.owner> - >>> net.subscribe(mlist_3, MemberRole.moderator) + >>> mlist_3.subscribe(net, MemberRole.moderator) <Member: zperson@example.net on xtest_3@example.com as MemberRole.moderator> diff --git a/src/mailman/model/mailinglist.py b/src/mailman/model/mailinglist.py index 488b6da3d..895ff1f0e 100644 --- a/src/mailman/model/mailinglist.py +++ b/src/mailman/model/mailinglist.py @@ -42,11 +42,13 @@ from mailman.interfaces.domain import IDomainManager from mailman.interfaces.languages import ILanguageManager from mailman.interfaces.mailinglist import ( IAcceptableAlias, IAcceptableAliasSet, IMailingList, Personalization) -from mailman.interfaces.member import MemberRole +from mailman.interfaces.member import AlreadySubscribedError, MemberRole from mailman.interfaces.mime import FilterType from mailman.model import roster from mailman.model.digests import OneLastDigest +from mailman.model.member import Member from mailman.model.mime import ContentFilter +from mailman.model.preferences import Preferences from mailman.utilities.filesystem import makedirs from mailman.utilities.string import expand @@ -441,6 +443,24 @@ class MailingList(Model): raise TypeError( 'Undefined MemberRole: {0}'.format(role)) + def subscribe(self, address, role=MemberRole.member): + """See `IMailingList`.""" + store = Store.of(self) + member = store.find( + Member, + Member.role == role, + Member.mailing_list == self.fqdn_listname, + Member.address == address).one() + if member: + raise AlreadySubscribedError( + self.fqdn_listname, address.email, role) + member = Member(role=role, + mailing_list=self.fqdn_listname, + address=address) + member.preferences = Preferences() + store.add(member) + return member + class AcceptableAlias(Model): diff --git a/src/mailman/mta/docs/decorating.txt b/src/mailman/mta/docs/decorating.txt index 0bc9649c8..05196eb78 100644 --- a/src/mailman/mta/docs/decorating.txt +++ b/src/mailman/mta/docs/decorating.txt @@ -69,17 +69,17 @@ list. >>> anne = user_manager.create_user('aperson@example.com', 'Anne Person') >>> anne.password = b'AAA' - >>> list(anne.addresses)[0].subscribe(mlist, MemberRole.member) + >>> mlist.subscribe(list(anne.addresses)[0], MemberRole.member) <Member: Anne Person <aperson@example.com> ... >>> bart = user_manager.create_user('bperson@example.com', 'Bart Person') >>> bart.password = b'BBB' - >>> list(bart.addresses)[0].subscribe(mlist, MemberRole.member) + >>> mlist.subscribe(list(bart.addresses)[0], MemberRole.member) <Member: Bart Person <bperson@example.com> ... >>> cris = user_manager.create_user('cperson@example.com', 'Cris Person') >>> cris.password = b'CCC' - >>> list(cris.addresses)[0].subscribe(mlist, MemberRole.member) + >>> mlist.subscribe(list(cris.addresses)[0], MemberRole.member) <Member: Cris Person <cperson@example.com> ... The decorations happen when the message is delivered. diff --git a/src/mailman/pipeline/docs/acknowledge.txt b/src/mailman/pipeline/docs/acknowledge.txt index 5e4240626..b2ce11b7f 100644 --- a/src/mailman/pipeline/docs/acknowledge.txt +++ b/src/mailman/pipeline/docs/acknowledge.txt @@ -29,7 +29,7 @@ Subscribe a user to the mailing list. >>> from mailman.interfaces.member import MemberRole >>> user_1 = user_manager.create_user('aperson@example.com') >>> address_1 = list(user_1.addresses)[0] - >>> address_1.subscribe(mlist, MemberRole.member) + >>> mlist.subscribe(address_1, MemberRole.member) <Member: aperson@example.com on _xtest@example.com as MemberRole.member> @@ -82,7 +82,7 @@ will be sent. >>> user_2 = user_manager.create_user('dperson@example.com') >>> address_2 = list(user_2.addresses)[0] - >>> address_2.subscribe(mlist, MemberRole.member) + >>> mlist.subscribe(address_2, MemberRole.member) <Member: dperson@example.com on _xtest@example.com as MemberRole.member> >>> handler.process(mlist, msg, diff --git a/src/mailman/pipeline/docs/avoid-duplicates.txt b/src/mailman/pipeline/docs/avoid-duplicates.txt index bd753f9e9..1e46793c2 100644 --- a/src/mailman/pipeline/docs/avoid-duplicates.txt +++ b/src/mailman/pipeline/docs/avoid-duplicates.txt @@ -19,8 +19,8 @@ Create some members we're going to use. >>> address_b = user_manager.create_address('bperson@example.com') >>> from mailman.interfaces.member import MemberRole - >>> member_a = address_a.subscribe(mlist, MemberRole.member) - >>> member_b = address_b.subscribe(mlist, MemberRole.member) + >>> member_a = mlist.subscribe(address_a, MemberRole.member) + >>> member_b = mlist.subscribe(address_b, MemberRole.member) >>> # This is the message metadata dictionary as it would be produced by >>> # the CalcRecips handler. >>> recips = dict( diff --git a/src/mailman/pipeline/docs/calc-recips.txt b/src/mailman/pipeline/docs/calc-recips.txt index efa1bc9c7..6dca85816 100644 --- a/src/mailman/pipeline/docs/calc-recips.txt +++ b/src/mailman/pipeline/docs/calc-recips.txt @@ -26,12 +26,12 @@ start out with. First, create a bunch of addresses... ...then subscribe these addresses to the mailing list as members... >>> from mailman.interfaces.member import MemberRole - >>> member_a = address_a.subscribe(mlist, MemberRole.member) - >>> member_b = address_b.subscribe(mlist, MemberRole.member) - >>> member_c = address_c.subscribe(mlist, MemberRole.member) - >>> member_d = address_d.subscribe(mlist, MemberRole.member) - >>> member_e = address_e.subscribe(mlist, MemberRole.member) - >>> member_f = address_f.subscribe(mlist, MemberRole.member) + >>> member_a = mlist.subscribe(address_a, MemberRole.member) + >>> member_b = mlist.subscribe(address_b, MemberRole.member) + >>> member_c = mlist.subscribe(address_c, MemberRole.member) + >>> member_d = mlist.subscribe(address_d, MemberRole.member) + >>> member_e = mlist.subscribe(address_e, MemberRole.member) + >>> member_f = mlist.subscribe(address_f, MemberRole.member) ...then make some of the members digest members. diff --git a/src/mailman/pipeline/docs/file-recips.txt b/src/mailman/pipeline/docs/file-recips.txt index c994f820e..7d157ccc5 100644 --- a/src/mailman/pipeline/docs/file-recips.txt +++ b/src/mailman/pipeline/docs/file-recips.txt @@ -93,7 +93,7 @@ in the recipients list. ... 'cperson@example.com') >>> from mailman.interfaces.member import MemberRole - >>> address_1.subscribe(mlist, MemberRole.member) + >>> mlist.subscribe(address_1, MemberRole.member) <Member: cperson@example.com on _xtest@example.com as MemberRole.member> >>> msg = message_from_string("""\ diff --git a/src/mailman/queue/docs/digester.txt b/src/mailman/queue/docs/digester.txt index 56aaf17c5..285b2072a 100644 --- a/src/mailman/queue/docs/digester.txt +++ b/src/mailman/queue/docs/digester.txt @@ -496,7 +496,7 @@ digests, or MIME digests. >>> from mailman.interfaces.member import DeliveryMode, MemberRole >>> def subscribe(email, mode): ... address = user_manager.create_address(email) - ... member = address.subscribe(mlist, MemberRole.member) + ... member = mlist.subscribe(address, MemberRole.member) ... member.preferences.delivery_mode = mode ... return member diff --git a/src/mailman/rules/moderation.py b/src/mailman/rules/moderation.py index 733edd70c..5377b14a2 100644 --- a/src/mailman/rules/moderation.py +++ b/src/mailman/rules/moderation.py @@ -86,7 +86,7 @@ class NonmemberModeration: address = user_manager.get_address(sender) assert address is not None, ( 'Posting address is not registered: {0}'.format(sender)) - address.subscribe(mlist, MemberRole.nonmember) + mlist.subscribe(address, MemberRole.nonmember) # Do nonmember moderation check. for sender in msg.senders: nonmember = mlist.nonmembers.get_member(sender) diff --git a/src/mailman/testing/helpers.py b/src/mailman/testing/helpers.py index 2ba778813..bd52d5d6e 100644 --- a/src/mailman/testing/helpers.py +++ b/src/mailman/testing/helpers.py @@ -272,12 +272,12 @@ def subscribe(mlist, first_name, role=MemberRole.member): if address is None: person = user_manager.create_user(email, full_name) preferred_address = list(person.addresses)[0] - preferred_address.subscribe(mlist, role) + mlist.subscribe(preferred_address, role) else: - address.subscribe(mlist, role) + mlist.subscribe(address, role) else: preferred_address = list(person.addresses)[0] - preferred_address.subscribe(mlist, role) + mlist.subscribe(preferred_address, role) config.db.commit() |
