Skip to content

Commit 372efaa

Browse files
authored
Merge pull request #177 from yan12125/pynamodb4
pynamodb: make the patch compatible with PynamoDB 4
2 parents ab1327e + 1dd185b commit 372efaa

File tree

1 file changed

+14
-5
lines changed

1 file changed

+14
-5
lines changed

aws_xray_sdk/ext/pynamodb/patch.py

+14-5
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,30 @@
11
import botocore.vendored.requests.sessions
22
import json
33
import wrapt
4+
import pynamodb
45

56
from aws_xray_sdk.core import xray_recorder
67
from aws_xray_sdk.core.models import http
78
from aws_xray_sdk.ext.boto_utils import _extract_whitelisted_params
89

10+
PYNAMODB4 = int(pynamodb.__version__.split('.')[0]) >= 4
11+
912

1013
def patch():
1114
"""Patch PynamoDB so it generates subsegements when calling DynamoDB."""
12-
import pynamodb
1315

1416
if hasattr(botocore.vendored.requests.sessions, '_xray_enabled'):
1517
return
1618
setattr(botocore.vendored.requests.sessions, '_xray_enabled', True)
1719

20+
if PYNAMODB4:
21+
module = 'botocore.httpsession'
22+
name = 'URLLib3Session.send'
23+
else:
24+
module = 'botocore.vendored.requests.sessions'
25+
name = 'Session.send'
1826
wrapt.wrap_function_wrapper(
19-
'botocore.vendored.requests.sessions',
20-
'Session.send',
21-
_xray_traced_pynamodb,
27+
module, name, _xray_traced_pynamodb,
2228
)
2329

2430

@@ -59,7 +65,10 @@ def pynamodb_meta_processor(wrapped, instance, args, kwargs, return_value,
5965
subsegment.add_error_flag()
6066
subsegment.add_exception(exception, stack, True)
6167

62-
resp = return_value.json() if return_value else None
68+
if PYNAMODB4:
69+
resp = json.loads(return_value.text) if return_value else None
70+
else:
71+
resp = return_value.json() if return_value else None
6372
_extract_whitelisted_params(subsegment.name, operation_name, aws_meta,
6473
[None, json.loads(args[0].body.decode('utf-8'))],
6574
None, resp)

0 commit comments

Comments
 (0)