Async functools.partial calls return an unawaited coroutine
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 72/100
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
- Kein Dockerfile und keine Docker-Compose-Datei
- Keine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus google/python-fire
-
WrappedJoin adds an empty line before an oversized first itemEvtl. vergeben @GreedyC hat das vor 11 Tagen übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
google/python-fire#705 ·
-
Brace-based template arguments crash literal parsing with TypeErrorEvtl. vergeben @codewithfourtix hat das vor 12 Tagen übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
google/python-fire#703 ·
-
Test suite fails on Windows: unescaped path regex in testArgPassing, NamedTemporaryFile reopen in testFileNameFireEvtl. vergeben Ein verknüpfter Pull Request ist offen oder bereits gemergt. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 85/100
google/python-fire#693 ·
-
Mio ❤️Offen
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 1/100
google/python-fire#709 · 2 Kommentare ·
-
2083Offen
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 5/100
google/python-fire#708 ·
Alle Issues in google/python-fire
Ähnliche Issues
-
[Bug]: Streamed /v1/chat/completions sends unredacted agent error text (keys) in the final chunkEvtl. vergeben @rodricksz4h5 hat das heute übernommen. Offenarea/streaming comp/gateway P2 type/security
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
NousResearch/hermes-agent#138245 ·
Maintainer antworten meist innerhalb von 1 Tag
-
[oblt-aw][autodoc] Update user onboarding guide for mandatory trigger CODEOWNERS stepEvtl. vergeben @github-actions hat das heute übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 66/100
Maintainer antworten meist innerhalb von 1 Tag
-
correction metadata
Schwierigkeit 2/5 Unter einer Stunde Anfängerfreundlichkeit 68/100
acl-org/acl-anthology#10378 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
cloudtrail_multi_region_enabled_logging_management_events fails when the advanced event selector has a custom nameEvtl. vergeben @12YYCCYY16 hat das heute übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
prowler-cloud/prowler#13033 ·
Maintainer antworten meist innerhalb von 1 Tag
-
enhancement
Schwierigkeit 1/5 1-3 Stunden Anfängerfreundlichkeit 88/100
graygarbage/HermesKey#23 ·