Coverage for liitos/template.py: 100.00%

23 statements  

« prev     ^ index     » next       coverage.py v7.6.4, created at 2024-11-10 18:56:07 +00:00

1"""Loader function for templates.""" 

2 

3import pathlib 

4import pkgutil 

5from typing import Union 

6 

7from liitos import ENCODING, PathLike 

8 

9RESOURCES = ( 

10 'templates/approvals.yml', 

11 'templates/bookmatter.tex.in', 

12 'templates/changes.yml', 

13 'templates/driver.tex.in', 

14 'templates/layout.yml', 

15 'templates/meta.yml', 

16 'templates/meta-patch.yml', 

17 'templates/metadata.tex.in', 

18 'templates/mkdocs.yml.in', 

19 'templates/publisher.tex.in', 

20 'templates/setup.tex.in', 

21 'templates/vocabulary.yml', 

22) 

23 

24 

25def load_resource(resource: PathLike, is_complete_path: bool = False) -> str: 

26 """Load the template either from the package resources or an external path.""" 

27 if is_complete_path: 

28 with open(resource, 'rt', encoding=ENCODING) as handle: 

29 return handle.read() 

30 else: 

31 return pkgutil.get_data(__package__, str(resource)).decode(encoding=ENCODING) # type: ignore 

32 

33 

34def eject(argv: Union[list[str], None] = None) -> int: 

35 """Eject the templates into the folder given (default EJECTED) and create the folder if it does not exist.""" 

36 argv = argv if argv else [''] 

37 into = argv[0] 

38 if not into.strip(): 

39 into = 'EJECTED' 

40 into_path = pathlib.Path(into) 

41 (into_path / 'templates').mkdir(parents=True, exist_ok=True) 

42 for resource in RESOURCES: 

43 write_to = into_path / resource 

44 data = pkgutil.get_data(__package__, resource).decode(encoding=ENCODING) # type: ignore 

45 with open(write_to, 'wt', encoding=ENCODING) as target: 

46 target.write(data) 

47 

48 return 0