Make sure you return bytes when you str(body)

This commit is contained in:
Leonel Câmara
2017-08-07 00:20:29 +01:00
committed by GitHub
parent 10b6b93cb2
commit 3eea1f68f4
+8 -3
View File
@@ -11,7 +11,7 @@ HTTP statuses helpers
""" """
import re import re
from gluon._compat import iteritems, unicodeT from gluon._compat import iteritems, unicodeT, to_bytes
__all__ = ['HTTP', 'redirect'] __all__ = ['HTTP', 'redirect']
@@ -111,6 +111,8 @@ class HTTP(Exception):
if not body: if not body:
body = status body = status
if isinstance(body, (str, bytes, bytearray)): if isinstance(body, (str, bytes, bytearray)):
if isinstance(body, unicodeT):
body = to_bytes(body) # This must be done before len
headers['Content-Length'] = len(body) headers['Content-Length'] = len(body)
rheaders = [] rheaders = []
for k, v in iteritems(headers): for k, v in iteritems(headers):
@@ -123,12 +125,15 @@ class HTTP(Exception):
return [''] return ['']
elif isinstance(body, (str, bytes, bytearray)): elif isinstance(body, (str, bytes, bytearray)):
if isinstance(body, unicodeT): if isinstance(body, unicodeT):
body = body.encode('utf-8') body = to_bytes(body)
return [body] return [body]
elif hasattr(body, '__iter__'): elif hasattr(body, '__iter__'):
return body return body
else: else:
return [str(body)] body = str(body)
if isinstance(body, unicodeT):
body = to_bytes(body)
return [body]
@property @property
def message(self): def message(self):