SegmentRangeReader: log type selector (#30960)

* log type selector

* test this too

* and this

* invalid selector

* use strenum

* don't hardcode size

* oneline
old-commit-hash: be814ed447
chrysler-long2
Justin Newberry 1 year ago committed by GitHub
parent 5087dcc5bb
commit 3b86243f1f
  1. 2
      tools/lib/helpers.py
  2. 4
      tools/lib/route.py
  3. 13
      tools/lib/srreader.py
  4. 20
      tools/lib/tests/test_srreader.py

@ -11,7 +11,7 @@ class RE:
SEGMENT_NAME = r'{}(?:--|/)(?P<segment_num>[0-9]+)'.format(ROUTE_NAME)
INDEX = r'-?[0-9]+'
SLICE = r'(?P<start>{})?:?(?P<end>{})?:?(?P<step>{})?'.format(INDEX, INDEX, INDEX)
SEGMENT_RANGE = r'{}(?:--|/)?(?P<slice>({}))?'.format(ROUTE_NAME, SLICE)
SEGMENT_RANGE = r'{}(?:--|/)?(?P<slice>({}))?/?(?P<selector>([qr]))?'.format(ROUTE_NAME, SLICE)
BOOTLOG_NAME = ROUTE_NAME
EXPLORER_FILE = r'^(?P<segment_name>{})--(?P<file_name>[a-z]+\.[a-z0-9]+)$'.format(SEGMENT_NAME)

@ -251,3 +251,7 @@ class SegmentRange:
@property
def _slice(self):
return self.m.group("slice")
@property
def selector(self):
return self.m.group("selector")

@ -6,10 +6,10 @@ from openpilot.tools.lib.helpers import RE
from openpilot.tools.lib.logreader import LogReader
from openpilot.tools.lib.route import Route, SegmentRange
class ReadMode(enum.Enum):
RLOG = 0 # only read rlogs
QLOG = 1 # only read qlogs
#AUTO = 2 # default to rlogs, fallback to qlogs, not supported yet
class ReadMode(enum.StrEnum):
RLOG = "r" # only read rlogs
QLOG = "q" # only read qlogs
#AUTO = "a" # default to rlogs, fallback to qlogs, not supported yet
def create_slice_from_string(s: str):
@ -71,8 +71,11 @@ def auto_source(*args, **kwargs):
class SegmentRangeReader:
def __init__(self, segment_range: str, mode=ReadMode.RLOG, source=auto_source, sort_by_time=False):
def __init__(self, segment_range: str, default_mode=ReadMode.RLOG, source=auto_source, sort_by_time=False):
sr = SegmentRange(segment_range)
mode = default_mode if sr.selector is None else ReadMode(sr.selector)
self.lrs = source(sr, mode, sort_by_time)
def __iter__(self):

@ -37,10 +37,11 @@ class TestSegmentRangeReader(unittest.TestCase):
self.assertListEqual(list(segs), expected)
@parameterized.expand([
(f"{TEST_ROUTE}//",),
(f"{TEST_ROUTE}///",),
(f"{TEST_ROUTE}---",),
(f"{TEST_ROUTE}/-4:--2",),
(f"{TEST_ROUTE}/-a",),
(f"{TEST_ROUTE}/j",),
(f"{TEST_ROUTE}/0:1:2:3",),
(f"{TEST_ROUTE}/:::3",),
])
@ -49,14 +50,17 @@ class TestSegmentRangeReader(unittest.TestCase):
sr = SegmentRange(segment_range)
parse_slice(sr)
@parameterized.expand([
(ReadMode.QLOG, 11643),
(ReadMode.RLOG, 70577),
])
def test_modes(self, mode, expected):
lr = SegmentRangeReader(TEST_ROUTE+"/0", mode)
def test_modes(self):
qlog_len = len(list(SegmentRangeReader(f"{TEST_ROUTE}/0", ReadMode.QLOG)))
rlog_len = len(list(SegmentRangeReader(f"{TEST_ROUTE}/0", ReadMode.RLOG)))
self.assertLess(qlog_len * 6, rlog_len)
def test_modes_from_name(self):
qlog_len = len(list(SegmentRangeReader(f"{TEST_ROUTE}/0/q")))
rlog_len = len(list(SegmentRangeReader(f"{TEST_ROUTE}/0/r")))
self.assertEqual(len(list(lr)), expected)
self.assertLess(qlog_len * 6, rlog_len)
if __name__ == "__main__":

Loading…
Cancel
Save