| 181 | raise NotImplementedError("parse_meta is not available for RepoObj1") |
| 182 | |
| 183 | def parse( |
| 184 | self, id: bytes, cdata: bytes, decompress: bool = True, want_compressed: bool = False, ro_type: str = None |
| 185 | ) -> tuple[dict, bytes]: |
| 186 | assert not (not decompress and not want_compressed), "invalid parameter combination!" |
| 187 | assert isinstance(id, bytes) |
| 188 | assert isinstance(cdata, bytes) |
| 189 | assert ro_type is not None |
| 190 | data_compressed = self.key.decrypt(id, cdata) |
| 191 | compressor_cls, compression_level = Compressor.detect(data_compressed[:2]) |
| 192 | compressor = compressor_cls(level=compression_level, legacy_mode=True) |
| 193 | meta_compressed = {} |
| 194 | meta_compressed["ctype"] = compressor.ID |
| 195 | meta_compressed["clevel"] = compressor.level |
| 196 | meta_compressed["csize"] = len(data_compressed) |
| 197 | if decompress: |
| 198 | meta, data = compressor.decompress(None, data_compressed) |
| 199 | if not AUTHENTICATED_NO_KEY: |
| 200 | self.key.assert_id(id, data) |
| 201 | else: |
| 202 | meta, data = None, None |
| 203 | return meta_compressed if want_compressed else meta, data_compressed if want_compressed else data |