diff --git a/swh/web/api/views/vault.py b/swh/web/api/views/vault.py --- a/swh/web/api/views/vault.py +++ b/swh/web/api/views/vault.py @@ -8,6 +8,7 @@ from django.http import HttpResponse from django.shortcuts import redirect +from swh.model.hashutil import hash_to_hex from swh.model.identifiers import CoreSWHID, ObjectType from swh.web.api.apidoc import api_doc, format_docstring from swh.web.api.apiurls import api_route @@ -44,15 +45,24 @@ ) -def _vault_response(vault_response: Dict[str, Any]) -> Dict[str, Any]: - return { +def _vault_response( + vault_response: Dict[str, Any], add_legacy_items: bool +) -> Dict[str, Any]: + d = { "fetch_url": vault_response["fetch_url"], "progress_message": vault_response["progress_msg"], "id": vault_response["task_id"], "status": vault_response["task_status"], - "swhid": str(vault_response["swhid"]), + "swhid": vault_response["swhid"], } + if add_legacy_items: + swhid = CoreSWHID.from_string(vault_response["swhid"]) + d["obj_type"] = swhid.object_type.name.lower() + d["obj_id"] = hash_to_hex(swhid.object_id) + + return d + ###################################################### # Flat bundles @@ -114,7 +124,7 @@ res["fetch_url"] = reverse( "api-1-vault-fetch-flat", url_args={"swhid": str(swhid)}, request=request, ) - return _vault_response(res) + return _vault_response(res, add_legacy_items=False) elif swhid.object_type == ObjectType.CONTENT: raise BadInputExc( "Content objects do not need to be cooked, " @@ -155,7 +165,7 @@ res["fetch_url"] = reverse( "api-1-vault-fetch-flat", url_args={"swhid": swhid}, request=request, ) - return _vault_response(res) + return _vault_response(res, add_legacy_items=True) @api_route( @@ -279,7 +289,7 @@ url_args={"swhid": str(swhid)}, request=request, ) - return _vault_response(res) + return _vault_response(res, add_legacy_items=False) elif swhid.object_type == ObjectType.CONTENT: raise BadInputExc( "Content objects do not need to be cooked, " @@ -319,7 +329,7 @@ res["fetch_url"] = reverse( "api-1-vault-fetch-gitfast", url_args={"swhid": swhid}, request=request, ) - return _vault_response(res) + return _vault_response(res, add_legacy_items=True) @api_route( @@ -444,7 +454,7 @@ url_args={"swhid": str(swhid)}, request=request, ) - return _vault_response(res) + return _vault_response(res, add_legacy_items=False) elif swhid.object_type == ObjectType.CONTENT: raise BadInputExc( "Content objects do not need to be cooked, " diff --git a/swh/web/tests/api/views/test_vault.py b/swh/web/tests/api/views/test_vault.py --- a/swh/web/tests/api/views/test_vault.py +++ b/swh/web/tests/api/views/test_vault.py @@ -200,9 +200,9 @@ def test_api_vault_cook_legacy(api_client, mocker, directory, revision): mock_archive = mocker.patch("swh.web.api.views.vault.archive") - for obj_type, bundle_type, obj_id in ( - ("directory", "flat", directory), - ("revision_gitfast", "gitfast", revision), + for obj_type, bundle_type, response_obj_type, obj_id in ( + ("directory", "flat", "directory", directory), + ("revision_gitfast", "gitfast", "revision", revision), ): swhid = f"swh:1:{obj_type[:3]}:{obj_id}" @@ -215,6 +215,8 @@ "task_id": 1, "task_status": "done", "swhid": swhid, + "obj_type": response_obj_type, + "obj_id": obj_id, } stub_fetch = b"content" @@ -235,6 +237,8 @@ "id": 1, "status": "done", "swhid": swhid, + "obj_type": response_obj_type, + "obj_id": obj_id, } mock_archive.vault_cook.assert_called_with( bundle_type, CoreSWHID.from_string(swhid), email