Merge "When detecting non-content for HTTP 204, properly catch UnicodeDecodeError."
This commit is contained in:
@@ -594,9 +594,15 @@ class PecanBase(object):
|
||||
else:
|
||||
text = None
|
||||
if state.response.charset:
|
||||
# `response.text` cannot be accessed without a charset
|
||||
# (because we don't know which encoding to use)
|
||||
text = state.response.text
|
||||
# `response.text` cannot be accessed without a valid
|
||||
# charset (because we don't know which encoding to use)
|
||||
try:
|
||||
text = state.response.text
|
||||
except UnicodeDecodeError:
|
||||
# If a valid charset is not specified, don't bother
|
||||
# trying to guess it (because there's obviously
|
||||
# content, so we know this shouldn't be a 204)
|
||||
pass
|
||||
if not any((state.response.body, text)):
|
||||
state.response.status = 204
|
||||
|
||||
|
||||
@@ -68,6 +68,10 @@ class TestEmptyContent(PecanTestCase):
|
||||
def explicit_json_body(self):
|
||||
response.json_body = {'foo': 'bar'}
|
||||
|
||||
@expose()
|
||||
def non_unicode(self):
|
||||
return chr(0xc0)
|
||||
|
||||
return TestApp(Pecan(RootController()))
|
||||
|
||||
def test_empty_index(self):
|
||||
@@ -77,6 +81,10 @@ class TestEmptyContent(PecanTestCase):
|
||||
self.assertEqual(r.headers['Content-Length'], '0')
|
||||
self.assertEqual(len(r.body), 0)
|
||||
|
||||
def test_index_with_non_unicode(self):
|
||||
r = self.app_.get('/non_unicode/')
|
||||
self.assertEqual(r.status_int, 200)
|
||||
|
||||
def test_explicit_body(self):
|
||||
r = self.app_.get('/explicit_body/')
|
||||
self.assertEqual(r.status_int, 200)
|
||||
|
||||
Reference in New Issue
Block a user