blob: 9747af1f80e4a60e89fac1126a5855c68e6149e2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
import os.path
import re
class Template:
def __init__(self, template_path: str, var_prefix: str = "CRUPEST"):
if len(var_prefix) != 0 and re.fullmatch(r"^[a-zA-Z_][a-zA-Z0-9_]*$", var_prefix) is None:
raise ValueError("Invalid var prefix.")
self.template_path = template_path
self.template_name = os.path.basename(
template_path)[:-len(".template")]
with open(template_path, "r") as f:
self.template = f.read()
self.var_prefix = var_prefix
self.__var_regex = re.compile(r"\$(" + var_prefix + r"_[a-zA-Z0-9_]+)")
self.__var_brace_regex = re.compile(
r"\$\{\s*(" + var_prefix + r"_[a-zA-Z0-9_]+)\s*\}")
var_set = set()
for match in self.__var_regex.finditer(self.template):
var_set.add(match.group(1))
for match in self.__var_brace_regex.finditer(self.template):
var_set.add(match.group(1))
self.var_set = var_set
def generate(self, config: dict) -> str:
result = self.template
for var in self.var_set:
if var not in config:
raise ValueError(f"Missing config var {var}.")
result = result.replace("$" + var, config[var])
result = re.sub(r"\$\{\s*" + var + r"\s*\}", config[var], result)
return result
|