Coverage for liitos/eject.py: 100.00%
28 statements
« prev ^ index » next coverage.py v7.6.4, created at 2024-11-10 18:56:07 +00:00
« prev ^ index » next coverage.py v7.6.4, created at 2024-11-10 18:56:07 +00:00
1"""Eject templates and configurations."""
3import pathlib
5import liitos.template as tpl
6from liitos import ENCODING, log
8THINGS = {
9 'bookmatter-pdf': (BOOKMATTER_TEMPLATE := 'templates/bookmatter.tex.in'),
10 'driver-pdf': (DRIVER_TEMPLATE := 'templates/driver.tex.in'),
11 'metadata-pdf': (METADATA_TEMPLATE := 'templates/metadata.tex.in'),
12 'publisher-pdf': (PUBLISHER_TEMPLATE := 'templates/publisher.tex.in'),
13 'setup-pdf': (SETUP_TEMPLATE := 'templates/setup.tex.in'),
14 'approvals-yaml': (APPROVALS_YAML := 'templates/approvals.yml'),
15 'changes-yaml': (CHANGES_YAML := 'templates/changes.yml'),
16 'layout-yaml': (LAYOUT_YAML := 'templates/layout.yml'),
17 'meta-base-yaml': (META_YAML := 'templates/meta.yml'),
18 'meta-patch-yaml': (META_PATCH_YAML := 'templates/meta-patch.yml'),
19 'mkdocs-yaml': (MKDOCS_PATCH_YAML := 'templates/mkdocs.yml.in'),
20 'vocabulary-yaml': (VOCABULARY_YAML := 'templates/vocabulary.yml'),
21}
24def this(thing: str, out: str = '') -> int:
25 """Later Alligator."""
26 if not thing:
27 log.error('eject of template with no name requested')
28 log.info(f'templates known: ({", ".join(sorted(THINGS))})')
29 return 2
30 guesses = sorted(entry for entry in THINGS if entry.startswith(thing))
31 if not guesses:
32 log.error(f'eject of unknown template ({thing}) requested')
33 log.info(f'templates known: ({", ".join(sorted(THINGS))})')
34 return 2
35 if len(guesses) > 1:
36 log.error(f'eject of ambiguous template ({thing}) requested - matches ({", ".join(guesses)})')
37 return 2
38 content = tpl.load_resource(THINGS[guesses[0]], False)
39 if not out:
40 print(content)
41 return 0
43 out_path = pathlib.Path(out)
44 out_name = out_path.name
45 if not THINGS[guesses[0]].endswith(out_name):
46 log.warning(f'requested writing ({THINGS[guesses[0]]}) to file ({out_name})')
47 with open(out_path, 'wt', encoding=ENCODING) as handle:
48 handle.write(content)
49 return 0