Async functools.partial calls return an unawaited coroutine
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 72/100
Piste de recherche
Commence dans _CallAndUpdateTrace, où la vérification des coroutines inspecte partial.__call__ au lieu de la fonction enveloppée. Reproduis avec l'extrait de l'issue, qui enveloppe un greet asynchrone dans functools.partial et appelle fire.Fire(..., command=[]). C'est terminé lorsque le partial renvoie la chaîne awaitée Rio!, que les partial synchrones se comportent toujours comme avant et que les tests de régression couvrent les deux cas.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
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.
- Langage dominant
- Python
- Étoiles
- 28.2k
- Forks
- 1.5k
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Aucun modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de google/python-fire
-
WrappedJoin adds an empty line before an oversized first itemPeut-être pris @GreedyC l’a pris il y a 9 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
google/python-fire#705 ·
-
Brace-based template arguments crash literal parsing with TypeErrorPeut-être pris @codewithfourtix l’a pris il y a 9 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
google/python-fire#703 ·
-
Test suite fails on Windows: unescaped path regex in testArgPassing, NamedTemporaryFile reopen in testFileNameFirePeut-être pris Une pull request liée à cette issue est ouverte ou déjà fusionnée. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 85/100
google/python-fire#693 ·
-
Mio ❤️Ouverte
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 1/100
google/python-fire#709 · 2 commentaires ·
-
2083Ouverte
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 5/100
google/python-fire#708 ·
Toutes les issues de google/python-fire
Issues similaires
-
needs triage
Difficulté 2/5 1-3 heures Accessibilité débutants 83/100
darnitdevorg/darnit#587 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 67/100
Les mainteneurs répondent en général sous 1 jour
-
accessibility good first issue
Difficulté 1/5 1-3 heures Accessibilité débutants 92/100
Les mainteneurs répondent en général sous 1 jour
-
llm translation
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
Les mainteneurs répondent en général sous 1 jour
-
bug bug-hunt
Difficulté 2/5 1-3 heures Accessibilité débutants 74/100
Les mainteneurs répondent en général sous 1 jour