diff --git a/muppet/output/__init__.py b/muppet/output/__init__.py index 4677c94371bacb6a09cc5a4f8573de9810c95ad1..a1fb41e214e68a46f5abc02ba778a11082289f31 100644 --- a/muppet/output/__init__.py +++ b/muppet/output/__init__.py @@ -76,24 +76,25 @@ class Templates: Almost all of these methods take these values: - :param path_base: - Prefix added to all links within output - TODO shouldn't this be bound to the object, since it should - NEVER change (during a run). - :path breadcrumbs: Breadcrumb to current page. """ - def __init__(self) -> None: + def __init__(self, path_base: str) -> None: + """ + Construct a new instance. + + :param path_base: + Prefix added to all links within output + """ self.jinja = Environment( loader=FileSystemLoader('templates'), autoescape=False) + self.path_base = path_base def code_page(self, *, title: str, content: str, - path_base: str, breadcrumbs: Optional[Breadcrumbs] = None ) -> str: # pragma: no cover """ @@ -109,12 +110,11 @@ class Templates: return template.render( title=title, content=content, - path_base=path_base, + path_base=self.path_base, breadcrumbs=breadcrumbs) def content(self, *, content: str, - path_base: str, breadcrumbs: Optional[Breadcrumbs] = None ) -> str: # pragma: no cover """ @@ -126,12 +126,11 @@ class Templates: template = self.jinja.get_template('content.html') return template.render( content=content, - path_base=path_base, + path_base=self.path_base, breadcrumbs=breadcrumbs) def index(self, *, modules: list['PuppetModule'], - path_base: str, breadcrumbs: Optional[Breadcrumbs] = None ) -> str: # pragma: no cover """ @@ -142,7 +141,7 @@ class Templates: """ template = self.jinja.get_template('index.html') return template.render( - path_base=path_base, + path_base=self.path_base, modules=modules, breadcrumbs=breadcrumbs) @@ -152,7 +151,6 @@ class Templates: module_author: str, module_name: str, doc_files: list[tuple[str, str]], - path_base: str, breadcrumbs: Optional[Breadcrumbs] = None, left_sidebar: Optional[str] = None, right_sidebar: Optional[str] = None, @@ -190,22 +188,19 @@ class Templates: module_author=module_author, module_name=module_name, doc_files=doc_files, - path_base=path_base, + path_base=self.path_base, breadcrumbs=breadcrumbs, left_sidebar=left_sidebar, right_sidebar=right_sidebar) -templates = Templates() - - @dataclass class ResourceTypeOutput: """Basic HTML implementation.""" title: str module_name: str - children: list['HtmlSerializable'] = field(default_factory=list) + children: list[HtmlSerializable] = field(default_factory=list) link: Optional[str] = None summary: Optional[str] = None @@ -399,7 +394,11 @@ class PuppetModule: # metadata: dict[str, Any] # doc_files: list[str] - def __init__(self, path: str, output_prefix: str, puppet_strings: PuppetStrings): + def __init__(self, *, + path: str, + output_prefix: str, + puppet_strings: PuppetStrings, + templates: Templates): """ Construct a new instance. @@ -418,6 +417,7 @@ class PuppetModule: self.strings_output = puppet_strings self.toc = self._build_module_toc() self.output_prefix = output_prefix + self.templates = templates abspath = os.path.abspath(self.path) self.doc_files: list[str] = \ @@ -520,12 +520,11 @@ class PuppetModule: for (k, v) in read_doc_files(self.doc_files).items()] with open(os.path.join(destination, 'index.html'), 'w') as f: - f.write(templates.module_index( + f.write(self.templates.module_index( module_name=self.name, module_author='TODO', # module.metadata['author'], breadcrumbs=crumbs, content=toc, - path_base=self.output_prefix, doc_files=doc_files_toc, # left_sidebar=(), right_sidebar=''.join([ @@ -562,10 +561,9 @@ class PuppetModule: with open(os.path.join(dir, 'source.pp.html'), 'w') as f: with open(self.file(puppet_class.file), 'r') as g: - f.write(templates.code_page( + f.write(self.templates.code_page( title='', content=highlight(g.read(), 'puppet'), - path_base=self.output_prefix, breadcrumbs=crumbs)) # TODO reimplement this? @@ -584,10 +582,9 @@ class PuppetModule: title, body = format_class(puppet_class) with open(os.path.join(dir, 'index.html'), 'w') as f: - f.write(templates.code_page( + f.write(self.templates.code_page( title=self.name, content=body, - path_base=self.output_prefix, breadcrumbs=crumbs)) # puppet_class['file'] @@ -610,10 +607,9 @@ class PuppetModule: title, body = format_type_alias(type_alias, type_alias.name) with open(os.path.join(dir, 'index.html'), 'w') as f: - f.write(templates.code_page( + f.write(self.templates.code_page( title=title, - content=body, - path_base=self.output_prefix)) + content=body)) def _output_doc_files(self, destination: str, files: dict[str, str]) -> None: """ @@ -653,9 +649,8 @@ class PuppetModule: name) with open(out_path, 'w') as f: - f.write(templates.content( + f.write(self.templates.content( content=content, - path_base=self.output_prefix, breadcrumbs=crumbs)) doc_files[name] = os.path.join(self.name, name, 'index.html') @@ -742,6 +737,8 @@ class PuppetEnvironment: self.name = os.path.basename(source_path) self.output_prefix = output_prefix + self.templates = Templates(output_prefix) + self.modules: list[PuppetModule] = [] dir = os.path.join(self.source_path, 'modules') @@ -755,7 +752,8 @@ class PuppetEnvironment: PuppetModule(path=module_path, output_prefix=output_prefix, puppet_strings=puppet_strings_cached(module_path, - cache))) + cache), + templates=self.templates)) def output(self, destination: str) -> None: """ @@ -771,8 +769,7 @@ class PuppetEnvironment: with open(os.path.join(destination, 'index.html'), 'w') as f: # TODO breadcrumbs - f.write(templates.index(modules=self.modules, - path_base=self.output_prefix)) + f.write(self.templates.index(modules=self.modules)) for module in self.modules: module.output(destination)