Include more explicit loop for headers conversion

Also merges master changes into this PR for this branch
This commit is contained in:
Eli Uriegas 2016-12-30 12:13:16 -06:00 committed by GitHub
parent be9eca2d63
commit 87559a34f8

View File

@ -1,9 +1,11 @@
from aiofiles import open as open_async from aiofiles import open as open_async
from .cookies import CookieJar, Cookie
from mimetypes import guess_type from mimetypes import guess_type
from os import path from os import path
from ujson import dumps as json_dumps from ujson import dumps as json_dumps
from .cookies import CookieJar
COMMON_STATUS_CODES = { COMMON_STATUS_CODES = {
200: b'OK', 200: b'OK',
400: b'Bad Request', 400: b'Bad Request',
@ -79,7 +81,12 @@ class HTTPResponse:
self.content_type = content_type self.content_type = content_type
if body is not None: if body is not None:
self.body = body.encode('utf-8') try:
# Try to encode it regularly
self.body = body.encode('utf-8')
except AttributeError:
# Convert it to a str if you can't
self.body = str(body).encode('utf-8')
else: else:
self.body = body_bytes self.body = body_bytes
@ -87,15 +94,6 @@ class HTTPResponse:
self.headers = headers or {} self.headers = headers or {}
self._cookies = None self._cookies = None
@staticmethod
def format_header(name, value):
try:
return b'%b: %b\r\n' %\
(name.encode(), value.encode('utf-8'))
except:
return b'%b: %b\r\n' %\
(name.encode(), str(value).encode('utf-8'))
def output(self, version="1.1", keep_alive=False, keep_alive_timeout=None): def output(self, version="1.1", keep_alive=False, keep_alive_timeout=None):
# This is all returned in a kind-of funky way # This is all returned in a kind-of funky way
# We tried to make this as fast as possible in pure python # We tried to make this as fast as possible in pure python
@ -105,10 +103,14 @@ class HTTPResponse:
headers = b'' headers = b''
if self.headers: if self.headers:
headers = b''.join( for name, value in self.headers.items():
self.format_header(name, value) try:
for name, value in self.headers.items() headers += (
) b'%b: %b\r\n' % (name.encode(), value.encode('utf-8')))
except AttributeError:
headers += (
b'%b: %b\r\n' % (
str(name).encode(), str(value).encode('utf-8')))
# Try to pull from the common codes first # Try to pull from the common codes first
# Speeds up response rate 6% over pulling from all # Speeds up response rate 6% over pulling from all