[prev in list] [next in list] [prev in thread] [next in thread]
List: pykde
Subject: Re: [PyQt] Various issues with PyQt stubs
From: Phil Thompson <phil () riverbankcomputing ! com>
Date: 2016-05-19 16:32:29
Message-ID: A1AB884A-58F6-405C-9760-D3CEF569E742 () riverbankcomputing ! com
[Download RAW message or body]
Some of these are simply bugs (which I will get around to) others (specifically the \
"incompatible with supertype") are more of a problem.
It isn't clear (to me anyway) what PEP 484 is trying to achieve. I had thought that it was to \
provide a way of describing an API in a formal way so that other tools could be written to \
exploit the additional information. Type checking tools such as mypy would be just one example. \
However mypy seems only to be interested in APIs that follow a certain pattern and considers \
APIs that don't follow that pattern to be erroneous - even though they are perfectly valid as \
far as Python is concerned.
It would be much better if mypy were to just ignore APIs (or give a warning) that it can't \
usefully analyse. Then at least it would be possible to use the mypy parser to validate stub \
files. I have tried explaining this to the relevent developers (as well as to the PyCharm \
developers who use stub files for auto-completion information) but with little success.
I have no personal need for stub files. It would be helpful if somebody who had a genuine need \
were to look at the PyQt stub files and see if they are useful, or if they need to be changed \
to be useful, or if they would be useful if the downstream tools were a bit more mature.
Phil
On 18 May 2016, at 9:47 pm, Florian Bruhin <me@the-compiler.org> wrote:
>
> Hi,
>
> I tried to start using mypy now that PyQt has stubs.
>
> Since I can't easily install stubs currently I opted to add them to a
> repo (copied out after I ran configure.py in the PyQt repo). When I
> then run mypy with --check-untyped-defs and MYPYDIR set to the stubs
> dir, I get various issues mypy reports about the stub files.
>
> The first one is obvious, a QtGui import is missing from various stub
> files:
>
> misc/stubs/PyQt5/QtPrintSupport.pyi: note: In function "metric":
> misc/stubs/PyQt5/QtPrintSupport.pyi:177: error: Name 'QtGui' is not defined
> misc/stubs/PyQt5/QtPrintSupport.pyi: note: At top level:
> misc/stubs/PyQt5/QtPrintSupport.pyi:184a version with stubs : error: Name 'QtGui' is not \
> defined [...]
>
> I fixed this for the stub modules I use, but more might be affected:
> https://github.com/The-Compiler/qutebrowser/commit/f372644124793467865b9a324a3ce77f9f0ff358
>
> The same happens for QtNetwork in QtWebKitWidgets.pyi:
>
> misc/stubs/PyQt5/QtWebKitWidgets.pyi: note: In function "load":
> misc/stubs/PyQt5/QtWebKitWidgets.pyi:105: error: Name 'QtNetwork' is not defined
> misc/stubs/PyQt5/QtWebKitWidgets.pyi:229: error: Name 'QtNetwork' is not defined
> misc/stubs/PyQt5/QtWebKitWidgets.pyi: note: In function "acceptNavigationRequest":
> misc/stubs/PyQt5/QtWebKitWidgets.pyi:497: error: Invalid type "QtNetwork"
> misc/stubs/PyQt5/QtWebKitWidgets.pyi: note: In function "downloadRequested":
> misc/stubs/PyQt5/QtWebKitWidgets.pyi:501: error: Invalid type "QtNetwork"
> misc/stubs/PyQt5/QtWebKitWidgets.pyi: note: In function "unsupportedContent":
> misc/stubs/PyQt5/QtWebKitWidgets.pyi:502: error: Invalid type "QtNetwork"
> misc/stubs/PyQt5/QtWebKitWidgets.pyi: note: In function "networkAccessManager":
> misc/stubs/PyQt5/QtWebKitWidgets.pyi:542: error: Invalid type "QtNetwork"
> misc/stubs/PyQt5/QtWebKitWidgets.pyi: note: In function "setNetworkAccessManager":
> misc/stubs/PyQt5/QtWebKitWidgets.pyi:543: error: Invalid type "QtNetwork"
> misc/stubs/PyQt5/QtWebKitWidgets.pyi: note: In function "load":
> misc/stubs/PyQt5/QtWebKitWidgets.pyi:619: error: Name 'QtNetwork' is not defined
>
> With that fixed, there are still a lot of errors about incompatible
> types. I've looked into the first one:
>
> misc/stubs/PyQt5/QtGui.pyi: note: In class "QPixmap":
> misc/stubs/PyQt5/QtGui.pyi:181: error: Return type of "devicePixelRatio" incompatible with \
> supertype "QPaintDevice"
> Looking at the Qt documentation, it seems indeed like there's
> QPaintDevice::devicePixelRatio which returns an int, which is
> overridden by QPixmap::devicePixelRatio returning a qreal (aka float)?
>
> Not sure how that'd best be expressed in the stubs, but it seems like
> MyPy doesn't like how it looks currently...
>
> The others:
>
> misc/stubs/PyQt5/QtGui.pyi: note: In class "QBitmap":
> misc/stubs/PyQt5/QtGui.pyi:255: error: Argument 1 of "swap" incompatible with supertype \
> "QPixmap" misc/stubs/PyQt5/QtGui.pyi:256: error: Signature of "transformed" incompatible \
> with supertype "QPixmap" misc/stubs/PyQt5/QtGui.pyi: note: In class "QImage":
> misc/stubs/PyQt5/QtGui.pyi:2077: error: Return type of "devicePixelRatio" incompatible with \
> supertype "QPaintDevice" misc/stubs/PyQt5/QtGui.pyi: note: In class "QMatrix4x4":
> misc/stubs/PyQt5/QtGui.pyi:2543: error: Overloaded function signatures 1 and 2 overlap with \
> incompatible return types misc/stubs/PyQt5/QtGui.pyi: note: In class "QWindow":
> misc/stubs/PyQt5/QtGui.pyi:3933: error: Argument 1 of "setParent" incompatible with \
> supertype "QObject" misc/stubs/PyQt5/QtGui.pyi: note: In class "QPaintDeviceWindow":
> misc/stubs/PyQt5/QtGui.pyi:3942: error: Definition of "devicePixelRatio" in base class \
> "QWindow" is incompatible with definition in base class "QPaintDevice" \
> misc/stubs/PyQt5/QtGui.pyi: note: In class "QPdfWriter": misc/stubs/PyQt5/QtGui.pyi:5309: \
> error: Signature of "setPageSize" incompatible with supertype "QPagedPaintDevice" \
> misc/stubs/PyQt5/QtGui.pyi: note: In class "QTextList": misc/stubs/PyQt5/QtGui.pyi:7378: \
> error: Argument 1 of "setFormat" incompatible with supertype "QTextObject" \
> misc/stubs/PyQt5/QtGui.pyi: note: In class "QTextTable": misc/stubs/PyQt5/QtGui.pyi:7591: \
> error: Argument 1 of "setFormat" incompatible with supertype "QTextObject" \
> misc/stubs/PyQt5/QtGui.pyi: note: In class "QTransform": misc/stubs/PyQt5/QtGui.pyi:7712: \
> error: Overloaded function signatures 3 and 4 overlap with incompatible return types \
> misc/stubs/PyQt5/QtWidgets.pyi: note: In class "QWidget": \
> misc/stubs/PyQt5/QtWidgets.pyi:195: error: Signature of "setParent" incompatible with \
> supertype "QObject" misc/stubs/PyQt5/QtWidgets.pyi: note: In class "QAbstractItemView":
> misc/stubs/PyQt5/QtWidgets.pyi:721: error: Signature of "update" incompatible with supertype \
> "QWidget" misc/stubs/PyQt5/QtWidgets.pyi: note: In class "QApplication":
> misc/stubs/PyQt5/QtWidgets.pyi:1102: error: Signature of "topLevelAt" incompatible with \
> supertype "QGuiApplication" misc/stubs/PyQt5/QtWidgets.pyi: note: In class \
> "QFileSystemModel": misc/stubs/PyQt5/QtWidgets.pyi:3139: error: Signature of "parent" \
> incompatible with supertype "QAbstractItemModel" misc/stubs/PyQt5/QtWidgets.pyi:3139: error: \
> Signature of "parent" incompatible with supertype "QObject" misc/stubs/PyQt5/QtWidgets.pyi: \
> note: In class "QGraphicsPixmapItem": misc/stubs/PyQt5/QtWidgets.pyi:4288: error: Signature \
> of "paint" incompatible with supertype "QGraphicsItem" misc/stubs/PyQt5/QtWidgets.pyi: note: \
> In class "QGraphicsSimpleTextItem": misc/stubs/PyQt5/QtWidgets.pyi:4313: error: Signature of \
> "paint" incompatible with supertype "QGraphicsItem" misc/stubs/PyQt5/QtWidgets.pyi: note: In \
> class "QGraphicsTextItem": misc/stubs/PyQt5/QtWidgets.pyi:4399: error: Signature of "paint" \
> incompatible with supertype "QGraphicsItem" misc/stubs/PyQt5/QtWidgets.pyi: note: In class \
> "QGraphicsProxyWidget": misc/stubs/PyQt5/QtWidgets.pyi:4570: error: Signature of "paint" \
> incompatible with supertype "QGraphicsWidget" misc/stubs/PyQt5/QtWidgets.pyi:4570: error: \
> Signature of "paint" incompatible with supertype "QGraphicsItem" \
> misc/stubs/PyQt5/QtWidgets.pyi:4571: error: Signature of "setGeometry" incompatible with \
> supertype "QGraphicsWidget" misc/stubs/PyQt5/QtWidgets.pyi: note: In class "QGraphicsView":
> misc/stubs/PyQt5/QtWidgets.pyi:5027: error: Signature of "render" incompatible with \
> supertype "QWidget" misc/stubs/PyQt5/QtWidgets.pyi: note: In class "QHeaderView":
> misc/stubs/PyQt5/QtWidgets.pyi:5191: error: Argument 1 of "initStyleOption" incompatible \
> with supertype "QFrame" misc/stubs/PyQt5/QtWidgets.pyi:5216: error: Signature of "scrollTo" \
> incompatible with supertype "QAbstractItemView" misc/stubs/PyQt5/QtWidgets.pyi: note: In \
> class "QListWidget": misc/stubs/PyQt5/QtWidgets.pyi:5901: error: Argument 1 of \
> "closePersistentEditor" incompatible with supertype "QAbstractItemView" \
> misc/stubs/PyQt5/QtWidgets.pyi:5902: error: Argument 1 of "openPersistentEditor" incompatible \
> with supertype "QAbstractItemView" misc/stubs/PyQt5/QtWidgets.pyi: note: In class \
> "QPlainTextEdit": misc/stubs/PyQt5/QtWidgets.pyi:6592: error: Signature of "find" \
> incompatible with supertype "QWidget" misc/stubs/PyQt5/QtWidgets.pyi: note: In class \
> "QProxyStyle": misc/stubs/PyQt5/QtWidgets.pyi:6732: error: Signature of "polish" \
> incompatible with supertype "QCommonStyle" misc/stubs/PyQt5/QtWidgets.pyi:6732: error: \
> Signature of "polish" incompatible with supertype "QStyle" \
> misc/stubs/PyQt5/QtWidgets.pyi:6740: error: Signature of "standardPixmap" incompatible with \
> supertype "QCommonStyle" misc/stubs/PyQt5/QtWidgets.pyi:6740: error: Signature of \
> "standardPixmap" incompatible with supertype "QStyle" misc/stubs/PyQt5/QtWidgets.pyi:6748: \
> error: Signature of "subControlRect" incompatible with supertype "QCommonStyle" \
> misc/stubs/PyQt5/QtWidgets.pyi:6748: error: Signature of "subControlRect" incompatible with \
> supertype "QStyle" misc/stubs/PyQt5/QtWidgets.pyi:6749: error: Signature of "subElementRect" \
> incompatible with supertype "QCommonStyle" misc/stubs/PyQt5/QtWidgets.pyi:6749: error: \
> Signature of "subElementRect" incompatible with supertype "QStyle" \
> misc/stubs/PyQt5/QtWidgets.pyi:6750: error: Signature of "sizeFromContents" incompatible with \
> supertype "QCommonStyle" misc/stubs/PyQt5/QtWidgets.pyi:6750: error: Signature of \
> "sizeFromContents" incompatible with supertype "QStyle" misc/stubs/PyQt5/QtWidgets.pyi: \
> note: In class "QRubberBand": misc/stubs/PyQt5/QtWidgets.pyi:6791: error: Signature of \
> "resize" incompatible with supertype "QWidget" misc/stubs/PyQt5/QtWidgets.pyi: note: In \
> class "QSplashScreen": misc/stubs/PyQt5/QtWidgets.pyi:7180: error: Signature of "repaint" \
> incompatible with supertype "QWidget" misc/stubs/PyQt5/QtWidgets.pyi: note: In class \
> "QStackedLayout": misc/stubs/PyQt5/QtWidgets.pyi:7284: error: Return type of "addWidget" \
> incompatible with supertype "QLayout" misc/stubs/PyQt5/QtWidgets.pyi: note: In class \
> "QStylePainter": misc/stubs/PyQt5/QtWidgets.pyi:8174: error: Signature of "begin" \
> incompatible with supertype "QPainter" misc/stubs/PyQt5/QtWidgets.pyi: note: In class \
> "QTableWidget": misc/stubs/PyQt5/QtWidgets.pyi:8528: error: Argument 1 of \
> "closePersistentEditor" incompatible with supertype "QAbstractItemView" \
> misc/stubs/PyQt5/QtWidgets.pyi:8529: error: Argument 1 of "openPersistentEditor" incompatible \
> with supertype "QAbstractItemView" misc/stubs/PyQt5/QtWidgets.pyi: note: In class \
> "QTextEdit": misc/stubs/PyQt5/QtWidgets.pyi:8783: error: Signature of "find" incompatible \
> with supertype "QWidget" misc/stubs/PyQt5/QtWidgets.pyi: note: In class "QTreeWidget":
> misc/stubs/PyQt5/QtWidgets.pyi:9256: error: Signature of "closePersistentEditor" \
> incompatible with supertype "QAbstractItemView" misc/stubs/PyQt5/QtWidgets.pyi:9257: error: \
> Signature of "openPersistentEditor" incompatible with supertype "QAbstractItemView" \
> misc/stubs/PyQt5/QtCore.pyi: note: In class "QAbstractTableModel": \
> misc/stubs/PyQt5/QtCore.pyi:1899: error: Signature of "parent" incompatible with supertype \
> "QAbstractItemModel" misc/stubs/PyQt5/QtCore.pyi: note: In class "QAbstractListModel":
> misc/stubs/PyQt5/QtCore.pyi:1910: error: Signature of "parent" incompatible with supertype \
> "QAbstractItemModel" misc/stubs/PyQt5/QtCore.pyi: note: In class "QIdentityProxyModel":
> misc/stubs/PyQt5/QtCore.pyi:3746: error: Signature of "parent" incompatible with supertype \
> "QAbstractItemModel" misc/stubs/PyQt5/QtCore.pyi:3746: error: Signature of "parent" \
> incompatible with supertype "QObject" misc/stubs/PyQt5/QtCore.pyi: note: In class \
> "QStringListModel": misc/stubs/PyQt5/QtCore.pyi:6911: error: Signature of "data" \
> incompatible with supertype "QAbstractItemModel" misc/stubs/PyQt5/QtCore.pyi: note: In class \
> "QTemporaryFile": misc/stubs/PyQt5/QtCore.pyi:6975: error: Signature of "open" incompatible \
> with supertype "QFile" misc/stubs/PyQt5/QtCore.pyi:6975: error: Signature of "open" \
> incompatible with supertype "QIODevice" misc/stubs/PyQt5/QtPrintSupport.pyi: note: In class \
> "QPrinter": misc/stubs/PyQt5/QtPrintSupport.pyi:264: error: Signature of "setPageMargins" \
> incompatible with supertype "QPagedPaintDevice" misc/stubs/PyQt5/QtNetwork.pyi: note: In \
> class "QHostAddress": misc/stubs/PyQt5/QtNetwork.pyi:415: error: Overloaded function \
> signatures 2 and 3 overlap with incompatible return types misc/stubs/PyQt5/QtNetwork.pyi: \
> note: In class "QSslSocket": misc/stubs/PyQt5/QtNetwork.pyi:1605: error: Signature of \
> "connectToHost" incompatible with supertype "QAbstractSocket" \
> misc/stubs/PyQt5/QtNetwork.pyi:1654: error: Overloaded function signatures 1 and 2 overlap \
> with incompatible return types misc/stubs/PyQt5/QtNetwork.pyi:1662: error: Overloaded \
> function signatures 1 and 2 overlap with incompatible return types \
> misc/stubs/PyQt5/QtWebKit.pyi: note: In function "webFrame": \
> misc/stubs/PyQt5/QtWebKit.pyi:111: error: Name 'QWebFrame' is not defined \
> misc/stubs/PyQt5/QtWebKitWidgets.pyi: note: In class "QGraphicsWebView": \
> misc/stubs/PyQt5/QtWebKitWidgets.pyi:89: error: Signature of "sizeHint" incompatible with \
> supertype "QGraphicsWidget" misc/stubs/PyQt5/QtWebKitWidgets.pyi:89: error: Signature of \
> "sizeHint" incompatible with supertype "QGraphicsLayoutItem" \
> misc/stubs/PyQt5/QtWebKitWidgets.pyi:94: error: Signature of "setGeometry" incompatible with \
> supertype "QGraphicsWidget"
> Florian
>
> --
> http://www.the-compiler.org | me@the-compiler.org (Mail/XMPP)
> GPG: 916E B0C8 FD55 A072 | http://the-compiler.org/pubkey.asc
> I love long mails! | http://email.is-not-s.ms/
> _______________________________________________
> PyQt mailing list PyQt@riverbankcomputing.com
> https://www.riverbankcomputing.com/mailman/listinfo/pyqt
_______________________________________________
PyQt mailing list PyQt@riverbankcomputing.com
https://www.riverbankcomputing.com/mailman/listinfo/pyqt
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic