Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Async functools.partial calls return an unawaited coroutine

Aperta Adatta ai principianti
#711 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

@rioyu123 ci sta già lavorando.

Dal 10/10/2026.

  • #712 di @rioyu123 — aperta

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
72/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
python
Ambito
cli

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

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di google/python-fire

Tutte le issue di google/python-fire

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.