Skip to content
Snippets Groups Projects
Commit bf23271d authored by Patrick Cernko's avatar Patrick Cernko
Browse files

converted to python3

write out blacklist.txt and whitelist.txt for sympa
fix generated config for sympa-6.2.70
parent 929ac11f
No related branches found
No related tags found
No related merge requests found
#!/usr/bin/env python2
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import sys
import argparse
import xml.etree.ElementTree as ET
parser = argparse.ArgumentParser(description='import mailman list to sympa')
parser.add_argument('input')
parser.add_argument('output')
parser.add_argument('blacklist')
parser.add_argument('whitelist')
args = parser.parse_args()
old_vars = {}
execfile(args.input, old_vars)
with open(args.input) as fd:
exec(fd.read(), old_vars)
xml = ET.Element("list")
......@@ -20,67 +25,94 @@ ET.SubElement(xml, "type").text = 'private_working_group'
ET.SubElement(xml, "topic").text = 'other'
# subject is required in sympa
if old_vars['description']:
ET.SubElement(xml, "subject").text = old_vars['description']
ET.SubElement(xml, "subject").text = old_vars['description']
else:
ET.SubElement(xml, "subject").text = old_vars['real_name']
ET.SubElement(xml, "subject").text = old_vars['real_name']
ET.SubElement(xml, "custom_subject").text = old_vars['subject_prefix'].strip().replace('[', '').replace(']', '')
if old_vars['advertised']:
ET.SubElement(xml, "visibility").text = 'noconceal'
ET.SubElement(xml, "visibility").text = 'noconceal'
else:
ET.SubElement(xml, "visibility").text = 'conceal'
ET.SubElement(xml, "visibility").text = 'conceal'
if old_vars['subscribe_policy'] == 1:
ET.SubElement(xml, "subscribe").text = 'auth'
ET.SubElement(xml, "subscribe").text = 'auth'
else:
ET.SubElement(xml, "subscribe").text = 'owner'
ET.SubElement(xml, "subscribe").text = 'owner'
if old_vars['archive']:
if old_vars['archive_private']:
ET.SubElement(xml, "archive").text = 'private'
else:
ET.SubElement(xml, "archive").text = 'public'
if old_vars['private_roster']:
ET.SubElement(xml, 'user_visibility').text = 'conceal'
ET.SubElement(xml, "process_archive").text = 'on'
a = ET.SubElement(xml, "archive")
if old_vars['archive_private']:
ET.SubElement(a, "web_access").text = 'private'
ET.SubElement(a, "mail_access").text = 'private'
else:
ET.SubElement(a, "web_access").text = 'public'
ET.SubElement(a, "mail_access").text = 'public'
else:
ET.SubElement(xml, 'user_visibility').text = 'noconceal'
ET.SubElement(xml, "process_archive").text = 'off'
r = ET.SubElement(xml, "reply_to_header")
if old_vars['reply_goes_to_list'] == 0:
ET.SubElement(xml, 'reply_to').text = 'sender'
ET.SubElement(r, 'value').text = 'sender'
elif old_vars['reply_goes_to_list'] == 1:
ET.SubElement(xml, 'reply_to').text = 'list'
ET.SubElement(r, 'value').text = 'list'
elif old_vars['reply_goes_to_list'] == 2:
if old_vars['reply_to_address'] == old_vars['new_listname'] + '@' + old_vars['robot']:
ET.SubElement(xml, 'reply_to').text = 'list'
else:
ET.SubElement(xml, 'reply_to').text = 'other_email'
ET.SubElement(xml, 'reply_to_address').text = old_vars['reply_to_address']
if old_vars['reply_to_address'] == old_vars['new_listname'] + '@' + old_vars['robot']:
ET.SubElement(r, 'value').text = 'list'
else:
ET.SubElement(xml, 'value').text = 'other_email'
ET.SubElement(xml, 'other_email').text = old_vars['reply_to_address']
if old_vars['first_strip_reply_to']:
ET.SubElement(xml, 'strip_reply_to').text = 'forced'
ET.SubElement(r, 'apply').text = 'forced'
else:
ET.SubElement(xml, 'strip_reply_to').text = 'respect'
ET.SubElement(r, 'apply').text = 'respect'
# send
if old_vars['generic_nonmember_action'] == 0: # accept
ET.SubElement(xml, 'send').text = 'public'
ET.SubElement(xml, 'send').text = 'public'
elif old_vars['generic_nonmember_action'] >= 1: # hold, reject, discard
if old_vars['default_member_moderation']:
ET.SubElement(xml, 'send').text = 'editorkey'
else:
ET.SubElement(xml, 'send').text = 'privateoreditorkey'
if old_vars['default_member_moderation']:
ET.SubElement(xml, 'send').text = 'editorkey'
else:
ET.SubElement(xml, 'send').text = 'privateoreditorkey'
# privateoreditorkey
# public
# private
for owner in old_vars['owner']:
o = ET.SubElement(xml, "owner", attrib={'multiple':'1'})
ET.SubElement(o, "email").text = owner
o = ET.SubElement(xml, "owner", attrib={'multiple':'1'})
ET.SubElement(o, "email").text = owner
for mod in old_vars['moderator']:
o = ET.SubElement(xml, "editor", attrib={'multiple':'1'})
ET.SubElement(o, "email").text = mod
o = ET.SubElement(xml, "editor", attrib={'multiple':'1'})
ET.SubElement(o, "email").text = mod
tree = ET.ElementTree(xml)
tree.write(args.output, encoding='utf-8', xml_declaration=True)
blacklist = []
for black in sorted(set(old_vars['ban_list'] + old_vars['discard_these_nonmembers'])):
for char in '*^$':
if char in black:
print(f"blacklist entry '{black}' contains regexp char '{char}', this won't work!", file=sys.stderr)
blacklist.append(black)
if blacklist:
# ensure non-empty file ends with newline
blacklist.append('')
with open(args.blacklist, mode='w') as fd:
fd.write('\n'.join(blacklist))
whitelist = []
for white in sorted(set(old_vars['accept_these_nonmembers'])):
for char in '*^$':
if char in white:
print(f"whitelist entry '{white}' contains regexp char '{char}', this won't work!", file=sys.stderr)
whitelist.append(white)
if whitelist:
# ensure non-empty file ends with newline
whitelist.append('')
with open(args.whitelist, mode='w') as fd:
fd.write('\n'.join(whitelist))
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment