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 @@ -20,6 +20,7 @@ persistent_identifier, snapshot_identifier, CONTENT, + DIRECTORY, ) from swh.web.browse.utils import ( @@ -47,6 +48,7 @@ SnapshotReleaseInfo, SnapshotContext, ContentMetadata, + DirectoryMetadata, ) from swh.web.common.utils import ( reverse, @@ -748,44 +750,50 @@ except NotFoundExc: revision_found = False - dir_metadata = { - "directory": sha1_git, - "context-independent directory": browse_dir_link, - "number of regular files": nb_files, - "number of subdirectories": nb_dirs, - "sum of regular file sizes": sum_file_sizes, - "path": dir_path, - "revision": revision_id, - "revision_found": revision_found, - "context-independent revision": browse_rev_link, - "snapshot": snapshot_id, - "context-independent snapshot": browse_snp_link, - } - - if origin_info: - dir_metadata["origin url"] = origin_info["url"] - dir_metadata["origin visit date"] = format_utc_iso_date(visit_info["date"]) - dir_metadata["origin visit type"] = visit_info["type"] - - vault_cooking = { - "directory_context": True, - "directory_id": sha1_git, - "revision_context": True, - "revision_id": revision_id, - } - swh_objects = [ {"type": "directory", "id": sha1_git}, {"type": "revision", "id": revision_id}, {"type": "snapshot", "id": snapshot_id}, ] + visit_date = None + visit_type = None + if visit_info: + visit_date = format_utc_iso_date(visit_info["date"]) + visit_type = visit_info["type"] + release_id = snapshot_context["release_id"] + browse_rel_link = None if release_id: swh_objects.append({"type": "release", "id": release_id}) browse_rel_link = gen_release_link(release_id) - dir_metadata["release"] = release_id - dir_metadata["context-independent release"] = browse_rel_link + + dir_metadata = DirectoryMetadata( + object_type=DIRECTORY, + directory=sha1_git, + directory_url=browse_dir_link, + nb_files=nb_files, + nb_dirs=nb_dirs, + sum_file_sizes=sum_file_sizes, + path=dir_path, + revision=revision_id, + revision_found=revision_found, + revision_url=browse_rev_link, + release=release_id, + release_url=browse_rel_link, + snapshot=snapshot_id, + snapshot_url=browse_snp_link, + origin_url=origin_url, + visit_date=visit_date, + visit_type=visit_type, + ) + + vault_cooking = { + "directory_context": True, + "directory_id": sha1_git, + "revision_context": True, + "revision_id": revision_id, + } swh_ids = get_swh_persistent_ids(swh_objects, snapshot_context) diff --git a/swh/web/browse/views/directory.py b/swh/web/browse/views/directory.py --- a/swh/web/browse/views/directory.py +++ b/swh/web/browse/views/directory.py @@ -11,6 +11,7 @@ import sentry_sdk +from swh.model.identifiers import DIRECTORY from swh.web.browse.browseurls import browse_route from swh.web.browse.snapshot_context import get_snapshot_context from swh.web.browse.utils import ( @@ -21,6 +22,7 @@ ) from swh.web.common import service from swh.web.common.exc import handle_view_exception, NotFoundExc +from swh.web.common.typing import DirectoryMetadata from swh.web.common.utils import reverse, gen_path_info @@ -126,12 +128,18 @@ sum_file_sizes = filesizeformat(sum_file_sizes) - dir_metadata = { - "directory": sha1_git, - "number of regular files": len(files), - "number of subdirectories": len(dirs), - "sum of regular file sizes": sum_file_sizes, - } + dir_metadata = DirectoryMetadata( + object_type=DIRECTORY, + directory=sha1_git, + nb_files=len(files), + nb_dirs=len(dirs), + sum_file_sizes=sum_file_sizes, + path=path or None, + revision=None, + revision_found=None, + release=None, + snapshot=None, + ) vault_cooking = { "directory_context": True, diff --git a/swh/web/common/typing.py b/swh/web/common/typing.py --- a/swh/web/common/typing.py +++ b/swh/web/common/typing.py @@ -140,3 +140,15 @@ revision: Optional[str] release: Optional[str] snapshot: Optional[str] + + +class DirectoryMetadata(SWHObjectMetadata): + directory: str + nb_files: int + nb_dirs: int + sum_file_sizes: str + path: str + revision: Optional[str] + revision_found: Optional[bool] + release: Optional[str] + snapshot: Optional[str]