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

1import dataclasses 

2import typing 

3 

4from archdocs import settings 

5from archdocs.main import ArchitectureParserAndRenderer, SettingsForArchdocs 

6 

7 

8def _generate_architecture_html(arch_engine: ArchitectureParserAndRenderer) -> str: 

9 rendered_diagram: typing.Final = ( 

10 arch_engine.render_architecture_diagram().replace("&", "&amp;").replace("<", "&lt;") 

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:] 

22 

23 

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) 

33 

34 

35@typing.final 

36@dataclasses.dataclass(slots=True, kw_only=True, frozen=True) 

37class ArchitectureRouteConfig: 

38 route_path: str 

39 arch_settings: SettingsForArchdocs | None