Page MenuHomeSoftware Heritage

D2072.id.diff
No OneTemporary

D2072.id.diff

diff --git a/swh/deposit/api/common.py b/swh/deposit/api/common.py
--- a/swh/deposit/api/common.py
+++ b/swh/deposit/api/common.py
@@ -12,7 +12,7 @@
from django.utils import timezone
from rest_framework import status
from rest_framework.authentication import BasicAuthentication
-from rest_framework.permissions import IsAuthenticated, AllowAny
+from rest_framework.permissions import IsAuthenticated
from rest_framework.views import APIView
from swh.model import hashutil
@@ -50,15 +50,6 @@
permission_classes = (IsAuthenticated, )
-class SWHPrivateAPIView(SWHAPIView):
- """Mixin intended as private api (so no authentication) based API view
- (for the private ones).
-
- """
- authentication_classes = ()
- permission_classes = (AllowAny, )
-
-
class SWHBaseDeposit(SWHDefaultConfig, SWHAPIView, metaclass=ABCMeta):
"""Base deposit request class sharing multiple common behaviors.
diff --git a/swh/deposit/api/private/__init__.py b/swh/deposit/api/private/__init__.py
--- a/swh/deposit/api/private/__init__.py
+++ b/swh/deposit/api/private/__init__.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2017-2018 The Software Heritage developers
+# Copyright (C) 2017-2019 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
@@ -8,6 +8,11 @@
from ...config import METADATA_TYPE
from ...models import DepositRequest, Deposit
+from rest_framework.permissions import AllowAny
+
+from swh.deposit.api.common import SWHAPIView
+from swh.deposit.errors import make_error_dict, NOT_FOUND
+
class DepositReadMixin:
"""Deposit Read mixin
@@ -49,3 +54,39 @@
metadata = (m.metadata for m in self._deposit_requests(
deposit, request_type=METADATA_TYPE))
return utils.merge(*metadata)
+
+
+class SWHPrivateAPIView(SWHAPIView):
+ """Mixin intended as private api (so no authentication) based API view
+ (for the private ones).
+
+ """
+ authentication_classes = ()
+ permission_classes = (AllowAny, )
+
+ def checks(self, req, collection_name, deposit_id=None):
+ """Override default checks implementation to allow empty collection.
+
+ """
+ if deposit_id:
+ try:
+ Deposit.objects.get(pk=deposit_id)
+ except Deposit.DoesNotExist:
+ return make_error_dict(
+ NOT_FOUND,
+ 'Deposit with id %s does not exist' %
+ deposit_id)
+
+ headers = self._read_headers(req)
+ checks = self.additional_checks(
+ req, headers, collection_name, deposit_id)
+ if 'error' in checks:
+ return checks
+
+ return {'headers': headers}
+
+ def get(self, req, collection_name=None, deposit_id=None, format=None):
+ return super().get(req, collection_name, deposit_id, format)
+
+ def put(self, req, collection_name=None, deposit_id=None, format=None):
+ return super().put(req, collection_name, deposit_id, format)
diff --git a/swh/deposit/api/private/deposit_check.py b/swh/deposit/api/private/deposit_check.py
--- a/swh/deposit/api/private/deposit_check.py
+++ b/swh/deposit/api/private/deposit_check.py
@@ -11,8 +11,8 @@
from rest_framework import status
-from . import DepositReadMixin
-from ..common import SWHGetDepositAPI, SWHPrivateAPIView
+from . import DepositReadMixin, SWHPrivateAPIView
+from ..common import SWHGetDepositAPI
from ...config import DEPOSIT_STATUS_VERIFIED, DEPOSIT_STATUS_REJECTED
from ...config import ARCHIVE_TYPE
from ...models import Deposit
@@ -33,7 +33,7 @@
r'.*\.(%s)$' % '|'.join(ARCHIVE_EXTENSIONS))
-class SWHChecksDeposit(SWHGetDepositAPI, SWHPrivateAPIView, DepositReadMixin):
+class SWHChecksDeposit(SWHPrivateAPIView, SWHGetDepositAPI, DepositReadMixin):
"""Dedicated class to read a deposit's raw archives content.
Only GET is supported.
diff --git a/swh/deposit/api/private/deposit_list.py b/swh/deposit/api/private/deposit_list.py
--- a/swh/deposit/api/private/deposit_list.py
+++ b/swh/deposit/api/private/deposit_list.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2018 The Software Heritage developers
+# Copyright (C) 2018-2019 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
@@ -9,7 +9,7 @@
from rest_framework.pagination import PageNumberPagination
from rest_framework import serializers
-from ..common import SWHPrivateAPIView
+from . import SWHPrivateAPIView
from ..converters import convert_status_detail
from ...models import Deposit
diff --git a/swh/deposit/api/private/deposit_read.py b/swh/deposit/api/private/deposit_read.py
--- a/swh/deposit/api/private/deposit_read.py
+++ b/swh/deposit/api/private/deposit_read.py
@@ -17,9 +17,9 @@
from swh.deposit.utils import normalize_date
from swh.deposit import utils
-from . import DepositReadMixin
+from . import DepositReadMixin, SWHPrivateAPIView
from ...config import SWH_PERSON, ARCHIVE_TYPE
-from ..common import SWHGetDepositAPI, SWHPrivateAPIView
+from ..common import SWHGetDepositAPI
from ...models import Deposit
@@ -67,7 +67,7 @@
yield archive_paths[0]
-class SWHDepositReadArchives(SWHGetDepositAPI, SWHPrivateAPIView,
+class SWHDepositReadArchives(SWHPrivateAPIView, SWHGetDepositAPI,
DepositReadMixin):
"""Dedicated class to read a deposit's raw archives content.
@@ -105,7 +105,7 @@
content_type='application/octet-stream')
-class SWHDepositReadMetadata(SWHGetDepositAPI, SWHPrivateAPIView,
+class SWHDepositReadMetadata(SWHPrivateAPIView, SWHGetDepositAPI,
DepositReadMixin):
"""Class in charge of aggregating metadata on a deposit.
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
@@ -1,4 +1,4 @@
-# Copyright (C) 2017-2018 The Software Heritage developers
+# Copyright (C) 2017-2019 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
@@ -9,13 +9,14 @@
persistent_identifier, REVISION, DIRECTORY
)
-from ..common import SWHPutDepositAPI, SWHPrivateAPIView
+from . import SWHPrivateAPIView
+from ..common import SWHPutDepositAPI
from ...errors import make_error_dict, BAD_REQUEST
from ...models import Deposit, DEPOSIT_STATUS_DETAIL
from ...models import DEPOSIT_STATUS_LOAD_SUCCESS
-class SWHUpdateStatusDeposit(SWHPutDepositAPI, SWHPrivateAPIView):
+class SWHUpdateStatusDeposit(SWHPrivateAPIView, SWHPutDepositAPI):
"""Deposit request class to update the deposit's status.
HTTP verbs supported: PUT
@@ -52,13 +53,6 @@
return {}
- def restrict_access(self, req, deposit=None):
- """Remove restriction modification to 'partial' deposit.
- Update is possible regardless of the existing status.
-
- """
- return None
-
def process_put(self, req, headers, collection_name, deposit_id):
"""Update the deposit's status
diff --git a/swh/deposit/api/private/urls.py b/swh/deposit/api/private/urls.py
--- a/swh/deposit/api/private/urls.py
+++ b/swh/deposit/api/private/urls.py
@@ -36,6 +36,27 @@
url(r'^(?P<collection_name>[^/]+)/(?P<deposit_id>[^/]+)/check/$',
SWHChecksDeposit.as_view(),
name=PRIVATE_CHECK_DEPOSIT),
+ # Retrieve deposit's raw archives' content
+ # -> GET
+ url(r'^(?P<deposit_id>[^/]+)/raw/$',
+ SWHDepositReadArchives.as_view(),
+ name=PRIVATE_GET_RAW_CONTENT+'-nc'),
+ # Update deposit's status
+ # -> PUT
+ url(r'^(?P<deposit_id>[^/]+)/update/$',
+ SWHUpdateStatusDeposit.as_view(),
+ name=PRIVATE_PUT_DEPOSIT+'-nc'),
+ # Retrieve metadata information on a specific deposit
+ # -> GET
+ url(r'^(?P<deposit_id>[^/]+)/meta/$',
+ SWHDepositReadMetadata.as_view(),
+ name=PRIVATE_GET_DEPOSIT_METADATA+'-nc'),
+ # Check archive and metadata information on a specific deposit
+ # -> GET
+ url(r'^(?P<deposit_id>[^/]+)/check/$',
+ SWHChecksDeposit.as_view(),
+ name=PRIVATE_CHECK_DEPOSIT+'-nc'),
+
url(r'^deposits/$', DepositList.as_view(),
name=PRIVATE_LIST_DEPOSITS)
]
diff --git a/swh/deposit/tests/api/test_deposit_check.py b/swh/deposit/tests/api/test_deposit_check.py
--- a/swh/deposit/tests/api/test_deposit_check.py
+++ b/swh/deposit/tests/api/test_deposit_check.py
@@ -36,6 +36,10 @@
def setUp(self):
super().setUp()
+ def private_deposit_url(self, deposit_id):
+ return reverse(PRIVATE_CHECK_DEPOSIT,
+ args=[self.collection.name, deposit_id])
+
def test_deposit_ok(self):
"""Proper deposit should succeed the checks (-> status ready)
@@ -47,9 +51,7 @@
deposit = Deposit.objects.get(pk=deposit_id)
self.assertEqual(deposit.status, DEPOSIT_STATUS_DEPOSITED)
- url = reverse(PRIVATE_CHECK_DEPOSIT,
- args=[self.collection.name, deposit.id])
-
+ url = self.private_deposit_url(deposit.id)
response = self.client.get(url)
self.assertEqual(response.status_code, status.HTTP_200_OK)
@@ -69,9 +71,7 @@
deposit = Deposit.objects.get(pk=deposit_id)
self.assertEqual(DEPOSIT_STATUS_DEPOSITED, deposit.status)
- url = reverse(PRIVATE_CHECK_DEPOSIT,
- args=[self.collection.name, deposit.id])
-
+ url = self.private_deposit_url(deposit.id)
response = self.client.get(url)
self.assertEqual(response.status_code, status.HTTP_200_OK)
@@ -94,9 +94,7 @@
deposit = Deposit.objects.get(pk=deposit_id)
self.assertEqual(DEPOSIT_STATUS_DEPOSITED, deposit.status)
- url = reverse(PRIVATE_CHECK_DEPOSIT,
- args=[self.collection.name, deposit.id])
-
+ url = self.private_deposit_url(deposit.id)
response = self.client.get(url)
self.assertEqual(response.status_code, status.HTTP_200_OK)
@@ -119,9 +117,7 @@
deposit = Deposit.objects.get(pk=deposit_id)
self.assertEqual(DEPOSIT_STATUS_DEPOSITED, deposit.status)
- url = reverse(PRIVATE_CHECK_DEPOSIT,
- args=[self.collection.name, deposit.id])
-
+ url = self.private_deposit_url(deposit.id)
response = self.client.get(url)
self.assertEqual(response.status_code, status.HTTP_200_OK)
@@ -158,8 +154,7 @@
deposit = Deposit.objects.get(pk=deposit_id)
self.assertEqual(deposit.status, DEPOSIT_STATUS_DEPOSITED)
- url = reverse(PRIVATE_CHECK_DEPOSIT,
- args=[self.collection.name, deposit.id])
+ url = self.private_deposit_url(deposit.id)
response = self.client.get(url)
@@ -171,6 +166,13 @@
self.assertEqual(deposit.status, DEPOSIT_STATUS_VERIFIED)
+@pytest.mark.fs
+class CheckDepositTest2(CheckDepositTest):
+ def private_deposit_url(self, deposit_id):
+ return reverse(PRIVATE_CHECK_DEPOSIT+'-nc',
+ args=[deposit_id])
+
+
class CheckMetadata(unittest.TestCase, SWHChecksDeposit):
def test_check_metadata_ok(self):
actual_check, detail = self._check_metadata({
diff --git a/swh/deposit/tests/api/test_deposit_read_archive.py b/swh/deposit/tests/api/test_deposit_read_archive.py
--- a/swh/deposit/tests/api/test_deposit_read_archive.py
+++ b/swh/deposit/tests/api/test_deposit_read_archive.py
@@ -30,15 +30,17 @@
self.root_path, 'archive2', 'file2', b'some other content in file')
self.workdir = os.path.join(self.root_path, 'workdir')
+ def private_deposit_url(self, deposit_id):
+ return reverse(PRIVATE_GET_RAW_CONTENT,
+ args=[self.collection.name, deposit_id])
+
def test_access_to_existing_deposit_with_one_archive(self):
"""Access to deposit should stream a 200 response with its raw content
"""
deposit_id = self.create_simple_binary_deposit()
- url = reverse(PRIVATE_GET_RAW_CONTENT,
- args=[self.collection.name, deposit_id])
-
+ url = self.private_deposit_url(deposit_id)
r = self.client.get(url)
self.assertEqual(r.status_code, status.HTTP_200_OK)
@@ -74,10 +76,7 @@
"""
deposit_id = self.create_complex_binary_deposit()
-
- url = reverse(PRIVATE_GET_RAW_CONTENT,
- args=[self.collection.name, deposit_id])
-
+ url = self.private_deposit_url(deposit_id)
r = self.client.get(url)
self.assertEqual(r.status_code, status.HTTP_200_OK)
@@ -93,33 +92,7 @@
self.assertEqual(os.listdir(TEST_CONFIG['extraction_dir']), [])
-class DepositReadArchivesFailureTest(APITestCase, WithAuthTestCase,
- BasicTestCase, CommonCreationRoutine):
- def test_access_to_nonexisting_deposit_returns_404_response(self):
- """Read unknown collection should return a 404 response
-
- """
- unknown_id = '999'
- url = reverse(PRIVATE_GET_RAW_CONTENT,
- args=[self.collection.name, unknown_id])
-
- response = self.client.get(url)
- self.assertEqual(response.status_code,
- status.HTTP_404_NOT_FOUND)
- self.assertIn('Deposit with id %s does not exist' % unknown_id,
- response.content.decode('utf-8'))
-
- def test_access_to_nonexisting_collection_returns_404_response(self):
- """Read unknown deposit should return a 404 response
-
- """
- collection_name = 'non-existing'
- deposit_id = self.create_deposit_partial()
- url = reverse(PRIVATE_GET_RAW_CONTENT,
- args=[collection_name, deposit_id])
-
- response = self.client.get(url)
- self.assertEqual(response.status_code,
- status.HTTP_404_NOT_FOUND)
- self.assertIn('Unknown collection name %s' % collection_name,
- response.content.decode('utf-8'))
+@pytest.mark.fs
+class DepositReadArchivesTest2(DepositReadArchivesTest):
+ def private_deposit_url(self, deposit_id):
+ return reverse(PRIVATE_GET_RAW_CONTENT+'-nc', args=[deposit_id])
diff --git a/swh/deposit/tests/api/test_deposit_read_metadata.py b/swh/deposit/tests/api/test_deposit_read_metadata.py
--- a/swh/deposit/tests/api/test_deposit_read_metadata.py
+++ b/swh/deposit/tests/api/test_deposit_read_metadata.py
@@ -60,14 +60,17 @@
%s
</entry>"""
+ def private_deposit_url(self, deposit_id):
+ return reverse(PRIVATE_GET_DEPOSIT_METADATA,
+ args=[self.collection.name, deposit_id])
+
def test_read_metadata(self):
"""Private metadata read api to existing deposit should return metadata
"""
deposit_id = self.create_deposit_partial()
- url = reverse(PRIVATE_GET_DEPOSIT_METADATA,
- args=[self.collection.name, deposit_id])
+ url = self.private_deposit_url(deposit_id)
response = self.client.get(url)
@@ -167,8 +170,7 @@
self.assertEqual(deposit.parent, deposit_parent)
self.assertEqual(deposit.status, DEPOSIT_STATUS_PARTIAL)
- url = reverse(PRIVATE_GET_DEPOSIT_METADATA,
- args=[self.collection.name, deposit_id])
+ url = self.private_deposit_url(deposit_id)
response = self.client.get(url)
@@ -256,10 +258,7 @@
deposit_id = self.create_deposit_partial_with_data_in_args(
codemeta_entry_data)
-
- url = reverse(PRIVATE_GET_DEPOSIT_METADATA,
- args=[self.collection.name, deposit_id])
-
+ url = self.private_deposit_url(deposit_id)
response = self.client.get(url)
self.assertEqual(response.status_code,
@@ -383,9 +382,7 @@
deposit.complete_date = '2016-04-06'
deposit.save()
- url = reverse(PRIVATE_GET_DEPOSIT_METADATA,
- args=[self.collection.name, deposit_id])
-
+ url = self.private_deposit_url(deposit_id)
response = self.client.get(url)
self.assertEqual(response.status_code,
@@ -512,10 +509,7 @@
deposit_id = self.create_deposit_partial_with_data_in_args(
codemeta_entry_data)
-
- url = reverse(PRIVATE_GET_DEPOSIT_METADATA,
- args=[self.collection.name, deposit_id])
-
+ url = self.private_deposit_url(deposit_id)
response = self.client.get(url)
self.assertEqual(response.status_code,
@@ -636,26 +630,15 @@
"""
unknown_id = '999'
- url = reverse(PRIVATE_GET_DEPOSIT_METADATA,
- args=[self.collection.name, unknown_id])
-
+ url = self.private_deposit_url(unknown_id)
response = self.client.get(url)
self.assertEqual(response.status_code,
status.HTTP_404_NOT_FOUND)
self.assertIn('Deposit with id %s does not exist' % unknown_id,
response.content.decode('utf-8'))
- def test_access_to_nonexisting_collection_returns_404_response(self):
- """Read unknown deposit should return a 404 response
- """
- collection_name = 'non-existing'
- deposit_id = self.create_deposit_partial()
- url = reverse(PRIVATE_GET_DEPOSIT_METADATA,
- args=[collection_name, deposit_id])
-
- response = self.client.get(url)
- self.assertEqual(response.status_code,
- status.HTTP_404_NOT_FOUND)
- self.assertIn('Unknown collection name %s' % collection_name,
- response.content.decode('utf-8'),)
+class DepositReadMetadataTest2(DepositReadMetadataTest):
+ def private_deposit_url(self, deposit_id):
+ return reverse(PRIVATE_GET_DEPOSIT_METADATA+'-nc',
+ args=[deposit_id])
diff --git a/swh/deposit/tests/api/test_deposit_update_status.py b/swh/deposit/tests/api/test_deposit_update_status.py
--- a/swh/deposit/tests/api/test_deposit_update_status.py
+++ b/swh/deposit/tests/api/test_deposit_update_status.py
@@ -28,12 +28,15 @@
self.deposit = Deposit.objects.get(pk=deposit.id)
assert self.deposit.status == DEPOSIT_STATUS_VERIFIED
+ def private_deposit_url(self, deposit_id):
+ return reverse(PRIVATE_PUT_DEPOSIT,
+ args=[self.collection.name, deposit_id])
+
def test_update_deposit_status(self):
"""Existing status for update should return a 204 response
"""
- url = reverse(PRIVATE_PUT_DEPOSIT,
- args=[self.collection.name, self.deposit.id])
+ url = self.private_deposit_url(self.deposit.id)
possible_status = set(DEPOSIT_STATUS_DETAIL.keys()) - set(
[DEPOSIT_STATUS_LOAD_SUCCESS])
@@ -53,8 +56,7 @@
"""Existing status for update with info should return a 204 response
"""
- url = reverse(PRIVATE_PUT_DEPOSIT,
- args=[self.collection.name, self.deposit.id])
+ url = self.private_deposit_url(self.deposit.id)
expected_status = DEPOSIT_STATUS_LOAD_SUCCESS
origin_url = 'something'
@@ -91,8 +93,7 @@
"""Unknown status for update should return a 400 response
"""
- url = reverse(PRIVATE_PUT_DEPOSIT,
- args=[self.collection.name, self.deposit.id])
+ url = self.private_deposit_url(self.deposit.id)
response = self.client.put(
url,
@@ -105,8 +106,7 @@
"""No status provided for update should return a 400 response
"""
- url = reverse(PRIVATE_PUT_DEPOSIT,
- args=[self.collection.name, self.deposit.id])
+ url = self.private_deposit_url(self.deposit.id)
response = self.client.put(
url,
@@ -119,8 +119,7 @@
"""Providing successful status without swh_id should return a 400
"""
- url = reverse(PRIVATE_PUT_DEPOSIT,
- args=[self.collection.name, self.deposit.id])
+ url = self.private_deposit_url(self.deposit.id)
response = self.client.put(
url,
@@ -128,3 +127,8 @@
data=json.dumps({'status': DEPOSIT_STATUS_LOAD_SUCCESS}))
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
+
+
+class UpdateDepositStatusTest2(UpdateDepositStatusTest):
+ def private_deposit_url(self, deposit_id):
+ return reverse(PRIVATE_PUT_DEPOSIT+'-nc', args=[deposit_id])

File Metadata

Mime Type
text/plain
Expires
Thu, Jul 3, 3:41 PM (2 w, 1 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3219693

Event Timeline