Skip to content
Snippets Groups Projects
Commit 45e2b855 authored by Conrad Holmberg's avatar Conrad Holmberg
Browse files

Created mamange_members.py that subscribes a source email list to a target.

parent 25e3df1c
No related branches found
No related tags found
No related merge requests found
#!/bin/env python
from mailmanclient import Client
# This program dumps all the user deails
# from a given email list into json outputself.
# The output json can then be taken as input and
import os
import sys
import time
import argparse
try:
import json
except ImportError:
import simplejson as json
def get_ml_fqdns(client):
ml_fqdns = []
for mlist in client.lists:
ml_fqdns.append(mlist.fqdn_listname)
return ml_fqdns
def dump_fqdn_members(client,ml_fqdn ):
"""Prints the members of a email list"""
# Get members from email list
member_list = client.get_list(ml_fqdn)
members_hash = {}
members_hash['members'] = []
# Get json data from each member
for member in member_list.members:
prefs = member.preferences # obtain member prrivilges
members_hash['members'].append({
'list_fqdn': args.list_fqdn,
'email': member.email,
'display_name': member.user.display_name,
#'password': member.user.password,
'preferences': {'delivery_mode': prefs['delivery_mode'],
'acknowledge_posts': prefs['acknowledge_posts'],
'delivery_status': prefs['delivery_status'],
'hide_address': prefs['hide_address'],
'preferred_language': prefs['preferred_language'],
'receive_list_copy': prefs['receive_list_copy'],
'receive_own_postings': prefs['receive_own_postings']
}
})
#print json.dumps(member.user.rest_data, indent=2)
print json.dumps(members_hash, indent=2)
# end dump_fqdn_memberss
def restore_members( input_file ):
"""Creates Code to Restore Members of a source/target email list."""
tgt_list = None
if input_file == '-':
json_file = sys.stdin
else:
user_file = input_file
with open(user_file) as json_file:
data = json.load(json_file)
#print json.dumps(datam, indent=2)
for src_member in data['members']:
if (tgt_list is None):
tgt_list = client.get_list(member['list_fqdn'])
# Get members from the current email list
tgt_members = [str(m.email) for m in ml.members]
# check on display_name is null or not
if src_member not in tgt_members:
if( src_member['display_name'] is not None):
display_name = src_member['display_name']
else:
display_name = 'display_name=None'
# subscribe member to list
test_one.subscribe(src_member['email'],
display_name,
pre_verified=True)
# set the preferences
tgt_prefs = tgt_list.get_member(src_member['email']).preferences
tgt_prefs['delivery_mode'] = src_member['delivery_mode']
tgt_prefs['acknowledge_posts'] = src_member['acknowledge_posts']
tgt_prefs['delivery_status'] = src_member['delivery_status']
tgt_prefs['hide_address'] = src_member['hide_address']
tgt_prefs['preferred_language'] = src_member['preferred_language']
tgt_prefs['receive_list_copy'] = src_member['receive_list_copy']
tgt_prefs['receive_own_postings'] = src_member['receive_own_postings']
tgt_prefs.save()
#print('email: '+ src_member['email'])
#print('password: '+ member['password'])
#new_member_list.append(member_email)
if input_file != '-':
json_file.close()
#end restore_members
if __name__ == '__main__':
parser = argparse.ArgumentParser(description="Manage Users in Mailman Email Lists.")
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')
# Default Email list
LIST_NAME = 'apachesvn@lists.med.stanford.edu'
# user invoked variables
parser.add_argument('-l','--list-fqdn')
parser.add_argument('-r','--restore')
# Add arguments for env variables
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)
# Parse out the command line arguments
args = parser.parse_args()
# Set the mailman client
client = Client(args.core_uri, args.core_user, args.core_password)
# append the mail lists to an array from client
ml_fqdns = get_ml_fqdns(client)
# lists members of a list
if args.list_fqdn:
# used to store members
ml_fqdn = args.list_fqdn
# get members from list
if ml_fqdn in ml_fqdns:
dump_fqdn_members(client,ml_fqdn)
else:
sys.exit('Error: Email list"'+ml_fqdn+'" does not exist in domain '+args.core_uri +
"\nSee List\n"+str(ml_fqdns))
#end if
elif args.restore:
restore_members( args.restore)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment