From 0bca6042c306ad61b56b269863f84298b8d2dde4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Bompard?= Date: Mon, 2 Oct 2023 11:05:55 +0200 Subject: [PATCH] Add a script to delete a mailing list from HyperKitty MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Aurélien Bompard --- roles/mailman/files/hyperkitty-delete-list.py | 56 +++++++++++++++++++ roles/mailman/tasks/main.yml | 1 + 2 files changed, 57 insertions(+) create mode 100755 roles/mailman/files/hyperkitty-delete-list.py diff --git a/roles/mailman/files/hyperkitty-delete-list.py b/roles/mailman/files/hyperkitty-delete-list.py new file mode 100755 index 0000000000..64f3b566c5 --- /dev/null +++ b/roles/mailman/files/hyperkitty-delete-list.py @@ -0,0 +1,56 @@ +#!/usr/bin/env python2 + +""" +Delete lists from HyperKitty + +Author: Aurelien Bompard +""" + +from __future__ import ( + absolute_import, print_function, unicode_literals, division) + +import os +import logging +import readline +import sys +from argparse import ArgumentParser + +sys.path.insert(0, "/srv/webui/config") +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings") +from django import setup + +from hyperkitty.models import MailingList + + +def delete_list(address): + try: + ml = MailingList.objects.get(name=address) + except MailingList.DoesNotExist: + print("Could not find a list with address \"{}\".".format(address)) + return + print("The mailing-list \"{}\" ({}) will be entirely deleted.".format(ml.name, ml.list_id)) + print("It contains {} threads and {} emails.".format(ml.threads.count(), ml.emails.count())) + prompt = "Are you sure? [y/N] ".format(ml.name, ml.list_id) + response = raw_input(prompt) + if response != "y": + print("Not deleted.") + return + ml.delete() + print("Mailing-list successfully deleted.") + +def parse_args(): + parser = ArgumentParser() + parser.add_argument("list_address", nargs="+", help="The mailing-list address") + return parser.parse_args() + + +def main(): + args = parse_args() + setup() + logging.basicConfig(level=logging.INFO, format="%(message)s") + for address in args.list_address: + delete_list(address) + + +if __name__ == "__main__": + main() diff --git a/roles/mailman/tasks/main.yml b/roles/mailman/tasks/main.yml index cfdf60ae4f..9d60ffa854 100644 --- a/roles/mailman/tasks/main.yml +++ b/roles/mailman/tasks/main.yml @@ -512,6 +512,7 @@ - import-mm2.py - periodic.py - mailman-sar.py + - hyperkitty-delete-list.py - name: install the templatized scripts template: src={{ item }}.j2 dest="{{ mailman_webui_basedir }}/bin/{{ item }}"