diff --git a/qutebrowser/browser/webkit/network/filescheme.py b/qutebrowser/browser/webkit/network/filescheme.py index d8c2c36b8..840ed6a4a 100644 --- a/qutebrowser/browser/webkit/network/filescheme.py +++ b/qutebrowser/browser/webkit/network/filescheme.py @@ -25,7 +25,7 @@ import os -from qutebrowser.browser.webkit.network import schemehandler, networkreply +from qutebrowser.browser.webkit.network import networkreply from qutebrowser.utils import jinja @@ -111,27 +111,21 @@ def dirbrowser_html(path): return html.encode('UTF-8', errors='xmlcharrefreplace') -class FileSchemeHandler(schemehandler.SchemeHandler): +def handler(request): + """Handler for a file:// URL. - """Scheme handler for file: URLs.""" + Args: + request: QNetworkRequest to answer to. - def createRequest(self, _op, request, _outgoing_data): - """Create a new request. - - Args: - request: const QNetworkRequest & req - _op: Operation op - _outgoing_data: QIODevice * outgoingData - - Return: - A QNetworkReply for directories, None for files. - """ - path = request.url().toLocalFile() - try: - if os.path.isdir(path): - data = dirbrowser_html(path) - return networkreply.FixedDataNetworkReply( - request, data, 'text/html', self.parent()) - return None - except UnicodeEncodeError: - return None + Return: + A QNetworkReply for directories, None for files. + """ + path = request.url().toLocalFile() + try: + if os.path.isdir(path): + data = dirbrowser_html(path) + return networkreply.FixedDataNetworkReply( + request, data, 'text/html') + return None + except UnicodeEncodeError: + return None diff --git a/qutebrowser/browser/webkit/network/networkmanager.py b/qutebrowser/browser/webkit/network/networkmanager.py index 49bf6ebab..53508aaa6 100644 --- a/qutebrowser/browser/webkit/network/networkmanager.py +++ b/qutebrowser/browser/webkit/network/networkmanager.py @@ -151,8 +151,8 @@ class NetworkManager(QNetworkAccessManager): self._tab_id = tab_id self._private = private self._scheme_handlers = { - 'qute': webkitqutescheme.QuteSchemeHandler(), - 'file': filescheme.FileSchemeHandler(), + 'qute': webkitqutescheme.handler, + 'file': filescheme.handler, } self._set_cookiejar() self._set_cache() @@ -373,9 +373,9 @@ class NetworkManager(QNetworkAccessManager): scheme = req.url().scheme() if scheme in self._scheme_handlers: - result = self._scheme_handlers[scheme].createRequest( - op, req, outgoing_data) + result = self._scheme_handlers[scheme](req) if result is not None: + result.setParent(self) return result for header, value in shared.custom_headers(): diff --git a/qutebrowser/browser/webkit/network/schemehandler.py b/qutebrowser/browser/webkit/network/schemehandler.py deleted file mode 100644 index 278d7e3a3..000000000 --- a/qutebrowser/browser/webkit/network/schemehandler.py +++ /dev/null @@ -1,43 +0,0 @@ -# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et: - -# Copyright 2014-2018 Florian Bruhin (The Compiler) -# -# Based on the Eric5 helpviewer, -# Copyright (c) 2009 - 2014 Detlev Offenbach -# -# 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 . - -"""Base class for custom scheme handlers.""" - -from PyQt5.QtCore import QObject - - -class SchemeHandler(QObject): - - """Abstract base class for custom scheme handlers.""" - - def createRequest(self, op, request, outgoing_data): - """Create a new request. - - Args: - op: Operation op - req: const QNetworkRequest & req - outgoing_data: QIODevice * outgoingData - - Return: - A QNetworkReply. - """ - raise NotImplementedError diff --git a/qutebrowser/browser/webkit/network/webkitqutescheme.py b/qutebrowser/browser/webkit/network/webkitqutescheme.py index 2ed8d5aa1..d732b6ab0 100644 --- a/qutebrowser/browser/webkit/network/webkitqutescheme.py +++ b/qutebrowser/browser/webkit/network/webkitqutescheme.py @@ -24,46 +24,36 @@ import mimetypes from PyQt5.QtNetwork import QNetworkReply from qutebrowser.browser import pdfjs, qutescheme -from qutebrowser.browser.webkit.network import schemehandler, networkreply +from qutebrowser.browser.webkit.network import networkreply from qutebrowser.utils import log, usertypes, qtutils -class QuteSchemeHandler(schemehandler.SchemeHandler): +def handler(request): + """Scheme handler for qute:// URLs. - """Scheme handler for qute:// URLs.""" + Args: + request: QNetworkRequest to answer to. - def createRequest(self, _op, request, _outgoing_data): - """Create a new request. + Return: + A QNetworkReply. + """ + try: + mimetype, data = qutescheme.data_for_url(request.url()) + except qutescheme.NoHandlerFound: + errorstr = "No handler found for {}!".format( + request.url().toDisplayString()) + return networkreply.ErrorNetworkReply( + request, errorstr, QNetworkReply.ContentNotFoundError) + except qutescheme.QuteSchemeOSError as e: + return networkreply.ErrorNetworkReply( + request, str(e), QNetworkReply.ContentNotFoundError) + except qutescheme.QuteSchemeError as e: + return networkreply.ErrorNetworkReply(request, e.errorstring, e.error) + except qutescheme.Redirect as e: + qtutils.ensure_valid(e.url) + return networkreply.RedirectNetworkReply(e.url) - Args: - request: const QNetworkRequest & req - _op: Operation op - _outgoing_data: QIODevice * outgoingData - - Return: - A QNetworkReply. - """ - try: - mimetype, data = qutescheme.data_for_url(request.url()) - except qutescheme.NoHandlerFound: - errorstr = "No handler found for {}!".format( - request.url().toDisplayString()) - return networkreply.ErrorNetworkReply( - request, errorstr, QNetworkReply.ContentNotFoundError, - self.parent()) - except qutescheme.QuteSchemeOSError as e: - return networkreply.ErrorNetworkReply( - request, str(e), QNetworkReply.ContentNotFoundError, - self.parent()) - except qutescheme.QuteSchemeError as e: - return networkreply.ErrorNetworkReply(request, e.errorstring, - e.error, self.parent()) - except qutescheme.Redirect as e: - qtutils.ensure_valid(e.url) - return networkreply.RedirectNetworkReply(e.url, self.parent()) - - return networkreply.FixedDataNetworkReply(request, data, mimetype, - self.parent()) + return networkreply.FixedDataNetworkReply(request, data, mimetype) @qutescheme.add_handler('pdfjs', backend=usertypes.Backend.QtWebKit) diff --git a/scripts/dev/check_coverage.py b/scripts/dev/check_coverage.py index 45ad534e1..ea971c28c 100644 --- a/scripts/dev/check_coverage.py +++ b/scripts/dev/check_coverage.py @@ -72,8 +72,6 @@ PERFECT_FILES = [ # 'browser/webkit/webkitelem.py'), # ('tests/unit/browser/webkit/test_webkitelem.py', # 'browser/webelem.py'), - ('tests/unit/browser/webkit/network/test_schemehandler.py', - 'browser/webkit/network/schemehandler.py'), ('tests/unit/browser/webkit/network/test_filescheme.py', 'browser/webkit/network/filescheme.py'), ('tests/unit/browser/webkit/network/test_networkreply.py', diff --git a/tests/unit/browser/webkit/network/test_filescheme.py b/tests/unit/browser/webkit/network/test_filescheme.py index 50b908dc0..5bdbb47cc 100644 --- a/tests/unit/browser/webkit/network/test_filescheme.py +++ b/tests/unit/browser/webkit/network/test_filescheme.py @@ -248,8 +248,7 @@ class TestFileSchemeHandler: def test_dir(self, tmpdir): url = QUrl.fromLocalFile(str(tmpdir)) req = QNetworkRequest(url) - handler = filescheme.FileSchemeHandler() - reply = handler.createRequest(None, req, None) + reply = filescheme.handler(req) # The URL will always use /, even on Windows - so we force this here # too. tmpdir_path = str(tmpdir).replace(os.sep, '/') @@ -260,17 +259,15 @@ class TestFileSchemeHandler: filename.ensure() url = QUrl.fromLocalFile(str(filename)) req = QNetworkRequest(url) - handler = filescheme.FileSchemeHandler() - reply = handler.createRequest(None, req, None) + reply = filescheme.handler(req) assert reply is None def test_unicode_encode_error(self, mocker): url = QUrl('file:///tmp/foo') req = QNetworkRequest(url) - handler = filescheme.FileSchemeHandler() err = UnicodeEncodeError('ascii', '', 0, 2, 'foo') mocker.patch('os.path.isdir', side_effect=err) - reply = handler.createRequest(None, req, None) + reply = filescheme.handler(req) assert reply is None diff --git a/tests/unit/browser/webkit/network/test_schemehandler.py b/tests/unit/browser/webkit/network/test_schemehandler.py deleted file mode 100644 index cb1ac3dec..000000000 --- a/tests/unit/browser/webkit/network/test_schemehandler.py +++ /dev/null @@ -1,30 +0,0 @@ -# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et: - -# Copyright 2015-2018 Florian Bruhin (The Compiler) -# -# 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 . - -"""Tests for browser.network.schemehandler.""" - -import pytest - -from qutebrowser.browser.webkit.network import schemehandler - - -def test_create_request(): - handler = schemehandler.SchemeHandler(0) - with pytest.raises(NotImplementedError): - handler.createRequest(None, None, None)