Coverage for archdocs/integrations/common.py: 100%
20 statements
« prev ^ index » next coverage.py v7.15.3, created at 2026-08-03 00:00 +0000
« prev ^ index » next coverage.py v7.15.3, created at 2026-08-03 00:00 +0000
1import dataclasses
2import typing
4from archdocs import settings
5from archdocs.main import ArchitectureParserAndRenderer, SettingsForArchdocs
8def _generate_architecture_html(arch_engine: ArchitectureParserAndRenderer) -> str:
9 rendered_diagram: typing.Final = (
10 arch_engine.render_architecture_diagram().replace("&", "&").replace("<", "<")
11 )
12 placeholder_match: typing.Final = settings.UI_PLACEHOLDER_PATTER.search(settings.UI_HTML_TEMPLATE)
13 if placeholder_match is None:
14 return settings.UI_HTML_TEMPLATE
15 prefix_end: typing.Final = placeholder_match.start()
16 suffix_start: typing.Final = placeholder_match.end()
17 diagram_block: typing.Final = (
18 f"{placeholder_match.group('pre_open')}{settings.DIAGRAM_HEADER}\n"
19 f"{rendered_diagram}{placeholder_match.group('pre_close')}"
20 )
21 return settings.UI_HTML_TEMPLATE[:prefix_end] + diagram_block + settings.UI_HTML_TEMPLATE[suffix_start:]
24def _create_architecture_engine(
25 arch_settings: SettingsForArchdocs | None,
26) -> ArchitectureParserAndRenderer:
27 if arch_settings is None:
28 arch_settings = SettingsForArchdocs(
29 root_dir=settings.DEFAULT_ROOT_DIR,
30 service_name=settings.DEFAULT_SERVICE_NAME,
31 )
32 return ArchitectureParserAndRenderer(local_settings=arch_settings)
35@typing.final
36@dataclasses.dataclass(slots=True, kw_only=True, frozen=True)
37class ArchitectureRouteConfig:
38 route_path: str
39 arch_settings: SettingsForArchdocs | None