Move qute_pdfjs to qutescheme.py
This commit is contained in:
parent
b611ff52cf
commit
dc82ac3eb2
@ -44,6 +44,7 @@ import pkg_resources
|
|||||||
from PyQt5.QtCore import QUrlQuery, QUrl
|
from PyQt5.QtCore import QUrlQuery, QUrl
|
||||||
|
|
||||||
import qutebrowser
|
import qutebrowser
|
||||||
|
from qutebrowser.browser import pdfjs
|
||||||
from qutebrowser.config import config, configdata, configexc, configdiff
|
from qutebrowser.config import config, configdata, configexc, configdiff
|
||||||
from qutebrowser.utils import (version, utils, jinja, log, message, docutils,
|
from qutebrowser.utils import (version, utils, jinja, log, message, docutils,
|
||||||
objreg, urlutils)
|
objreg, urlutils)
|
||||||
@ -531,3 +532,21 @@ def qute_pastebin_version(_url):
|
|||||||
"""Handler that pastebins the version string."""
|
"""Handler that pastebins the version string."""
|
||||||
version.pastebin_version()
|
version.pastebin_version()
|
||||||
return 'text/plain', b'Paste called.'
|
return 'text/plain', b'Paste called.'
|
||||||
|
|
||||||
|
|
||||||
|
@add_handler('pdfjs')
|
||||||
|
def qute_pdfjs(url):
|
||||||
|
"""Handler for qute://pdfjs. Return the pdf.js viewer."""
|
||||||
|
try:
|
||||||
|
data = pdfjs.get_pdfjs_res(url.path())
|
||||||
|
except pdfjs.PDFJSNotFound as e:
|
||||||
|
# Logging as the error might get lost otherwise since we're not showing
|
||||||
|
# the error page if a single asset is missing. This way we don't lose
|
||||||
|
# information, as the failed pdfjs requests are still in the log.
|
||||||
|
log.misc.warning(
|
||||||
|
"pdfjs resource requested but not found: {}".format(e.path))
|
||||||
|
raise NotFoundError("Can't find pdfjs resource '{}'".format(e.path))
|
||||||
|
else:
|
||||||
|
mimetype, _encoding = mimetypes.guess_type(url.fileName())
|
||||||
|
assert mimetype is not None, url
|
||||||
|
return mimetype, data
|
||||||
|
@ -24,7 +24,7 @@ import mimetypes
|
|||||||
from PyQt5.QtCore import QUrl
|
from PyQt5.QtCore import QUrl
|
||||||
from PyQt5.QtNetwork import QNetworkReply, QNetworkAccessManager
|
from PyQt5.QtNetwork import QNetworkReply, QNetworkAccessManager
|
||||||
|
|
||||||
from qutebrowser.browser import pdfjs, qutescheme
|
from qutebrowser.browser import qutescheme
|
||||||
from qutebrowser.browser.webkit.network import networkreply
|
from qutebrowser.browser.webkit.network import networkreply
|
||||||
from qutebrowser.utils import log, usertypes, qtutils
|
from qutebrowser.utils import log, usertypes, qtutils
|
||||||
|
|
||||||
@ -81,22 +81,3 @@ def handler(request, operation, current_url):
|
|||||||
return networkreply.RedirectNetworkReply(e.url)
|
return networkreply.RedirectNetworkReply(e.url)
|
||||||
|
|
||||||
return networkreply.FixedDataNetworkReply(request, data, mimetype)
|
return networkreply.FixedDataNetworkReply(request, data, mimetype)
|
||||||
|
|
||||||
|
|
||||||
@qutescheme.add_handler('pdfjs', backend=usertypes.Backend.QtWebKit)
|
|
||||||
def qute_pdfjs(url):
|
|
||||||
"""Handler for qute://pdfjs. Return the pdf.js viewer."""
|
|
||||||
try:
|
|
||||||
data = pdfjs.get_pdfjs_res(url.path())
|
|
||||||
except pdfjs.PDFJSNotFound as e:
|
|
||||||
# Logging as the error might get lost otherwise since we're not showing
|
|
||||||
# the error page if a single asset is missing. This way we don't lose
|
|
||||||
# information, as the failed pdfjs requests are still in the log.
|
|
||||||
log.misc.warning(
|
|
||||||
"pdfjs resource requested but not found: {}".format(e.path))
|
|
||||||
raise qutescheme.NotFoundError("Can't find pdfjs resource '{}'".format(
|
|
||||||
e.path))
|
|
||||||
else:
|
|
||||||
mimetype, _encoding = mimetypes.guess_type(url.fileName())
|
|
||||||
assert mimetype is not None, url
|
|
||||||
return mimetype, data
|
|
||||||
|
@ -20,11 +20,12 @@
|
|||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import time
|
import time
|
||||||
|
import logging
|
||||||
|
|
||||||
from PyQt5.QtCore import QUrl
|
from PyQt5.QtCore import QUrl
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from qutebrowser.browser import qutescheme
|
from qutebrowser.browser import qutescheme, pdfjs
|
||||||
|
|
||||||
|
|
||||||
class TestJavascriptHandler:
|
class TestJavascriptHandler:
|
||||||
@ -169,3 +170,37 @@ class TestHelpHandler:
|
|||||||
mimetype, data = qutescheme.qute_help(QUrl('qute://help/foo.bin'))
|
mimetype, data = qutescheme.qute_help(QUrl('qute://help/foo.bin'))
|
||||||
assert mimetype == 'application/octet-stream'
|
assert mimetype == 'application/octet-stream'
|
||||||
assert data == b'\xff'
|
assert data == b'\xff'
|
||||||
|
|
||||||
|
|
||||||
|
class TestPDFJSHandler:
|
||||||
|
|
||||||
|
"""Test the qute://pdfjs endpoint."""
|
||||||
|
|
||||||
|
@pytest.fixture(autouse=True)
|
||||||
|
def fake_pdfjs(self, monkeypatch):
|
||||||
|
def get_pdfjs_res(path):
|
||||||
|
if path == '/existing/file.html':
|
||||||
|
return b'foobar'
|
||||||
|
raise pdfjs.PDFJSNotFound(path)
|
||||||
|
|
||||||
|
monkeypatch.setattr(pdfjs, 'get_pdfjs_res', get_pdfjs_res)
|
||||||
|
|
||||||
|
@pytest.fixture(autouse=True)
|
||||||
|
def patch_backend(self, monkeypatch):
|
||||||
|
monkeypatch.setattr(qutescheme.objects, 'backend',
|
||||||
|
usertypes.Backend.QtWebKit)
|
||||||
|
|
||||||
|
def test_existing_resource(self):
|
||||||
|
"""Test with a resource that exists."""
|
||||||
|
_mimetype, data = qutescheme.data_for_url(
|
||||||
|
QUrl('qute://pdfjs/existing/file.html'))
|
||||||
|
assert data == b'foobar'
|
||||||
|
|
||||||
|
def test_nonexisting_resource(self, caplog):
|
||||||
|
"""Test with a resource that does not exist."""
|
||||||
|
with caplog.at_level(logging.WARNING, 'misc'):
|
||||||
|
with pytest.raises(qutescheme.NotFoundError):
|
||||||
|
qutescheme.data_for_url(QUrl('qute://pdfjs/no/file.html'))
|
||||||
|
assert len(caplog.records) == 1
|
||||||
|
assert (caplog.records[0].message ==
|
||||||
|
'pdfjs resource requested but not found: /no/file.html')
|
||||||
|
@ -1,63 +0,0 @@
|
|||||||
# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et:
|
|
||||||
|
|
||||||
# Copyright 2016-2018 Daniel Schadt
|
|
||||||
# Copyright 2016-2018 Florian Bruhin (The Compiler) <mail@qutebrowser.org>
|
|
||||||
#
|
|
||||||
# This file is part of qutebrowser.
|
|
||||||
#
|
|
||||||
# qutebrowser is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# qutebrowser is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
import logging
|
|
||||||
|
|
||||||
import pytest
|
|
||||||
from PyQt5.QtCore import QUrl
|
|
||||||
|
|
||||||
from qutebrowser.utils import usertypes
|
|
||||||
from qutebrowser.browser import pdfjs, qutescheme
|
|
||||||
# pylint: disable=unused-import
|
|
||||||
from qutebrowser.browser.webkit.network import webkitqutescheme
|
|
||||||
# pylint: enable=unused-import
|
|
||||||
|
|
||||||
|
|
||||||
class TestPDFJSHandler:
|
|
||||||
"""Test the qute://pdfjs endpoint."""
|
|
||||||
|
|
||||||
@pytest.fixture(autouse=True)
|
|
||||||
def fake_pdfjs(self, monkeypatch):
|
|
||||||
def get_pdfjs_res(path):
|
|
||||||
if path == '/existing/file.html':
|
|
||||||
return b'foobar'
|
|
||||||
raise pdfjs.PDFJSNotFound(path)
|
|
||||||
|
|
||||||
monkeypatch.setattr(pdfjs, 'get_pdfjs_res', get_pdfjs_res)
|
|
||||||
|
|
||||||
@pytest.fixture(autouse=True)
|
|
||||||
def patch_backend(self, monkeypatch):
|
|
||||||
monkeypatch.setattr(qutescheme.objects, 'backend',
|
|
||||||
usertypes.Backend.QtWebKit)
|
|
||||||
|
|
||||||
def test_existing_resource(self):
|
|
||||||
"""Test with a resource that exists."""
|
|
||||||
_mimetype, data = qutescheme.data_for_url(
|
|
||||||
QUrl('qute://pdfjs/existing/file.html'))
|
|
||||||
assert data == b'foobar'
|
|
||||||
|
|
||||||
def test_nonexisting_resource(self, caplog):
|
|
||||||
"""Test with a resource that does not exist."""
|
|
||||||
with caplog.at_level(logging.WARNING, 'misc'):
|
|
||||||
with pytest.raises(qutescheme.NotFoundError):
|
|
||||||
qutescheme.data_for_url(QUrl('qute://pdfjs/no/file.html'))
|
|
||||||
assert len(caplog.records) == 1
|
|
||||||
assert (caplog.records[0].message ==
|
|
||||||
'pdfjs resource requested but not found: /no/file.html')
|
|
Loading…
Reference in New Issue
Block a user