diff --git a/swh/deposit/api/converters.py b/swh/deposit/api/converters.py --- a/swh/deposit/api/converters.py +++ b/swh/deposit/api/converters.py @@ -1,4 +1,4 @@ -# Copyright (C) 2017-2018 The Software Heritage developers +# Copyright (C) 2017-2021 The Software Heritage developers # See the AUTHORS file at the top-level directory of this distribution # License: GNU General Public License version 3, or any later version # See top-level LICENSE file for more information @@ -21,7 +21,11 @@ 'archive': [{ 'summary': "summary-string", 'fields': [impacted-fields-list], - }] + }], + 'loading': [ + 'error 1', + 'error 2', + ], } Args: @@ -52,6 +56,10 @@ if _detail: msg.append("- %s%s\n" % (_detail["summary"], _str_fields(_detail))) + _detail = status_detail.get("loading") + if _detail: + msg.extend(f"- {error}\n" for error in _detail) + if not msg: return None return "".join(msg) diff --git a/swh/deposit/api/private/deposit_update_status.py b/swh/deposit/api/private/deposit_update_status.py --- a/swh/deposit/api/private/deposit_update_status.py +++ b/swh/deposit/api/private/deposit_update_status.py @@ -112,4 +112,7 @@ else: # rejected deposit.status = status + if "status_detail" in data: + deposit.status_detail = data["status_detail"] + deposit.save() diff --git a/swh/deposit/client.py b/swh/deposit/client.py --- a/swh/deposit/client.py +++ b/swh/deposit/client.py @@ -212,6 +212,7 @@ self, update_status_url, status, + status_detail=None, revision_id=None, directory_id=None, origin_url=None, @@ -233,6 +234,8 @@ payload["directory_id"] = directory_id if origin_url: payload["origin_url"] = origin_url + if status_detail: + payload["status_detail"] = status_detail self.do("put", update_status_url, json=payload) diff --git a/swh/deposit/tests/api/test_converters.py b/swh/deposit/tests/api/test_converters.py --- a/swh/deposit/tests/api/test_converters.py +++ b/swh/deposit/tests/api/test_converters.py @@ -48,12 +48,15 @@ {"summary": "Invalid archive", "fields": ["2"],}, {"summary": "Unsupported archive", "fields": ["1"],}, ], + "loading": ["error1", "error 2"], } expected_status_detail = """- Mandatory fields missing (name) - Invalid archive (2) - Unsupported archive (1) - At least one compatible url field. Failed (testurl) +- error1 +- error 2 """ actual_status_detail = convert_status_detail(status_detail) diff --git a/swh/deposit/tests/api/test_deposit_private_update_status.py b/swh/deposit/tests/api/test_deposit_private_update_status.py --- a/swh/deposit/tests/api/test_deposit_private_update_status.py +++ b/swh/deposit/tests/api/test_deposit_private_update_status.py @@ -36,6 +36,7 @@ """ deposit = ready_deposit_verified expected_status = DEPOSIT_STATUS_LOAD_SUCCESS + status_detail = "it works!" origin_url = "something" directory_id = "42a13fc721c8716ff695d0d62fc851d641f3a12b" revision_id = "47dc6b4636c7f6cba0df83e3d5490bf4334d987e" @@ -43,6 +44,7 @@ full_body_info = { "status": DEPOSIT_STATUS_LOAD_SUCCESS, + "status_detail": status_detail, "revision_id": revision_id, "directory_id": directory_id, "snapshot_id": snapshot_id, @@ -66,6 +68,7 @@ deposit = Deposit.objects.get(pk=deposit.id) assert deposit.status == expected_status + assert deposit.status_detail == status_detail assert deposit.swhid == expected_swhid assert deposit.swhid_context == expected_swhid_context diff --git a/swh/deposit/tests/loader/test_client.py b/swh/deposit/tests/loader/test_client.py --- a/swh/deposit/tests/loader/test_client.py +++ b/swh/deposit/tests/loader/test_client.py @@ -213,7 +213,10 @@ deposit_client = PrivateApiDepositClient(config=CLIENT_TEST_CONFIG) deposit_client.status_update( - "/update/status", DEPOSIT_STATUS_LOAD_SUCCESS, revision_id="some-revision-id", + "/update/status", + DEPOSIT_STATUS_LOAD_SUCCESS, + revision_id="some-revision-id", + status_detail="foo bar", ) mocked_put.assert_called_once_with( @@ -221,6 +224,7 @@ "https://nowhere.org/update/status", json={ "status": DEPOSIT_STATUS_LOAD_SUCCESS, + "status_detail": "foo bar", "revision_id": "some-revision-id", }, )