SegmentRangeReader: log type selector (#30960)

* log type selector

* test this too

* and this

* invalid selector

* use strenum

* don't hardcode size

* oneline
pull/30968/head
Justin Newberry 1 year ago committed by GitHub
parent 32dfb3f8f2
commit be814ed447
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  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) SEGMENT_NAME = r'{}(?:--|/)(?P<segment_num>[0-9]+)'.format(ROUTE_NAME)
INDEX = r'-?[0-9]+' INDEX = r'-?[0-9]+'
SLICE = r'(?P<start>{})?:?(?P<end>{})?:?(?P<step>{})?'.format(INDEX, INDEX, INDEX) 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 BOOTLOG_NAME = ROUTE_NAME
EXPLORER_FILE = r'^(?P<segment_name>{})--(?P<file_name>[a-z]+\.[a-z0-9]+)$'.format(SEGMENT_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 @property
def _slice(self): def _slice(self):
return self.m.group("slice") 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.logreader import LogReader
from openpilot.tools.lib.route import Route, SegmentRange from openpilot.tools.lib.route import Route, SegmentRange
class ReadMode(enum.Enum): class ReadMode(enum.StrEnum):
RLOG = 0 # only read rlogs RLOG = "r" # only read rlogs
QLOG = 1 # only read qlogs QLOG = "q" # only read qlogs
#AUTO = 2 # default to rlogs, fallback to qlogs, not supported yet #AUTO = "a" # default to rlogs, fallback to qlogs, not supported yet
def create_slice_from_string(s: str): def create_slice_from_string(s: str):
@ -71,8 +71,11 @@ def auto_source(*args, **kwargs):
class SegmentRangeReader: 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) sr = SegmentRange(segment_range)
mode = default_mode if sr.selector is None else ReadMode(sr.selector)
self.lrs = source(sr, mode, sort_by_time) self.lrs = source(sr, mode, sort_by_time)
def __iter__(self): def __iter__(self):

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

Loading…
Cancel
Save