Browse code
returning an HTTP 500 status code on error
Ed L authored on 07/06/2011 22:45:42
Showing 3 changed files
Showing 3 changed files
... | ... |
@@ -136,7 +136,7 @@ class Request(object, JsonInstantiate): |
136 | 136 |
|
137 | 137 |
|
138 | 138 |
def json_equivalent(self): |
139 |
- if self.kwargs.has_key('__args'): |
|
139 |
+ if self.kwargs and self.kwargs.has_key('__args'): |
|
140 | 140 |
raise ValueError, 'invalid argument name: __args' |
141 | 141 |
|
142 | 142 |
params = self.args |
... | ... |
@@ -40,6 +40,7 @@ from jsonrpc.server import ServerEvents, JSON_RPC |
40 | 40 |
class ExampleServer(ServerEvents): |
41 | 41 |
# inherited hooks |
42 | 42 |
def log(self, responses, txrequest): |
43 |
+ print txrequest.code, |
|
43 | 44 |
if isinstance(responses, list): |
44 | 45 |
for response in responses: |
45 | 46 |
msg = self._get_msg(response) |
... | ... |
@@ -118,9 +118,10 @@ class JSON_RPC(Resource): |
118 | 118 |
except jsonrpc.common.RPCError, e: |
119 | 119 |
self._ebRender(e, request, content.id if hasattr(content, 'id') else None) |
120 | 120 |
|
121 |
- d = threads.deferToThread(self._action, request, content) |
|
122 |
- d.addCallback(self._cbRender, request) |
|
123 |
- d.addErrback(self._ebRender, request, content.id if hasattr(content, 'id') else None) |
|
121 |
+ else: |
|
122 |
+ d = threads.deferToThread(self._action, request, content) |
|
123 |
+ d.addCallback(self._cbRender, request) |
|
124 |
+ d.addErrback(self._ebRender, request, content.id if hasattr(content, 'id') else None) |
|
124 | 125 |
except BaseException, e: |
125 | 126 |
self._ebRender(e, request, None) |
126 | 127 |
|
... | ... |
@@ -154,15 +155,21 @@ class JSON_RPC(Resource): |
154 | 155 |
if not islist: result = result[0] |
155 | 156 |
else: result = None |
156 | 157 |
|
157 |
- self.eventhandler.log(result, request) |
|
158 | 158 |
return result |
159 | 159 |
|
160 | 160 |
|
161 |
+ def _setresponseCode(self, result, request): |
|
162 |
+ code = 200 |
|
163 |
+ if not isinstance(result, list): |
|
164 |
+ if result is not None and result.error is not None: |
|
165 |
+ code = 500 |
|
166 |
+ request.setResponseCode(code) |
|
161 | 167 |
|
162 | 168 |
def _cbRender(self, result, request): |
169 |
+ self._setresponseCode(result, request) |
|
170 |
+ self.eventhandler.log(result, request) |
|
163 | 171 |
if result is not None: |
164 | 172 |
request.setHeader("content-type", 'application/json') |
165 |
- request.setResponseCode(200) |
|
166 | 173 |
result = jsonrpc.jsonutil.encode(result).encode('utf-8') |
167 | 174 |
request.setHeader("content-length", len(result)) |
168 | 175 |
request.write(result) |
... | ... |
@@ -178,10 +185,10 @@ class JSON_RPC(Resource): |
178 | 185 |
else: err = result |
179 | 186 |
|
180 | 187 |
err = self.render_error(err, id) |
188 |
+ self._setresponseCode(err, request) |
|
181 | 189 |
self.eventhandler.log(err, request) |
182 | 190 |
|
183 | 191 |
request.setHeader("content-type", 'application/json') |
184 |
- request.setResponseCode(200) |
|
185 | 192 |
result = jsonrpc.jsonutil.encode(err).encode('utf-8') |
186 | 193 |
request.setHeader("content-length", len(result)) |
187 | 194 |
request.write(result) |