Tools: allow using plotjuggler on local data (#24473)

local juggler
pull/24586/head
ntegan1 3 years ago committed by GitHub
parent 72b52f8b7d
commit 07f7570840
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 10
      tools/lib/route.py
  2. 32
      tools/lib/tests/test_route_library.py
  3. 2
      tools/plotjuggler/juggle.py

@ -3,6 +3,7 @@ import re
from urllib.parse import urlparse from urllib.parse import urlparse
from collections import defaultdict from collections import defaultdict
from itertools import chain from itertools import chain
from typing import Optional
from tools.lib.auth_config import get_token from tools.lib.auth_config import get_token
from tools.lib.api import CommaApi from tools.lib.api import CommaApi
@ -196,7 +197,11 @@ class SegmentName:
# TODO: add constructor that takes dongle_id, time_str, segment_num and then create instances # TODO: add constructor that takes dongle_id, time_str, segment_num and then create instances
# of this class instead of manually constructing a segment name (use canonical_name prop instead) # of this class instead of manually constructing a segment name (use canonical_name prop instead)
def __init__(self, name_str: str, allow_route_name=False): def __init__(self, name_str: str, allow_route_name=False):
self._name_str = name_str data_dir_path_separator_index = name_str.rsplit("|", 1)[0].rfind("/")
use_data_dir = (data_dir_path_separator_index != -1) and ("|" in name_str)
self._name_str = name_str[data_dir_path_separator_index + 1:] if use_data_dir else name_str
self._data_dir = name_str[:data_dir_path_separator_index] if use_data_dir else None
seg_num_delim = "--" if self._name_str.count("--") == 2 else "/" seg_num_delim = "--" if self._name_str.count("--") == 2 else "/"
name_parts = self._name_str.rsplit(seg_num_delim, 1) name_parts = self._name_str.rsplit(seg_num_delim, 1)
if allow_route_name and len(name_parts) == 1: if allow_route_name and len(name_parts) == 1:
@ -220,4 +225,7 @@ class SegmentName:
@property @property
def route_name(self) -> RouteName: return self._route_name def route_name(self) -> RouteName: return self._route_name
@property
def data_dir(self) -> Optional[str]: return self._data_dir
def __str__(self) -> str: return self._canonical_name def __str__(self) -> str: return self._canonical_name

@ -0,0 +1,32 @@
#!/usr/bin/env python
import unittest
from collections import namedtuple
from tools.lib.route import SegmentName
class TestRouteLibrary(unittest.TestCase):
def test_segment_name_formats(self):
Case = namedtuple('Case', ['input', 'expected_route', 'expected_segment_num', 'expected_data_dir'])
cases = [ Case("4cf7a6ad03080c90|2021-09-29--13-46-36", "4cf7a6ad03080c90|2021-09-29--13-46-36", -1, None),
Case("4cf7a6ad03080c90/2021-09-29--13-46-36--1", "4cf7a6ad03080c90|2021-09-29--13-46-36", 1, None),
Case("4cf7a6ad03080c90|2021-09-29--13-46-36/2", "4cf7a6ad03080c90|2021-09-29--13-46-36", 2, None),
Case("4cf7a6ad03080c90/2021-09-29--13-46-36/3", "4cf7a6ad03080c90|2021-09-29--13-46-36", 3, None),
Case("/data/media/0/realdata/4cf7a6ad03080c90|2021-09-29--13-46-36", "4cf7a6ad03080c90|2021-09-29--13-46-36", -1, "/data/media/0/realdata"),
Case("/data/media/0/realdata/4cf7a6ad03080c90|2021-09-29--13-46-36--1", "4cf7a6ad03080c90|2021-09-29--13-46-36", 1, "/data/media/0/realdata"),
Case("/data/media/0/realdata/4cf7a6ad03080c90|2021-09-29--13-46-36/2", "4cf7a6ad03080c90|2021-09-29--13-46-36", 2, "/data/media/0/realdata") ]
def _validate(case):
route_or_segment_name = case.input
s = SegmentName(route_or_segment_name, allow_route_name=True)
self.assertEqual(str(s.route_name), case.expected_route)
self.assertEqual(s.segment_num, case.expected_segment_num)
self.assertEqual(s.data_dir, case.expected_data_dir)
for case in cases:
_validate(case)
if __name__ == "__main__":
unittest.main()

@ -88,7 +88,7 @@ def juggle_route(route_or_segment_name, segment_count, qlog, can, layout, dbc=No
if route_or_segment_name.segment_num != -1 and segment_count is None: if route_or_segment_name.segment_num != -1 and segment_count is None:
segment_count = 1 segment_count = 1
r = Route(route_or_segment_name.route_name.canonical_name) r = Route(route_or_segment_name.route_name.canonical_name, route_or_segment_name.data_dir)
logs = r.qlog_paths() if qlog else r.log_paths() logs = r.qlog_paths() if qlog else r.log_paths()
segment_end = segment_start + segment_count if segment_count else None segment_end = segment_start + segment_count if segment_count else None

Loading…
Cancel
Save