diff --git a/tools/lib/route.py b/tools/lib/route.py index 067fccf188..388cb003e6 100644 --- a/tools/lib/route.py +++ b/tools/lib/route.py @@ -3,6 +3,7 @@ import re from urllib.parse import urlparse from collections import defaultdict from itertools import chain +from typing import Optional from tools.lib.auth_config import get_token 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 # 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): - 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 "/" name_parts = self._name_str.rsplit(seg_num_delim, 1) if allow_route_name and len(name_parts) == 1: @@ -220,4 +225,7 @@ class SegmentName: @property 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 diff --git a/tools/lib/tests/test_route_library.py b/tools/lib/tests/test_route_library.py new file mode 100755 index 0000000000..fbe7f3e776 --- /dev/null +++ b/tools/lib/tests/test_route_library.py @@ -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() diff --git a/tools/plotjuggler/juggle.py b/tools/plotjuggler/juggle.py index 3e8775eb8b..a2bf37bf0e 100755 --- a/tools/plotjuggler/juggle.py +++ b/tools/plotjuggler/juggle.py @@ -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: 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() segment_end = segment_start + segment_count if segment_count else None