isso/update-settings.py

83 lines
1.7 KiB
Python
Raw Normal View History

2018-04-14 04:09:30 +00:00
#!/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()