Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

Async functools.partial calls return an unawaited coroutine

Ouverte Adaptée aux débutants
#711 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

@rioyu123 y travaille déjà.

Depuis le 10/10/2026.

  • #712 par @rioyu123 — ouverte

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
72/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
python
Domaine
cli

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

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de google/python-fire

Toutes les issues de google/python-fire

Issues similaires

Plus d'issues Python

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.