A number of methods of ipykernel can optinally return awaitable[T] instead of just T, this is the case for do_complete.
I think it's a mistake ; see ipython/ipykernel#1295 ; in particular because it's easy to forget / hard to properly type-check, and I'd like to make it mandatory in the long term to have await.
Spyder seem to not handle the case where do_completer return an awaitable (or more partiularly is do_complete is a coroutine function.
This tries to handle it – and as of course do_completercan be async, all caller must be async. So I try to do all the required updates.
Note: I also add explict imports in some test, to get better error message in case those deps are not installed.
This is more to start a discussion than a "this must be merged". It's mostly to start some discussion also with upstream as we sort of disagree that having def f(...): -> T | Awaitable[T] is a good thing.
A number of methods of ipykernel can optinally return
awaitable[T]
instead of justT
, this is the case fordo_complete
.I think it's a mistake ; see ipython/ipykernel#1295 ; in particular because it's easy to forget / hard to properly type-check, and I'd like to make it mandatory in the long term to have await.
Spyder seem to not handle the case where do_completer return an awaitable (or more partiularly is
do_complete
is a coroutine function.This tries to handle it – and as of course
do_completer
can be async, all caller must be async. So I try to do all the required updates.Note: I also add explict imports in some test, to get better error message in case those deps are not installed.