diff options
author | Yuqian Yang <crupest@crupest.life> | 2025-02-20 17:52:32 +0800 |
---|---|---|
committer | Yuqian Yang <crupest@crupest.life> | 2025-02-20 18:02:19 +0800 |
commit | e870972428794f51912dfa955c6de0d712c74db1 (patch) | |
tree | 39d5a6118e31f211c3cc511d73618bca4082578e /tools/cru-py/cru/service | |
parent | 75df0f7c4eaec0d50157ea8dc048241465da9c6c (diff) | |
download | crupest-e870972428794f51912dfa955c6de0d712c74db1.tar.gz crupest-e870972428794f51912dfa955c6de0d712c74db1.tar.bz2 crupest-e870972428794f51912dfa955c6de0d712c74db1.zip |
feat(cru-py): use new template format.
Diffstat (limited to 'tools/cru-py/cru/service')
-rw-r--r-- | tools/cru-py/cru/service/_nginx.py | 25 | ||||
-rw-r--r-- | tools/cru-py/cru/service/_template.py | 18 |
2 files changed, 17 insertions, 26 deletions
diff --git a/tools/cru-py/cru/service/_nginx.py b/tools/cru-py/cru/service/_nginx.py index e0a9c60..6c77971 100644 --- a/tools/cru-py/cru/service/_nginx.py +++ b/tools/cru-py/cru/service/_nginx.py @@ -54,32 +54,19 @@ class NginxManager(AppCommandFeatureProvider): def _get_domains_from_text(self, text: str) -> set[str]: domains: set[str] = set() regex = re.compile(r"server_name\s+(\S+)\s*;") - domain_variable_str = f"${self._domain_config_name}" - brace_domain_variable_regex = re.compile( - r"\$\{\s*" + self._domain_config_name + r"\s*\}" - ) for match in regex.finditer(text): - domain_part = match.group(1) - if domain_variable_str in domain_part: - domains.add(domain_part.replace(domain_variable_str, self.root_domain)) - continue - m = brace_domain_variable_regex.search(domain_part) - if m: - domains.add(domain_part.replace(m.group(0), self.root_domain)) - continue - domains.add(domain_part) + domains.add(match[1]) return domains - def _get_nginx_conf_template_text(self) -> str: - template_manager = self.app.get_feature(TemplateManager) + def _join_generated_nginx_conf_text(self) -> str: text = "" - for path, template in template_manager.template_tree.templates: - if path.as_posix().startswith("nginx/"): - text += template.raw_text + template_manager = self.app.get_feature(TemplateManager) + for nginx_conf in template_manager.generate(): + text += nginx_conf[1] return text def _get_domains(self) -> list[str]: - text = self._get_nginx_conf_template_text() + text = self._join_generated_nginx_conf_text() domains = list(self._get_domains_from_text(text)) domains.remove(self.root_domain) return [self.root_domain, *domains] diff --git a/tools/cru-py/cru/service/_template.py b/tools/cru-py/cru/service/_template.py index 170116c..1381700 100644 --- a/tools/cru-py/cru/service/_template.py +++ b/tools/cru-py/cru/service/_template.py @@ -1,8 +1,8 @@ from argparse import Namespace +from pathlib import Path import shutil -from cru import CruIterator -from cru.template import TemplateTree +from cru.template import TemplateTree, CruStrWrapperTemplate from ._base import AppCommandFeatureProvider, AppFeaturePath from ._config import ConfigManager @@ -16,7 +16,7 @@ class TemplateManager(AppCommandFeatureProvider): def setup(self) -> None: self._templates_dir = self.app.add_path("templates", True) self._generated_dir = self.app.add_path("generated", True) - self._template_tree: TemplateTree | None = None + self._template_tree: TemplateTree[CruStrWrapperTemplate] | None = None @property def prefix(self) -> str: @@ -31,20 +31,24 @@ class TemplateManager(AppCommandFeatureProvider): return self._generated_dir @property - def template_tree(self) -> TemplateTree: + def template_tree(self) -> TemplateTree[CruStrWrapperTemplate]: if self._template_tree is None: return self.reload() return self._template_tree def reload(self) -> TemplateTree: self._template_tree = TemplateTree( - self.prefix, self.templates_dir.full_path_str + lambda text: CruStrWrapperTemplate(text), self.templates_dir.full_path_str ) return self._template_tree def _print_file_lists(self) -> None: - for file in CruIterator(self.template_tree.templates).transform(lambda t: t[0]): - print(file.as_posix()) + for path, template in self.template_tree.templates: + print(f"[{template.variable_count}]", path.as_posix()) + + def generate(self) -> list[tuple[Path, str]]: + config_manager = self.app.get_feature(ConfigManager) + return self.template_tree.generate(config_manager.get_str_dict()) def _generate_files(self, dry_run: bool) -> None: config_manager = self.app.get_feature(ConfigManager) |