diff --git a/falcon/exceptions.py b/falcon/exceptions.py index 3535459..a9ebb5b 100644 --- a/falcon/exceptions.py +++ b/falcon/exceptions.py @@ -178,7 +178,7 @@ class HTTPPreconditionFailed(HTTPError): class HTTPUnsupportedMediaType(HTTPError): """415 Unsupported Media Type - Sets title to "Unsupported Media Type". + Sets title to "Unsupported media type". Args: description: Human-friendly description of the error, along with a @@ -188,7 +188,7 @@ class HTTPUnsupportedMediaType(HTTPError): """ def __init__(self, description, **kwargs): - HTTPError.__init__(self, status.HTTP_415, 'Unsupported Media Type', + HTTPError.__init__(self, status.HTTP_415, 'Unsupported media type', description, **kwargs) @@ -220,8 +220,7 @@ class HTTPUpgradeRequired(HTTPError): """ def __init__(self, title, description, **kwargs): - HTTPError.__init__(self, status.HTTP_426, 'Upgrade Required', - description, **kwargs) + HTTPError.__init__(self, status.HTTP_426, title, description, **kwargs) class HTTPInternalServerError(HTTPError): diff --git a/falcon/request.py b/falcon/request.py index 61c9bb4..2fea229 100644 --- a/falcon/request.py +++ b/falcon/request.py @@ -238,8 +238,8 @@ class Request(object): if not required: return default - raise HTTPBadRequest('Missing header', - 'The "' + name + '" header is required.') + description = 'The "' + name + '" header is required.' + raise HTTPBadRequest('Missing header', description) def get_param(self, name, default=None, required=False): """Return the value of a query string parameter as a string @@ -269,8 +269,8 @@ class Request(object): if not required: return default - raise HTTPBadRequest('Missing query parameter', - 'The "' + name + '" query parameter is required.') + message = 'The "' + name + '" query parameter is required.' + raise HTTPBadRequest('Missing query parameter', message) def get_param_as_int(self, name, default=None, required=False): """Return the value of a query string parameter as an int @@ -306,8 +306,8 @@ class Request(object): if not required: return default - raise HTTPBadRequest('Missing query parameter', - 'The "' + name + '" query parameter is required.') + message = 'The "' + name + '" query parameter is required.' + raise HTTPBadRequest('Missing query parameter', message) def get_param_as_list(self, name, default=None, required=False): """Return the value of a query string parameter as an int diff --git a/tests/test_headers.py b/tests/test_headers.py index e0fd340..38bf051 100644 --- a/tests/test_headers.py +++ b/tests/test_headers.py @@ -100,6 +100,13 @@ class TestHeaders(testing.TestSuite): value = self.resource.req.get_header('X-Not-Found', '876') self.assertEquals(value, '876') + def test_required_header(self): + self._simulate_request(self.test_route) + + self.assertRaises(falcon.HTTPBadRequest, + self.resource.req.get_header, 'X-Not-Found', + required=True) + def test_prefer_host_header(self): self._simulate_request(self.test_route) diff --git a/tests/test_query_params.py b/tests/test_query_params.py index 0815a32..ddfa3b1 100644 --- a/tests/test_query_params.py +++ b/tests/test_query_params.py @@ -1,3 +1,4 @@ +import falcon import falcon.testing as testing @@ -23,6 +24,18 @@ class TestQueryParams(testing.TestSuite): self.assertEquals(req.get_param('marker'), 'deadbeef') self.assertEquals(req.get_param('limit'), '25') + def test_required(self): + query_string = '' + self._simulate_request('/', query_string=query_string) + + req = self.resource.req + self.assertRaises(falcon.HTTPBadRequest, req.get_param, + 'marker', required=True) + self.assertRaises(falcon.HTTPBadRequest, req.get_param_as_int, + 'marker', required=True) + self.assertRaises(falcon.HTTPBadRequest, req.get_param_as_list, + 'marker', required=True) + def test_int(self): query_string = 'marker=deadbeef&limit=25' self._simulate_request('/', query_string=query_string)