Merge "When detecting non-content for HTTP 204, properly catch UnicodeDecodeError."

This commit is contained in:
Jenkins
2014-09-24 22:23:23 +00:00
committed by Gerrit Code Review
2 changed files with 17 additions and 3 deletions

View File

@@ -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

View File

@@ -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)