dry-python / dry-python/returns

Add a method to get intermediate return values from flow

Ouverte
#868 3 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
Langage dominant
Python
Étoiles
4.4k
Forks
155
Merge moyen
2 h 27 min
PR mergées (30 j)
22

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:

```python
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:

```python
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 :)

Guide de contribution

Ouvrir le guide de contribution

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

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