diff --git a/swh/web/browse/snapshot_context.py b/swh/web/browse/snapshot_context.py --- a/swh/web/browse/snapshot_context.py +++ b/swh/web/browse/snapshot_context.py @@ -268,8 +268,8 @@ continue for branch in revision_to_branch[revision["id"]]: _add_branch_info(branch, revision) - for release in revision_to_release[revision["id"]]: - releases[release]["directory"] = revision["directory"] + for release_id in revision_to_release[revision["id"]]: + releases[release_id]["directory"] = revision["directory"] for branch_alias, branch_target in branch_aliases.items(): if branch_target in branches: diff --git a/swh/web/common/service.py b/swh/web/common/service.py --- a/swh/web/common/service.py +++ b/swh/web/common/service.py @@ -446,7 +446,7 @@ return converters.from_directory_entry(queried_dir) -def lookup_release(release_sha1_git): +def lookup_release(release_sha1_git: str) -> Dict[str, Any]: """Return information about the release with sha1 release_sha1_git. Args: @@ -462,19 +462,20 @@ sha1_git_bin = _to_sha1_bin(release_sha1_git) release = _first_element(storage.release_get([sha1_git_bin])) if not release: - raise NotFoundExc("Release with sha1_git %s not found." % release_sha1_git) - return converters.from_release(release) + raise NotFoundExc(f"Release with sha1_git {release_sha1_git} not found.") + return converters.from_release(release.to_dict()) -def lookup_release_multiple(sha1_git_list): - """Return information about the revisions identified with +def lookup_release_multiple(sha1_git_list) -> Iterator[Dict[str, Any]]: + """Return information about the releases identified with their sha1_git identifiers. Args: - sha1_git_list: A list of revision sha1_git identifiers + sha1_git_list: A list of release sha1_git identifiers Returns: - Release information as dict. + Iterator of Release metadata information as dict. Unknown releases are + filtered out. Raises: ValueError if the identifier provided is not of sha1 nature. @@ -482,7 +483,9 @@ """ sha1_bin_list = [_to_sha1_bin(sha1_git) for sha1_git in sha1_git_list] releases = storage.release_get(sha1_bin_list) or [] - return (converters.from_release(r) for r in releases) + for r in releases: + if r is not None: + yield converters.from_release(r.to_dict()) def lookup_revision(rev_sha1_git): diff --git a/swh/web/tests/conftest.py b/swh/web/tests/conftest.py --- a/swh/web/tests/conftest.py +++ b/swh/web/tests/conftest.py @@ -19,7 +19,7 @@ from swh.model.hashutil import ALGORITHMS, hash_to_bytes from swh.web.common import converters -from swh.web.common.typing import OriginVisitInfo +from swh.web.common.typing import OriginVisitInfo, ReleaseMetadata from swh.web.tests.data import get_tests_data, override_storages from swh.storage.algos.origin import origin_get_latest_visit_status from swh.storage.algos.snapshot import snapshot_get_all_branches, snapshot_get_latest @@ -205,10 +205,10 @@ ) return list(dir_content) - def release_get(self, rel_id): + def release_get(self, rel_id: str) -> ReleaseMetadata: rel_id_bytes = hash_to_bytes(rel_id) - rel_data = next(self.storage.release_get([rel_id_bytes])) - return converters.from_release(rel_data) + rel_data = self.storage.release_get([rel_id_bytes])[0] + return converters.from_release(rel_data.to_dict() if rel_data else None) def revision_get(self, rev_id): rev_id_bytes = hash_to_bytes(rev_id) diff --git a/swh/web/tests/data.py b/swh/web/tests/data.py --- a/swh/web/tests/data.py +++ b/swh/web/tests/data.py @@ -227,8 +227,8 @@ if target_type == "revision": revisions.add(branch_data.target) elif target_type == "release": - release = next(storage.release_get([branch_data.target])) - revisions.add(release["target"]) + release = storage.release_get([branch_data.target])[0] + revisions.add(release.target) releases.add(hash_to_hex(branch_data.target)) for rev_log in storage.revision_shortlog(set(revisions)): diff --git a/swh/web/tests/strategies.py b/swh/web/tests/strategies.py --- a/swh/web/tests/strategies.py +++ b/swh/web/tests/strategies.py @@ -342,7 +342,7 @@ into the test archive. """ return sha1().filter( - lambda s: next(get_tests_data()["storage"].release_get([s])) is None + lambda s: get_tests_data()["storage"].release_get([s])[0] is None )