76 lines
2.8 KiB
Python
76 lines
2.8 KiB
Python
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")
|