Hacktoberfest 2026: die Issues, die Maintainer für den Oktober markiert haben – offen und einsteigerfreundlich. Hacktoberfest-Issues durchsuchen

Async functools.partial calls return an unawaited coroutine

Offen Anfängerfreundlich
#711 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

@rioyu123 arbeitet bereits daran.

Seit 10.10.2026.

  • #712 von @rioyu123 — offen

Bewertung

Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Anfängerfreundlichkeit
72/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Aktiv
Tech-Stack
python
Bereich
cli

Rechercherichtung

Beginne in _CallAndUpdateTrace, wo die Coroutine-Prüfung partial.__call__ statt der umschlossenen Funktion untersucht. Reproduziere mit dem Snippet aus dem Issue, das ein async greet in functools.partial einschließt und fire.Fire(..., command=[]) aufruft. Fertig ist es, wenn das partial den awaiteten String Rio! zurückgibt, synchrone partials weiterhin wie zuvor funktionieren und Regressionstests beide Fälle abdecken.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

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.

Vorherrschende Sprache
Python
Sterne
28.2k
Forks
1.5k
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus google/python-fire

Alle Issues in google/python-fire

Ähnliche Issues

Weitere Issues zu Python

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.