codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
diff --git a/circuits/web/http.py b/circuits/web/http.py --- a/circuits/web/http.py +++ b/circuits/web/http.py @@ -10,7 +10,9 @@ from io import BytesIO +from sys import exc_info from posixpath import realpath +from traceback import format_tb try: from urllib.parse import unquote @@ -20,9 +22,9 @@ from urlparse import urlparse, urlunparse # NOQA +from circuits.six import text_type from circuits.net.sockets import Close, Write from circuits.core import handler, BaseComponent, Value -from circuits.six import b from . import wrappers from .utils import is_ssl_handshake @@ -147,8 +149,17 @@ headers = response.headers sock = request.sock - self.fire(Write(sock, bytes(response))) - self.fire(Write(sock, bytes(headers))) + try: + bresponse = bytes(response) + bheaders = bytes(headers) + except: + etype, evalue, etraceback = exc_info() + traceback = format_tb(etraceback) + error = (etype, evalue, traceback) + return self.fire(HTTPError(request, response, 500, error=error)) + + self.fire(Write(sock, bresponse)) + self.fire(Write(sock, bheaders)) # process body if response.stream and response.body: @@ -160,7 +171,7 @@ else: if isinstance(response.body, bytes): body = response.body - elif isinstance(response.body, unicode): + elif isinstance(response.body, text_type): body = response.body.encode(self._encoding) else: parts = ( @@ -172,19 +183,25 @@ if body: if response.chunked: - buf = [hex(len(body))[2:].encode(), b"\r\n", body, b"\r\n"] + buf = [ + hex(len(body))[2:].encode(self._encoding), + b"\r\n", + body, + b"\r\n" + ] body = b"".join(buf) - self.fire(Write(response.request.sock, body)) + + self.fire(Write(sock, body)) if response.chunked: - self.fire(Write(response.request.sock, b"0\r\n\r\n")) + self.fire(Write(sock, b"0\r\n\r\n")) if not response.stream: if response.close: - self.fire(Close(response.request.sock)) + self.fire(Close(sock)) # Delete the request/response objects if present - if response.request.sock in self._clients: - del self._clients[response.request.sock] + if sock in self._clients: + del self._clients[sock] response.done = True @handler("disconnect") @@ -261,7 +278,7 @@ sp = self.protocol if rp[0] != sp[0]: - # the mayor HTTP version differs + # the major HTTP version differs return self.fire(HTTPError(request, response, 505)) request.headers = parser.get_headers()
Private
[
?
]
Run code
Submit