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 warnings
from typing import Iterable, Iterator
from typing import Iterable, Iterator, List
from urllib.parse import parse_qs, urlparse
from cereal import log as capnp_log
@ -161,7 +161,10 @@ def parse_indirect(identifier):
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)
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)
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_source = default_source
self.identifier = identifier

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

Loading…
Cancel
Save