Skip to content

Commit b667f47

Browse files
committed
Let the import_mailman_listinfo management command not only add, but also remove subcriptions to match mailman's info. Pay attention only to addresses with delivery enabled.
- Legacy-Id: 11394
1 parent 744a39e commit b667f47

1 file changed

Lines changed: 13 additions & 3 deletions

File tree

ietf/mailinglists/management/commands/import_mailman_listinfo.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
from Mailman import Utils
1414
from Mailman import MailList
15+
from Mailman import MemberAdaptor
1516

1617
from ietf.mailinglists.models import List, Subscribed
1718

@@ -28,13 +29,22 @@ def note(msg):
2829
list, created = List.objects.get_or_create(name=mlist.real_name, description=mlist.description, advertised=mlist.advertised)
2930
# The following calls return lowercased addresses
3031
members = mlist.getRegularMemberKeys() + mlist.getDigestMemberKeys()
31-
known = [ s.email for s in Subscribed.objects.filter(lists__name=name) ]
32+
members = [ m for m in members if mlist.getDeliveryStatus(m) == MemberAdaptor.ENABLED ]
33+
known = Subscribed.objects.filter(lists__name=name).values_list('email', flat=True)
34+
for addr in known:
35+
if not addr in members:
36+
note(" Removing subscription: %s" % (addr))
37+
old = Subscribed.objects.get(email=addr)
38+
old.lists.remove(list)
39+
if old.lists.count() == 0:
40+
note(" Removing address with no subscriptions: %s" % (addr))
41+
old.delete()
3242
for addr in members:
3343
if not addr in known:
34-
note(" Adding subscribed: %s" % (addr))
44+
note(" Adding subscription: %s" % (addr))
3545
new, created = Subscribed.objects.get_or_create(email=addr)
3646
new.lists.add(list)
37-
47+
3848

3949
class Command(BaseCommand):
4050
"""

0 commit comments

Comments
 (0)