M docs/release_notes.rst => docs/release_notes.rst +2 -1
@@ 30,7 30,8 @@ Fixed
Changed
~~~~~~~
-* Test coverage upped from 75 to 78+% :url-issue:`976` (Mads Jensen, Benjamin Bach)
+* Test coverage upped from 75 to 80+% :url-issue:`976` (Mads Jensen, Benjamin Bach)
+* PDF attachment Content-Disposition header changed to ``inline`` for browser previewing :url-issue:`1010` (nicolazilio)
* PyTest upgraded to latest 5.3
Removed
M src/wiki/core/http.py => src/wiki/core/http.py +4 -1
@@ 44,6 44,9 @@ def send_file(request, filepath, last_modified=None, filename=None):
if filename:
filename_escaped = filepath_to_uri(filename)
- response["Content-Disposition"] = "attachment; filename=%s" % filename_escaped
+ if 'pdf' in mimetype.lower():
+ response["Content-Disposition"] = "inline; filename=%s" % filename_escaped
+ else:
+ response["Content-Disposition"] = "attachment; filename=%s" % filename_escaped
return response
M tests/core/test_basic.py => tests/core/test_basic.py +18 -0
@@ 1,5 1,9 @@
+import tempfile
+from datetime import datetime
+
from django.test import TestCase
from wiki.conf import settings as wiki_settings
+from wiki.core.http import send_file
from wiki.forms import Group
from wiki.models import Article, ArticleRevision, URLPath
@@ 36,3 40,17 @@ class LineEndingsTests(TestCase):
article.add_revision(ArticleRevision(title="Root", content="Hello\nworld"),
save=True)
self.assertEqual("Hello\r\nworld", article.current_revision.content)
+
+
+class HttpTests(TestCase):
+ def test_send_file(self):
+ fabricate_request = self.client.get("/").wsgi_request
+ fobject = tempfile.NamedTemporaryFile("r")
+ response = send_file(fabricate_request, fobject.name, filename="test.pdf")
+ assert response.has_header("Content-Disposition")
+ assert "inline" in response.get("Content-Disposition")
+ response = send_file(fabricate_request, fobject.name, filename="test.jpeg")
+ assert response.has_header("Content-Disposition")
+ response = send_file(fabricate_request, fobject.name, filename="test.jpeg", last_modified=datetime.now())
+ assert response.has_header("Content-Disposition")
+ fobject.close()