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
This commit is contained in:
parent
744a39e2ca
commit
b667f47b4f
|
@ -12,6 +12,7 @@ sys.path.append(settings.MAILMAN_LIB_DIR)
|
||||||
|
|
||||||
from Mailman import Utils
|
from Mailman import Utils
|
||||||
from Mailman import MailList
|
from Mailman import MailList
|
||||||
|
from Mailman import MemberAdaptor
|
||||||
|
|
||||||
from ietf.mailinglists.models import List, Subscribed
|
from ietf.mailinglists.models import List, Subscribed
|
||||||
|
|
||||||
|
@ -28,10 +29,19 @@ def import_mailman_listinfo(verbosity=0):
|
||||||
list, created = List.objects.get_or_create(name=mlist.real_name, description=mlist.description, advertised=mlist.advertised)
|
list, created = List.objects.get_or_create(name=mlist.real_name, description=mlist.description, advertised=mlist.advertised)
|
||||||
# The following calls return lowercased addresses
|
# The following calls return lowercased addresses
|
||||||
members = mlist.getRegularMemberKeys() + mlist.getDigestMemberKeys()
|
members = mlist.getRegularMemberKeys() + mlist.getDigestMemberKeys()
|
||||||
known = [ s.email for s in Subscribed.objects.filter(lists__name=name) ]
|
members = [ m for m in members if mlist.getDeliveryStatus(m) == MemberAdaptor.ENABLED ]
|
||||||
|
known = Subscribed.objects.filter(lists__name=name).values_list('email', flat=True)
|
||||||
|
for addr in known:
|
||||||
|
if not addr in members:
|
||||||
|
note(" Removing subscription: %s" % (addr))
|
||||||
|
old = Subscribed.objects.get(email=addr)
|
||||||
|
old.lists.remove(list)
|
||||||
|
if old.lists.count() == 0:
|
||||||
|
note(" Removing address with no subscriptions: %s" % (addr))
|
||||||
|
old.delete()
|
||||||
for addr in members:
|
for addr in members:
|
||||||
if not addr in known:
|
if not addr in known:
|
||||||
note(" Adding subscribed: %s" % (addr))
|
note(" Adding subscription: %s" % (addr))
|
||||||
new, created = Subscribed.objects.get_or_create(email=addr)
|
new, created = Subscribed.objects.get_or_create(email=addr)
|
||||||
new.lists.add(list)
|
new.lists.add(list)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue