summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Bruhin <git@the-compiler.org>2018-06-23 15:57:30 +0200
committerFlorian Bruhin <git@the-compiler.org>2018-07-02 22:32:59 +0200
commitc3455d9082bf7c32ed3932c9d4ad5edef1c51f0f (patch)
tree4fff1296f6b52bc16619e404a823e9aae30d1eaf
parentf7ae7e7d40849ea033050e43d4d8515587c3abf2 (diff)
downloadqutebrowser-c3455d9082bf7c32ed3932c9d4ad5edef1c51f0f.tar.gz
qutebrowser-c3455d9082bf7c32ed3932c9d4ad5edef1c51f0f.zip
Add a wrapper around sip
Starting with PyQt 5.11, the sip module now is bundled with PyQt as PyQt.sip. Having a qutebrowser.qt also helps with #3625, see #995
-rw-r--r--doc/changelog.asciidoc1
-rw-r--r--qutebrowser/browser/browsertab.py2
-rw-r--r--qutebrowser/browser/downloads.py2
-rw-r--r--qutebrowser/browser/downloadview.py2
-rw-r--r--qutebrowser/browser/qutescheme.py2
-rw-r--r--qutebrowser/browser/webengine/webenginetab.py2
-rw-r--r--qutebrowser/browser/webengine/webview.py2
-rw-r--r--qutebrowser/browser/webkit/webkittab.py2
-rw-r--r--qutebrowser/browser/webkit/webpage.py2
-rw-r--r--qutebrowser/mainwindow/prompt.py2
-rw-r--r--qutebrowser/misc/earlyinit.py2
-rw-r--r--qutebrowser/misc/sessions.py2
-rw-r--r--qutebrowser/misc/utilcmds.py2
-rw-r--r--qutebrowser/qt.py28
-rw-r--r--scripts/dev/ci/travis_install.sh5
-rw-r--r--tests/conftest.py2
-rw-r--r--tests/unit/utils/test_version.py2
17 files changed, 47 insertions, 15 deletions
diff --git a/doc/changelog.asciidoc b/doc/changelog.asciidoc
index 64a051ad0..07b11207a 100644
--- a/doc/changelog.asciidoc
+++ b/doc/changelog.asciidoc
@@ -21,6 +21,7 @@ v1.4.0 (unreleased)
Added
~~~~~
+- Support for the bundled `sip` module in PyQt 5.11.
- New `--debug-flag log-requests` to log requests to the debug log for
debugging.
- New `--first` flag for `:hint` (bound to `gi` for inputs) which automatically
diff --git a/qutebrowser/browser/browsertab.py b/qutebrowser/browser/browsertab.py
index 9f2e891c5..0170b4627 100644
--- a/qutebrowser/browser/browsertab.py
+++ b/qutebrowser/browser/browsertab.py
@@ -22,7 +22,6 @@
import enum
import itertools
-import sip
import attr
from PyQt5.QtCore import pyqtSignal, pyqtSlot, QUrl, QObject, QSizeF, Qt
from PyQt5.QtGui import QIcon
@@ -38,6 +37,7 @@ from qutebrowser.utils import (utils, objreg, usertypes, log, qtutils,
urlutils, message)
from qutebrowser.misc import miscwidgets, objects
from qutebrowser.browser import mouse, hints
+from qutebrowser.qt import sip
tab_id_gen = itertools.count(0)
diff --git a/qutebrowser/browser/downloads.py b/qutebrowser/browser/downloads.py
index dd112e00a..2e30c26c2 100644
--- a/qutebrowser/browser/downloads.py
+++ b/qutebrowser/browser/downloads.py
@@ -29,7 +29,6 @@ import pathlib
import tempfile
import enum
-import sip
from PyQt5.QtCore import (pyqtSlot, pyqtSignal, Qt, QObject, QModelIndex,
QTimer, QAbstractListModel, QUrl)
@@ -37,6 +36,7 @@ from qutebrowser.commands import cmdexc, cmdutils
from qutebrowser.config import config
from qutebrowser.utils import (usertypes, standarddir, utils, message, log,
qtutils)
+from qutebrowser.qt import sip
ModelRole = enum.IntEnum('ModelRole', ['item'], start=Qt.UserRole)
diff --git a/qutebrowser/browser/downloadview.py b/qutebrowser/browser/downloadview.py
index 80da117d2..e90e37509 100644
--- a/qutebrowser/browser/downloadview.py
+++ b/qutebrowser/browser/downloadview.py
@@ -21,13 +21,13 @@
import functools
-import sip
from PyQt5.QtCore import pyqtSlot, QSize, Qt, QTimer
from PyQt5.QtWidgets import QListView, QSizePolicy, QMenu, QStyleFactory
from qutebrowser.browser import downloads
from qutebrowser.config import config
from qutebrowser.utils import qtutils, utils, objreg
+from qutebrowser.qt import sip
def update_geometry(obj):
diff --git a/qutebrowser/browser/qutescheme.py b/qutebrowser/browser/qutescheme.py
index e3483bac0..b3787e5d0 100644
--- a/qutebrowser/browser/qutescheme.py
+++ b/qutebrowser/browser/qutescheme.py
@@ -34,7 +34,6 @@ import urllib
import collections
import pkg_resources
-import sip
from PyQt5.QtCore import QUrlQuery, QUrl
import qutebrowser
@@ -42,6 +41,7 @@ from qutebrowser.config import config, configdata, configexc, configdiff
from qutebrowser.utils import (version, utils, jinja, log, message, docutils,
objreg, urlutils)
from qutebrowser.misc import objects
+from qutebrowser.qt import sip
pyeval_output = ":pyeval was never called"
diff --git a/qutebrowser/browser/webengine/webenginetab.py b/qutebrowser/browser/webengine/webenginetab.py
index aec3783aa..6254dd191 100644
--- a/qutebrowser/browser/webengine/webenginetab.py
+++ b/qutebrowser/browser/webengine/webenginetab.py
@@ -25,7 +25,6 @@ import sys
import re
import html as html_utils
-import sip
from PyQt5.QtCore import (pyqtSignal, pyqtSlot, Qt, QEvent, QPoint, QPointF,
QUrl, QTimer, QObject, qVersion)
from PyQt5.QtGui import QKeyEvent, QIcon
@@ -42,6 +41,7 @@ from qutebrowser.browser.webengine import (webview, webengineelem, tabhistory,
from qutebrowser.misc import miscwidgets
from qutebrowser.utils import (usertypes, qtutils, log, javascript, utils,
message, objreg, jinja, debug)
+from qutebrowser.qt import sip
_qute_scheme_handler = None
diff --git a/qutebrowser/browser/webengine/webview.py b/qutebrowser/browser/webengine/webview.py
index ca4126833..b10cc5f9a 100644
--- a/qutebrowser/browser/webengine/webview.py
+++ b/qutebrowser/browser/webengine/webview.py
@@ -19,7 +19,6 @@
"""The main browser widget for QtWebEngine."""
-import sip
from PyQt5.QtCore import pyqtSignal, QUrl, PYQT_VERSION
from PyQt5.QtGui import QPalette
from PyQt5.QtWidgets import QWidget
@@ -30,6 +29,7 @@ from qutebrowser.browser.webengine import webenginesettings, certificateerror
from qutebrowser.config import config
from qutebrowser.utils import log, debug, usertypes, objreg, qtutils
from qutebrowser.misc import miscwidgets
+from qutebrowser.qt import sip
class WebEngineView(QWebEngineView):
diff --git a/qutebrowser/browser/webkit/webkittab.py b/qutebrowser/browser/webkit/webkittab.py
index 8039eb5eb..31cb82f29 100644
--- a/qutebrowser/browser/webkit/webkittab.py
+++ b/qutebrowser/browser/webkit/webkittab.py
@@ -23,7 +23,6 @@ import re
import functools
import xml.etree.ElementTree
-import sip
from PyQt5.QtCore import (pyqtSlot, Qt, QEvent, QUrl, QPoint, QTimer, QSizeF,
QSize)
from PyQt5.QtGui import QKeyEvent, QIcon
@@ -35,6 +34,7 @@ from qutebrowser.browser import browsertab, shared
from qutebrowser.browser.webkit import (webview, tabhistory, webkitelem,
webkitsettings)
from qutebrowser.utils import qtutils, usertypes, utils, log, debug
+from qutebrowser.qt import sip
class WebKitAction(browsertab.AbstractAction):
diff --git a/qutebrowser/browser/webkit/webpage.py b/qutebrowser/browser/webkit/webpage.py
index a6c26c8ee..4e0701329 100644
--- a/qutebrowser/browser/webkit/webpage.py
+++ b/qutebrowser/browser/webkit/webpage.py
@@ -22,7 +22,6 @@
import html
import functools
-import sip
from PyQt5.QtCore import pyqtSlot, pyqtSignal, Qt, QUrl, QPoint
from PyQt5.QtGui import QDesktopServices
from PyQt5.QtNetwork import QNetworkReply, QNetworkRequest
@@ -35,6 +34,7 @@ from qutebrowser.browser import pdfjs, shared
from qutebrowser.browser.webkit import http
from qutebrowser.browser.webkit.network import networkmanager
from qutebrowser.utils import message, usertypes, log, jinja, objreg
+from qutebrowser.qt import sip
class BrowserPage(QWebPage):
diff --git a/qutebrowser/mainwindow/prompt.py b/qutebrowser/mainwindow/prompt.py
index f7af28440..357f63dd7 100644
--- a/qutebrowser/mainwindow/prompt.py
+++ b/qutebrowser/mainwindow/prompt.py
@@ -24,7 +24,6 @@ import html
import collections
import attr
-import sip
from PyQt5.QtCore import (pyqtSlot, pyqtSignal, Qt, QTimer, QDir, QModelIndex,
QItemSelectionModel, QObject, QEventLoop)
from PyQt5.QtWidgets import (QWidget, QGridLayout, QVBoxLayout, QLineEdit,
@@ -36,6 +35,7 @@ from qutebrowser.config import config
from qutebrowser.utils import usertypes, log, utils, qtutils, objreg, message
from qutebrowser.keyinput import modeman
from qutebrowser.commands import cmdutils, cmdexc
+from qutebrowser.qt import sip
prompt_queue = None
diff --git a/qutebrowser/misc/earlyinit.py b/qutebrowser/misc/earlyinit.py
index 9649d27cc..92e3a9731 100644
--- a/qutebrowser/misc/earlyinit.py
+++ b/qutebrowser/misc/earlyinit.py
@@ -246,7 +246,7 @@ def configure_pyqt():
from PyQt5.QtCore import pyqtRemoveInputHook
pyqtRemoveInputHook()
- import sip
+ from qutebrowser.qt import sip
try:
# Added in sip 4.19.4
sip.enableoverflowchecking(True)
diff --git a/qutebrowser/misc/sessions.py b/qutebrowser/misc/sessions.py
index dddf48b05..358ab0c53 100644
--- a/qutebrowser/misc/sessions.py
+++ b/qutebrowser/misc/sessions.py
@@ -24,7 +24,6 @@ import os.path
import itertools
import urllib
-import sip
from PyQt5.QtCore import QUrl, QObject, QPoint, QTimer
from PyQt5.QtWidgets import QApplication
import yaml
@@ -35,6 +34,7 @@ from qutebrowser.commands import cmdexc, cmdutils
from qutebrowser.config import config, configfiles
from qutebrowser.completion.models import miscmodels
from qutebrowser.mainwindow import mainwindow
+from qutebrowser.qt import sip
default = object() # Sentinel value
diff --git a/qutebrowser/misc/utilcmds.py b/qutebrowser/misc/utilcmds.py
index 5d987afa3..66483e09a 100644
--- a/qutebrowser/misc/utilcmds.py
+++ b/qutebrowser/misc/utilcmds.py
@@ -29,7 +29,6 @@ try:
except ImportError:
hunter = None
-import sip
from PyQt5.QtCore import QUrl
# so it's available for :debug-pyeval
from PyQt5.QtWidgets import QApplication # pylint: disable=unused-import
@@ -40,6 +39,7 @@ from qutebrowser.commands import cmdutils, runners, cmdexc
from qutebrowser.config import config, configdata
from qutebrowser.misc import consolewidget
from qutebrowser.utils.version import pastebin_version
+from qutebrowser.qt import sip
@cmdutils.register(maxsplit=1, no_cmd_split=True, no_replace_variables=True)
diff --git a/qutebrowser/qt.py b/qutebrowser/qt.py
new file mode 100644
index 000000000..2878bbe98
--- /dev/null
+++ b/qutebrowser/qt.py
@@ -0,0 +1,28 @@
+# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et:
+
+# Copyright 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/>.
+
+"""Wrappers around Qt/PyQt code."""
+
+# pylint: disable=unused-import
+# PyQt 5.11 comes with a bundled sip,
+# for older PyQt versions it's a separate module.
+try:
+ from PyQt5 import sip
+except ImportError:
+ import sip
diff --git a/scripts/dev/ci/travis_install.sh b/scripts/dev/ci/travis_install.sh
index 20aa1c12d..29711a11b 100644
--- a/scripts/dev/ci/travis_install.sh
+++ b/scripts/dev/ci/travis_install.sh
@@ -62,7 +62,10 @@ check_pyqt() {
python3 <<EOF
import sys
from PyQt5.QtCore import QT_VERSION_STR, PYQT_VERSION_STR, qVersion
-from sip import SIP_VERSION_STR
+try:
+ from PyQt.sip import SIP_VERSION_STR
+except ModuleNotFoundError:
+ from sip import SIP_VERSION_STR
print("Python {}".format(sys.version))
print("PyQt5 {}".format(PYQT_VERSION_STR))
diff --git a/tests/conftest.py b/tests/conftest.py
index 7df1a1e08..595c2940e 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -25,7 +25,6 @@ import os
import sys
import warnings
-import sip
import pytest
import hypothesis
from PyQt5.QtCore import qVersion, PYQT_VERSION
@@ -38,6 +37,7 @@ from helpers.messagemock import message_mock
from helpers.fixtures import * # noqa: F403
from qutebrowser.utils import qtutils, standarddir, usertypes, utils, version
from qutebrowser.misc import objects
+from qutebrowser.qt import sip
import qutebrowser.app # To register commands
diff --git a/tests/unit/utils/test_version.py b/tests/unit/utils/test_version.py
index 683fba02e..e2fbf8f1c 100644
--- a/tests/unit/utils/test_version.py
+++ b/tests/unit/utils/test_version.py
@@ -659,7 +659,7 @@ class TestModuleVersions:
The aim of this test is to fail if that gets missing in some future
version of sip.
"""
- import sip
+ from qutebrowser.qt import sip
assert isinstance(sip.SIP_VERSION_STR, str)