From 235795f5f0b4c3f55941d2cdf8bc570515c6a8bc Mon Sep 17 00:00:00 2001 From: kgriffs Date: Fri, 19 Jul 2013 11:03:58 -0600 Subject: [PATCH] fix: Content-Length header always 0 for resp.data Currently, the Content-Length header is always set to zero when resp.data was used in lieu of resp.body. This patch fixes the content_length helper so that it now checks for resp.data, in addition to resp.body and resp.stream. --- falcon/api_helpers.py | 2 ++ falcon/tests/test_hello.py | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/falcon/api_helpers.py b/falcon/api_helpers.py index 466f858..bbf17fc 100644 --- a/falcon/api_helpers.py +++ b/falcon/api_helpers.py @@ -81,6 +81,8 @@ def set_content_length(resp): # Since body is assumed to be a byte string (str in Python 2, bytes in # Python 3), figure out the length using standard functions. content_length = len(resp.body) + elif resp.data is not None: + content_length = len(resp.data) elif resp.stream is not None: if resp.stream_len is not None: # Total stream length is known in advance (e.g., streaming a file) diff --git a/falcon/tests/test_hello.py b/falcon/tests/test_hello.py index 7fba379..878cef7 100644 --- a/falcon/tests/test_hello.py +++ b/falcon/tests/test_hello.py @@ -96,6 +96,9 @@ class TestHelloWorld(testing.TestBase): body = self.simulate_request(self.test_route) resp = self.resource.resp + content_length = int(self.srmock.headers_dict['Content-Length']) + self.assertEquals(content_length, len(self.resource.sample_unicode)) + self.assertEquals(self.srmock.status, self.resource.sample_status) self.assertEquals(resp.status, self.resource.sample_status) self.assertEquals(resp.body, self.resource.sample_unicode) @@ -105,6 +108,9 @@ class TestHelloWorld(testing.TestBase): body = self.simulate_request('/bytes') resp = self.bytes_resource.resp + content_length = int(self.srmock.headers_dict['Content-Length']) + self.assertEquals(content_length, len(self.resource.sample_utf8)) + self.assertEquals(self.srmock.status, self.resource.sample_status) self.assertEquals(resp.status, self.resource.sample_status) self.assertEquals(resp.body, self.resource.sample_utf8) @@ -114,6 +120,9 @@ class TestHelloWorld(testing.TestBase): body = self.simulate_request('/data') resp = self.data_resource.resp + content_length = int(self.srmock.headers_dict['Content-Length']) + self.assertEquals(content_length, len(self.resource.sample_utf8)) + self.assertEquals(self.srmock.status, self.resource.sample_status) self.assertEquals(resp.status, self.resource.sample_status) self.assertEquals(resp.data, self.resource.sample_utf8)