From c42ce858201bb67a464ee9cf12cde03643b45152 Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Thu, 29 Jun 2023 14:25:55 +0200 Subject: qt6 mypy: Add missing pyqtProperty 39 -> 36 errors --- qutebrowser/qt/core.py | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/qutebrowser/qt/core.py b/qutebrowser/qt/core.py index d9323f877..733b4bc9c 100644 --- a/qutebrowser/qt/core.py +++ b/qutebrowser/qt/core.py @@ -12,6 +12,7 @@ Any API exported from this module is based on the Qt 6 API: https://doc.qt.io/qt-6/qtcore-index.html """ +from typing import TYPE_CHECKING from qutebrowser.qt import machinery machinery.init_implicit() @@ -23,5 +24,70 @@ elif machinery.USE_PYQT5: from PyQt5.QtCore import * elif machinery.USE_PYQT6: from PyQt6.QtCore import * + + if TYPE_CHECKING: + # FIXME:mypy PyQt6-stubs issue + # WORKAROUND for missing pyqtProperty typing, ported from PyQt5-stubs: + # https://github.com/python-qt-tools/PyQt5-stubs/blob/5.15.6.0/PyQt5-stubs/QtCore.pyi#L70-L111 + import typing + + TPropertyTypeVal = typing.TypeVar('TPropertyTypeVal') + + TPropGetter = typing.TypeVar('TPropGetter', bound=typing.Callable[[QObjectT], TPropertyTypeVal]) + TPropSetter = typing.TypeVar('TPropSetter', bound=typing.Callable[[QObjectT, TPropertyTypeVal], None]) + TPropDeleter = typing.TypeVar('TPropDeleter', bound=typing.Callable[[QObjectT], None]) + TPropResetter = typing.TypeVar('TPropResetter', bound=typing.Callable[[QObjectT], None]) + + class pyqtProperty: + def __init__( + self, + type: typing.Union[type, str], + fget: typing.Optional[ + typing.Callable[[QObjectT], TPropertyTypeVal] + ] = None, + fset: typing.Optional[ + typing.Callable[[QObjectT, TPropertyTypeVal], None] + ] = None, + freset: typing.Optional[typing.Callable[[QObjectT], None]] = None, + fdel: typing.Optional[typing.Callable[[QObjectT], None]] = None, + doc: typing.Optional[str] = "", + designable: bool = True, + scriptable: bool = True, + stored: bool = True, + user: bool = True, + constant: bool = True, + final: bool = True, + notify: typing.Optional[pyqtSignal] = None, + revision: int = 0, + ) -> None: + ... + + type: typing.Union[type, str] + fget: typing.Optional[typing.Callable[[], TPropertyTypeVal]] + fset: typing.Optional[typing.Callable[[TPropertyTypeVal], None]] + freset: typing.Optional[typing.Callable[[], None]] + fdel: typing.Optional[typing.Callable[[], None]] + + def read(self, func: TPropGetter) -> "pyqtProperty": + ... + + def write(self, func: TPropSetter) -> "pyqtProperty": + ... + + def reset(self, func: TPropResetter) -> "pyqtProperty": + ... + + def getter(self, func: TPropGetter) -> "pyqtProperty": + ... + + def setter(self, func: TPropSetter) -> "pyqtProperty": + ... + + def deleter(self, func: TPropDeleter) -> "pyqtProperty": + ... + + def __call__(self, func: TPropGetter) -> "pyqtProperty": + ... + else: raise machinery.UnknownWrapper() -- cgit v1.2.3-54-g00ecf