Newer
Older
#!/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[held.request_id] = data_hash
else:
held_data[held.request_id] = held.rest_data
if not args.detailed:
del held_data[held.request_id]['msg']
print json.dumps(held_data, indent=2)
def held_approve(args):
client, ml = get_ml(args)
held_msg = ml.get_held_message(args.id)
held_msg.accept()
client, ml = get_ml(args)
held_msg = ml.get_held_message(args.id)
held_msg.reject()
def requests_list(args):
client, ml = get_ml(args)
requests_data = {}
for request in ml.requests:
requests_data[request['email']] = request
print json.dumps(requests_data, indent=2)
def requests_approve(args):
client, ml = get_ml(args)
requests = ml.requests
req = None
for request in requests:
if request['token'] == args.token:
req = request
break
if req:
response = ml.moderate_request(req['token'], 'accept')
print json.dumps(response, indent=2)
client, ml = get_ml(args)
requests = ml.requests
req = None
for request in requests:
if request['token'] == args.token:
req = request
break
if req:
response = ml.moderate_request(req['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_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_approve_parser.add_argument('--token')
requests_reject_parser = requests_subparsers.add_parser('reject')
requests_reject_parser.set_defaults(func=requests_reject)
requests_reject_parser.add_argument('--token')