#!/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: 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'] print json.dumps(held_data, indent=2) 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) 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 requests_list(args): client, ml = get_ml(args) requests_data = [] for request in ml.requests: requests_data.append(request) 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 = ml.moderate_request(request['token'], 'accept') print json.dumps(response, indent=2) def requests_reject(args): client, ml = get_ml(args) requests = ml.requests for request in requests: if request['token'] == args.token: response = ml.moderate_request(request['token'], 'reject') print json.dumps(response, indent=2) 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') 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) 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') 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') 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') 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') args = parser.parse_args() args.func(args)