summaryrefslogtreecommitdiff
path: root/src/mailman/interfaces/subscriptions.py
diff options
context:
space:
mode:
authorBarry Warsaw2016-01-07 18:33:01 -0500
committerBarry Warsaw2016-01-07 18:33:01 -0500
commit433ce1580295a410ebe83b731e54672c13e04e15 (patch)
tree2474a30749d66260cad28945210ee778f32436ce /src/mailman/interfaces/subscriptions.py
parent4f549f8655857aef64ed8c92c3339c32f5e942db (diff)
downloadmailman-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.py45
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()`."""