Make sure you return bytes when you str(body)
This commit is contained in:
+8
-3
@@ -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):
|
||||||
|
|||||||
Reference in New Issue
Block a user