bunkerweb/gen/Configurator.py
2021-05-28 16:41:41 +02:00

49 lines
1.6 KiB
Python

import json, re
class Configurator :
def __init__(self) :
self.__settings = {}
self.__variables = {}
def load_settings(self, path) :
with open(path, "r") as f :
data = json.loads(f.read())
for cat in data :
for param in data[cat]["params"] :
if param["type"] == "multiple" :
real_params = param["params"]
else :
real_params = [param]
for real_param in real_params :
self.__settings[real_param["env"]] = real_param
self.__settings[real_param["env"]]["category"] = cat
def load_variables(self, vars, multisite_only=False) :
for var, value in vars.items() :
if self.__check_var(var, value) :
self.__variables[var] = value
else :
print("Ignoring " + var + "=" + value)
def get_config(self) :
config = {}
for setting in self.__settings :
config[setting] = self.__settings[setting]["default"]
for variable, value in self.__variables.items() :
config[variable] = value
return config
def __check_var(self, var, value, multisite_only=False) :
real_var = ""
if var in self.__settings :
real_var = var
elif var[len(var.split("_")[0])+1:] in self.__settings :
real_var = var[len(var.split("_")[0])+1:]
elif re.search("\\_\d+$", var) and ("_".join(var.split("_")[:-1]) in self.__settings or "_".join(var.split("_")[:-1][1:]) in self.__settings) :
if "_".join(var.split("_")[:-1]) in self.__settings :
real_var = "_".join(var.split("_")[:-1])
else :
real_var = "_".join(var.split("_")[:-1][1:])
return real_var != "" and re.search(self.__settings[real_var]["regex"], value) and (not multisite_only or self.__settings[real_var]["context"] == "multisite")