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