rsdeps

Cargo.lock visualizer (mirror)
Log | Files | Refs | README | LICENSE

commit fa95a1a067192839f22a6063a72ec7db69c04e43
parent f5f2726ec3b615ca2fbe9d4c6194f6f78e6181f5
Author: Andy Khramtsov <>
Date:   Sat, 30 May 2026 03:59:48 +0300

feat: bump ui revision on full generate

Diffstat:
Msrc/deps/pages/home.py | 25++++++++++++++++++++-----
1 file changed, 20 insertions(+), 5 deletions(-)

diff --git a/src/deps/pages/home.py b/src/deps/pages/home.py @@ -1,6 +1,7 @@ import base64 import io import tomllib +import typing from dataclasses import dataclass import dash @@ -330,7 +331,7 @@ def compute_node_positions(df_graph: DfGraph) -> dict[str, tuple[int | float, in def compute_adjacency_list(df_graph: DfGraph) -> dict[str, set[str]]: - adjacency_list = {node: set() for node in df_graph.nodes["node_id"]} + adjacency_list = {str(node): set() for node in df_graph.nodes["node_id"]} for row in df_graph.arcs.iter_rows(named=True): if not row["target"]: @@ -342,13 +343,20 @@ def compute_adjacency_list(df_graph: DfGraph) -> dict[str, set[str]]: return adjacency_list +def wrap_adjacency_list(adjacency_list: dict[str, set[str]]) -> dict[str, list[str]]: + return {node: list(neighbors) for node, neighbors in adjacency_list.items()} + + +def unwrap_adjacency_list(adjacency_list: dict[str, list[str]]) -> dict[str, set[str]]: + return {node: set(neighbors) for node, neighbors in adjacency_list.items()} + + def draw_graph_figure( df_graph: DfGraph, positions: dict[str, tuple[float, float]], + adjacency_list: dict[str, set[str]], selected_node=None, ) -> go.Figure: - adjacency_list = compute_adjacency_list(df_graph) - highlight_nodes = set() if selected_node and selected_node in adjacency_list: highlight_nodes.add(selected_node) @@ -631,6 +639,7 @@ def visualize(inputs, state): or state["cache"].get("positions") is None or state["cache"].get("df_graph_nodes") is None or state["cache"].get("df_graph_arcs") is None + or state["cache"].get("adjacency_list") is None ): clean = True else: @@ -659,13 +668,16 @@ def visualize(inputs, state): raise PreventUpdate from error df_graph = files_into_graph(cargo_toml, cargo_lock) positions = compute_node_positions(df_graph) + adjacency_list = compute_adjacency_list(df_graph) cache = { "positions": positions, + "adjacency_list": wrap_adjacency_list(adjacency_list), "df_graph_nodes": df_graph.nodes.serialize(format="json"), "df_graph_arcs": df_graph.arcs.serialize(format="json"), } else: positions = state["cache"]["positions"] + adjacency_list = unwrap_adjacency_list(state["cache"]["adjacency_list"]) df_graph = DfGraph( nodes=pl.DataFrame.deserialize(io.StringIO(state["cache"]["df_graph_nodes"]), format="json"), arcs=pl.DataFrame.deserialize(io.StringIO(state["cache"]["df_graph_arcs"]), format="json"), @@ -682,8 +694,11 @@ def visualize(inputs, state): for item in (part, html.Br()) ] - fig = draw_graph_figure(df_graph, positions, selected) - fig.update_layout(uirevision="1") + old_fig = state["figure"] + old_uirevision = old_fig.get("layout", {}).get("uirevision", 0) + + fig = draw_graph_figure(df_graph, positions, adjacency_list, selected) + fig.update_layout(uirevision=old_uirevision + 1 if clean else old_uirevision) return dict( graph=fig,