aboutsummaryrefslogtreecommitdiff
path: root/tools/cru-py/cru/service
diff options
context:
space:
mode:
authorYuqian Yang <crupest@crupest.life>2025-02-20 17:52:32 +0800
committerYuqian Yang <crupest@crupest.life>2025-02-20 18:02:19 +0800
commite870972428794f51912dfa955c6de0d712c74db1 (patch)
tree39d5a6118e31f211c3cc511d73618bca4082578e /tools/cru-py/cru/service
parent75df0f7c4eaec0d50157ea8dc048241465da9c6c (diff)
downloadcrupest-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.py25
-rw-r--r--tools/cru-py/cru/service/_template.py18
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)