Page MenuHomeSoftware Heritage

D2219.diff
No OneTemporary

D2219.diff

diff --git a/swh/web/api/apiresponse.py b/swh/web/api/apiresponse.py
--- a/swh/web/api/apiresponse.py
+++ b/swh/web/api/apiresponse.py
@@ -13,7 +13,7 @@
from swh.storage.exc import StorageDBError, StorageAPIError
from swh.web.api import utils
-from swh.web.common.exc import NotFoundExc, ForbiddenExc
+from swh.web.common.exc import NotFoundExc, ForbiddenExc, BadInputExc
from swh.web.common.utils import shorten_path, gen_path_info
from swh.web.config import get_config
@@ -164,8 +164,10 @@
doc_data: documentation data for HTML response
"""
- error_code = 400
- if isinstance(error, NotFoundExc):
+ error_code = 500
+ if isinstance(error, BadInputExc):
+ error_code = 400
+ elif isinstance(error, NotFoundExc):
error_code = 404
elif isinstance(error, ForbiddenExc):
error_code = 403
diff --git a/swh/web/tests/api/test_apidoc.py b/swh/web/tests/api/test_apidoc.py
--- a/swh/web/tests/api/test_apidoc.py
+++ b/swh/web/tests/api/test_apidoc.py
@@ -6,8 +6,11 @@
from rest_framework.test import APITestCase
from rest_framework.response import Response
+from swh.storage.exc import StorageDBError, StorageAPIError
+
from swh.web.api.apidoc import api_doc, _parse_httpdomain_doc
from swh.web.api.apiurls import api_route
+from swh.web.common.exc import BadInputExc, ForbiddenExc, NotFoundExc
from swh.web.tests.testcase import WebTestCase
# flake8: noqa
@@ -58,6 +61,15 @@
class APIDocTestCase(WebTestCase, APITestCase):
+ exception_http_code = {
+ BadInputExc: 400,
+ ForbiddenExc: 403,
+ NotFoundExc: 404,
+ Exception: 500,
+ StorageAPIError: 503,
+ StorageDBError: 503,
+ }
+
def test_apidoc_nodoc_failure(self):
with self.assertRaises(Exception):
@api_doc('/my/nodoc/url/')
@@ -90,6 +102,26 @@
# then
self.assertEqual(rv.status_code, 200, rv.data)
+ @staticmethod
+ @api_route(r'/test/error/(?P<exc_name>.+)/',
+ 'test-error')
+ @api_doc('/test/error/')
+ def apidoc_test_error_route(request, exc_name):
+ """
+ Sample doc
+ """
+ for e in APIDocTestCase.exception_http_code.keys():
+ if e.__name__ == exc_name:
+ raise e('Error')
+
+ def test_apidoc_error(self):
+ for exc, code in self.exception_http_code.items():
+ # when
+ rv = self.client.get('/api/1/test/error/%s/' % exc.__name__)
+
+ # then
+ self.assertEqual(rv.status_code, code)
+
@staticmethod
@api_route(r'/some/full/(?P<myarg>[0-9]+)/(?P<myotherarg>[0-9]+)/',
'some-complete-doc-route')
diff --git a/swh/web/tests/api/views/test_origin.py b/swh/web/tests/api/views/test_origin.py
--- a/swh/web/tests/api/views/test_origin.py
+++ b/swh/web/tests/api/views/test_origin.py
@@ -12,6 +12,7 @@
from swh.storage.exc import StorageDBError, StorageAPIError
+from swh.web.common.exc import BadInputExc
from swh.web.common.utils import reverse
from swh.web.common.origin_visits import get_origin_visits
from swh.web.tests.strategies import (
@@ -55,7 +56,7 @@
err_msg = 'voluntary error to check the bad request middleware.'
- mock_get_origin_visits.side_effect = ValueError(err_msg)
+ mock_get_origin_visits.side_effect = BadInputExc(err_msg)
url = reverse(
'api-1-origin-visits', url_args={'origin_url': 'http://foo'})
@@ -64,7 +65,7 @@
self.assertEqual(rv.status_code, 400, rv.data)
self.assertEqual(rv['Content-Type'], 'application/json')
self.assertEqual(rv.data, {
- 'exception': 'ValueError',
+ 'exception': 'BadInputExc',
'reason': err_msg})
@patch('swh.web.api.views.origin.get_origin_visits')
diff --git a/swh/web/tests/api/views/test_stat.py b/swh/web/tests/api/views/test_stat.py
--- a/swh/web/tests/api/views/test_stat.py
+++ b/swh/web/tests/api/views/test_stat.py
@@ -8,6 +8,7 @@
from swh.storage.exc import StorageDBError, StorageAPIError
+from swh.web.common.exc import BadInputExc
from swh.web.common.utils import reverse
from swh.web.tests.testcase import WebTestCase
@@ -16,7 +17,7 @@
@patch('swh.web.api.views.stat.service')
def test_api_1_stat_counters_raise_error(self, mock_service):
- mock_service.stat_counters.side_effect = ValueError(
+ mock_service.stat_counters.side_effect = BadInputExc(
'voluntary error to check the bad request middleware.')
url = reverse('api-1-stat-counters')
@@ -25,7 +26,7 @@
self.assertEqual(rv.status_code, 400, rv.data)
self.assertEqual(rv['Content-Type'], 'application/json')
self.assertEqual(rv.data, {
- 'exception': 'ValueError',
+ 'exception': 'BadInputExc',
'reason': 'voluntary error to check the bad request middleware.'})
@patch('swh.web.api.views.stat.service')

File Metadata

Mime Type
text/plain
Expires
Wed, Dec 18, 5:53 AM (1 d, 20 h ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3216540

Event Timeline