Changeset View
Changeset View
Standalone View
Standalone View
swh/loader/package/loader.py
Show First 20 Lines • Show All 320 Lines • ▼ Show 20 Lines | ) -> Optional[CoreSWHID]: | ||||
# Let's return one of them. | # Let's return one of them. | ||||
# If there is a release extid, return it. | # If there is a release extid, return it. | ||||
release_extid_targets = { | release_extid_targets = { | ||||
extid_target | extid_target | ||||
for extid_target in extid_targets | for extid_target in extid_targets | ||||
if extid_target.object_type == ObjectType.RELEASE | if extid_target.object_type == ObjectType.RELEASE | ||||
} | } | ||||
if release_extid_targets: | extid_target2 = self.select_extid_target(p_info, release_extid_targets) | ||||
assert len(release_extid_targets) == 1, release_extid_targets | if extid_target2: | ||||
return list(release_extid_targets)[0] | return extid_target2 | ||||
# If there is no release extid (ie. if the package was only loaded with | # If there is no release extid (ie. if the package was only loaded with | ||||
# older versions of this loader, which produced revision objects instead | # older versions of this loader, which produced revision objects instead | ||||
# of releases), return a revision extid. | # of releases), return a revision extid. | ||||
assert len(extid_targets) == 1, extid_targets | assert len(extid_targets) == 1, extid_targets | ||||
extid_target = list(extid_targets)[0] | extid_target = list(extid_targets)[0] | ||||
assert extid_target.object_type == ObjectType.REVISION, extid_targets | assert extid_target.object_type == ObjectType.REVISION, extid_targets | ||||
return extid_target | return extid_target | ||||
else: | else: | ||||
# No target found (this is probably a new package version) | # No target found (this is probably a new package version) | ||||
return None | return None | ||||
def select_extid_target( | |||||
self, p_info: TPackageInfo, extid_targets: Set[CoreSWHID] | |||||
) -> Optional[CoreSWHID]: | |||||
"""Given a list of release extid targets, choses one appropriate for the | |||||
given package info. | |||||
Package loaders shyould implement this if their ExtIDs may map to multiple | |||||
releases, so they can fetch releases from the storage and inspect their fields | |||||
to select the right one for this ``p_info``. | |||||
""" | |||||
if extid_targets: | |||||
# The base package loader does not have the domain-specific knowledge | |||||
# to select the right release -> crash if there is more than one. | |||||
assert len(extid_targets) == 1, extid_targets | |||||
return list(extid_targets)[0] | |||||
return None | |||||
def download_package( | def download_package( | ||||
self, p_info: TPackageInfo, tmpdir: str | self, p_info: TPackageInfo, tmpdir: str | ||||
) -> List[Tuple[str, Mapping]]: | ) -> List[Tuple[str, Mapping]]: | ||||
"""Download artifacts for a specific package. All downloads happen in | """Download artifacts for a specific package. All downloads happen in | ||||
in the tmpdir folder. | in the tmpdir folder. | ||||
Default implementation expects the artifacts package info to be | Default implementation expects the artifacts package info to be | ||||
about one artifact per package. | about one artifact per package. | ||||
▲ Show 20 Lines • Show All 712 Lines • Show Last 20 Lines |