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
54
sync_adherents_mailman.py
Normal file
54
sync_adherents_mailman.py
Normal file
|
@ -0,0 +1,54 @@
|
|||
from configparser import ConfigParser
|
||||
import requests
|
||||
import os
|
||||
import subprocess
|
||||
|
||||
path = os.path.dirname(os.path.abspath(__file__))
|
||||
filename = path + "/generated/changed"
|
||||
|
||||
config = ConfigParser()
|
||||
config.read(path + '/config.ini')
|
||||
|
||||
mailman_url = config.get('Mailman', 'url')
|
||||
mailman_username = config.get('Mailman', 'username')
|
||||
mailman_password = config.get('Mailman', 'password')
|
||||
domain = config.get('Mailman', 'domain')
|
||||
|
||||
changed = int(open(filename).read())
|
||||
|
||||
if changed:
|
||||
for section in config.sections():
|
||||
if section not in ["Re2o", "Mailman"] and config.getboolean(section, 'activate'):
|
||||
list_name = config.get(section, "list_name", fallback=section)
|
||||
response1 = requests.get('http://{}/3.1/lists/{}@{}/roster/member'.format(mailman_url, list_name, domain), auth=(mailman_username, mailman_password))
|
||||
if "entries" in response1.json():
|
||||
entries = response1.json()['entries']
|
||||
old_emails = [entry['email'] for entry in entries]
|
||||
new_emails = open(path + "/generated/ml.{}.list".format(section)).read().split("\n")
|
||||
emails_to_delete = [email for email in old_emails if email not in new_emails]
|
||||
if emails_to_delete:
|
||||
print("[..] Deleting non members from list {}".format(list_name))
|
||||
response = requests.delete('http://{}/3.1/lists/{}@{}/roster/member'.format(mailman_url, list_name, domain), auth=(mailman_username,mailman_password), params={'emails': emails_to_delete})
|
||||
print("[OK] Non members where deleted from list {}".format(list_name))
|
||||
else:
|
||||
print("[INFO] No member to delete for list {}".format(list_name))
|
||||
emails_to_add = [email for email in new_emails if email not in old_emails]
|
||||
if emails_to_add:
|
||||
print("[..] Adding members to list {}".format(list_name))
|
||||
with open(path + "/tmp", "w+") as f:
|
||||
for email in emails_to_add:
|
||||
f.write("{}\n".format(email))
|
||||
subprocess.call(["mailman", "members", "{}@{}".format(list_name, domain), "-a", path + "/tmp"])
|
||||
os.remove(path + "/tmp")
|
||||
print("[OK] Members added to list {}".format(list_name))
|
||||
else:
|
||||
print("[INFO] No member to add to list {}".format(list_name))
|
||||
else:
|
||||
print("[..] Subscribing members to list {}".format(list_name))
|
||||
subprocess.call(["mailman", "members", "{}@{}".format(list_name, domain), "-a", path + "/generated/ml.{}.list".format(section)])
|
||||
print("[OK] List {} was regenerated".format(list_name))
|
||||
|
||||
with open(filename, "w+") as f:
|
||||
f.write("0")
|
||||
else:
|
||||
print("Files have not changed since last execution. Skipping")
|
Loading…
Add table
Add a link
Reference in a new issue