from configparser import ConfigParser import socket import datetime import os import argparse from re2oapi import Re2oAPIClient path = os.path.dirname(os.path.abspath(__file__)) config = ConfigParser() config.read(path + '/config.ini') api_hostname = config.get('Re2o', 'hostname') api_password = config.get('Re2o', 'password') api_username = config.get('Re2o', 'username') fallback = config.getboolean('DEFAULT', 'activate', fallback=False) def write_generic_members_file(ml_name, members): if config.getboolean(ml_name, 'activate', fallback=fallback): members = "\n".join(m['get_mail'] for m in members) filename = path + '/generated/ml.{name}.list'.format(name=ml_name) with open(filename, 'w+') as f: f.write(members) print("[OK] File for mailing list {} has been generated".format(ml_name)) else: print("[INFO] Mailing list {} from re2o is not activated. Skipping.".format(ml_name)) def write_standard_members_files(api_client): for ml in api_client.list("mailing/standard"): write_generic_members_file(ml['name'], ml['members']) def write_club_members_files(api_client): fallback = config.get('DEFAULT', 'activate', fallback=False) for ml in api_client.list("mailing/club"): write_generic_members_file(ml['name'], ml['members']) write_generic_members_file(ml['name']+'-admin', ml['members']) api_client = Re2oAPIClient(api_hostname, api_username, api_password) client_hostname = socket.gethostname().split('.', 1)[0] if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument("-f", "--force", help="Force files regeneration", action="store_true") args = parser.parse_args() if not os.path.exists(os.path.dirname(path + "/generated/")): print("[WARN] generated directory does not exist") try: os.makedirs(os.path.dirname(path + "/generated/")) except Exception as e: print("[ERROR] Impossible to create generated directory. Error was {}".format(e)) for service in api_client.list("services/regen/"): if service['hostname'] == client_hostname and service['service_name'] == 'mailing': if service['need_regen'] or args.force: print("[..] Regenerating service {}".format(service['service_name'])) write_standard_members_files(api_client) write_club_members_files(api_client) api_client.patch(service['api_url'], data={'need_regen': False}) ## Write that the files have changed, for other scripts filename = path + "/generated/changed" with open(filename, "w+") as f: f.write("1") print("[OK] Service {} has been regenerated.".format(service['service_name'])) else: print("[OK] No service needed regeneration")