diff options
| author | bwarsaw | 2001-12-27 06:36:54 +0000 |
|---|---|---|
| committer | bwarsaw | 2001-12-27 06:36:54 +0000 |
| commit | 825134c6d898e53f6715f31440d8384f11241e20 (patch) | |
| tree | f8363ea2da4f87193bb535a9aa82a7567970e049 | |
| parent | 0e49ac18e667c23d4055d103b2bc8e27e6725a86 (diff) | |
| download | mailman-825134c6d898e53f6715f31440d8384f11241e20.tar.gz mailman-825134c6d898e53f6715f31440d8384f11241e20.tar.zst mailman-825134c6d898e53f6715f31440d8384f11241e20.zip | |
getDeliveryStatusMembers(): New interface method which returns a list
of members whose delivery status is in the given argument. This can
be used to e.g. find all the members who have been disabled due to
excessive bounces.
removeMember(): Use setBounceInfo(..., None) to clear a just-removed
member's bounce information. MailList.ClearBounceInfo() is gone.
setDeliveryStatus(): When setting the member's status to ENABLED,
clear all the bounce information by calling setBounceInfo(..., None).
This also deletes the member's entry in self.__mlist.delivery_status.
setBounceInfo(): Fixed typo, also when info is None, delete the
member's entry in the delivery_status dictionary.
| -rw-r--r-- | Mailman/MemberAdaptor.py | 16 | ||||
| -rw-r--r-- | Mailman/OldStyleMemberships.py | 20 |
2 files changed, 27 insertions, 9 deletions
diff --git a/Mailman/MemberAdaptor.py b/Mailman/MemberAdaptor.py index af38b10c3..b2778f635 100644 --- a/Mailman/MemberAdaptor.py +++ b/Mailman/MemberAdaptor.py @@ -168,7 +168,8 @@ class MemberAdaptor: primary reason for this to happen is that we've copied their delivery status from a legacy version which didn't keep track of disable reasons - BYCHOICE - The user explicitly disable deliveries + BYUSER - The user explicitly disable deliveries + BYADMIN - The list administrator explicitly disabled deliveries BYBOUNCE - The system disabled deliveries due to bouncing If member is not a member of the list, raise NotAMemberError. @@ -184,6 +185,16 @@ class MemberAdaptor: """ raise NotImplemented + def getDeliveryStatusMembers(self, + status=(UNKNOWN, BYUSER, BYADMIN, BYBOUNCE)): + """Return the list of members with a matching delivery status. + + Optional `status' if given, must be a sequence containing one or more + of ENABLED, UNKNOWN, BYCHOICE, or BYBOUNCE. The members whose + delivery status is in this sequence are returned. + """ + raise NotImplemented + def getBounceInfo(self, member): """Return the member's bounce information. @@ -304,7 +315,8 @@ class MemberAdaptor: primary reason for this to happen is that we've copied their delivery status from a legacy version which didn't keep track of disable reasons - BYCHOICE - The user explicitly disable deliveries + BYUSER - The user explicitly disable deliveries + BYADMIN - The list administrator explicitly disabled deliveries BYBOUNCE - The system disabled deliveries due to bouncing This method also records the time (in seconds since epoch) at which diff --git a/Mailman/OldStyleMemberships.py b/Mailman/OldStyleMemberships.py index cd8fc5742..d396781ec 100644 --- a/Mailman/OldStyleMemberships.py +++ b/Mailman/OldStyleMemberships.py @@ -148,6 +148,13 @@ class OldStyleMemberships(MemberAdaptor.MemberAdaptor): # second item will be ignored. (MemberAdaptor.ENABLED, 0))[1] + def getDeliveryStatusMembers(self, status=(MemberAdaptor.UNKNOWN, + MemberAdaptor.BYUSER, + MemberAdaptor.BYADMIN, + MemberAdaptor.BYBOUNCE)): + return [member for member in self.getMembers() + if self.getDeliveryStatus(member) in status] + def getBounceInfo(self, member): self.__assertIsMember(member) return self.__mlist.bounce_info.get(member.lower()) @@ -211,9 +218,8 @@ class OldStyleMemberships(MemberAdaptor.MemberAdaptor): dict = getattr(self.__mlist, attr) if dict.has_key(memberkey): del dict[memberkey] - # A few other structures held elsewhere. BAW: these should be - # integrated with membership management - self.__mlist.ClearBounceInfo(memberkey) + # Clear any bounce information associated with this member + self.__mlist.setBounceInfo(memberkey, None) def changeMemberAddress(self, member, newaddress, nodelete=0): assert self.__mlist.Locked() @@ -323,8 +329,7 @@ class OldStyleMemberships(MemberAdaptor.MemberAdaptor): self.__assertIsMember(member) member = member.lower() if status == MemberAdaptor.ENABLED: - if self.__mlist.delivery_status.has_key(member): - del self.__mlist.delivery_status[member] + self.setBounceInfo(member, None) # Otherwise, nothing to do else: self.__mlist.delivery_status[member] = (status, time.time()) @@ -332,9 +337,10 @@ class OldStyleMemberships(MemberAdaptor.MemberAdaptor): def setBounceInfo(self, member, info): assert self.__mlist.Locked() self.__assertIsMember(member) - if status is None: + if info is None: if self.__mlist.bounce_info.has_key(member): del self.__mlist.bounce_info[member] - # Otherwise, nothing to do + if self.__mlist.delivery_status.has_key(member): + del self.__mlist.delivery_status[member] else: self.__mlist.bounce_info[member] = info |
