Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 6 additions & 4 deletions returns/primitives/tracing.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
import types
from contextlib import contextmanager
from inspect import FrameInfo, stack
from typing import List, Optional
from typing import Iterator, List, Optional

from returns.result import _Failure


@contextmanager
def collect_traces():
def collect_traces() -> Iterator[None]:
"""
Context Manager/Decorator to active traces collect to the Failures.

Expand Down Expand Up @@ -39,7 +38,7 @@ def collect_traces():
unpatched_get_trace = getattr(_Failure, '_get_trace') # noqa: B009
substitute_get_trace = types.MethodType(_get_trace, _Failure)
setattr(_Failure, '_get_trace', substitute_get_trace) # noqa: B010
try:
try: # noqa: WPS501
yield
finally:
setattr(_Failure, '_get_trace', unpatched_get_trace) # noqa: B010
Expand All @@ -65,3 +64,6 @@ class on Monkey Patching promoted by
"""
current_stack = stack()
return current_stack[2:]


collect_traces = contextmanager(collect_traces) # type: ignore
13 changes: 13 additions & 0 deletions typesafety/test_primitives/test_tracing/test_collect_traces.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
- case: collect_traces_context_manager_return_type_hint
disable_cache: true
main: |
from returns.primitives.tracing import collect_traces

reveal_type(collect_traces) # N: Revealed type is 'def () -> typing.Iterator[None]'

- case: collect_traces_context_manager_return_type
disable_cache: true
main: |
from returns.primitives.tracing import collect_traces

reveal_type(collect_traces()) # N: Revealed type is 'typing.Iterator[None]'