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

Add a method to get intermediate return values from flow

Ouverte
#868 3 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

Personne n'a encore pris cette issue.

Évaluation

Difficulté
5/5
Temps estimé
Plus d'une semaine
Accessibilité débutants
30/100
Type d'issue
Fonctionnalité
Clarté
Plutôt claire
Activité
À l'abandon
Stack technique
python
Domaine
testing

Piste de recherche

Commencez par localiser les points d’entrée existants de assert_flow et flow, puis lisez la preuve de concept de traçage Python utilisant sys.setprofile et return events. C’est terminé lorsqu’une méthode de test prise en charge peut récupérer un résultat intermédiaire de flow et que des tests couvrent la valeur attendue.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

Hi!

It would be nice for testing to have a way to retrieve the intermediate result of a flow, in a way similar to how assert_flow() works but with the return value.

Example:

def do_stuff():
    return flow(0, func_1, bind(func_2))

def test_func_1():
    v = get_function_value(func_1, do_stuff)
    assert v == expected_value

In principle this can be done with sys.setprofile (in the trace function and for return events, arg contains the return value).

Proof of concept example:

def trace_func(function_to_search, frame, event, arg):
    if event == 'return' and frame.f_code.co_name == function_to_search.__name__:
        # modified exception to hold the return value under "value" attr
        raise DesiredValueFound(arg)

def get_function_value(function_to_search, my_flow):
    old_tracer = sys.gettrace()
    sys.setprofile(partial(trace_func, function_to_search))

    try:
         my_flow()
    except DesiredValueFound as e:
        return e.value
    finally:
        sys.settrace(old_tracer)

What do you think?

Thanks :)

Langage dominant
Python
Étoiles
4.4k
Forks
156
Merge moyen
3 h 44 min
PR mergées (30 j)
22

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 dry-python/returns

Toutes les issues de dry-python/returns

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.