Castle: The best Real-Time/Embedded/HighTech language EVER. Attempt 2
修訂 | 7a14eb11098977b0148a595bbbc6c7ccf518da09 (tree) |
---|---|
時間 | 2023-11-01 23:12:46 |
作者 | Albert Mietus < albert AT mietus DOT nl > |
Commiter | Albert Mietus < albert AT mietus DOT nl > |
Aside: refactor RPY's Template (class), rename the (1st) parameter: template= to name=, as create a (Jinja) Template, based on a file(name)
@@ -10,23 +10,25 @@ | ||
10 | 10 | return tuple(d if d.is_absolute() else top_dir/d for d in (Path(d) for d in search_path)) |
11 | 11 | |
12 | 12 | class Template(): |
13 | - def __init__(self, template=None, *, top_dir=None, search_path=("templates",)): | |
14 | - if isinstance(search_path, (str, Path)): search_path=(search_path,) # make it a sequence | |
13 | + def __init__(self, name=None, *, top_dir=None, search_path=("templates",)): | |
14 | + if isinstance(search_path, (str, Path)): search_path=(search_path,) # make it a sequence | |
15 | 15 | if top_dir is None: |
16 | 16 | top_dir= Path(os.path.realpath(__file__)).parent #use module-dir a top, "templates/" works |
17 | 17 | search_path = _addTopDir(top_dir, search_path) |
18 | 18 | |
19 | - logger.info(f"template={template}, top_dir={top_dir}, search_path={search_path}") | |
19 | + logger.info(f"(template)name={name}, top_dir={top_dir}, search_path={search_path}") | |
20 | 20 | |
21 | 21 | self.environment = jinja.Environment(loader=jinja.FileSystemLoader(search_path), trim_blocks=True, lstrip_blocks=True) # pragma: no mutate |
22 | - self.def_template = self.environment.get_template(template) if template else None | |
22 | + self.default_template = self.environment.get_template(name) if name else None | |
23 | 23 | |
24 | + @property | |
25 | + def _template(self, name=None): | |
26 | + return self.environment.get_template(name) if name else self.default_template | |
24 | 27 | |
25 | 28 | |
26 | - def render(self, template=None, **kwargs): | |
27 | - if not template and not self.def_template: | |
28 | - raise FileNotFoundError("No template nor default template specified") # pragma: no mutate | |
29 | + def render(self, name=None, **kwargs): | |
30 | + if not name and not self.default_template: | |
31 | + raise FileNotFoundError("No template (name), nor default template specified") # pragma: no mutate | |
29 | 32 | |
30 | - template = self.environment.get_template(template) if template else self.def_template | |
31 | - return template.render(**kwargs) | |
33 | + return self._template.render(**kwargs) | |
32 | 34 |
@@ -14,7 +14,7 @@ | ||
14 | 14 | |
15 | 15 | def test_simpel_template(): |
16 | 16 | HW_file = 'HW_template.txt' |
17 | - template = RPy.Template(template=HW_file, search_path=template_a_dir) | |
17 | + template = RPy.Template(name=HW_file, search_path=template_a_dir) | |
18 | 18 | out=template.render(Hello='{{Hello}}', World='{{World}}') # Generates itself |
19 | 19 | |
20 | 20 | ref=open(template_a_dir / HW_file).read() |
@@ -22,7 +22,7 @@ | ||
22 | 22 | |
23 | 23 | def test_simpel_template_2(): |
24 | 24 | HW_file = 'HW_template.txt' |
25 | - template = RPy.Template(template=HW_file, top_dir=my_dir) | |
25 | + template = RPy.Template(name=HW_file, top_dir=my_dir) | |
26 | 26 | out=template.render(Hello='{{Hello}}', World='{{World}}') # Generates itself |
27 | 27 | |
28 | 28 | ref=open(template_a_dir / HW_file).read() |
@@ -33,7 +33,7 @@ | ||
33 | 33 | child = 'child.txt' |
34 | 34 | base = 'base.txt' # Not used to render, only to test |
35 | 35 | |
36 | - template = RPy.Template(template=child, search_path=template_a_dir) | |
36 | + template = RPy.Template(name=child, search_path=template_a_dir) | |
37 | 37 | out = template.render(v1 ='Var 1', v2 ='Var 2', TOP='top: but not completely', BOTTOM="bottom, really") |
38 | 38 | |
39 | 39 | ref_lines = open(template_a_dir / base).readlines() |
@@ -52,7 +52,7 @@ | ||
52 | 52 | def test_template_parts(): |
53 | 53 | big_file = "big.txt" # Uses: part-include.txt & part-import.txt |
54 | 54 | |
55 | - template = RPy.Template(template=big_file, search_path=template_a_dir) | |
55 | + template = RPy.Template(name=big_file, search_path=template_a_dir) | |
56 | 56 | out = template.render() |
57 | 57 | |
58 | 58 | assert 'INCLUDED' in out, "this line in part-include.txt" |