Removed the included 3rd party module django-sendfile

This commit is contained in:
Roberto Rosario
2011-11-07 15:23:54 -04:00
parent 97bdf29152
commit 742aad2e27
8 changed files with 2 additions and 168 deletions

View File

@@ -1,59 +0,0 @@
VERSION = (0, 1, 1)
__version__ = '.'.join(map(str, VERSION))
import os.path
from mimetypes import guess_type
from django.http import Http404
def _lazy_load(fn):
_cached = []
def _decorated():
if not _cached:
_cached.append(fn())
return _cached[0]
return _decorated
@_lazy_load
def _get_sendfile():
from django.utils.importlib import import_module
from django.conf import settings
from django.core.exceptions import ImproperlyConfigured
backend = getattr(settings, 'SENDFILE_BACKEND', None)
if not backend:
raise ImproperlyConfigured('You must specify a valued for SENDFILE_BACKEND')
module = import_module(backend)
return module.sendfile
def sendfile(request, filename, attachment=False, attachment_filename=None):
'''
create a response to send file using backend configured in SENDFILE_BACKEND
if attachment is True the content-disposition header will be set with either
the filename given or else the attachment_filename (of specified). This
will typically prompt the user to download the file, rather than view it.
'''
_sendfile = _get_sendfile()
if not os.path.exists(filename):
raise Http404('"%s" does not exist' % filename)
mimetype, encoding = guess_type(filename)
if mimetype is None:
mimetype = 'application/octet-stream'
response = _sendfile(request, filename, mimetype=mimetype)
if attachment:
attachment_filename = attachment_filename or os.path.basename(filename)
response['Content-Disposition'] = 'attachment; filename=%s' % attachment_filename
response['Content-length'] = os.path.getsize(filename)
response['Content-Type'] = mimetype
if encoding:
response['Content-Encoding'] = encoding
return response

View File

@@ -1,15 +0,0 @@
from django.views.static import serve
import os.path
def sendfile(request, filename, **kwargs):
'''
Send file using django dev static file server.
DO NOT USE IN PRODUCTION
this is only to be used when developing and is provided
for convenience only
'''
dirname = os.path.dirname(filename)
basename = os.path.basename(filename)
return serve(request, basename, dirname)

View File

@@ -1,30 +0,0 @@
from django.http import HttpResponse
from django.conf import settings
import os.path
def _convert_file_to_url(filename):
# CURRENTLY NOT WORKING
# mod_wsgi wants a relative URL not a filename
# so apache does an internal redirect
relpath = os.path.relpath(filename, settings.SENDFILE_ROOT)
url = [settings.SENDFILE_URL]
while relpath:
relpath, head = os.path.split(relpath)
url.insert(1, head)
return u''.join(url)
def sendfile(request, filename, **kwargs):
response = HttpResponse()
response['Location'] = _convert_file_to_url(filename)
# need to destroy get_host() to stop django
# rewriting our location to include http, so that
# mod_wsgi is able to do the internal redirect
request.get_host = lambda: ''
return response

View File

@@ -1,56 +0,0 @@
import os
import stat
import re
from email.Utils import parsedate_tz, mktime_tz
from django.core.files.base import File
from django.http import HttpResponse, HttpResponseNotModified
from django.utils.http import http_date
def sendfile(request, filename, **kwargs):
# Respect the If-Modified-Since header.
statobj = os.stat(filename)
mimetype = kwargs.get('mimetype', 'application/octet-stream')
if not was_modified_since(request.META.get('HTTP_IF_MODIFIED_SINCE'),
statobj[stat.ST_MTIME], statobj[stat.ST_SIZE]):
return HttpResponseNotModified(mimetype=mimetype)
response = HttpResponse(File(file(filename, 'rb')))
response["Last-Modified"] = http_date(statobj[stat.ST_MTIME])
return response
def was_modified_since(header=None, mtime=0, size=0):
"""
Was something modified since the user last downloaded it?
header
This is the value of the If-Modified-Since header. If this is None,
I'll just return True.
mtime
This is the modification time of the item we're talking about.
size
This is the size of the item we're talking about.
"""
try:
if header is None:
raise ValueError
matches = re.match(r"^([^;]+)(; length=([0-9]+))?$", header,
re.IGNORECASE)
header_date = parsedate_tz(matches.group(1))
if header_date is None:
raise ValueError
header_mtime = mktime_tz(header_date)
header_len = matches.group(3)
if header_len and int(header_len) != size:
raise ValueError
if mtime > header_mtime:
raise ValueError
except (AttributeError, ValueError, OverflowError):
return True
return False

View File

@@ -1,8 +0,0 @@
from django.http import HttpResponse
def sendfile(request, filename, **kwargs):
response = HttpResponse()
response['X-Sendfile'] = filename
return response

View File

@@ -18,3 +18,4 @@ django-grappelli==2.3.3
Pillow==1.7.4
cssmin==0.1.4
django-compressor==1.1
-e git://github.com/rosarior/django-sendfile.git#egg=django-sendfile

View File

@@ -15,3 +15,4 @@ django-grappelli==2.3.3
Pillow==1.7.4
cssmin==0.1.4
django-compressor==1.1
-e git://github.com/rosarior/django-sendfile.git#egg=django-sendfile