mirror of
https://github.com/firestar5683/StarPilot.git
synced 2026-06-28 01:52:06 +08:00
segmentrangereader: support sort_by_time (#30954)
support sort-by-time old-commit-hash: cfb23eb2d160639b870690a9bd6e7ba5350e3bc6
This commit is contained in:
+14
-14
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user