forked from orbit-oss/flask
Fixed sending etags for file streams with a name. This fixes #930.
This commit is contained in:
parent
46c24da016
commit
2506c0b9a9
3 changed files with 25 additions and 8 deletions
1
CHANGES
1
CHANGES
|
|
@ -17,6 +17,7 @@ Version 0.10.2
|
|||
- Fixed an issue with query parameters getting removed from requests in
|
||||
the test client when absolute URLs were requested.
|
||||
- Made `@before_first_request` into a decorator as intended.
|
||||
- Fixed an etags bug when sending a file without a name.
|
||||
|
||||
Version 0.10.1
|
||||
--------------
|
||||
|
|
|
|||
|
|
@ -538,14 +538,19 @@ def send_file(filename_or_fp, mimetype=None, as_attachment=False,
|
|||
rv.expires = int(time() + cache_timeout)
|
||||
|
||||
if add_etags and filename is not None:
|
||||
rv.set_etag('flask-%s-%s-%s' % (
|
||||
os.path.getmtime(filename),
|
||||
os.path.getsize(filename),
|
||||
adler32(
|
||||
filename.encode('utf-8') if isinstance(filename, text_type)
|
||||
else filename
|
||||
) & 0xffffffff
|
||||
))
|
||||
try:
|
||||
rv.set_etag('flask-%s-%s-%s' % (
|
||||
os.path.getmtime(filename),
|
||||
os.path.getsize(filename),
|
||||
adler32(
|
||||
filename.encode('utf-8') if isinstance(filename, text_type)
|
||||
else filename
|
||||
) & 0xffffffff
|
||||
))
|
||||
except OSError:
|
||||
warn('Access %s failed, maybe it does not exist, so ignore etags in '
|
||||
'headers' % filename, stacklevel=2)
|
||||
|
||||
if conditional:
|
||||
rv = rv.make_conditional(request)
|
||||
# make sure we don't send x-sendfile for servers that
|
||||
|
|
|
|||
|
|
@ -264,6 +264,17 @@ class SendfileTestCase(FlaskTestCase):
|
|||
rv.close()
|
||||
# etags
|
||||
self.assert_equal(len(captured), 1)
|
||||
with catch_warnings() as captured:
|
||||
from StringIO import StringIO as PYStringIO
|
||||
f = PYStringIO('Test')
|
||||
f.name = 'test.txt'
|
||||
rv = flask.send_file(f)
|
||||
rv.direct_passthrough = False
|
||||
self.assert_equal(rv.data, b'Test')
|
||||
self.assert_equal(rv.mimetype, 'text/plain')
|
||||
rv.close()
|
||||
# attachment_filename and etags
|
||||
self.assert_equal(len(captured), 3)
|
||||
with catch_warnings() as captured:
|
||||
f = StringIO('Test')
|
||||
rv = flask.send_file(f, mimetype='text/plain')
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue