Coverage for archdocs/features/app_servers/renderer.py: 100%

15 statements  

« prev     ^ index     » next       coverage.py v7.15.3, created at 2026-08-03 00:00 +0000

1import typing 

2 

3from archdocs import diagram_model 

4from archdocs.features.app_servers.const import ApplicationServerFeatures 

5 

6 

7_SINGLE_WORKER_COUNT: typing.Final = 1 

8 

9 

10def _render_workers_label(workers_count: int, /) -> str: 

11 if not workers_count: 

12 return "" 

13 if workers_count == _SINGLE_WORKER_COUNT: 

14 return "single worker" 

15 return f"{workers_count} workers" 

16 

17 

18def render_application_server_features( 

19 service_node: diagram_model.DiagramNode, 

20 features_to_draw: ApplicationServerFeatures, 

21 /, 

22) -> tuple[diagram_model.DiagramEdge, ...]: 

23 if not features_to_draw.servers_used: 

24 return () 

25 properties_on_arrow: typing.Final = ", ".join( 

26 filter( 

27 None, 

28 [ 

29 ", ".join(sorted(features_to_draw.servers_used)), 

30 _render_workers_label(features_to_draw.workers_count), 

31 f"port {features_to_draw.listen_port}" if features_to_draw.listen_port else "", 

32 "TLS" if features_to_draw.tls_enabled else "", 

33 "HTTP/2" if features_to_draw.http2_enabled else "", 

34 ], 

35 ), 

36 ) 

37 return ( 

38 diagram_model.DiagramEdge( 

39 source_node=diagram_model.EXTERNAL_CLIENT_NODE, 

40 target_node=service_node, 

41 edge_label=f"Served by {properties_on_arrow}", 

42 ), 

43 )