Skip to content

Commit

Permalink
[soc2009/http-wsgi-improvements] Remove setting the Content-Length he…
Browse files Browse the repository at this point in the history
…ader for HttpResponseSendFile from the handler, for compatibility, and add a content attribute. Refs #2131.

Also adds a _charset class attribute to HttpResponse so the children all have it.

git-svn-id: http://code.djangoproject.com/svn/django/branches/soc2009/http-wsgi-improvements@11326 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information
ccahoon committed Jul 24, 2009
1 parent be96986 commit 76fdeaf
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 6 deletions.
7 changes: 1 addition & 6 deletions django/core/handlers/wsgi.py
Original file line number Diff line number Diff line change
Expand Up @@ -251,12 +251,7 @@ def __call__(self, environ, start_response):
filelike = open(filename, 'rb')
return environ['wsgi.file_wrapper'](filelike,
response.block_size)
else:
import os.path
if not os.path.exists(filename):
raise Exception("Filename provided to HttpResponseSendFile does not exist.")
response_headers.append(('Content-Length',
str(os.path.getsize(filename))))

start_response(status, response_headers)
return response

8 changes: 8 additions & 0 deletions django/http/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -272,6 +272,7 @@ class HttpResponse(object):

_status_code = 200
_codec = None
_charset = None

def __init__(self, content='', mimetype=None, status=None,
content_type=None, request=None):
Expand Down Expand Up @@ -446,6 +447,8 @@ def __init__(self, path_to_file, content_type=None, block_size=8192):
self.block_size = block_size
self['Content-Disposition'] = ('attachment; filename=%s' %
os.path.basename(path_to_file))
if not settings.HTTPRESPONSE_SENDFILE_HEADER and os.path.exists(path_to_file):
self['Content-Length'] = str(os.path.getsize(path_to_file))
self._empty_content = False

def set_empty_content(self):
Expand All @@ -457,6 +460,11 @@ def __iter__(self):
from django.core.servers.basehttp import FileWrapper
return FileWrapper(self.get_file_handler(), self.block_size)

def _get_content(self):
return "".join(self.iter())

content = property(_get_content)

def get_file_handler(self):
if not self.sendfile_fh:
self.sendfile_fh = open(self.sendfile_filename, 'rb')
Expand Down

0 comments on commit 76fdeaf

Please sign in to comment.