def json_error(status_code=400, status_message='error', **kw): errors = Errors(status=status_code) kw.setdefault('location', 'body') kw.setdefault('name', '') kw.setdefault('description', '') errors.add(**kw) return _JSONError(errors, status_code, status_message)
def test_error_handler(self): errors = Errors(403) errors.add('body', 'data', "Can't update resource in current (draft) status") request = mock.MagicMock() request.matchdict = {'a': 'b'} request.errors = errors response = error_handler(request) self.assertEqual( response.body, '{"status": "error", "errors": [{"location": "body", "name": "data", "description": "Can\'t update resource in current (draft) status"}]}' ) self.assertEqual(response.content_type, 'application/json') self.assertEqual(response.status, '403 Forbidden')
def _validate_request(self, request, data): """Raise a cornice compatible error when the application is not one of the defined ones""" if self.applications == {}: return application = request.matchdict.get('application') version = request.matchdict.get('version') errors = Errors() if application not in self.applications: errors.add("uri", "application", "the application %r is not defined, please use one of %s" % ( application, ", ".join(self.applications.keys()))) if version not in self.applications[application]: versions = self.applications[application] errors.add("uri", "version", ("the application %r is not defined for this version, please " "use one of %s") % (application, ", ".join(versions))) if len(errors) > 0: raise json_error(errors, 404)
class TestErrorsHelper(TestCase): def setUp(self): self.errors = Errors() def test_add_to_supported_location(self): self.errors.add('') self.errors.add('body', description='!') self.errors.add('querystring', name='field') self.errors.add('url') self.errors.add('header') self.errors.add('path') self.errors.add('cookies') self.errors.add('method') self.assertEqual(len(self.errors), 8) def test_raises_an_exception_when_location_is_unsupported(self): with self.assertRaises(ValueError): self.errors.add('something')
class TestErrorsHelper(TestCase): def setUp(self): self.errors = Errors() def test_add_to_supported_location(self): self.errors.add('') self.errors.add('body', description='!') self.errors.add('querystring', name='field') self.errors.add('url') self.errors.add('header') self.errors.add('path') self.errors.add('cookies') self.errors.add('method') self.assertEqual(len(self.errors), 8) def test_raises_an_exception_when_location_is_unsupported(self): with self.assertRaises(ValueError): self.errors.add('something')
def json_error(status=400, location='body', name='', description='', **kw): errors = Errors(status=status) errors.add(location=location, name=name, description=description, **kw) return cornice_error(errors)