aboutsummaryrefslogtreecommitdiff
path: root/tools/cru-py/cru/service
diff options
context:
space:
mode:
Diffstat (limited to 'tools/cru-py/cru/service')
-rw-r--r--tools/cru-py/cru/service/_base.py1
-rw-r--r--tools/cru-py/cru/service/_config.py4
-rw-r--r--tools/cru-py/cru/service/_template.py54
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()