diff options
Diffstat (limited to 'src/mailman/interfaces/member.py')
| -rw-r--r-- | src/mailman/interfaces/member.py | 31 |
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.""" |
