4
4
5
5
from aws_xray_sdk .core .recorder import AWSXRayRecorder
6
6
from aws_xray_sdk .core .utils import stacktrace
7
+ from aws_xray_sdk .core .models .subsegment import SubsegmentContextManager
8
+ from aws_xray_sdk .core .models .segment import SegmentContextManager
9
+
10
+
11
+ class AsyncSegmentContextManager (SegmentContextManager ):
12
+ async def __aenter__ (self ):
13
+ return self .__enter__ ()
14
+
15
+ async def __aexit__ (self , exc_type , exc_val , exc_tb ):
16
+ return self .__exit__ (exc_type , exc_val , exc_tb )
17
+
18
+ class AsyncSubsegmentContextManager (SubsegmentContextManager ):
19
+
20
+ @wrapt .decorator
21
+ async def __call__ (self , wrapped , instance , args , kwargs ):
22
+ func_name = self .name
23
+ if not func_name :
24
+ func_name = wrapped .__name__
25
+
26
+ return await self .recorder .record_subsegment_async (
27
+ wrapped , instance , args , kwargs ,
28
+ name = func_name ,
29
+ namespace = 'local' ,
30
+ meta_processor = None ,
31
+ )
32
+
33
+ async def __aenter__ (self ):
34
+ return self .__enter__ ()
35
+
36
+ async def __aexit__ (self , exc_type , exc_val , exc_tb ):
37
+ return self .__exit__ (exc_type , exc_val , exc_tb )
7
38
8
39
9
40
class AsyncAWSXRayRecorder (AWSXRayRecorder ):
@@ -15,23 +46,25 @@ def capture_async(self, name=None):
15
46
params str name: The name of the subsegment. If not specified
16
47
the function name will be used.
17
48
"""
49
+ return self .in_subsegment_async (name = name )
18
50
19
- @wrapt .decorator
20
- async def wrapper (wrapped , instance , args , kwargs ):
21
- func_name = name
22
- if not func_name :
23
- func_name = wrapped .__name__
51
+ def in_segment_async (self , name = None , ** segment_kwargs ):
52
+ """
53
+ Return a segment async context manger.
24
54
25
- result = await self .record_subsegment_async (
26
- wrapped , instance , args , kwargs ,
27
- name = func_name ,
28
- namespace = 'local' ,
29
- meta_processor = None ,
30
- )
55
+ :param str name: the name of the segment
56
+ :param dict segment_kwargs: remaining arguments passed directly to `begin_segment`
57
+ """
58
+ return AsyncSegmentContextManager (self , name = name , ** segment_kwargs )
31
59
32
- return result
60
+ def in_subsegment_async (self , name = None , ** subsegment_kwargs ):
61
+ """
62
+ Return a subsegment async context manger.
33
63
34
- return wrapper
64
+ :param str name: the name of the segment
65
+ :param dict segment_kwargs: remaining arguments passed directly to `begin_segment`
66
+ """
67
+ return AsyncSubsegmentContextManager (self , name = name , ** subsegment_kwargs )
35
68
36
69
async def record_subsegment_async (self , wrapped , instance , args , kwargs , name ,
37
70
namespace , meta_processor ):
0 commit comments