segmentrangereader: support sort_by_time (#30954)

support sort-by-time
pull/30956/head
Justin Newberry 1 year ago committed by GitHub
parent 926793b17f
commit cfb23eb2d1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 28
      tools/lib/srreader.py

@ -31,49 +31,49 @@ def parse_slice(sr: SegmentRange):
s = create_slice_from_string(sr._slice)
return segs[s] if isinstance(s, slice) else [segs[s]]
def comma_api_source(sr: SegmentRange, mode=ReadMode.RLOG):
def comma_api_source(sr: SegmentRange, mode=ReadMode.RLOG, sort_by_time=False):
segs = parse_slice(sr)
route = Route(sr.route_name)
log_paths = route.log_paths() if mode == ReadMode.RLOG else route.qlog_paths()
for seg in segs:
yield LogReader(log_paths[seg])
yield LogReader(log_paths[seg], sort_by_time=sort_by_time)
def internal_source(sr: SegmentRange, mode=ReadMode.RLOG):
def internal_source(sr: SegmentRange, mode=ReadMode.RLOG, sort_by_time=False):
segs = parse_slice(sr)
for seg in segs:
yield LogReader(f"cd:/{sr.dongle_id}/{sr.timestamp}/{seg}/{'rlog' if mode == ReadMode.RLOG else 'qlog'}.bz2")
yield LogReader(f"cd:/{sr.dongle_id}/{sr.timestamp}/{seg}/{'rlog' if mode == ReadMode.RLOG else 'qlog'}.bz2", sort_by_time=sort_by_time)
def openpilotci_source(sr: SegmentRange, mode=ReadMode.RLOG):
def openpilotci_source(sr: SegmentRange, mode=ReadMode.RLOG, sort_by_time=False):
segs = parse_slice(sr)
for seg in segs:
yield LogReader(get_url(sr.route_name, seg, 'rlog' if mode == ReadMode.RLOG else 'qlog'))
yield LogReader(get_url(sr.route_name, seg, 'rlog' if mode == ReadMode.RLOG else 'qlog'), sort_by_time=sort_by_time)
def auto_source(sr: SegmentRange, mode=ReadMode.RLOG):
def auto_source(*args, **kwargs):
# Automatically determine viable source
try:
next(internal_source(sr, mode))
return internal_source(sr, mode)
next(internal_source(*args, **kwargs))
return internal_source(*args, **kwargs)
except Exception:
pass
try:
next(openpilotci_source(sr, mode))
return openpilotci_source(sr, mode)
next(openpilotci_source(*args, **kwargs))
return openpilotci_source(*args, **kwargs)
except Exception:
pass
return comma_api_source(sr, mode)
return comma_api_source(*args, **kwargs)
class SegmentRangeReader:
def __init__(self, segment_range: str, mode=ReadMode.RLOG, source=auto_source):
def __init__(self, segment_range: str, mode=ReadMode.RLOG, source=auto_source, sort_by_time=False):
sr = SegmentRange(segment_range)
self.lrs = source(sr, mode)
self.lrs = source(sr, mode, sort_by_time)
def __iter__(self):
for lr in self.lrs:

Loading…
Cancel
Save