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