Skip to content

Commit ac6f631

Browse files
target fields copied to coroutine
1 parent 5431e7c commit ac6f631

File tree

2 files changed

+22
-2
lines changed

2 files changed

+22
-2
lines changed

sentry_sdk/integrations/asyncio.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,17 @@ def get_name(coro):
3030
)
3131

3232

33+
def _wrap_coroutine(wrapped):
34+
# type: Coroutine[Any, Any, Any] -> Coroutine[Any, Any, Any]
35+
# Only __name__ and __qualname__ are copied from function to coroutine in CPython
36+
return functools.partial(
37+
functools.update_wrapper,
38+
wrapped=wrapped,
39+
assigned=("__name__", "__qualname__"),
40+
updated=(),
41+
)
42+
43+
3344
def patch_asyncio():
3445
# type: () -> None
3546
orig_task_factory = None
@@ -40,7 +51,7 @@ def patch_asyncio():
4051
def _sentry_task_factory(loop, coro, **kwargs):
4152
# type: (asyncio.AbstractEventLoop, Coroutine[Any, Any, Any], Any) -> asyncio.Future[Any]
4253

43-
@functools.wraps(coro)
54+
@_wrap_coroutine(coro)
4455
async def _task_with_sentry_span_creation():
4556
# type: () -> Any
4657
result = None

tests/integrations/asyncio/test_asyncio.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,16 @@ async def test_create_task(
6767

6868
with sentry_sdk.start_transaction(name="test_transaction_for_create_task"):
6969
with sentry_sdk.start_span(op="root", name="not so important"):
70-
tasks = [asyncio.create_task(foo()), asyncio.create_task(bar())]
70+
foo_task = asyncio.create_task(foo())
71+
bar_task = asyncio.create_task(bar())
72+
73+
if hasattr(foo_task.get_coro(), "__name__"):
74+
assert foo_task.get_coro().__name__ == "foo"
75+
if hasattr(bar_task.get_coro(), "__name__"):
76+
assert bar_task.get_coro().__name__ == "bar"
77+
78+
tasks = [foo_task, bar_task]
79+
7180
await asyncio.wait(tasks, return_when=asyncio.FIRST_EXCEPTION)
7281

7382
sentry_sdk.flush()

0 commit comments

Comments
 (0)