Initial commit
This commit is contained in:
50
env/lib/python3.10/site-packages/wagtail/utils/sendfile_streaming_backend.py
vendored
Normal file
50
env/lib/python3.10/site-packages/wagtail/utils/sendfile_streaming_backend.py
vendored
Normal file
@@ -0,0 +1,50 @@
|
||||
# Sendfile "streaming" backend
|
||||
# This is based on sendfiles builtin "simple" backend but uses a StreamingHttpResponse
|
||||
|
||||
import os
|
||||
import stat
|
||||
from email.utils import mktime_tz, parsedate_tz
|
||||
|
||||
from django.http import FileResponse, HttpResponseNotModified
|
||||
from django.utils.http import http_date
|
||||
|
||||
|
||||
def sendfile(request, filename, **kwargs):
|
||||
# Respect the If-Modified-Since header.
|
||||
statobj = os.stat(filename)
|
||||
|
||||
if not was_modified_since(
|
||||
request.headers.get("if-modified-since"),
|
||||
statobj[stat.ST_MTIME],
|
||||
):
|
||||
return HttpResponseNotModified()
|
||||
|
||||
response = FileResponse(open(filename, "rb"))
|
||||
|
||||
response["Last-Modified"] = http_date(statobj[stat.ST_MTIME])
|
||||
return response
|
||||
|
||||
|
||||
def was_modified_since(header=None, mtime=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.
|
||||
"""
|
||||
try:
|
||||
if header is None:
|
||||
raise ValueError
|
||||
header_date = parsedate_tz(header)
|
||||
if header_date is None:
|
||||
raise ValueError
|
||||
header_mtime = mktime_tz(header_date)
|
||||
if mtime > header_mtime:
|
||||
raise ValueError
|
||||
except (ValueError, OverflowError):
|
||||
return True
|
||||
return False
|
||||
Reference in New Issue
Block a user