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
« prev ^ index » next coverage.py v7.15.3, created at 2026-08-03 00:00 +0000
1import typing
3from archdocs import diagram_model
4from archdocs.features.app_servers.const import ApplicationServerFeatures
7_SINGLE_WORKER_COUNT: typing.Final = 1
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"
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 )