From be9659c405b1dd2e3562de3657231dbc203a8056 Mon Sep 17 00:00:00 2001
From: Patrick Cernko <pcernko@mpi-klsb.mpg.de>
Date: Tue, 23 Jan 2024 10:46:49 +0100
Subject: [PATCH] support for regexp_mapping.json to provide regexps (from
 mailman) to map to Sympa glob patterns in whitelist/blacklist/modlist

---
 .gitignore    |  1 +
 gen_config.py | 15 ++++++++++-----
 mm2sympa.sh   |  7 ++++++-
 3 files changed, 17 insertions(+), 6 deletions(-)
 create mode 100644 .gitignore

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..89a5f45
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+regexp_mapping.json
diff --git a/gen_config.py b/gen_config.py
index 5866998..b94d196 100755
--- a/gen_config.py
+++ b/gen_config.py
@@ -22,12 +22,12 @@ def normalize_email(email):
         return ldap_mail[0]
     return email
 
+regexp_mapping = {}
 def unregexp(e, listtype):
-    mapping = {
-    }
-    if e in mapping:
-        info(f"mapping {listtype} entry '{e}' to '{mapping[e]}'")
-        return mapping[e]
+    global regexp_mapping
+    if e in regexp_mapping:
+        info(f"mapping {listtype} entry '{e}' to '{regexp_mapping[e]}'")
+        return regexp_mapping[e]
     for char in '*^$':
         if char in e:
             warn(f"{listtype} entry '{e}' contains regexp char '{char}', this won't work!")
@@ -36,6 +36,7 @@ def unregexp(e, listtype):
         
 
 parser = argparse.ArgumentParser(description='import mailman list to sympa')
+parser.add_argument('--regexp-mapping', type=str, help='json data mapping MM regexp to Sympa glob patterns', default=None)
 parser.add_argument('input')
 parser.add_argument('membersin')
 parser.add_argument('output')
@@ -46,6 +47,10 @@ parser.add_argument('modlist')
 parser.add_argument('membersout')
 args = parser.parse_args()
 
+if args.regexp_mapping:
+    with open(args.regexp_mapping) as fd:
+        regexp_mapping = json.load(fd)
+
 members = {}
 with open(args.membersin) as fd:
     for m, d in json.load(fd).items():
diff --git a/mm2sympa.sh b/mm2sympa.sh
index 4fe9785..4e3d156 100755
--- a/mm2sympa.sh
+++ b/mm2sympa.sh
@@ -71,7 +71,12 @@ blocklist=$tmpdir/blocklist.txt
 whitelist=$tmpdir/whitelist.txt
 modlist=$tmpdir/modlist.txt
 memberdump=$tmpdir/member.dump
-$base/gen_config.py $inputpy $membersjson $configxml $infofile $blocklist $whitelist $modlist $memberdump
+regexp_mapping=$base/regexp_mapping.json
+opts=()
+if [ -e $regexp_mapping ]; then
+    opts=( "${opts[@]}" --regexp-mapping $regexp_mapping )
+fi
+(set -x && $base/gen_config.py "${opts[@]}" $inputpy $membersjson $configxml $infofile $blocklist $whitelist $modlist $memberdump)
 # sympa user needs access
 chmod 0644 $configxml
 
-- 
GitLab