Newer
Older
from mailmanclient import Client
import os
import sys

Mr. Dmitry Makovey
committed
import argparse

Mr. Dmitry Makovey
committed
if __name__ == '__main__':
parser = argparse.ArgumentParser(description="Sync member list")

Mr. Dmitry Makovey
committed
CORE_URI = os.environ.get('MAILMAN_CORE_URI',
'http://mailman-core:8001/3.1')
CORE_USER = os.environ.get('MAILMAN_REST_USER', 'restadmin')
CORE_PASS = os.environ.get('MAILMAN_REST_PASSWORD', 'restpass')
parser.add_argument('list_fqdn')

Mr. Dmitry Makovey
committed
parser.add_argument('--members-file', dest='list', default=None)
parser.add_argument('--core-uri', dest='core_uri',
default=CORE_URI)
parser.add_argument('--rest-user', dest='core_user',
default=CORE_USER)
parser.add_argument('--rest-password', dest='core_password',
default=CORE_PASS)
args = parser.parse_args()

Mr. Dmitry Makovey
committed
client = Client(args.core_uri, args.core_user, args.core_password)

Mr. Dmitry Makovey
committed
ml_fqdn = args.list_fqdn

Mr. Dmitry Makovey
committed
ml = client.get_list(ml_fqdn)

Mr. Dmitry Makovey
committed
current_members = [str(m.address) for m in ml.members]
new_member_list = []
if args.list:
if args.list == '-':
list_file = sys.stdin
else:
list_file = open(args.list, 'r')
else:
list_file = sys.stdin
for l in list_file:
member_email = l.strip()
print("Received {}".format(member_email))
new_member_list.append(member_email)
if args.list and args.list != '-':
list_file.close()
for member_email in current_members:
if member_email not in new_member_list:
print("Intend to unsubscribe '{0}'".format(member_email))
try:
ml.unsubscribe(member_email)
except:
print "Can't unsubscribe '{0}'".format(member_email)

Mr. Dmitry Makovey
committed
for member_email in new_member_list:
if member_email not in current_members:
print("Intend to subscribe '{0}'".format(member_email))
try:
ml.subscribe(member_email, pre_verified=True, pre_confirmed=True,
pre_approved=True)
except:
print "Can't subscribe '{0}'".format(member_email)