diff options
author | crupest <crupest@outlook.com> | 2024-11-11 01:12:29 +0800 |
---|---|---|
committer | Yuqian Yang <crupest@crupest.life> | 2025-01-07 21:38:21 +0800 |
commit | c3308421b665e5d8dcb70b78acf137541a026555 (patch) | |
tree | 398740ccf1ee9b079c6357694385d0da08547807 /tools/cru-py/cru/service/_template.py | |
parent | 0c7905bfc7bd19b70c7ec213dac041a07f53fdd5 (diff) | |
download | crupest-c3308421b665e5d8dcb70b78acf137541a026555.tar.gz crupest-c3308421b665e5d8dcb70b78acf137541a026555.tar.bz2 crupest-c3308421b665e5d8dcb70b78acf137541a026555.zip |
HALF WORK: 2024.1.7
Diffstat (limited to 'tools/cru-py/cru/service/_template.py')
-rw-r--r-- | tools/cru-py/cru/service/_template.py | 54 |
1 files changed, 46 insertions, 8 deletions
diff --git a/tools/cru-py/cru/service/_template.py b/tools/cru-py/cru/service/_template.py index fcc5658..5f0252a 100644 --- a/tools/cru-py/cru/service/_template.py +++ b/tools/cru-py/cru/service/_template.py @@ -1,18 +1,23 @@ from argparse import ArgumentParser, Namespace +from cru import CruIterator from cru.template import TemplateTree -from ._base import AppCommandFeatureProvider, AppFeaturePath +from ._base import AppCommandFeatureProvider, AppFeaturePath, OWNER_NAME +from ._config import ConfigManager class TemplateManager(AppCommandFeatureProvider): - def __init__(self, prefix: str = "CRUPEST"): + def __init__(self, prefix: str = OWNER_NAME.upper()): super().__init__("template-manager") + self._prefix = prefix self._templates_dir = self.app.add_path("templates", True) self._generated_dir = self.app.add_path("generated", True) - self._template_tree = TemplateTree( - prefix, self._templates_dir.full_path_str, self._generated_dir.full_path_str - ) + self._template_tree: TemplateTree | None = None + + @property + def prefix(self) -> str: + return self._prefix @property def templates_dir(self) -> AppFeaturePath: @@ -22,9 +27,42 @@ class TemplateManager(AppCommandFeatureProvider): def generated_dir(self) -> AppFeaturePath: return self._generated_dir + @property + def template_tree(self) -> TemplateTree: + 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 + ) + return self._template_tree + + def list_files(self) -> list[str]: + return ( + CruIterator(self.template_tree.templates) + .transform(lambda t: t[0]) + .to_list() + ) + + def print_file_lists(self) -> None: + for file in self.list_files(): + print(file) + + def generate_files(self) -> None: + config_manager = self.app.get_feature(ConfigManager) + self.template_tree.generate_to( + self.generated_dir.full_path_str, config_manager.config_map + ) + def add_arg_parser(self, arg_parser: ArgumentParser) -> None: subparsers = arg_parser.add_subparsers(dest="template_command") - list_parser = subparsers.add_parser("list", help="List templates.") - generate_parser = subparsers.add_parser("generate", help="Generate template.") + _list_parser = subparsers.add_parser("list", help="List templates.") + _generate_parser = subparsers.add_parser("generate", help="Generate template.") - def run_command(self, args: Namespace) -> None: ... + def run_command(self, args: Namespace) -> None: + if args.template_command == "list": + self.print_file_lists() + elif args.template_command == "generate": + self.generate_files() |