mirror of
https://github.com/dragonpilot/dragonpilot.git
synced 2026-06-27 00:42:05 +08:00
SegmentRangeReader: log type selector (#30960)
* log type selector * test this too * and this * invalid selector * use strenum * don't hardcode size * oneline
This commit is contained in:
@@ -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.assertEqual(len(list(lr)), expected)
|
||||
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.assertLess(qlog_len * 6, rlog_len)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
Reference in New Issue
Block a user