~netlandish/django-wiki

72609e6f1f68c19f3e77d5d5bcbff4935ab20fcf — Benjamin Balder Bach 4 years ago f005925 + 5c5d7dc
Merge pull request #1010 from nicolazilio/pdf_inline

Change send_file to open, rather than download, PDF files
3 files changed, 24 insertions(+), 2 deletions(-)

M docs/release_notes.rst
M src/wiki/core/http.py
M tests/core/test_basic.py
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()