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
This commit is contained in:
parent
f7ae7e7d40
commit
c3455d9082
@ -21,6 +21,7 @@ v1.4.0 (unreleased)
|
|||||||
Added
|
Added
|
||||||
~~~~~
|
~~~~~
|
||||||
|
|
||||||
|
- Support for the bundled `sip` module in PyQt 5.11.
|
||||||
- New `--debug-flag log-requests` to log requests to the debug log for
|
- New `--debug-flag log-requests` to log requests to the debug log for
|
||||||
debugging.
|
debugging.
|
||||||
- New `--first` flag for `:hint` (bound to `gi` for inputs) which automatically
|
- New `--first` flag for `:hint` (bound to `gi` for inputs) which automatically
|
||||||
|
@ -22,7 +22,6 @@
|
|||||||
import enum
|
import enum
|
||||||
import itertools
|
import itertools
|
||||||
|
|
||||||
import sip
|
|
||||||
import attr
|
import attr
|
||||||
from PyQt5.QtCore import pyqtSignal, pyqtSlot, QUrl, QObject, QSizeF, Qt
|
from PyQt5.QtCore import pyqtSignal, pyqtSlot, QUrl, QObject, QSizeF, Qt
|
||||||
from PyQt5.QtGui import QIcon
|
from PyQt5.QtGui import QIcon
|
||||||
@ -38,6 +37,7 @@ from qutebrowser.utils import (utils, objreg, usertypes, log, qtutils,
|
|||||||
urlutils, message)
|
urlutils, message)
|
||||||
from qutebrowser.misc import miscwidgets, objects
|
from qutebrowser.misc import miscwidgets, objects
|
||||||
from qutebrowser.browser import mouse, hints
|
from qutebrowser.browser import mouse, hints
|
||||||
|
from qutebrowser.qt import sip
|
||||||
|
|
||||||
|
|
||||||
tab_id_gen = itertools.count(0)
|
tab_id_gen = itertools.count(0)
|
||||||
|
@ -29,7 +29,6 @@ import pathlib
|
|||||||
import tempfile
|
import tempfile
|
||||||
import enum
|
import enum
|
||||||
|
|
||||||
import sip
|
|
||||||
from PyQt5.QtCore import (pyqtSlot, pyqtSignal, Qt, QObject, QModelIndex,
|
from PyQt5.QtCore import (pyqtSlot, pyqtSignal, Qt, QObject, QModelIndex,
|
||||||
QTimer, QAbstractListModel, QUrl)
|
QTimer, QAbstractListModel, QUrl)
|
||||||
|
|
||||||
@ -37,6 +36,7 @@ from qutebrowser.commands import cmdexc, cmdutils
|
|||||||
from qutebrowser.config import config
|
from qutebrowser.config import config
|
||||||
from qutebrowser.utils import (usertypes, standarddir, utils, message, log,
|
from qutebrowser.utils import (usertypes, standarddir, utils, message, log,
|
||||||
qtutils)
|
qtutils)
|
||||||
|
from qutebrowser.qt import sip
|
||||||
|
|
||||||
|
|
||||||
ModelRole = enum.IntEnum('ModelRole', ['item'], start=Qt.UserRole)
|
ModelRole = enum.IntEnum('ModelRole', ['item'], start=Qt.UserRole)
|
||||||
|
@ -21,13 +21,13 @@
|
|||||||
|
|
||||||
import functools
|
import functools
|
||||||
|
|
||||||
import sip
|
|
||||||
from PyQt5.QtCore import pyqtSlot, QSize, Qt, QTimer
|
from PyQt5.QtCore import pyqtSlot, QSize, Qt, QTimer
|
||||||
from PyQt5.QtWidgets import QListView, QSizePolicy, QMenu, QStyleFactory
|
from PyQt5.QtWidgets import QListView, QSizePolicy, QMenu, QStyleFactory
|
||||||
|
|
||||||
from qutebrowser.browser import downloads
|
from qutebrowser.browser import downloads
|
||||||
from qutebrowser.config import config
|
from qutebrowser.config import config
|
||||||
from qutebrowser.utils import qtutils, utils, objreg
|
from qutebrowser.utils import qtutils, utils, objreg
|
||||||
|
from qutebrowser.qt import sip
|
||||||
|
|
||||||
|
|
||||||
def update_geometry(obj):
|
def update_geometry(obj):
|
||||||
|
@ -34,7 +34,6 @@ import urllib
|
|||||||
import collections
|
import collections
|
||||||
|
|
||||||
import pkg_resources
|
import pkg_resources
|
||||||
import sip
|
|
||||||
from PyQt5.QtCore import QUrlQuery, QUrl
|
from PyQt5.QtCore import QUrlQuery, QUrl
|
||||||
|
|
||||||
import qutebrowser
|
import qutebrowser
|
||||||
@ -42,6 +41,7 @@ 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)
|
||||||
from qutebrowser.misc import objects
|
from qutebrowser.misc import objects
|
||||||
|
from qutebrowser.qt import sip
|
||||||
|
|
||||||
|
|
||||||
pyeval_output = ":pyeval was never called"
|
pyeval_output = ":pyeval was never called"
|
||||||
|
@ -25,7 +25,6 @@ import sys
|
|||||||
import re
|
import re
|
||||||
import html as html_utils
|
import html as html_utils
|
||||||
|
|
||||||
import sip
|
|
||||||
from PyQt5.QtCore import (pyqtSignal, pyqtSlot, Qt, QEvent, QPoint, QPointF,
|
from PyQt5.QtCore import (pyqtSignal, pyqtSlot, Qt, QEvent, QPoint, QPointF,
|
||||||
QUrl, QTimer, QObject, qVersion)
|
QUrl, QTimer, QObject, qVersion)
|
||||||
from PyQt5.QtGui import QKeyEvent, QIcon
|
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.misc import miscwidgets
|
||||||
from qutebrowser.utils import (usertypes, qtutils, log, javascript, utils,
|
from qutebrowser.utils import (usertypes, qtutils, log, javascript, utils,
|
||||||
message, objreg, jinja, debug)
|
message, objreg, jinja, debug)
|
||||||
|
from qutebrowser.qt import sip
|
||||||
|
|
||||||
|
|
||||||
_qute_scheme_handler = None
|
_qute_scheme_handler = None
|
||||||
|
@ -19,7 +19,6 @@
|
|||||||
|
|
||||||
"""The main browser widget for QtWebEngine."""
|
"""The main browser widget for QtWebEngine."""
|
||||||
|
|
||||||
import sip
|
|
||||||
from PyQt5.QtCore import pyqtSignal, QUrl, PYQT_VERSION
|
from PyQt5.QtCore import pyqtSignal, QUrl, PYQT_VERSION
|
||||||
from PyQt5.QtGui import QPalette
|
from PyQt5.QtGui import QPalette
|
||||||
from PyQt5.QtWidgets import QWidget
|
from PyQt5.QtWidgets import QWidget
|
||||||
@ -30,6 +29,7 @@ from qutebrowser.browser.webengine import webenginesettings, certificateerror
|
|||||||
from qutebrowser.config import config
|
from qutebrowser.config import config
|
||||||
from qutebrowser.utils import log, debug, usertypes, objreg, qtutils
|
from qutebrowser.utils import log, debug, usertypes, objreg, qtutils
|
||||||
from qutebrowser.misc import miscwidgets
|
from qutebrowser.misc import miscwidgets
|
||||||
|
from qutebrowser.qt import sip
|
||||||
|
|
||||||
|
|
||||||
class WebEngineView(QWebEngineView):
|
class WebEngineView(QWebEngineView):
|
||||||
|
@ -23,7 +23,6 @@ import re
|
|||||||
import functools
|
import functools
|
||||||
import xml.etree.ElementTree
|
import xml.etree.ElementTree
|
||||||
|
|
||||||
import sip
|
|
||||||
from PyQt5.QtCore import (pyqtSlot, Qt, QEvent, QUrl, QPoint, QTimer, QSizeF,
|
from PyQt5.QtCore import (pyqtSlot, Qt, QEvent, QUrl, QPoint, QTimer, QSizeF,
|
||||||
QSize)
|
QSize)
|
||||||
from PyQt5.QtGui import QKeyEvent, QIcon
|
from PyQt5.QtGui import QKeyEvent, QIcon
|
||||||
@ -35,6 +34,7 @@ from qutebrowser.browser import browsertab, shared
|
|||||||
from qutebrowser.browser.webkit import (webview, tabhistory, webkitelem,
|
from qutebrowser.browser.webkit import (webview, tabhistory, webkitelem,
|
||||||
webkitsettings)
|
webkitsettings)
|
||||||
from qutebrowser.utils import qtutils, usertypes, utils, log, debug
|
from qutebrowser.utils import qtutils, usertypes, utils, log, debug
|
||||||
|
from qutebrowser.qt import sip
|
||||||
|
|
||||||
|
|
||||||
class WebKitAction(browsertab.AbstractAction):
|
class WebKitAction(browsertab.AbstractAction):
|
||||||
|
@ -22,7 +22,6 @@
|
|||||||
import html
|
import html
|
||||||
import functools
|
import functools
|
||||||
|
|
||||||
import sip
|
|
||||||
from PyQt5.QtCore import pyqtSlot, pyqtSignal, Qt, QUrl, QPoint
|
from PyQt5.QtCore import pyqtSlot, pyqtSignal, Qt, QUrl, QPoint
|
||||||
from PyQt5.QtGui import QDesktopServices
|
from PyQt5.QtGui import QDesktopServices
|
||||||
from PyQt5.QtNetwork import QNetworkReply, QNetworkRequest
|
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 import http
|
||||||
from qutebrowser.browser.webkit.network import networkmanager
|
from qutebrowser.browser.webkit.network import networkmanager
|
||||||
from qutebrowser.utils import message, usertypes, log, jinja, objreg
|
from qutebrowser.utils import message, usertypes, log, jinja, objreg
|
||||||
|
from qutebrowser.qt import sip
|
||||||
|
|
||||||
|
|
||||||
class BrowserPage(QWebPage):
|
class BrowserPage(QWebPage):
|
||||||
|
@ -24,7 +24,6 @@ import html
|
|||||||
import collections
|
import collections
|
||||||
|
|
||||||
import attr
|
import attr
|
||||||
import sip
|
|
||||||
from PyQt5.QtCore import (pyqtSlot, pyqtSignal, Qt, QTimer, QDir, QModelIndex,
|
from PyQt5.QtCore import (pyqtSlot, pyqtSignal, Qt, QTimer, QDir, QModelIndex,
|
||||||
QItemSelectionModel, QObject, QEventLoop)
|
QItemSelectionModel, QObject, QEventLoop)
|
||||||
from PyQt5.QtWidgets import (QWidget, QGridLayout, QVBoxLayout, QLineEdit,
|
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.utils import usertypes, log, utils, qtutils, objreg, message
|
||||||
from qutebrowser.keyinput import modeman
|
from qutebrowser.keyinput import modeman
|
||||||
from qutebrowser.commands import cmdutils, cmdexc
|
from qutebrowser.commands import cmdutils, cmdexc
|
||||||
|
from qutebrowser.qt import sip
|
||||||
|
|
||||||
|
|
||||||
prompt_queue = None
|
prompt_queue = None
|
||||||
|
@ -246,7 +246,7 @@ def configure_pyqt():
|
|||||||
from PyQt5.QtCore import pyqtRemoveInputHook
|
from PyQt5.QtCore import pyqtRemoveInputHook
|
||||||
pyqtRemoveInputHook()
|
pyqtRemoveInputHook()
|
||||||
|
|
||||||
import sip
|
from qutebrowser.qt import sip
|
||||||
try:
|
try:
|
||||||
# Added in sip 4.19.4
|
# Added in sip 4.19.4
|
||||||
sip.enableoverflowchecking(True)
|
sip.enableoverflowchecking(True)
|
||||||
|
@ -24,7 +24,6 @@ import os.path
|
|||||||
import itertools
|
import itertools
|
||||||
import urllib
|
import urllib
|
||||||
|
|
||||||
import sip
|
|
||||||
from PyQt5.QtCore import QUrl, QObject, QPoint, QTimer
|
from PyQt5.QtCore import QUrl, QObject, QPoint, QTimer
|
||||||
from PyQt5.QtWidgets import QApplication
|
from PyQt5.QtWidgets import QApplication
|
||||||
import yaml
|
import yaml
|
||||||
@ -35,6 +34,7 @@ from qutebrowser.commands import cmdexc, cmdutils
|
|||||||
from qutebrowser.config import config, configfiles
|
from qutebrowser.config import config, configfiles
|
||||||
from qutebrowser.completion.models import miscmodels
|
from qutebrowser.completion.models import miscmodels
|
||||||
from qutebrowser.mainwindow import mainwindow
|
from qutebrowser.mainwindow import mainwindow
|
||||||
|
from qutebrowser.qt import sip
|
||||||
|
|
||||||
|
|
||||||
default = object() # Sentinel value
|
default = object() # Sentinel value
|
||||||
|
@ -29,7 +29,6 @@ try:
|
|||||||
except ImportError:
|
except ImportError:
|
||||||
hunter = None
|
hunter = None
|
||||||
|
|
||||||
import sip
|
|
||||||
from PyQt5.QtCore import QUrl
|
from PyQt5.QtCore import QUrl
|
||||||
# so it's available for :debug-pyeval
|
# so it's available for :debug-pyeval
|
||||||
from PyQt5.QtWidgets import QApplication # pylint: disable=unused-import
|
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.config import config, configdata
|
||||||
from qutebrowser.misc import consolewidget
|
from qutebrowser.misc import consolewidget
|
||||||
from qutebrowser.utils.version import pastebin_version
|
from qutebrowser.utils.version import pastebin_version
|
||||||
|
from qutebrowser.qt import sip
|
||||||
|
|
||||||
|
|
||||||
@cmdutils.register(maxsplit=1, no_cmd_split=True, no_replace_variables=True)
|
@cmdutils.register(maxsplit=1, no_cmd_split=True, no_replace_variables=True)
|
||||||
|
28
qutebrowser/qt.py
Normal file
28
qutebrowser/qt.py
Normal file
@ -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
|
@ -62,7 +62,10 @@ check_pyqt() {
|
|||||||
python3 <<EOF
|
python3 <<EOF
|
||||||
import sys
|
import sys
|
||||||
from PyQt5.QtCore import QT_VERSION_STR, PYQT_VERSION_STR, qVersion
|
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("Python {}".format(sys.version))
|
||||||
print("PyQt5 {}".format(PYQT_VERSION_STR))
|
print("PyQt5 {}".format(PYQT_VERSION_STR))
|
||||||
|
@ -25,7 +25,6 @@ import os
|
|||||||
import sys
|
import sys
|
||||||
import warnings
|
import warnings
|
||||||
|
|
||||||
import sip
|
|
||||||
import pytest
|
import pytest
|
||||||
import hypothesis
|
import hypothesis
|
||||||
from PyQt5.QtCore import qVersion, PYQT_VERSION
|
from PyQt5.QtCore import qVersion, PYQT_VERSION
|
||||||
@ -38,6 +37,7 @@ from helpers.messagemock import message_mock
|
|||||||
from helpers.fixtures import * # noqa: F403
|
from helpers.fixtures import * # noqa: F403
|
||||||
from qutebrowser.utils import qtutils, standarddir, usertypes, utils, version
|
from qutebrowser.utils import qtutils, standarddir, usertypes, utils, version
|
||||||
from qutebrowser.misc import objects
|
from qutebrowser.misc import objects
|
||||||
|
from qutebrowser.qt import sip
|
||||||
|
|
||||||
import qutebrowser.app # To register commands
|
import qutebrowser.app # To register commands
|
||||||
|
|
||||||
|
@ -659,7 +659,7 @@ class TestModuleVersions:
|
|||||||
The aim of this test is to fail if that gets missing in some future
|
The aim of this test is to fail if that gets missing in some future
|
||||||
version of sip.
|
version of sip.
|
||||||
"""
|
"""
|
||||||
import sip
|
from qutebrowser.qt import sip
|
||||||
assert isinstance(sip.SIP_VERSION_STR, str)
|
assert isinstance(sip.SIP_VERSION_STR, str)
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user