Changeset View
Changeset View
Standalone View
Standalone View
swh/storage/in_memory.py
Show First 20 Lines • Show All 1,103 Lines • ▼ Show 20 Lines | def raw_extrinsic_metadata_add(self, metadata: List[RawExtrinsicMetadata],) -> None: | ||||
): | ): | ||||
# Duplicate of an existing one; ignore it. | # Duplicate of an existing one; ignore it. | ||||
break | break | ||||
else: | else: | ||||
raw_extrinsic_metadata_list.add(metadata_entry) | raw_extrinsic_metadata_list.add(metadata_entry) | ||||
def raw_extrinsic_metadata_get( | def raw_extrinsic_metadata_get( | ||||
self, | self, | ||||
object_type: MetadataTargetType, | type: MetadataTargetType, | ||||
id: Union[str, SWHID], | id: Union[str, SWHID], | ||||
authority: MetadataAuthority, | authority: MetadataAuthority, | ||||
after: Optional[datetime.datetime] = None, | after: Optional[datetime.datetime] = None, | ||||
page_token: Optional[bytes] = None, | page_token: Optional[bytes] = None, | ||||
limit: int = 1000, | limit: int = 1000, | ||||
) -> PagedResult[RawExtrinsicMetadata]: | ) -> PagedResult[RawExtrinsicMetadata]: | ||||
authority_key = self._metadata_authority_key(authority) | authority_key = self._metadata_authority_key(authority) | ||||
if object_type == MetadataTargetType.ORIGIN: | if type == MetadataTargetType.ORIGIN: | ||||
if isinstance(id, SWHID): | if isinstance(id, SWHID): | ||||
raise StorageArgumentException( | raise StorageArgumentException( | ||||
f"raw_extrinsic_metadata_get called with object_type='origin', " | f"raw_extrinsic_metadata_get called with type='origin', " | ||||
f"but provided id is an SWHID: {id!r}" | f"but provided id is an SWHID: {id!r}" | ||||
) | ) | ||||
else: | else: | ||||
if not isinstance(id, SWHID): | if not isinstance(id, SWHID): | ||||
raise StorageArgumentException( | raise StorageArgumentException( | ||||
f"raw_extrinsic_metadata_get called with object_type!='origin', " | f"raw_extrinsic_metadata_get called with type!='origin', " | ||||
f"but provided id is not an SWHID: {id!r}" | f"but provided id is not an SWHID: {id!r}" | ||||
) | ) | ||||
if page_token is not None: | if page_token is not None: | ||||
(after_time, after_fetcher) = msgpack_loads(base64.b64decode(page_token)) | (after_time, after_fetcher) = msgpack_loads(base64.b64decode(page_token)) | ||||
after_fetcher = tuple(after_fetcher) | after_fetcher = tuple(after_fetcher) | ||||
if after is not None and after > after_time: | if after is not None and after > after_time: | ||||
raise StorageArgumentException( | raise StorageArgumentException( | ||||
"page_token is inconsistent with the value of 'after'." | "page_token is inconsistent with the value of 'after'." | ||||
) | ) | ||||
entries = self._raw_extrinsic_metadata[object_type][id][ | entries = self._raw_extrinsic_metadata[type][id][authority_key].iter_after( | ||||
authority_key | (after_time, after_fetcher) | ||||
].iter_after((after_time, after_fetcher)) | ) | ||||
elif after is not None: | elif after is not None: | ||||
entries = self._raw_extrinsic_metadata[object_type][id][ | entries = self._raw_extrinsic_metadata[type][id][authority_key].iter_from( | ||||
authority_key | (after,) | ||||
].iter_from((after,)) | ) | ||||
entries = (entry for entry in entries if entry.discovery_date > after) | entries = (entry for entry in entries if entry.discovery_date > after) | ||||
else: | else: | ||||
entries = iter(self._raw_extrinsic_metadata[object_type][id][authority_key]) | entries = iter(self._raw_extrinsic_metadata[type][id][authority_key]) | ||||
if limit: | if limit: | ||||
entries = itertools.islice(entries, 0, limit + 1) | entries = itertools.islice(entries, 0, limit + 1) | ||||
results = [] | results = [] | ||||
for entry in entries: | for entry in entries: | ||||
entry_authority = self._metadata_authorities[ | entry_authority = self._metadata_authorities[ | ||||
self._metadata_authority_key(entry.authority) | self._metadata_authority_key(entry.authority) | ||||
▲ Show 20 Lines • Show All 113 Lines • Show Last 20 Lines |