def __iter__(self): request = self.request rpc = request['rpc'] status_code = 200 try: result = rpc.process(request) except Exception as e: result = as_failure(e) handler = rpc.handler result = maybe_async(result) while is_async(result): yield b'' result = maybe_async(result) try: if is_failure(result): e = result.trace[1] status_code = getattr(e, 'status', 400) log_failure(result) result = handler.dumps(rpc.id, rpc.version, error=e) else: result = handler.dumps(rpc.id, rpc.version, result=result) except Exception as e: LOGGER.error('Could not serialize', exc_info=True) status_code = 500 result = handler.dumps(rpc.id, rpc.version, error=e) content = to_bytes(result) response = WsgiResponse(status_code, content, content_type=handler.content_type) for c in self.start(response): yield c
def page(environ, start_response): """ This resolves to the web page or the websocket depending on the path.""" path = environ.get('PATH_INFO') if not path or path == '/': data = open(os.path.join(CHAT_DIR, 'chat.html')).read() data = data % environ start_response('200 OK', [('Content-Type', 'text/html'), ('Content-Length', str(len(data)))]) return [pulsar.to_bytes(data)]