Revision 68fa9caf lib/http/server.py
b/lib/http/server.py | ||
---|---|---|
86 | 86 |
# Response attributes |
87 | 87 |
self.resp_headers = {} |
88 | 88 |
|
89 |
# Private data for request handler (useful in combination with |
|
90 |
# authentication) |
|
91 |
self.private = None |
|
92 |
|
|
89 | 93 |
|
90 | 94 |
class _HttpServerToClientMessageWriter(http.HttpMessageWriter): |
91 | 95 |
"""Writes an HTTP response to client. |
... | ... | |
308 | 312 |
handler_context = _HttpServerRequest(self.request_msg) |
309 | 313 |
|
310 | 314 |
try: |
311 |
# Authentication, etc. |
|
312 |
self.server.PreHandleRequest(handler_context) |
|
313 |
|
|
314 |
# Call actual request handler |
|
315 |
result = self.server.HandleRequest(handler_context) |
|
316 |
except (http.HttpException, KeyboardInterrupt, SystemExit): |
|
317 |
raise |
|
318 |
except Exception, err: |
|
319 |
logging.exception("Caught exception") |
|
320 |
raise http.HttpInternalServerError(message=str(err)) |
|
321 |
except: |
|
322 |
logging.exception("Unknown exception") |
|
323 |
raise http.HttpInternalServerError(message="Unknown error") |
|
324 |
|
|
325 |
# TODO: Content-type |
|
326 |
encoder = http.HttpJsonConverter() |
|
327 |
self.response_msg.start_line.code = http.HTTP_OK |
|
328 |
self.response_msg.body = encoder.Encode(result) |
|
329 |
self.response_msg.headers = handler_context.resp_headers |
|
330 |
self.response_msg.headers[http.HTTP_CONTENT_TYPE] = encoder.CONTENT_TYPE |
|
315 |
try: |
|
316 |
# Authentication, etc. |
|
317 |
self.server.PreHandleRequest(handler_context) |
|
318 |
|
|
319 |
# Call actual request handler |
|
320 |
result = self.server.HandleRequest(handler_context) |
|
321 |
except (http.HttpException, KeyboardInterrupt, SystemExit): |
|
322 |
raise |
|
323 |
except Exception, err: |
|
324 |
logging.exception("Caught exception") |
|
325 |
raise http.HttpInternalServerError(message=str(err)) |
|
326 |
except: |
|
327 |
logging.exception("Unknown exception") |
|
328 |
raise http.HttpInternalServerError(message="Unknown error") |
|
329 |
|
|
330 |
# TODO: Content-type |
|
331 |
encoder = http.HttpJsonConverter() |
|
332 |
self.response_msg.start_line.code = http.HTTP_OK |
|
333 |
self.response_msg.body = encoder.Encode(result) |
|
334 |
self.response_msg.headers = handler_context.resp_headers |
|
335 |
self.response_msg.headers[http.HTTP_CONTENT_TYPE] = encoder.CONTENT_TYPE |
|
336 |
finally: |
|
337 |
# No reason to keep this any longer, even for exceptions |
|
338 |
handler_context.private = None |
|
331 | 339 |
|
332 | 340 |
def _SendResponse(self): |
333 | 341 |
"""Sends the response to the client. |
Also available in: Unified diff