Skip to content
Snippets Groups Projects
manage_list.py 3.63 KiB
Newer Older
Mr. Dmitry Makovey's avatar
Mr. Dmitry Makovey committed
#!/bin/env python
from mailmanclient import Client
import os
import sys
import argparse
try:
    import json
except ImportError:
    import simplejson as json


def get_client(args):
    """Helper function to get Client object based on args"""
    client = Client(args.core_uri, args.core_user, args.core_password)
    return client


def get_ml(args):
    """Helper function to get Mailing list and Client object based on args"""
    client = get_client(args)
    ml_fqdn = args.list_fqdn
    ml = client.get_list(ml_fqdn)
    return (client, ml)


def held_list(args):
    client, ml = get_ml(args)
    held_data = {}
    for held in ml.held:
        held_data[held.request_id] = held.rest_data
Mr. Dmitry Makovey's avatar
Mr. Dmitry Makovey committed
    print json.dumps(held_data, indent=2)


def held_approve(args):
    pass


def held_reject(args):
    pass


def requests_list(args):
    client, ml = get_ml(args)
    requests_data = {}
    for requests in ml.requests:
        requests_data[requests.request_id] = requests
    print json.dumps(requests_data, indent=2)


def requests_approve(args):
    pass


def requests_reject(args):
    pass


def dump(ml):
    print json.dumps(dict(ml.settings), indent=2)


def set_value(ml, setting, value):
    ml.settings[setting] = value
    ml.settings.save()


def update_settings(ml, updated_settings):
    print json.dumps(updated_settings, indent=2)
    for setting in updated_settings.keys():
        ml.settings[setting] = updated_settings[setting]
    ml.save()


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description="Manipulate mailing list settings")

    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')
    action_group = parser.add_mutually_exclusive_group()
    action_group.add_argument('--dump', action='store_true', default=False)
    action_group.add_argument(
        '--set', help='set single setting in a form: <setting_name>=<setting_value>')
    action_group.add_argument('--update', help='update settings with contents of the file provided')

    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)

    subparsers = parser.add_subparsers(help='manage held messages')
    held_parser = subparsers.add_parser('held')
    held_subparsers = held_parser.add_subparsers()
    held_list_parser = held_subparsers.add_parser('list')
    held_list_parser.set_defaults(func=held_list)

    held_approve_parser = held_subparsers.add_parser('approve')
    held_approve_parser.set_defaults(func=held_approve)
    held_reject_parser = held_subparsers.add_parser('reject')
    held_reject_parser.set_defaults(func=held_reject)

    requests_parser = subparsers.add_parser('requests')
    requests_subparsers = requests_parser.add_subparsers()
    requests_list_parser = requests_subparsers.add_parser('list')
    requests_list_parser.set_defaults(func=requests_list)

    requests_approve_parser = requests_subparsers.add_parser('approve')
    requests_approve_parser.set_defaults(func=requests_approve)
    requests_reject_parser = requests_subparsers.add_parser('reject')
    requests_reject_parser.set_defaults(func=requests_reject)

    args = parser.parse_args()

    client = Client(args.core_uri, args.core_user, args.core_password)

    ml_fqdn = args.list_fqdn

    ml = client.get_list(ml_fqdn)