Merge "API: accept None as content-length in HTTP requests"
This commit is contained in:
@@ -625,13 +625,7 @@ class Resource(wsgi.Application):
|
||||
|
||||
# Now, deserialize the request body...
|
||||
try:
|
||||
contents = {}
|
||||
if self._should_have_body(request):
|
||||
# allow empty body with PUT and POST
|
||||
if request.content_length == 0:
|
||||
contents = {'body': None}
|
||||
else:
|
||||
contents = self.deserialize(body)
|
||||
contents = self._get_request_content(body, request)
|
||||
except exception.MalformedRequestBody:
|
||||
msg = _("Malformed request body")
|
||||
return Fault(webob.exc.HTTPBadRequest(explanation=msg))
|
||||
@@ -699,6 +693,16 @@ class Resource(wsgi.Application):
|
||||
|
||||
return response
|
||||
|
||||
def _get_request_content(self, body, request):
|
||||
contents = {}
|
||||
if self._should_have_body(request):
|
||||
# allow empty body with PUT and POST
|
||||
if request.content_length == 0 or request.content_length is None:
|
||||
contents = {'body': None}
|
||||
else:
|
||||
contents = self.deserialize(body)
|
||||
return contents
|
||||
|
||||
def get_method(self, request, action, content_type, body):
|
||||
meth, extensions = self._get_method(request,
|
||||
action,
|
||||
|
||||
@@ -592,6 +592,16 @@ class ResourceTest(MicroversionedTest):
|
||||
self.assertEqual('application/json', content_type)
|
||||
self.assertEqual(b'', body)
|
||||
|
||||
def test_get_body_content_body_none(self):
|
||||
resource = wsgi.Resource(None)
|
||||
request = wsgi.Request.blank('/', method='PUT')
|
||||
body = None
|
||||
|
||||
contents = resource._get_request_content(body, request)
|
||||
|
||||
self.assertIn('body', contents)
|
||||
self.assertIsNone(contents['body'])
|
||||
|
||||
def test_get_body(self):
|
||||
class Controller(object):
|
||||
def index(self, req, pants=None):
|
||||
|
||||
Reference in New Issue
Block a user