LogReader: support lists of identifiers (#31020)

* support lists of logs

* mark as slow instead
old-commit-hash: 0739d5d7b2
chrysler-long2
Justin Newberry 1 year ago committed by GitHub
parent 13e7366b6d
commit 35dcd7ccd8
  1. 9
      tools/lib/logreader.py
  2. 12
      tools/lib/tests/test_logreader.py

@ -11,7 +11,7 @@ import sys
import urllib.parse import urllib.parse
import warnings import warnings
from typing import Iterable, Iterator from typing import Iterable, Iterator, List
from urllib.parse import parse_qs, urlparse from urllib.parse import parse_qs, urlparse
from cereal import log as capnp_log from cereal import log as capnp_log
@ -161,7 +161,10 @@ def parse_indirect(identifier):
class LogReader: class LogReader:
def _logreaders_from_identifier(self, identifier): def _logreaders_from_identifier(self, identifier: str | List[str]):
if isinstance(identifier, list):
return [LogReader(i) for i in identifier]
parsed, source, is_indirect = parse_indirect(identifier) parsed, source, is_indirect = parse_indirect(identifier)
if not is_indirect: if not is_indirect:
@ -175,7 +178,7 @@ class LogReader:
return source(sr, mode, sort_by_time=self.sort_by_time, only_union_types=self.only_union_types) return source(sr, mode, sort_by_time=self.sort_by_time, only_union_types=self.only_union_types)
def __init__(self, identifier: str, default_mode=ReadMode.RLOG, default_source=auto_source, sort_by_time=False, only_union_types=False): def __init__(self, identifier: str | List[str], default_mode=ReadMode.RLOG, default_source=auto_source, sort_by_time=False, only_union_types=False):
self.default_mode = default_mode self.default_mode = default_mode
self.default_source = default_source self.default_source = default_source
self.identifier = identifier self.identifier = identifier

@ -2,6 +2,7 @@ import shutil
import tempfile import tempfile
import numpy as np import numpy as np
import unittest import unittest
import pytest
from parameterized import parameterized from parameterized import parameterized
import requests import requests
from openpilot.tools.lib.logreader import LogReader, parse_indirect, parse_slice, ReadMode from openpilot.tools.lib.logreader import LogReader, parse_indirect, parse_slice, ReadMode
@ -69,20 +70,27 @@ class TestLogReader(unittest.TestCase):
sr = SegmentRange(segment_range) sr = SegmentRange(segment_range)
parse_slice(sr) parse_slice(sr)
@unittest.skip("this test is too slow for the minimal coverage it provides") @pytest.mark.slow
def test_modes(self): def test_modes(self):
qlog_len = len(list(LogReader(f"{TEST_ROUTE}/0", ReadMode.QLOG))) qlog_len = len(list(LogReader(f"{TEST_ROUTE}/0", ReadMode.QLOG)))
rlog_len = len(list(LogReader(f"{TEST_ROUTE}/0", ReadMode.RLOG))) rlog_len = len(list(LogReader(f"{TEST_ROUTE}/0", ReadMode.RLOG)))
self.assertLess(qlog_len * 6, rlog_len) self.assertLess(qlog_len * 6, rlog_len)
@unittest.skip("this test is too slow for the minimal coverage it provides") @pytest.mark.slow
def test_modes_from_name(self): def test_modes_from_name(self):
qlog_len = len(list(LogReader(f"{TEST_ROUTE}/0/q"))) qlog_len = len(list(LogReader(f"{TEST_ROUTE}/0/q")))
rlog_len = len(list(LogReader(f"{TEST_ROUTE}/0/r"))) rlog_len = len(list(LogReader(f"{TEST_ROUTE}/0/r")))
self.assertLess(qlog_len * 6, rlog_len) self.assertLess(qlog_len * 6, rlog_len)
@pytest.mark.slow
def test_list(self):
qlog_len = len(list(LogReader(f"{TEST_ROUTE}/0/q")))
qlog_len_2 = len(list(LogReader([f"{TEST_ROUTE}/0/q", f"{TEST_ROUTE}/0/q"])))
self.assertEqual(qlog_len*2, qlog_len_2)
if __name__ == "__main__": if __name__ == "__main__":
unittest.main() unittest.main()

Loading…
Cancel
Save