[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