Async functools.partial calls return an unawaited coroutine
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 72/100
Direzione di ricerca
Inizia da _CallAndUpdateTrace, dove il controllo delle coroutine ispeziona partial.__call__ invece della funzione avvolta. Riproduci con lo snippet dell'issue, che avvolge un greet asincrono in functools.partial e chiama fire.Fire(..., command=[]). È completato quando il partial restituisce la stringa awaitata Rio!, i partial sincroni continuano a comportarsi come prima e i test di regressione coprono entrambi i casi.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
On current master (716bbc23d7eca949fdb682172283c8d18f742cb6), passing an async function to Fire works, but wrapping it in functools.partial returns the coroutine without running it:
import functools
import inspect
import fire
async def greet(name, suffix="!"):
return name + suffix
result = fire.Fire(functools.partial(greet, "Rio"), command=[])
print(type(result).__name__) # coroutine, rather than str
if inspect.iscoroutine(result):
result.close()
Expected: the command prints Rio! and returns that string. Instead it displays help for the coroutine object and never executes the async function.
_CallAndUpdateTrace inspects partial.__call__, which is not recognized as a coroutine function, rather than the partial itself. Ordinary async callable objects are not affected.
I plan to send a small fix that unwraps the partial only when detecting coroutines, leaving argument parsing unchanged. Regression coverage will include synchronous and asynchronous partials. This does not change event-loop handling or introduce a new async execution mode.
- Lingua principale
- Python
- Stelle
- 28.2k
- Fork
- 1.5k
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di google/python-fire
-
WrappedJoin adds an empty line before an oversized first itemForse già presa @GreedyC l’ha presa 10 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
google/python-fire#705 ·
-
Brace-based template arguments crash literal parsing with TypeErrorForse già presa @codewithfourtix l’ha presa 10 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
google/python-fire#703 ·
-
Test suite fails on Windows: unescaped path regex in testArgPassing, NamedTemporaryFile reopen in testFileNameFireForse già presa Una pull request collegata a questa issue è aperta o già unita. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
google/python-fire#693 ·
-
Mio ❤️Aperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 1/100
google/python-fire#709 · 2 commenti ·
-
2083Aperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 5/100
google/python-fire#708 ·
Tutte le issue di google/python-fire
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
-
good first issue No-AI
Difficoltà 2/5 1-3 ore Idoneità per principianti 69/100
-
documentation
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
-
🐛 Bug: Calendar work items cannot be opened on mobileForse già presa Una pull request collegata a questa issue è aperta o già unita. Aperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 75/100
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 2 giorni