Changeset View
Changeset View
Standalone View
Standalone View
swh/deposit/api/edit.py
# Copyright (C) 2017-2020 The Software Heritage developers | # Copyright (C) 2017-2020 The Software Heritage developers | ||||
# See the AUTHORS file at the top-level directory of this distribution | # See the AUTHORS file at the top-level directory of this distribution | ||||
# License: GNU General Public License version 3, or any later version | # License: GNU General Public License version 3, or any later version | ||||
# See top-level LICENSE file for more information | # See top-level LICENSE file for more information | ||||
from typing import Any, Dict | from typing import Any, Dict | ||||
from rest_framework.request import Request | from rest_framework.request import Request | ||||
from swh.deposit.models import Deposit | from swh.deposit.models import Deposit | ||||
from swh.model.identifiers import parse_swhid | from swh.model.identifiers import parse_swhid | ||||
from ..config import DEPOSIT_STATUS_LOAD_SUCCESS | from ..config import DEPOSIT_STATUS_LOAD_SUCCESS | ||||
from ..errors import BAD_REQUEST, BadRequestError, ParserError, make_error_dict | from ..errors import BAD_REQUEST, DepositError, ParserError, make_error_dict | ||||
from ..parsers import SWHAtomEntryParser, SWHMultiPartParser | from ..parsers import SWHAtomEntryParser, SWHMultiPartParser | ||||
from .common import APIDelete, APIPut, ParsedRequestHeaders | from .common import APIDelete, APIPut, ParsedRequestHeaders | ||||
class EditAPI(APIPut, APIDelete): | class EditAPI(APIPut, APIDelete): | ||||
"""Deposit request class defining api endpoints for sword deposit. | """Deposit request class defining api endpoints for sword deposit. | ||||
What's known as 'Edit-IRI' in the sword specification. | What's known as 'Edit-IRI' in the sword specification. | ||||
▲ Show 20 Lines • Show All 105 Lines • ▼ Show 20 Lines | ) -> Dict[str, Any]: | ||||
"Atom entry deposit is supposed to send for metadata. " | "Atom entry deposit is supposed to send for metadata. " | ||||
"If the body is empty, there is no metadata.", | "If the body is empty, there is no metadata.", | ||||
) | ) | ||||
try: | try: | ||||
_, _, deposit, deposit_request = self._store_metadata_deposit( | _, _, deposit, deposit_request = self._store_metadata_deposit( | ||||
deposit, parse_swhid(swhid), metadata, raw_metadata, deposit.origin_url, | deposit, parse_swhid(swhid), metadata, raw_metadata, deposit.origin_url, | ||||
) | ) | ||||
except BadRequestError as bad_request_error: | except DepositError as deposit_error: | ||||
return bad_request_error.to_dict() | return deposit_error.to_dict() | ||||
return { | return { | ||||
"deposit_id": deposit.id, | "deposit_id": deposit.id, | ||||
"deposit_date": deposit_request.date, | "deposit_date": deposit_request.date, | ||||
"status": deposit.status, | "status": deposit.status, | ||||
"archive": None, | "archive": None, | ||||
} | } | ||||
def process_delete(self, req, collection_name: str, deposit_id: int) -> Dict: | def process_delete(self, req, collection_name: str, deposit_id: int) -> Dict: | ||||
"""Delete the container (deposit). | """Delete the container (deposit). | ||||
source: http://swordapp.github.io/SWORDv2-Profile/SWORDProfile.html#protocoloperations_deleteconteiner # noqa | source: http://swordapp.github.io/SWORDv2-Profile/SWORDProfile.html#protocoloperations_deleteconteiner # noqa | ||||
""" | """ | ||||
return self._delete_deposit(collection_name, deposit_id) | return self._delete_deposit(collection_name, deposit_id) |