LogReader: support lists of identifiers (#31020)

* support lists of logs

* mark as slow instead
pull/31024/head
Justin Newberry 1 year ago committed by GitHub
parent 4da8d16514
commit 0739d5d7b2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  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