aboutsummaryrefslogtreecommitdiff
path: root/tools/aio/modules/template.py
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2023-12-11 15:02:08 +0800
committercrupest <crupest@outlook.com>2024-03-25 22:25:21 +0800
commit77c5f0d98f8318c8ec99fee64591b0701e270224 (patch)
tree56d7f83e4d4d736890d8d3999379a459b5d96ccf /tools/aio/modules/template.py
parent52566293e75055513d397bf3ad64af969cd1f185 (diff)
downloadcrupest-77c5f0d98f8318c8ec99fee64591b0701e270224.tar.gz
crupest-77c5f0d98f8318c8ec99fee64591b0701e270224.tar.bz2
crupest-77c5f0d98f8318c8ec99fee64591b0701e270224.zip
tools(aio): move aio and related scripts.
Diffstat (limited to 'tools/aio/modules/template.py')
-rw-r--r--tools/aio/modules/template.py32
1 files changed, 32 insertions, 0 deletions
diff --git a/tools/aio/modules/template.py b/tools/aio/modules/template.py
new file mode 100644
index 0000000..9747af1
--- /dev/null
+++ b/tools/aio/modules/template.py
@@ -0,0 +1,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