templating - init work on templating with jinja2
This commit is contained in:
parent
ea891969c1
commit
c65dda3917
@ -3,8 +3,8 @@ import json, re
|
|||||||
class Settings :
|
class Settings :
|
||||||
|
|
||||||
def __init__(self) :
|
def __init__(self) :
|
||||||
self.settings = {}
|
self.__settings = {}
|
||||||
self.variables = {}
|
self.__variables = {}
|
||||||
|
|
||||||
def load_settings(self, path) :
|
def load_settings(self, path) :
|
||||||
with open(path, "r") as f :
|
with open(path, "r") as f :
|
||||||
@ -16,20 +16,28 @@ class Settings :
|
|||||||
else :
|
else :
|
||||||
real_params = [param]
|
real_params = [param]
|
||||||
for real_param in real_params :
|
for real_param in real_params :
|
||||||
self.settings[real_param["env"]] = real_param
|
self.__settings[real_param["env"]] = real_param
|
||||||
self.settings[real_param["env"]]["category"] = cat
|
self.__settings[real_param["env"]]["category"] = cat
|
||||||
|
|
||||||
def load_variables(self, vars, multisite_only=False) :
|
def load_variables(self, vars, multisite_only=False) :
|
||||||
for var, value in vars.items() :
|
for var, value in vars.items() :
|
||||||
if self.__check_var(var, value) :
|
if self.__check_var(var, value) :
|
||||||
self.variables[var] = value
|
self.__variables[var] = value
|
||||||
else :
|
else :
|
||||||
print("Problem with " + var + "=" + value)
|
print("Problem with " + 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) :
|
def __check_var(self, var, value, multisite_only=False) :
|
||||||
real_var = ""
|
real_var = ""
|
||||||
if var in self.settings :
|
if var in self.__settings :
|
||||||
real_var = var
|
real_var = var
|
||||||
elif var[len(var.split("_")[0])+1:] in self.settings :
|
elif var[len(var.split("_")[0])+1:] in self.__settings :
|
||||||
real_var = var[len(var.split("_")[0])+1:]
|
real_var = var[len(var.split("_")[0])+1:]
|
||||||
return real_var != "" and re.search(self.settings[real_var]["regex"], value) and (not multisite_only or self.settings[real_var]["context"] == "multisite")
|
return real_var != "" and re.search(self.__settings[real_var]["regex"], value) and (not multisite_only or self.__settings[real_var]["context"] == "multisite")
|
||||||
|
|||||||
26
gen/Templates.py
Normal file
26
gen/Templates.py
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
import jinja2, glob, os, pathlib
|
||||||
|
|
||||||
|
class Templates :
|
||||||
|
|
||||||
|
def __init__(self, config, input_path) :
|
||||||
|
self.__config = config
|
||||||
|
self.__input_path = input_path
|
||||||
|
self.__template_env = jinja2.Environment(loader=jinja2.FileSystemLoader(searchpath=input_path))
|
||||||
|
|
||||||
|
def render_global(self, output_path) :
|
||||||
|
return self.__render("global", output_path)
|
||||||
|
|
||||||
|
def render_site(self, output_path, server_name) :
|
||||||
|
return self.__render("site", output_path, server_name)
|
||||||
|
|
||||||
|
def __render(self, type, output_path, server_name=None) :
|
||||||
|
for filename in glob.iglob(self.__input_path + "/" + type + "**/**", recursive=True) :
|
||||||
|
if os.path.isfile(filename) :
|
||||||
|
relative_filename = filename.replace(self.__input_path, "").replace(type + "/", "")
|
||||||
|
template = self.__template_env.get_template(type + "/" + relative_filename)
|
||||||
|
output = template.render(self.__config)
|
||||||
|
if "/" in relative_filename :
|
||||||
|
directory = relative_filename.replace(relative_filename.split("/")[-1], "")
|
||||||
|
pathlib.Path(output_path + "/" + directory).mkdir(parents=True, exist_ok=True)
|
||||||
|
with open(output_path + "/" + relative_filename, "w") as f :
|
||||||
|
f.write(output)
|
||||||
@ -1,6 +1,7 @@
|
|||||||
#!/usr/bin/python3
|
#!/usr/bin/python3
|
||||||
|
|
||||||
from Settings import Settings
|
from Settings import Settings
|
||||||
|
from Templates import Templates
|
||||||
|
|
||||||
if __name__ == "__main__" :
|
if __name__ == "__main__" :
|
||||||
|
|
||||||
@ -10,4 +11,8 @@ if __name__ == "__main__" :
|
|||||||
variables["MULTISITE"] = "yes"
|
variables["MULTISITE"] = "yes"
|
||||||
variables["BLOCK_PROXIES"] = "no"
|
variables["BLOCK_PROXIES"] = "no"
|
||||||
variables["omg"] = "lol"
|
variables["omg"] = "lol"
|
||||||
|
variables["www.toto.com_BLOCK_PROXIES"] = "yes"
|
||||||
my_settings.load_variables(variables)
|
my_settings.load_variables(variables)
|
||||||
|
print(my_settings.get_config())
|
||||||
|
my_templates = Templates(my_settings.get_config(), "/tmp/input")
|
||||||
|
my_templates.render_global("/tmp/output")
|
||||||
|
|||||||
1
gen/requirements.py
Normal file
1
gen/requirements.py
Normal file
@ -0,0 +1 @@
|
|||||||
|
jinja2
|
||||||
@ -495,7 +495,7 @@
|
|||||||
"label": "Use crowdsec",
|
"label": "Use crowdsec",
|
||||||
"regex": "^(yes|no)$",
|
"regex": "^(yes|no)$",
|
||||||
"type": "checkbox"
|
"type": "checkbox"
|
||||||
}
|
},
|
||||||
{
|
{
|
||||||
"context": "global",
|
"context": "global",
|
||||||
"default": "",
|
"default": "",
|
||||||
@ -1184,6 +1184,7 @@
|
|||||||
"regex": "^\\S+$",
|
"regex": "^\\S+$",
|
||||||
"type": "text"
|
"type": "text"
|
||||||
}
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"nginx": {
|
"nginx": {
|
||||||
"id": "nginx",
|
"id": "nginx",
|
||||||
@ -1269,7 +1270,8 @@
|
|||||||
"regex": "^[0-9]+$",
|
"regex": "^[0-9]+$",
|
||||||
"type": "text"
|
"type": "text"
|
||||||
}
|
}
|
||||||
}
|
]
|
||||||
|
},
|
||||||
"Whitelist": {
|
"Whitelist": {
|
||||||
"id": "whitelist",
|
"id": "whitelist",
|
||||||
"params": [
|
"params": [
|
||||||
@ -1333,7 +1335,7 @@
|
|||||||
"env": "WHITELIST_URI",
|
"env": "WHITELIST_URI",
|
||||||
"id": "whitelist-uri",
|
"id": "whitelist-uri",
|
||||||
"label": "Whitelist URI",
|
"label": "Whitelist URI",
|
||||||
"regex": "^(\S ?)*$",
|
"regex": "^(\\S ?)*$",
|
||||||
"type": "text"
|
"type": "text"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user