summaryrefslogtreecommitdiff
path: root/src/mailman/interfaces/member.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/mailman/interfaces/member.py')
-rw-r--r--src/mailman/interfaces/member.py31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/mailman/interfaces/member.py b/src/mailman/interfaces/member.py
index 997338835..815bda2d4 100644
--- a/src/mailman/interfaces/member.py
+++ b/src/mailman/interfaces/member.py
@@ -26,10 +26,13 @@ __all__ = [
'DeliveryStatus',
'IMember',
'MemberRole',
+ 'MembershipChangeEvent',
'MembershipError',
'MembershipIsBannedError',
'MissingPreferredAddressError',
'NotAMemberError',
+ 'SubscriptionEvent',
+ 'UnsubscriptionEvent',
]
@@ -74,6 +77,34 @@ class MemberRole(Enum):
+class MembershipChangeEvent:
+ """Base class for subscription/unsubscription events."""
+
+ def __init__(self, mlist, member):
+ self.mlist = mlist
+ self.member = member
+
+
+class SubscriptionEvent(MembershipChangeEvent):
+ """Event which gets triggered when a user joins a mailing list."""
+
+ def __str__(self):
+ return '{0} joined {1}'.format(self.member.address, self.mlist.list_id)
+
+
+class UnsubscriptionEvent(MembershipChangeEvent):
+ """Event which gets triggered when a user leaves a mailing list.
+
+ One thing to keep in mind: because the IMember is deleted when the
+ unsubscription happens, this event actually gets triggered just before the
+ member is unsubscribed.
+ """
+
+ def __str__(self):
+ return '{0} left {1}'.format(self.member.address, self.mlist.list_id)
+
+
+
class MembershipError(MailmanError):
"""Base exception for all membership errors."""