diff options
Diffstat (limited to 'tools/cru-py/cru/service')
| -rw-r--r-- | tools/cru-py/cru/service/_base.py | 1 | ||||
| -rw-r--r-- | tools/cru-py/cru/service/_config.py | 4 | ||||
| -rw-r--r-- | tools/cru-py/cru/service/_template.py | 54 | 
3 files changed, 51 insertions, 8 deletions
diff --git a/tools/cru-py/cru/service/_base.py b/tools/cru-py/cru/service/_base.py index f91eadd..98eed89 100644 --- a/tools/cru-py/cru/service/_base.py +++ b/tools/cru-py/cru/service/_base.py @@ -10,6 +10,7 @@ from cru import CruException, CruInternalError, CruPath  _F = TypeVar("_F") +OWNER_NAME = "crupest"  class InternalAppException(CruInternalError):      pass diff --git a/tools/cru-py/cru/service/_config.py b/tools/cru-py/cru/service/_config.py index a387ef7..63b73b3 100644 --- a/tools/cru-py/cru/service/_config.py +++ b/tools/cru-py/cru/service/_config.py @@ -12,3 +12,7 @@ class ConfigManager(AppFeatureProvider):      @property      def config_path(self) -> AppFeaturePath:          return self._config_path + +    @property +    def config_map(self) -> dict[str, str]: +        raise NotImplementedError() 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()  | 
