Wrong type annotation of pyqtSlot in PyQt5

Alexander Hedges alexander.hedges at fotokite.com
Fri Sep 22 07:28:25 BST 2023


On Thu, Sep 21, 2023 at 6:31 PM Phil Thompson
<phil at riverbankcomputing.com> wrote:
>
> On 21/09/2023 11:01, Alexander Hedges wrote:
> > Hi,
> >
> > Currently in PyQt5 (as of the latest development build) the pyqtSlot
> > decorator
> > is typed as:
> >
> > ```python
> > def pyqtSlot(*args: typing.Any, name: typing.Optional[str] = ...,
> > result: typing.Optional[str] = ...) -> typing.Callable[...,
> > typing.Optional[str]]: ...
> > ```
> >
> > Which is an incorrect annotation given that this function is a
> > decorator (it
> > should return a function that takes a function and returns a function).
> >
> > In PyQt6 this is currently correctly annotated as returning a function
> > that
> > takes a function and returns a function with the same signature:
> >
> > ```python
> > FuncT = typing.TypeVar('FuncT', bound=typing.Callable)
> > def pyqtSlot(*types, name: typing.Optional[str] = ..., result:
> > typing.Optional[str] = ...) -> typing.Callable[[FuncT], FuncT]: ...
> > ```
> >
> > It would be great if you could fix the stub file in PyQt5.
>
> In the latest snapshots...
>
> https://www.riverbankcomputing.com/pypi/simple/pyqt5/
>
> ...it is identical to PyQt6.
>
> Phil

Oh, this is interesting. So the correct definition is indeed on line
67. But it turns out
that there is a second incorrect definition of pyqtSlot (the one
above) on line 9972
of QtCore.pyi. This line probably just needs removal.

Alexander


More information about the PyQt mailing list