diff --git a/mailman_sync.py b/mailman_sync.py index 93786c4..6acc4d5 100755 --- a/mailman_sync.py +++ b/mailman_sync.py @@ -11,12 +11,14 @@ import subprocess import requests -def sync_members(mailman_bin: Path, mailing_list: str, members: list[str]): +def sync_members( + mailman_bin: Path, mailing_list: str, members: list[str], dry_run: bool +): members_data = "\n".join(members) output = subprocess.run( [ mailman_bin / "sync_members", - "--no-change", + "--no-change" if dry_run else "", "--welcome-msg=no", "--goodbye-msg=no", "--notifyadmin=no", @@ -32,7 +34,7 @@ def sync_members(mailman_bin: Path, mailing_list: str, members: list[str]): print(output.stdout) -def main(mailman_bin: Path, api: str, token: str, list_suffix: str): +def main(mailman_bin: Path, api: str, token: str, list_suffix: str, dry_run: bool): r = requests.get(api, headers={"Authorization": "Token " + token}) if not r.ok: print(f"Failed to get mailing list data from api: {r.status_code} {r.text}") @@ -48,7 +50,7 @@ def main(mailman_bin: Path, api: str, token: str, list_suffix: str): for name, members in certification_lists.items(): list_name = name + list_suffix if list_name in existing_lists: - sync_members(mailman_bin, list_name, members) + sync_members(mailman_bin, list_name, members, dry_run) else: print(f"Skipping {list_name}, as it does not exist in Mailman") @@ -64,10 +66,16 @@ if __name__ == "__main__": argp.add_argument("--api", required=True, help="API endpoint to retrieve JSON from") argp.add_argument("--token", required=True, help="Authorization Token for API") argp.add_argument("--list-suffix", help="Suffix for mailing lists") + argp.add_argument( + "-n", + "--dry-run", + action="store_true", + help="Don't make changes, just print what would happen", + ) args = argp.parse_args() try: - main(args.bin, args.api, args.token, args.list_suffix) + main(args.bin, args.api, args.token, args.list_suffix, args.dry_run) except subprocess.CalledProcessError as e: print(e.stderr) raise