On 02/12/2014 02:30 PM, shaohef(a)linux.vnet.ibm.com wrote:
From: ShaoHe Feng <shaohef(a)linux.vnet.ibm.com>
in test mode, you can user curl or HttpRequester to try as follow.
$ curl -u <user> -H 'Accept: application/json' -H 'Content-type:
application/json'
http://localhost:8000/templates/test-template-4 -X
PUT -d ''
kimchi will throw HTTPError: (400, 'Unable to parse JSON request')
Now remove the check Content-Length in request headers.
No Content-Length in request headers means this request without body.
GET and DELETE methods allow a request without body.
But PUT and POST methods require body in request.
After remove this check, new check for the length of body.
And also now we have decide not to pass parameters by body for GET method.
That means GET will not call parse_request.
Signed-off-by: ShaoHe Feng <shaohef(a)linux.vnet.ibm.com>
---
src/kimchi/control/utils.py | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/src/kimchi/control/utils.py b/src/kimchi/control/utils.py
index 9c6878b..21a6ce8 100644
--- a/src/kimchi/control/utils.py
+++ b/src/kimchi/control/utils.py
@@ -69,13 +69,14 @@ def mime_in_header(header, mime):
def parse_request():
- if 'Content-Length' not in cherrypy.request.headers:
- return {}
We can remain this for GET and DELETE method.
and return None as follow.
if 'Content-Length' not in cherrypy.request.headers:
+ return None
But as the commit message, GET will not get parameters from body.
GET will get parameters for query-parameters.
And here 'Content-Length' is useful for PUT and POST method.
So I remove this.
rawbody = cherrypy.request.body.read()
if mime_in_header('Content-Type', 'application/json'):
try:
- return json.loads(rawbody)
+ if cherrypy.request.body.length:
+ return json.loads(rawbody)
+ else:
+ return {}
except ValueError:
raise cherrypy.HTTPError(400, "Unable to parse JSON request")
else:
--
Thanks and best regards!
Sheldon Feng(冯少合)<shaohef(a)linux.vnet.ibm.com>
IBM Linux Technology Center