Skip to content
Snippets Groups Projects
manage_users.py 4.44 KiB
Newer Older
from mailmanclient import Client
import argparse
try:
    import json
except ImportError:
    import simplejson as json

def get_ml_fqdns(ml_fqdns):
    """Get the entire email list members"""
    for ml_fqdn in ml_fqdns:
        members += ml_fqdn+"\n"
    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')
Conrad Holmberg's avatar
Conrad Holmberg committed
    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 = []
    for mlist in client.lists:
        ml_fqdns.append(mlist.fqdn_listname)
    # lists members of a list
        # used to store members
        ml_fqdn = args.list_fqdn
        if ml_fqdn in ml_fqdns:

            member_list = client.get_list(ml_fqdn)
            data = {}
            members_hash['members'] = []

            # Get json data from each member
            for member in member_list.members:
                 # members_hash['user']=member.user
                #members_hash['address']= member.address
                #members_hash['list_id']= member.list_id
                members_hash['members'].append({
                    'list_fqdn': args.list_fqdn,
                    'email': member.email,
                    'display_name': member.user.display_name
                #held_data[held.request_id] = held.rest_data
                #members_hash['preferences']= member.preferences
                #print "S###########################"
                #print json.dumps(member.rest_data, indent=2)
                #print json.dumps(member.user.rest_data, indent=2)
                #print json.dumps(members_hash, indent=2)
                #print "E###########################"
                #print("debug"+str(member))
            print json.dumps(members_hash, indent=2)
        # Get all the members
        elif ml_fqdn.upper() == 'ALL':
            members_hash={}
            print "I couldn't get this to finsih!!!."
            members_hash = {}
            # grabs users per page
            page = client.get_user_page(count=100, page=1)

            # loop through each page
            while len(page) > 0:
                for member in page:
                    print json.dumps(member.addresses.rest_data, indent=2)
                    time.sleep(.100) #pause between pages
                page = page.next

            # # Get json data from each member
            # for member in client.members:
            #     members_hash['email']= member.email
            #     print json.dumps(members_hash, indent=2)
            sys.exit('Error: Email list"'+ml_fqdn+'" does not exist in domain '+args.core_uri +
                     "\nSee List\n"+get_ml_fqdns(ml_fqdns))
        #Open user list dump file
        print "restoring file."
        if args.restore == '-':
            json_file = sys.stdin
            user_file = args.restore
            with open(user_file) as json_file:
                data = json.load(json_file)
            #print json.dumps(datam, indent=2)
            for member in data['members']:
                #print(str(member))
                print('list_fqdn:'+ member['list_fqdn'])
                #print('display_name'+ member['display_name'])
                #print('email'+ member['email'])
                #new_member_list.append(member_email)
        if args.restore != '-':
            json_file.close()