Permalink
Browse files

Add status_code to the OutputTransform.transform_first_chunk interface.

This is needed for correct support of the 304 status code, which
has no body and should not have either a Content-Length or
Transfer-Encoding.  This is a backwards-incompatible change to an
interface that was never technically private, but not included in the
documentation and as far as I can tell was never used outside
tornado itself.
  • Loading branch information...
1 parent 53452e8 commit dd7655964ae5086caffa4c1553f2f41296bd4c56 @bdarnell bdarnell committed May 20, 2012
Showing with 9 additions and 8 deletions.
  1. +9 −8 tornado/web.py
View
17 tornado/web.py
@@ -633,8 +633,9 @@ def flush(self, include_footers=False, callback=None):
if not self._headers_written:
self._headers_written = True
for transform in self._transforms:
- self._headers, chunk = transform.transform_first_chunk(
- self._headers, chunk, include_footers)
+ self._status_code, self._headers, chunk = \
+ transform.transform_first_chunk(
+ self._status_code, self._headers, chunk, include_footers)
headers = self._generate_headers()
else:
for transform in self._transforms:
@@ -1668,8 +1669,8 @@ class OutputTransform(object):
def __init__(self, request):
pass
- def transform_first_chunk(self, headers, chunk, finishing):
- return headers, chunk
+ def transform_first_chunk(self, status_code, headers, chunk, finishing):
+ return status_code, headers, chunk
def transform_chunk(self, chunk, finishing):
return chunk
@@ -1690,7 +1691,7 @@ def __init__(self, request):
self._gzipping = request.supports_http_1_1() and \
"gzip" in request.headers.get("Accept-Encoding", "")
- def transform_first_chunk(self, headers, chunk, finishing):
+ def transform_first_chunk(self, status_code, headers, chunk, finishing):
if self._gzipping:
ctype = _unicode(headers.get("Content-Type", "")).split(";")[0]
self._gzipping = (ctype in self.CONTENT_TYPES) and \
@@ -1704,7 +1705,7 @@ def transform_first_chunk(self, headers, chunk, finishing):
chunk = self.transform_chunk(chunk, finishing)
if "Content-Length" in headers:
headers["Content-Length"] = str(len(chunk))
- return headers, chunk
+ return status_code, headers, chunk
def transform_chunk(self, chunk, finishing):
if self._gzipping:
@@ -1727,15 +1728,15 @@ class ChunkedTransferEncoding(OutputTransform):
def __init__(self, request):
self._chunking = request.supports_http_1_1()
- def transform_first_chunk(self, headers, chunk, finishing):
+ def transform_first_chunk(self, status_code, headers, chunk, finishing):
if self._chunking:
# No need to chunk the output if a Content-Length is specified
if "Content-Length" in headers or "Transfer-Encoding" in headers:
self._chunking = False
else:
headers["Transfer-Encoding"] = "chunked"
chunk = self.transform_chunk(chunk, finishing)
- return headers, chunk
+ return status_code, headers, chunk
def transform_chunk(self, block, finishing):
if self._chunking:

0 comments on commit dd76559

Please sign in to comment.