New api and sync to mailman script
This commit is contained in:
parent
4737e7ea88
commit
8d1f4f3fd8
6 changed files with 167 additions and 13 deletions
52
main.py
52
main.py
|
@ -1,36 +1,44 @@
|
|||
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('config.ini')
|
||||
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['email'] for m in members)
|
||||
filename = 'ml.{name}.list'.format(name=ml_name)
|
||||
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_mailingstandard():
|
||||
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_mailingclub():
|
||||
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'])
|
||||
|
||||
|
@ -38,11 +46,31 @@ def write_club_members_files(api_client):
|
|||
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()
|
||||
|
||||
for service in api_client.list_servicesregen():
|
||||
# if service['hostname'] == client_hostname and \
|
||||
# service['service_name'] == 'dns' and \
|
||||
# service['need_regen']:
|
||||
write_standard_members_files(api_client)
|
||||
write_club_members_files(api_client)
|
||||
# api_client.patch(service['api_url'], data={'need_regen': False})
|
||||
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")
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue