From a9fb17f9f9d9edd44a2eafc2add36607b2aff98a Mon Sep 17 00:00:00 2001 From: Daniel Roschka Date: Mon, 11 Nov 2019 10:30:52 +0100 Subject: [PATCH 1/2] Fix patching for PynamoDB 4.x with botocore 1.13 --- aws_xray_sdk/ext/pynamodb/patch.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/aws_xray_sdk/ext/pynamodb/patch.py b/aws_xray_sdk/ext/pynamodb/patch.py index 74b7825..2be2d41 100644 --- a/aws_xray_sdk/ext/pynamodb/patch.py +++ b/aws_xray_sdk/ext/pynamodb/patch.py @@ -1,4 +1,3 @@ -import botocore.vendored.requests.sessions import json import wrapt import pynamodb @@ -13,16 +12,18 @@ def patch(): """Patch PynamoDB so it generates subsegements when calling DynamoDB.""" - if hasattr(botocore.vendored.requests.sessions, '_xray_enabled'): - return - setattr(botocore.vendored.requests.sessions, '_xray_enabled', True) - if PYNAMODB4: module = 'botocore.httpsession' name = 'URLLib3Session.send' else: + import botocore.vendored.requests.sessions + if hasattr(botocore.vendored.requests.sessions, '_xray_enabled'): + return + setattr(botocore.vendored.requests.sessions, '_xray_enabled', True) + module = 'botocore.vendored.requests.sessions' name = 'Session.send' + wrapt.wrap_function_wrapper( module, name, _xray_traced_pynamodb, ) From f1f8cd4e6635d1beb7c703717971afed54813a6a Mon Sep 17 00:00:00 2001 From: Daniel Roschka Date: Mon, 11 Nov 2019 13:17:37 +0100 Subject: [PATCH 2/2] Make PynamoDB patching idempotent for PynamoDB 4 --- aws_xray_sdk/ext/pynamodb/patch.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/aws_xray_sdk/ext/pynamodb/patch.py b/aws_xray_sdk/ext/pynamodb/patch.py index 2be2d41..1478808 100644 --- a/aws_xray_sdk/ext/pynamodb/patch.py +++ b/aws_xray_sdk/ext/pynamodb/patch.py @@ -8,15 +8,23 @@ PYNAMODB4 = int(pynamodb.__version__.split('.')[0]) >= 4 +if PYNAMODB4: + import botocore.httpsession +else: + import botocore.vendored.requests.sessions + def patch(): """Patch PynamoDB so it generates subsegements when calling DynamoDB.""" if PYNAMODB4: + if hasattr(botocore.httpsession, '_xray_enabled'): + return + setattr(botocore.httpsession, '_xray_enabled', True) + module = 'botocore.httpsession' name = 'URLLib3Session.send' else: - import botocore.vendored.requests.sessions if hasattr(botocore.vendored.requests.sessions, '_xray_enabled'): return setattr(botocore.vendored.requests.sessions, '_xray_enabled', True)