(self, fn, only_union_types=False, sort_by_time=False, dat=None)
| 88 | |
| 89 | class _LogFileReader: |
| 90 | def __init__(self, fn, only_union_types=False, sort_by_time=False, dat=None): |
| 91 | self.data_version = None |
| 92 | self._only_union_types = only_union_types |
| 93 | |
| 94 | ext = None |
| 95 | if not dat: |
| 96 | _, ext = os.path.splitext(urllib.parse.urlparse(fn).path) |
| 97 | if ext not in ('', '.bz2', '.zst'): |
| 98 | # old rlogs weren't compressed |
| 99 | raise ValueError(f"unknown extension {ext}") |
| 100 | |
| 101 | with FileReader(fn) as f: |
| 102 | dat = f.read() |
| 103 | |
| 104 | if ext == ".bz2" or dat.startswith(b'BZh9'): |
| 105 | dat = bz2.decompress(dat) |
| 106 | elif ext == ".zst" or dat.startswith(b'\x28\xB5\x2F\xFD'): |
| 107 | # https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md#zstandard-frames |
| 108 | dat = decompress_stream(dat) |
| 109 | |
| 110 | ents = capnp_log.Event.read_multiple_bytes(dat) |
| 111 | |
| 112 | self._ents = [] |
| 113 | try: |
| 114 | for e in ents: |
| 115 | self._ents.append(CachedEventReader(e)) |
| 116 | except capnp.KjException: |
| 117 | warnings.warn("Corrupted events detected", RuntimeWarning, stacklevel=1) |
| 118 | |
| 119 | if sort_by_time: |
| 120 | self._ents.sort(key=lambda x: x.logMonoTime) |
| 121 | |
| 122 | def __iter__(self) -> Iterator[capnp._DynamicStructReader]: |
| 123 | for ent in self._ents: |
nothing calls this directly
no test coverage detected