From 54004f98af65ee525ae49e3cedf72a3da4e75f2b Mon Sep 17 00:00:00 2001 From: Chris Hutchison Date: Sat, 14 Apr 2018 00:09:30 -0400 Subject: [PATCH] Create update-settings.py --- update-settings.py | 82 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 update-settings.py diff --git a/update-settings.py b/update-settings.py new file mode 100644 index 0000000..2913f7a --- /dev/null +++ b/update-settings.py @@ -0,0 +1,82 @@ +#!/usr/bin/env python +import os +import shutil + +env = os.environ.get + +smtp_settings = [ + ('username', ''), + ('password', ''), + ('host', 'localhost'), + ('port', '25'), + ('security', 'none'), + ('to', ''), + ('from', ''), +] + +required = ['to', 'from'] + +settings = env('ISSO_SETTINGS') +if not settings: + raise Exception('No ISSO_SETTINGS defined') + +settings = settings.split(';') + + +def backup_name(setting): + return setting + '.bak' + + +def purge_backup(setting): + # if there is a backup file, delete it + backup_setting = backup_name(setting) + if os.path.exists(backup_setting): + try: + os.remove(backup_setting) + except OSError: + pass + + +def create_backup(setting): + # make a backup + shutil.copyfile(setting, backup_name(setting)) + + +def load_values(): + values = [] + for name, default in smtp_settings: + label = 'ISSO_SMTP_%s' % name.upper() + value = env(label, default) + if name in required and not value.strip(): + raise Exception('Required environment variable is not set: %s' % + label) + values.append([label, value]) + return values + + +def replace_placeholders(setting, values): + with open(setting, 'r') as _file: + content = _file.read() + + for label, value in values: + content = content.replace(label, value) + + # make a backup + create_backup(setting) + + with open(setting, 'w') as _file: + _file.write(content) + + return content + + +def main(): + values = load_values() + + for setting in settings: + print("Replacing settings %s" % setting) + replace_placeholders(setting, values) + + +if __name__ == '__main__': + main()