Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Emit correct date. In theory

  • Loading branch information...
commit 85ff63c32e7237280bff3293481a371fb3da180c 1 parent aa3d839
@mitsuhiko authored
Showing with 12 additions and 1 deletion.
  1. +11 −0 flask/helpers.py
  2. +1 −1  tests/flask_tests.py
View
11 flask/helpers.py
@@ -240,6 +240,7 @@ def send_file(filename_or_fp, mimetype=None, as_attachment=False,
:param conditional: set to `True` to enable conditional responses.
:param cache_timeout: the timeout in seconds for the headers.
"""
+ mtime = None
if isinstance(filename_or_fp, basestring):
filename = filename_or_fp
file = None
@@ -272,11 +273,21 @@ def send_file(filename_or_fp, mimetype=None, as_attachment=False,
else:
if file is None:
file = open(filename, 'rb')
+ mtime = os.path.getmtime(filename)
data = wrap_file(request.environ, file)
rv = current_app.response_class(data, mimetype=mimetype, headers=headers,
direct_passthrough=True)
+ # if we know the file modification date, we can store it as the
+ # current time to better support conditional requests. Werkzeug
+ # as of 0.6.1 will override this value however in the conditional
+ # response with the current time. This will be fixed in Werkzeug
+ # with a new release, however many WSGI servers will still emit
+ # a separate date header.
+ if mtime is not None:
+ rv.date = int(mtime)
+
rv.cache_control.public = True
if cache_timeout:
rv.cache_control.max_age = cache_timeout
View
2  tests/flask_tests.py
@@ -19,7 +19,7 @@
from logging import StreamHandler
from contextlib import contextmanager
from datetime import datetime
-from werkzeug import parse_date, parse_options_header
+from werkzeug import parse_date, parse_options_header, http_date
from werkzeug.exceptions import NotFound
from jinja2 import TemplateNotFound
from cStringIO import StringIO
Please sign in to comment.
Something went wrong with that request. Please try again.