diff options
| author | Barry Warsaw | 2016-01-07 18:33:01 -0500 |
|---|---|---|
| committer | Barry Warsaw | 2016-01-07 18:33:01 -0500 |
| commit | 433ce1580295a410ebe83b731e54672c13e04e15 (patch) | |
| tree | 2474a30749d66260cad28945210ee778f32436ce /src/mailman/interfaces/subscriptions.py | |
| parent | 4f549f8655857aef64ed8c92c3339c32f5e942db (diff) | |
| download | mailman-433ce1580295a410ebe83b731e54672c13e04e15.tar.gz mailman-433ce1580295a410ebe83b731e54672c13e04e15.tar.zst mailman-433ce1580295a410ebe83b731e54672c13e04e15.zip | |
Diffstat (limited to 'src/mailman/interfaces/subscriptions.py')
| -rw-r--r-- | src/mailman/interfaces/subscriptions.py | 45 |
1 files changed, 38 insertions, 7 deletions
diff --git a/src/mailman/interfaces/subscriptions.py b/src/mailman/interfaces/subscriptions.py index f9e0c44dd..d4626a1bc 100644 --- a/src/mailman/interfaces/subscriptions.py +++ b/src/mailman/interfaces/subscriptions.py @@ -22,13 +22,14 @@ __all__ = [ 'MissingUserError', 'RequestRecord', 'TokenOwner', + 'TooManyMembersError', ] from collections import namedtuple from enum import Enum from mailman.interfaces.errors import MailmanError -from mailman.interfaces.member import DeliveryMode +from mailman.interfaces.member import DeliveryMode, MembershipError from zope.interface import Interface @@ -37,13 +38,21 @@ class MissingUserError(MailmanError): """A an invalid user id was given.""" def __init__(self, user_id): - super(MissingUserError, self).__init__() + super().__init__() self.user_id = user_id def __str__(self): return self.user_id +class TooManyMembersError(MembershipError): + def __init__(self, subscriber, list_id, role): + super().__init__() + self.subscriber = subscriber + self.list_id = list_id + self.role = role + + _RequestRecord = namedtuple( 'RequestRecord', @@ -92,12 +101,13 @@ class ISubscriptionService(Interface): """ def find_members(subscriber=None, list_id=None, role=None): - """Search for and return a specific member. + """Search for members matching some criteria. - The members are sorted first by fully-qualified mailing list name, - then by subscribed email address, then by role. Because the user may - be a member of the list under multiple roles (e.g. as an owner and as - a digest member), the member can appear multiple times in this list. + The members are sorted first by list-id, then by subscribed + email address, then by role. Because the user may be a member + of the list under multiple roles (e.g. as an owner and as a + digest member), the member can appear multiple times in this + list. :param subscriber: The email address or user id of the user getting subscribed. @@ -111,6 +121,27 @@ class ISubscriptionService(Interface): :rtype: list of `IMember` """ + def find_member(subscriber=None, list_id=None, role=None): + """Search for a member matching some criteria. + + This is like find_members() but is guaranteed to return exactly + one member. + + :param subscriber: The email address or user id of the user getting + subscribed. + :type subscriber: string or int + :param list_id: The list id of the mailing list to search for the + subscriber's memberships on. + :type list_id: string + :param role: The member role. + :type role: `MemberRole` + :return: The member matching the given criteria or None if no + members match the criteria. + :rtype: `IMember` or None + :raises TooManyMembersError: when the given criteria matches + more than one membership. + """ + def __iter__(): """See `get_members()`.""" |
