From 3447acde4152b6381d42b81fe204c45278cb203e Mon Sep 17 00:00:00 2001 From: "Quantizr (Jimmy)" <9859727+Quantizr@users.noreply.github.com> Date: Wed, 27 Aug 2025 17:09:34 -0700 Subject: [PATCH] bug fixes --- tools/jotpluggler/data.py | 5 ++--- tools/jotpluggler/pluggle.py | 2 +- tools/jotpluggler/views.py | 19 +++++++++---------- 3 files changed, 12 insertions(+), 14 deletions(-) diff --git a/tools/jotpluggler/data.py b/tools/jotpluggler/data.py index 1bdbc36b5a..e8572de0e9 100644 --- a/tools/jotpluggler/data.py +++ b/tools/jotpluggler/data.py @@ -3,7 +3,6 @@ import threading import multiprocessing import bisect from collections import defaultdict -from typing import Any import tqdm from openpilot.common.swaglog import cloudlog from openpilot.tools.lib.logreader import _LogFileReader, LogReader @@ -11,7 +10,7 @@ from openpilot.tools.lib.logreader import _LogFileReader, LogReader def flatten_dict(d: dict, sep: str = "/", prefix: str = None) -> dict: result = {} - stack = [(d, prefix)] + stack: list[tuple] = [(d, prefix)] while stack: obj, current_prefix = stack.pop() @@ -164,7 +163,7 @@ def msgs_to_time_series(msgs): return final_result, min_time or 0.0, max_time or 0.0 -def _process_segment(segment_identifier: str) -> tuple[dict[str, Any], float, float]: +def _process_segment(segment_identifier: str): try: lr = _LogFileReader(segment_identifier, sort_by_time=True) return msgs_to_time_series(lr) diff --git a/tools/jotpluggler/pluggle.py b/tools/jotpluggler/pluggle.py index d7a2cfba34..f55683633b 100755 --- a/tools/jotpluggler/pluggle.py +++ b/tools/jotpluggler/pluggle.py @@ -66,7 +66,7 @@ class MainController: self.plot_layout_manager = PlotLayoutManager(self.data_manager, self.playback_manager, scale=self.scale) self.data_manager.add_observer(self.on_data_loaded) self.avg_char_width = None - self.visible_paths = set() + self.visible_paths: set[str] = set() self.check_index = 0 def _create_global_themes(self): diff --git a/tools/jotpluggler/views.py b/tools/jotpluggler/views.py index 9ae46b4ea0..4577a8f7ed 100644 --- a/tools/jotpluggler/views.py +++ b/tools/jotpluggler/views.py @@ -185,7 +185,7 @@ class DataTreeNode: self.children: dict[str, DataTreeNode] = {} self.is_leaf = False self.child_count = 0 - self.is_plottable_cached = None + self.is_plottable_cached: bool | None = None self.ui_created = False self.ui_tag: str | None = None @@ -229,12 +229,12 @@ class DataTreeView: def _add_paths_to_tree(self, paths, incremental=False): search_term = self.current_search.strip().lower() filtered_paths = [path for path in paths if self._should_show_path(path, search_term)] + target_tree = self.data_tree if incremental else DataTreeNode(name="root") if not filtered_paths: - return + return target_tree nodes_to_update = set() if incremental else None - target_tree = self.data_tree if incremental else DataTreeNode(name="root") for path in sorted(filtered_paths): parts = path.split('/') @@ -339,13 +339,12 @@ class DataTreeView: dpg.add_text(node.name) dpg.add_text("N/A", tag=f"value_{node.full_path}") - if node.is_plottable_cached is None: - node.is_plottable_cached = self.data_manager.is_plottable(node.full_path) + if node.is_plottable_cached is None: + node.is_plottable_cached = self.data_manager.is_plottable(node.full_path) - if node.is_plottable_cached: - with dpg.drag_payload(parent=draggable_group, drag_data=node.full_path, - payload_type="TIMESERIES_PAYLOAD"): - dpg.add_text(f"Plot: {node.full_path}") + if node.is_plottable_cached: + with dpg.drag_payload(parent=draggable_group, drag_data=node.full_path, payload_type="TIMESERIES_PAYLOAD"): + dpg.add_text(f"Plot: {node.full_path}") node.ui_created = True node.ui_tag = f"value_{node.full_path}" @@ -371,7 +370,7 @@ class DataTreeView: self._remove_children_from_queue(node.full_path) def _remove_children_from_queue(self, collapsed_node_path: str): - new_queue = deque() + new_queue: deque[tuple] = deque() for node, parent_tag, search_term, is_leaf in self.ui_render_queue: # Keep items that are not children of the collapsed node if not node.full_path.startswith(collapsed_node_path + "/"):