From f2c308c6c1dde02575d6d09fe4973fd0be9b52ed Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Thu, 29 Jun 2023 14:55:28 +0200 Subject: qt6 mypy: Fix remaining issues 30 -> 0 errors --- qutebrowser/browser/webengine/notification.py | 10 ++++++---- qutebrowser/keyinput/keyutils.py | 10 +++++----- qutebrowser/keyinput/modeman.py | 2 +- qutebrowser/misc/crashdialog.py | 3 ++- qutebrowser/misc/earlyinit.py | 7 ++----- qutebrowser/misc/httpclient.py | 3 ++- qutebrowser/misc/nativeeventfilter.py | 8 ++++---- qutebrowser/qt/sip.py | 2 +- qutebrowser/utils/debug.py | 8 ++++---- qutebrowser/utils/urlutils.py | 6 ++++-- qutebrowser/utils/version.py | 8 +++++--- 11 files changed, 36 insertions(+), 31 deletions(-) diff --git a/qutebrowser/browser/webengine/notification.py b/qutebrowser/browser/webengine/notification.py index f5c9fb92e..ba00b066b 100644 --- a/qutebrowser/browser/webengine/notification.py +++ b/qutebrowser/browser/webengine/notification.py @@ -691,11 +691,12 @@ def _as_uint32(x: int) -> QVariant: variant = QVariant(x) if machinery.IS_QT5: - target_type = QVariant.Type.UInt + target = QVariant.Type.UInt else: # Qt 6 - target_type = QMetaType(QMetaType.Type.UInt.value) + # FIXME:mypy PyQt6-stubs issue + target = QMetaType(QMetaType.Type.UInt.value) # type: ignore[call-overload] - successful = variant.convert(target_type) + successful = variant.convert(target) assert successful return variant @@ -1110,7 +1111,8 @@ class DBusNotificationAdapter(AbstractNotificationAdapter): return None bits = qimage.constBits().asstring(size) - image_data.add(QByteArray(bits)) + # FIXME:mypy PyQt6-stubs issue + image_data.add(QByteArray(bits)) # type: ignore[call-overload] image_data.endStructure() return image_data diff --git a/qutebrowser/keyinput/keyutils.py b/qutebrowser/keyinput/keyutils.py index aecca59a8..a5ffd026a 100644 --- a/qutebrowser/keyinput/keyutils.py +++ b/qutebrowser/keyinput/keyutils.py @@ -228,8 +228,8 @@ def _check_valid_utf8(s: str, data: Union[Qt.Key, _ModifierType]) -> None: try: s.encode('utf-8') except UnicodeEncodeError as e: # pragma: no cover - raise ValueError("Invalid encoding in 0x{:x} -> {}: {}" - .format(int(data), s, e)) + i = qtutils.extract_enum_val(data) + raise ValueError(f"Invalid encoding in 0x{i:x} -> {s}: {e}") def _key_to_string(key: Qt.Key) -> str: @@ -399,7 +399,7 @@ class KeyInfo: except ValueError as ex: raise InvalidKeyError(str(ex)) key = _remap_unicode(key, e.text()) - modifiers = cast(Qt.KeyboardModifier, e.modifiers()) + modifiers = e.modifiers() return cls(key, modifiers) @classmethod @@ -675,7 +675,7 @@ class KeySequence: raise KeyParseError(None, f"Got invalid key: {e}") _assert_plain_key(key) - _assert_plain_modifier(cast(Qt.KeyboardModifier, ev.modifiers())) + _assert_plain_modifier(ev.modifiers()) key = _remap_unicode(key, ev.text()) modifiers: _ModifierType = ev.modifiers() @@ -725,7 +725,7 @@ class KeySequence: modifiers |= Qt.KeyboardModifier.ControlModifier infos = list(self) - infos.append(KeyInfo(key, cast(Qt.KeyboardModifier, modifiers))) + infos.append(KeyInfo(key, modifiers)) return self.__class__(*infos) diff --git a/qutebrowser/keyinput/modeman.py b/qutebrowser/keyinput/modeman.py index 671c2519e..927c93512 100644 --- a/qutebrowser/keyinput/modeman.py +++ b/qutebrowser/keyinput/modeman.py @@ -467,7 +467,7 @@ class ModeManager(QObject): QEvent.Type.ShortcutOverride: functools.partial(self._handle_keypress, dry_run=True), } - handler = handlers[event.type()] + handler = handlers[cast(QEvent.Type, event.type())] return handler(cast(QKeyEvent, event)) @cmdutils.register(instance='mode-manager', scope='window') diff --git a/qutebrowser/misc/crashdialog.py b/qutebrowser/misc/crashdialog.py index b3998cf27..1d709c0e4 100644 --- a/qutebrowser/misc/crashdialog.py +++ b/qutebrowser/misc/crashdialog.py @@ -633,7 +633,8 @@ class ReportErrorDialog(QDialog): hbox = QHBoxLayout() hbox.addStretch() btn = QPushButton("Close") - btn.clicked.connect(self.close) + # FIXME:mypy PyQt6-stubs issue + btn.clicked.connect(self.close) # type: ignore[arg-type] hbox.addWidget(btn) vbox.addLayout(hbox) diff --git a/qutebrowser/misc/earlyinit.py b/qutebrowser/misc/earlyinit.py index 8dcf0dce0..7011a28e9 100644 --- a/qutebrowser/misc/earlyinit.py +++ b/qutebrowser/misc/earlyinit.py @@ -286,12 +286,9 @@ def configure_pyqt(): pyqtRemoveInputHook() from qutebrowser.qt import sip - try: - sip.enableoverflowchecking(True) - except AttributeError: + if machinery.IS_QT5: # default in PyQt6 - # FIXME:qt6 solve this in qutebrowser/qt/sip.py equivalent? - pass + sip.enableoverflowchecking(True) def init_log(args): diff --git a/qutebrowser/misc/httpclient.py b/qutebrowser/misc/httpclient.py index da205ae50..23943c27c 100644 --- a/qutebrowser/misc/httpclient.py +++ b/qutebrowser/misc/httpclient.py @@ -80,7 +80,8 @@ class HTTPClient(QObject): request = HTTPRequest(url) request.setHeader(QNetworkRequest.KnownHeaders.ContentTypeHeader, 'application/x-www-form-urlencoded;charset=utf-8') - reply = self._nam.post(request, encoded_data) + # FIXME:mypy PyQt6-stubs issue + reply = self._nam.post(request, encoded_data) # type: ignore[call-overload] self._handle_reply(reply) def get(self, url): diff --git a/qutebrowser/misc/nativeeventfilter.py b/qutebrowser/misc/nativeeventfilter.py index 6213a7223..3bb9d4bbb 100644 --- a/qutebrowser/misc/nativeeventfilter.py +++ b/qutebrowser/misc/nativeeventfilter.py @@ -22,7 +22,7 @@ This entire file is a giant WORKAROUND for https://bugreports.qt.io/browse/QTBUG-114334. """ -from typing import Tuple, Union +from typing import Tuple, Union, cast import enum import ctypes import ctypes.util @@ -113,8 +113,8 @@ class NativeEventFilter(QAbstractNativeEventFilter): # # Tuple because PyQt uses the second value as the *result out-pointer, which # according to the Qt documentation is only used on Windows. - _PASS_EVENT_RET = (False, 0) - _FILTER_EVENT_RET = (True, 0) + _PASS_EVENT_RET = (False, cast(sip.voidptr, 0)) + _FILTER_EVENT_RET = (True, cast(sip.voidptr, 0)) def __init__(self) -> None: super().__init__() @@ -147,7 +147,7 @@ class NativeEventFilter(QAbstractNativeEventFilter): def nativeEventFilter( self, evtype: Union[bytes, QByteArray], message: sip.voidptr - ) -> Tuple[bool, int]: + ) -> Tuple[bool, sip.voidptr]: """Handle XCB events.""" # We're only installed when the platform plugin is xcb assert evtype == b"xcb_generic_event_t", evtype diff --git a/qutebrowser/qt/sip.py b/qutebrowser/qt/sip.py index 7e4bf246d..67431a9bf 100644 --- a/qutebrowser/qt/sip.py +++ b/qutebrowser/qt/sip.py @@ -32,6 +32,6 @@ elif machinery.USE_PYQT6: # While upstream recommends using PyQt5.sip ever since PyQt5 5.11, some # distributions still package later versions of PyQt5 with a top-level # "sip" rather than "PyQt5.sip". - from sip import * + from sip import * # type: ignore[import] else: raise machinery.UnknownWrapper() diff --git a/qutebrowser/utils/debug.py b/qutebrowser/utils/debug.py index 1373404ca..15796c5d2 100644 --- a/qutebrowser/utils/debug.py +++ b/qutebrowser/utils/debug.py @@ -100,7 +100,7 @@ def log_signals(obj: QObject) -> QObject: if machinery.IS_QT6: - _EnumValueType = enum.Enum + _EnumValueType = Union[enum.Enum, int] else: _EnumValueType = Union[sip.simplewrapper, int] @@ -219,9 +219,9 @@ def qflags_key(base: Type[sip.simplewrapper], bits = [] names = [] mask = 0x01 - value = qtutils.extract_enum_val(value) - while mask <= value: - if value & mask: + intval = qtutils.extract_enum_val(value) + while mask <= intval: + if intval & mask: bits.append(mask) mask <<= 1 for bit in bits: diff --git a/qutebrowser/utils/urlutils.py b/qutebrowser/utils/urlutils.py index 58862925e..866d0a662 100644 --- a/qutebrowser/utils/urlutils.py +++ b/qutebrowser/utils/urlutils.py @@ -28,6 +28,7 @@ import urllib.parse import mimetypes from typing import Optional, Tuple, Union, Iterable +from qutebrowser.qt import machinery from qutebrowser.qt.core import QUrl from qutebrowser.qt.network import QHostInfo, QHostAddress, QNetworkProxy @@ -505,9 +506,10 @@ def same_domain(url1: QUrl, url2: QUrl) -> bool: # # There are no other callers of same_domain, and url2 will only be ever valid when # we use a NetworkManager from QtWebKit. However, QtWebKit is Qt 5 only. + assert machinery.IS_QT6, machinery.INFO - suffix1 = url1.topLevelDomain() - suffix2 = url2.topLevelDomain() + suffix1 = url1.topLevelDomain() # type: ignore[attr-defined] + suffix2 = url2.topLevelDomain() # type: ignore[attr-defined] if not suffix1: return url1.host() == url2.host() diff --git a/qutebrowser/utils/version.py b/qutebrowser/utils/version.py index 83171ba6a..ebe361390 100644 --- a/qutebrowser/utils/version.py +++ b/qutebrowser/utils/version.py @@ -1045,11 +1045,13 @@ def opengl_info() -> Optional[OpenGLInfo]: # pragma: no cover return None if vf is None: - log.init.debug("Getting version functions failed!") + log.init.debug( # type: ignore[unreachable] + "Getting version functions failed!") return None - vendor = vf.glGetString(vf.GL_VENDOR) - version = vf.glGetString(vf.GL_VERSION) + # FIXME:mypy PyQt6-stubs issue? + vendor = vf.glGetString(vf.GL_VENDOR) # type: ignore[attr-defined] + version = vf.glGetString(vf.GL_VERSION) # type: ignore[attr-defined] return OpenGLInfo.parse(vendor=vendor, version=version) finally: -- cgit v1.2.3-54-g00ecf