Coverage for archdocs/features/redis/renderer.py: 100%
14 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, settings
4from archdocs.features.redis.const import RedisFeatures
7_REDIS_NODE_LABEL: typing.Final = "redis"
10def _build_redis_node(connection_type: str, node_suffix: int | str, /) -> diagram_model.DiagramNode:
11 node_kind: typing.Final = f"{_REDIS_NODE_LABEL} {connection_type}" if connection_type else _REDIS_NODE_LABEL
12 return diagram_model.build_diagram_node(
13 f"redisdb_{connection_type}{node_suffix}" if connection_type else "redisdb",
14 node_kind if node_suffix == "" else f"{node_kind} #{node_suffix}",
15 diagram_model.NodeGroup.data_stores,
16 )
19def render_redis_features(
20 service_node: diagram_model.DiagramNode,
21 features_to_draw: RedisFeatures,
22 /,
23) -> tuple[diagram_model.DiagramEdge, ...]:
24 if not features_to_draw.connection_type and not features_to_draw.async_used and not features_to_draw.retry_used:
25 return ()
26 properties_on_arrow: typing.Final = ", ".join(
27 filter(
28 None,
29 [
30 "async" if features_to_draw.async_used else "",
31 "retry" if features_to_draw.retry_used else "",
32 ],
33 ),
34 )
35 if not features_to_draw.cluster_or_sentinel:
36 return (
37 diagram_model.DiagramEdge(
38 source_node=service_node,
39 target_node=_build_redis_node("", ""),
40 edge_label=properties_on_arrow,
41 ),
42 )
43 return tuple(
44 diagram_model.DiagramEdge(
45 source_node=service_node,
46 target_node=_build_redis_node(features_to_draw.connection_type or "", one_counter),
47 edge_label=properties_on_arrow,
48 )
49 for one_counter in range(settings.VALUE_FOR_MASS_CONNECTIONS_ILLUSTRATION)
50 )