Changeset View
Changeset View
Standalone View
Standalone View
swh/loader/package/deposit/loader.py
Show First 20 Lines • Show All 59 Lines • ▼ Show 20 Lines | class DepositPackageInfo(BasePackageInfo): | ||||
@classmethod | @classmethod | ||||
def from_metadata( | def from_metadata( | ||||
cls, metadata: Dict[str, Any], url: str, filename: str | cls, metadata: Dict[str, Any], url: str, filename: str | ||||
) -> "DepositPackageInfo": | ) -> "DepositPackageInfo": | ||||
# Note: | # Note: | ||||
# `date` and `committer_date` are always transmitted by the deposit read api | # `date` and `committer_date` are always transmitted by the deposit read api | ||||
# which computes itself the values. The loader needs to use those to create the | # which computes itself the values. The loader needs to use those to create the | ||||
# revision. | # release. | ||||
all_metadata_raw: List[str] = metadata["metadata_raw"] | all_metadata_raw: List[str] = metadata["metadata_raw"] | ||||
raw_info = { | raw_info = { | ||||
"origin": metadata["origin"], | "origin": metadata["origin"], | ||||
"origin_metadata": { | "origin_metadata": { | ||||
"metadata": metadata["metadata_dict"], | "metadata": metadata["metadata_dict"], | ||||
"provider": metadata["provider"], | "provider": metadata["provider"], | ||||
"tool": metadata["tool"], | "tool": metadata["tool"], | ||||
▲ Show 20 Lines • Show All 188 Lines • ▼ Show 20 Lines | ) -> Dict[str, Any]: | ||||
snapshot_id = hash_to_bytes(r["snapshot_id"]) | snapshot_id = hash_to_bytes(r["snapshot_id"]) | ||||
snapshot = snapshot_get_all_branches(self.storage, snapshot_id) | snapshot = snapshot_get_all_branches(self.storage, snapshot_id) | ||||
if not snapshot: | if not snapshot: | ||||
return r | return r | ||||
branches = snapshot.branches | branches = snapshot.branches | ||||
logger.debug("branches: %s", branches) | logger.debug("branches: %s", branches) | ||||
if not branches: | if not branches: | ||||
return r | return r | ||||
rev_id = branches[b"HEAD"].target | rel_id = branches[b"HEAD"].target | ||||
revision = self.storage.revision_get([rev_id])[0] | release = self.storage.release_get([rel_id])[0] | ||||
if not revision: | if not release: | ||||
return r | return r | ||||
# update the deposit's status to success with its | # update the deposit's status to success with its | ||||
# revision-id and directory-id | # release-id and directory-id | ||||
self.client.status_update( | self.client.status_update( | ||||
self.deposit_id, | self.deposit_id, | ||||
status="done", | status="done", | ||||
revision_id=hash_to_hex(rev_id), | release_id=hash_to_hex(rel_id), | ||||
directory_id=hash_to_hex(revision.directory), | directory_id=hash_to_hex(release.target), | ||||
snapshot_id=r["snapshot_id"], | snapshot_id=r["snapshot_id"], | ||||
origin_url=self.url, | origin_url=self.url, | ||||
) | ) | ||||
except Exception: | except Exception: | ||||
logger.exception("Problem when trying to update the deposit's status") | logger.exception("Problem when trying to update the deposit's status") | ||||
return {"status": "failed"} | return {"status": "failed"} | ||||
return r | return r | ||||
▲ Show 20 Lines • Show All 59 Lines • ▼ Show 20 Lines | def metadata_get(self, deposit_id: Union[int, str]) -> Dict[str, Any]: | ||||
logger.error(msg) | logger.error(msg) | ||||
raise ValueError(msg) | raise ValueError(msg) | ||||
def status_update( | def status_update( | ||||
self, | self, | ||||
deposit_id: Union[int, str], | deposit_id: Union[int, str], | ||||
status: str, | status: str, | ||||
errors: Optional[List[str]] = None, | errors: Optional[List[str]] = None, | ||||
revision_id: Optional[str] = None, | release_id: Optional[str] = None, | ||||
directory_id: Optional[str] = None, | directory_id: Optional[str] = None, | ||||
snapshot_id: Optional[str] = None, | snapshot_id: Optional[str] = None, | ||||
origin_url: Optional[str] = None, | origin_url: Optional[str] = None, | ||||
): | ): | ||||
"""Update deposit's information including status, and persistent | """Update deposit's information including status, and persistent | ||||
identifiers result of the loading. | identifiers result of the loading. | ||||
""" | """ | ||||
url = f"{self.base_url}/{deposit_id}/update/" | url = f"{self.base_url}/{deposit_id}/update/" | ||||
payload: Dict[str, Any] = {"status": status} | payload: Dict[str, Any] = {"status": status} | ||||
if revision_id: | if release_id: | ||||
payload["revision_id"] = revision_id | payload["release_id"] = release_id | ||||
if directory_id: | if directory_id: | ||||
payload["directory_id"] = directory_id | payload["directory_id"] = directory_id | ||||
if snapshot_id: | if snapshot_id: | ||||
payload["snapshot_id"] = snapshot_id | payload["snapshot_id"] = snapshot_id | ||||
if origin_url: | if origin_url: | ||||
payload["origin_url"] = origin_url | payload["origin_url"] = origin_url | ||||
if errors: | if errors: | ||||
payload["status_detail"] = {"loading": errors} | payload["status_detail"] = {"loading": errors} | ||||
self.do("put", url, json=payload) | self.do("put", url, json=payload) |