55 lines
1.5 KiB
Python
55 lines
1.5 KiB
Python
import json
|
|
import shutil
|
|
|
|
|
|
class Config:
|
|
def __init__(self, path):
|
|
self.path = path
|
|
self.config_values = [
|
|
"version",
|
|
"server_name",
|
|
"server_description",
|
|
"secret_key",
|
|
"captcha_key",
|
|
"registration_enabled",
|
|
"login_required",
|
|
"threads_per_page",
|
|
"user_css",
|
|
]
|
|
self._update_class(self._read_values())
|
|
|
|
def get_config(self):
|
|
current = self._read_values()
|
|
self._update_class(current)
|
|
return self
|
|
|
|
def set_config(self, **kwargs):
|
|
for key in kwargs:
|
|
if key not in self.config_values:
|
|
raise ValueError(f"Unknown config key {key}!")
|
|
|
|
current = self._read_values()
|
|
current.update(kwargs)
|
|
self._update_class(current)
|
|
self._write_values(current)
|
|
|
|
def set_config_secrets(self, secret_key, captcha_key):
|
|
current = self._read_values()
|
|
current["secret_key"] = secret_key
|
|
current["captcha_key"] = captcha_key
|
|
self._update_class(current)
|
|
self._write_values(current)
|
|
|
|
def _read_values(self):
|
|
with open(self.path, "rt") as fp:
|
|
return json.load(fp)
|
|
|
|
def _write_values(self, values):
|
|
shutil.copy(self.path, self.path + ".bkp")
|
|
with open(self.path, "wt") as fp:
|
|
json.dump(values, fp, indent=2, sort_keys=True)
|
|
|
|
def _update_class(self, values):
|
|
for item in values:
|
|
setattr(self, item, values[item])
|