Skip to content
Snippets Groups Projects
manage_list.py 7.98 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_list2(args):
Mr. Dmitry Makovey's avatar
Mr. Dmitry Makovey committed
    client, ml = get_ml(args)
    held_data = []
Mr. Dmitry Makovey's avatar
Mr. Dmitry Makovey committed
    for held in ml.held:
        if args.fields:
            data_hash = {}
            for f in args.fields:
                data_hash[f] = held.rest_data[f]
            held_data.append(data_hash)
            held_data.append(held.rest_data)
                del held_data[-1]['msg']
Mr. Dmitry Makovey's avatar
Mr. Dmitry Makovey committed
    print json.dumps(held_data, indent=2)


def held_list(args):
    client, ml = get_ml(args)
    held_data = []
    page = ml.get_held_page(count=100)
    while len(page) > 0:
        for held in page:
            if args.fields:
                data_hash = {}
                for f in args.fields:
                    data_hash[f] = held.rest_data[f]
                held_data.append(data_hash)
            else:
                held_data.append(held.rest_data)
                if not args.detailed:
                    del held_data[-1]['msg']
        page = page.next

    print json.dumps(held_data, indent=2)


Mr. Dmitry Makovey's avatar
Mr. Dmitry Makovey committed
def held_approve(args):
    client, ml = get_ml(args)
    results = []
    for id in args.ids:
        held_msg = ml.get_held_message(id)
        results.append(held_msg.accept())
    print json.dumps(results, indent=2)
Mr. Dmitry Makovey's avatar
Mr. Dmitry Makovey committed


def held_reject(args):
    client, ml = get_ml(args)
    results = []
    for id in args.ids:
        held_msg = ml.get_held_message(id)
        results.append(held_msg.reject())
    print json.dumps(results, indent=2)
def held_discard(args):
    client, ml = get_ml(args)
    results = []
    for id in args.ids:
        held_msg = ml.get_held_message(id)
        results.append(held_msg.discard())
    print json.dumps(results, indent=2)


def held_delete(args):
    client, ml = get_ml(args)
    results = []
    for id in args.ids:
        held_msg = ml.get_held_message(id)
        results.append(held_msg.delete())
    print json.dumps(results, indent=2)


def held_defer(args):
    client, ml = get_ml(args)
    results = []
    for id in args.ids:
        held_msg = ml.get_held_message(id)
        results.append(held_msg.defer())
    print json.dumps(results, indent=2)


Mr. Dmitry Makovey's avatar
Mr. Dmitry Makovey committed
def requests_list(args):
    client, ml = get_ml(args)
    requests_data = []
    for request in ml.requests:
        requests_data.append(request)
Mr. Dmitry Makovey's avatar
Mr. Dmitry Makovey committed
    print json.dumps(requests_data, indent=2)


def requests_approve(args):
    client, ml = get_ml(args)
    requests = ml.requests
    for request in requests:
        if request['token'] in args.tokens:
            response.append(ml.moderate_request(request['token'], 'accept'))
    print json.dumps(response, indent=2)
Mr. Dmitry Makovey's avatar
Mr. Dmitry Makovey committed


def requests_reject(args):
    client, ml = get_ml(args)
    requests = ml.requests
    for request in requests:
        if request['token'] in args.tokens:
            response.append(ml.moderate_request(request['token'], 'reject'))
    print json.dumps(response, indent=2)
def requests_discard(args):
    client, ml = get_ml(args)
    requests = ml.requests
    response = []
    for request in requests:
        if request['token'] in args.tokens:
            response.append(ml.moderate_request(request['token'], 'discard'))
    print json.dumps(response, indent=2)


def requests_defer(args):
    client, ml = get_ml(args)
    requests = ml.requests
    response = []
    for request in requests:
        if request['token'] in args.tokens:
            response.append(ml.moderate_request(request['token'], 'defer'))
    print json.dumps(response, indent=2)


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

    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_list_parser.add_argument('--detailed', action='store_true',
                                  default=False
                                  )
    held_list_parser.add_argument('--field', dest='fields',
                                  action='append', default=None)
Mr. Dmitry Makovey's avatar
Mr. Dmitry Makovey committed

    held_approve_parser = held_subparsers.add_parser('approve')
    held_approve_parser.set_defaults(func=held_approve)
    held_approve_parser.add_argument('--id', dest='ids', action='append')
Mr. Dmitry Makovey's avatar
Mr. Dmitry Makovey committed
    held_reject_parser = held_subparsers.add_parser('reject')
    held_reject_parser.set_defaults(func=held_reject)
    held_reject_parser.add_argument('--id', dest='ids', action='append')
    held_discard_parser = held_subparsers.add_parser('discard')
    held_discard_parser.set_defaults(func=held_discard)
    held_discard_parser.add_argument('--id', dest='ids', action='append')
    held_delete_parser = held_subparsers.add_parser('delete')
    held_delete_parser.set_defaults(func=held_delete)
    held_delete_parser.add_argument('--id', dest='ids', action='append')
    held_defer_parser = held_subparsers.add_parser('defer')
    held_defer_parser.set_defaults(func=held_defer)
    held_defer_parser.add_argument('--id', dest='ids', action='append')
Mr. Dmitry Makovey's avatar
Mr. Dmitry Makovey committed

    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_approve_parser.add_argument('--token', dest='tokens', action='append')
Mr. Dmitry Makovey's avatar
Mr. Dmitry Makovey committed
    requests_reject_parser = requests_subparsers.add_parser('reject')
    requests_reject_parser.set_defaults(func=requests_reject)
    requests_reject_parser.add_argument('--token', dest='tokens', action='append')
    requests_discard_parser = requests_subparsers.add_parser('discard')
    requests_discard_parser.set_defaults(func=requests_discard)
    requests_discard_parser.add_argument('--token', dest='tokens', action='append')
    requests_defer_parser = requests_subparsers.add_parser('defer')
    requests_defer_parser.set_defaults(func=requests_defer)
    requests_defer_parser.add_argument('--token', dest='tokens', action='append')
Mr. Dmitry Makovey's avatar
Mr. Dmitry Makovey committed

    args = parser.parse_args()
    args.func(args)