datadog_lambda 6.100.0__py3-none-any.whl → 6.102.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,13 +1,9 @@
1
1
  from itertools import chain
2
2
  import logging
3
+ import os
3
4
  from typing import List
5
+ from typing import Optional
4
6
 
5
- from ddtrace._trace.utils_botocore.span_pointers.dynamodb import (
6
- _aws_dynamodb_item_span_pointer_description,
7
- )
8
- from ddtrace._trace.utils_botocore.span_pointers.s3 import (
9
- _aws_s3_object_span_pointer_description,
10
- )
11
7
  from ddtrace._trace._span_pointer import _SpanPointerDirection
12
8
  from ddtrace._trace._span_pointer import _SpanPointerDescription
13
9
  from datadog_lambda.trigger import EventTypes
@@ -16,19 +12,26 @@ from datadog_lambda.trigger import EventTypes
16
12
  logger = logging.getLogger(__name__)
17
13
 
18
14
 
15
+ dd_botocore_add_span_pointers = os.environ.get(
16
+ "DD_BOTOCORE_ADD_SPAN_POINTERS", "true"
17
+ ).lower() in ("true", "1")
18
+
19
+
19
20
  def calculate_span_pointers(
20
21
  event_source,
21
22
  event,
23
+ botocore_add_span_pointers=dd_botocore_add_span_pointers,
22
24
  ) -> List[_SpanPointerDescription]:
23
25
  try:
24
- if event_source.equals(EventTypes.S3):
25
- return _calculate_s3_span_pointers_for_event(event)
26
+ if botocore_add_span_pointers:
27
+ if event_source.equals(EventTypes.S3):
28
+ return _calculate_s3_span_pointers_for_event(event)
26
29
 
27
- elif event_source.equals(EventTypes.DYNAMODB):
28
- return _calculate_dynamodb_span_pointers_for_event(event)
30
+ elif event_source.equals(EventTypes.DYNAMODB):
31
+ return _calculate_dynamodb_span_pointers_for_event(event)
29
32
 
30
33
  except Exception as e:
31
- logger.warning(
34
+ logger.debug(
32
35
  "failed to calculate span pointers for event: %s",
33
36
  e,
34
37
  )
@@ -73,24 +76,42 @@ def _calculate_s3_span_pointers_for_object_created_s3_information(
73
76
  etag = s3_information["object"]["eTag"]
74
77
 
75
78
  except KeyError as e:
76
- logger.warning(
79
+ logger.debug(
77
80
  "missing s3 information required to make a span pointer: %s",
78
81
  e,
79
82
  )
80
83
  return []
81
84
 
82
85
  try:
83
- return [
84
- _aws_s3_object_span_pointer_description(
86
+ from ddtrace._trace.utils_botocore.span_pointers.s3 import (
87
+ _aws_s3_object_span_pointer_description,
88
+ )
89
+
90
+ try:
91
+ span_pointer_description = _aws_s3_object_span_pointer_description(
92
+ operation="S3.LambdaEvent",
93
+ pointer_direction=_SpanPointerDirection.UPSTREAM,
94
+ bucket=bucket,
95
+ key=key,
96
+ etag=etag,
97
+ )
98
+ except TypeError:
99
+ # The older version of this function did not have an operation
100
+ # parameter.
101
+ span_pointer_description = _aws_s3_object_span_pointer_description(
85
102
  pointer_direction=_SpanPointerDirection.UPSTREAM,
86
103
  bucket=bucket,
87
104
  key=key,
88
105
  etag=etag,
89
106
  )
90
- ]
107
+
108
+ if span_pointer_description is None:
109
+ return []
110
+
111
+ return [span_pointer_description]
91
112
 
92
113
  except Exception as e:
93
- logger.warning(
114
+ logger.debug(
94
115
  "failed to generate S3 span pointer: %s",
95
116
  e,
96
117
  )
@@ -114,33 +135,53 @@ def _calculate_dynamodb_span_pointers_for_event_record(
114
135
  ) -> List[_SpanPointerDescription]:
115
136
  try:
116
137
  table_name = _extract_table_name_from_dynamodb_stream_record(record)
138
+ if table_name is None:
139
+ return []
140
+
117
141
  primary_key = record["dynamodb"]["Keys"]
118
142
 
119
143
  except Exception as e:
120
- logger.warning(
144
+ logger.debug(
121
145
  "missing DynamoDB information required to make a span pointer: %s",
122
146
  e,
123
147
  )
124
148
  return []
125
149
 
126
150
  try:
127
- return [
128
- _aws_dynamodb_item_span_pointer_description(
151
+ from ddtrace._trace.utils_botocore.span_pointers.dynamodb import (
152
+ _aws_dynamodb_item_span_pointer_description,
153
+ )
154
+
155
+ try:
156
+ span_pointer_description = _aws_dynamodb_item_span_pointer_description(
157
+ operation="DynamoDB.LambdaEvent",
158
+ pointer_direction=_SpanPointerDirection.UPSTREAM,
159
+ table_name=table_name,
160
+ primary_key=primary_key,
161
+ )
162
+ except TypeError:
163
+ # The older version of this function did not have an operation
164
+ # parameter.
165
+ span_pointer_description = _aws_dynamodb_item_span_pointer_description(
129
166
  pointer_direction=_SpanPointerDirection.UPSTREAM,
130
167
  table_name=table_name,
131
168
  primary_key=primary_key,
132
169
  )
133
- ]
170
+
171
+ if span_pointer_description is None:
172
+ return []
173
+
174
+ return [span_pointer_description]
134
175
 
135
176
  except Exception as e:
136
- logger.warning(
177
+ logger.debug(
137
178
  "failed to generate DynamoDB span pointer: %s",
138
179
  e,
139
180
  )
140
181
  return []
141
182
 
142
183
 
143
- def _extract_table_name_from_dynamodb_stream_record(record) -> str:
184
+ def _extract_table_name_from_dynamodb_stream_record(record) -> Optional[str]:
144
185
  # Example eventSourceARN:
145
186
  # arn:aws:dynamodb:us-east-2:123456789012:table/my-table/stream/2024-06-10T19:26:16.525
146
187
  event_source_arn = record["eventSourceARN"]
@@ -149,10 +190,12 @@ def _extract_table_name_from_dynamodb_stream_record(record) -> str:
149
190
  ":", maxsplit=5
150
191
  )
151
192
  if _arn != "arn" or _aws != "aws" or _dynamodb != "dynamodb":
152
- raise ValueError(f"unexpected eventSourceARN format: {event_source_arn}")
193
+ logger.debug("unexpected eventSourceARN format: %s", event_source_arn)
194
+ return None
153
195
 
154
196
  [_table, table_name, _stream, _timestamp] = dynamodb_info.split("/")
155
197
  if _table != "table" or _stream != "stream":
156
- raise ValueError(f"unexpected eventSourceARN format: {event_source_arn}")
198
+ logger.debug("unexpected eventSourceARN format: %s", event_source_arn)
199
+ return None
157
200
 
158
201
  return table_name
datadog_lambda/tracing.py CHANGED
@@ -411,7 +411,10 @@ def is_legacy_lambda_step_function(event):
411
411
  """
412
412
  Check if the event is a step function that called a legacy lambda
413
413
  """
414
- event = event.get("Payload", {})
414
+ if not isinstance(event, dict) or "Payload" not in event:
415
+ return False
416
+
417
+ event = event.get("Payload")
415
418
  return "Execution" in event and "StateMachine" in event and "State" in event
416
419
 
417
420
 
datadog_lambda/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = "6.100.0"
1
+ __version__ = "6.102.0"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: datadog_lambda
3
- Version: 6.100.0
3
+ Version: 6.102.0
4
4
  Summary: The Datadog AWS Lambda Library
5
5
  Home-page: https://github.com/DataDog/datadog-lambda-python
6
6
  License: Apache-2.0
@@ -19,7 +19,7 @@ Classifier: Programming Language :: Python :: 3.13
19
19
  Provides-Extra: dev
20
20
  Requires-Dist: boto3 (>=1.34.0,<2.0.0) ; extra == "dev"
21
21
  Requires-Dist: datadog (>=0.41.0,<1.0.0)
22
- Requires-Dist: ddtrace (>=2.15.0)
22
+ Requires-Dist: ddtrace (>=2.16.0)
23
23
  Requires-Dist: flake8 (>=5.0.4,<6.0.0) ; extra == "dev"
24
24
  Requires-Dist: pytest (>=8.0.0,<9.0.0) ; extra == "dev"
25
25
  Requires-Dist: pytest-benchmark (>=4.0,<5.0) ; extra == "dev"
@@ -9,20 +9,20 @@ datadog_lambda/logger.py,sha256=nGxNMouF7wcjmoPsgivzzjNLvSy3WbGtKElxOvITZDg,766
9
9
  datadog_lambda/metric.py,sha256=hxA5nmKkUKpoo13f0Z5Ug87F9A-fv1hP-l2fWYfq6ao,6276
10
10
  datadog_lambda/module_name.py,sha256=5FmOCjjgjq78b6a83QePZZFmqahAoy9XHdUNWdq2D1Q,139
11
11
  datadog_lambda/patch.py,sha256=6a-BqovSRKsU5hTQpzxgY-_bducT-UEVCLvd3fdxeWc,4710
12
- datadog_lambda/span_pointers.py,sha256=zGD3QVIM8X2qx0nzVRoZPlWPKvUdG6ubIdcb3m9Dx54,4647
12
+ datadog_lambda/span_pointers.py,sha256=P0SBWcKnc6GNWHZ5VPuUgGojFC_pIkOkKt6SfEXRpUw,6142
13
13
  datadog_lambda/stats_writer.py,sha256=SIac96wu45AxDOZ4GraCbK3r1RKr4AFgXcEPHg1VX0A,243
14
14
  datadog_lambda/statsd_writer.py,sha256=F4SCJ6-J6YfvQNh0uQfAkP6QYiAtV3-MCsxz4QnaBBI,403
15
15
  datadog_lambda/tag_object.py,sha256=cZ7W9Ae5k3YxLOZzN5Hu8UqvOKtq5AWARele0L18Gjs,2091
16
16
  datadog_lambda/tags.py,sha256=wy6uH8eAGMn7cfZEdHpL9uEGoM85bVyyXhYwSQtfHHc,2532
17
17
  datadog_lambda/thread_stats_writer.py,sha256=zOHdzdkQFCHnLU09CSYWsGq1optbTKzHVLcDXDjtiHU,2891
18
- datadog_lambda/tracing.py,sha256=RfaOVnCAkAXTo6AgIRnk8l_m2BNUic7H7GYrrDSz7RE,50341
18
+ datadog_lambda/tracing.py,sha256=_H-nilG6bUmiDobO3A5V_8byjlTVaa8-KKJWMN6EmSU,50421
19
19
  datadog_lambda/trigger.py,sha256=3S7u-LBHxX-o2Ds8BAtXEQMNPXz-Av8OdWBQuozLl54,12445
20
- datadog_lambda/version.py,sha256=ou4_yqeEM8ttPZPEwnBoJQIKcx2ElpmxTWI-dGHwd7A,24
20
+ datadog_lambda/version.py,sha256=aiWn9nRTzBwTEQp9ElhvklO999AVnZiiuMG8X9ynB48,24
21
21
  datadog_lambda/wrapper.py,sha256=xTOO-NhrndReagcPJ0Ab9Xd8NRMCqsgZH4bJ7mpQXnI,15972
22
22
  datadog_lambda/xray.py,sha256=jvA4Fk76PLMgsjUoUZ7gp2otv53hFt39Nvso1ZNaivg,3749
23
- datadog_lambda-6.100.0.dist-info/LICENSE,sha256=4yQmjpKp1MKL7DdRDPVHkKYc2W0aezm5SIDske8oAdM,11379
24
- datadog_lambda-6.100.0.dist-info/LICENSE-3rdparty.csv,sha256=9CDAR1GKawwTbZkqt1RP0uwEcaRM3RhOeTB5tWXr8Ts,1381
25
- datadog_lambda-6.100.0.dist-info/METADATA,sha256=eHjxub7su5CIyqRlKXcXV2fSwA9NMTjqNlN2-KwXDno,7469
26
- datadog_lambda-6.100.0.dist-info/NOTICE,sha256=Jue-d8mQ1ENIHDZdYc2-X8mVYtScXb8pzF1pTLN-kRc,141
27
- datadog_lambda-6.100.0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
28
- datadog_lambda-6.100.0.dist-info/RECORD,,
23
+ datadog_lambda-6.102.0.dist-info/LICENSE,sha256=4yQmjpKp1MKL7DdRDPVHkKYc2W0aezm5SIDske8oAdM,11379
24
+ datadog_lambda-6.102.0.dist-info/LICENSE-3rdparty.csv,sha256=9CDAR1GKawwTbZkqt1RP0uwEcaRM3RhOeTB5tWXr8Ts,1381
25
+ datadog_lambda-6.102.0.dist-info/METADATA,sha256=L9v2c8sUDizBM3PsVXJ3zmcKq9uH_0GugpdcRasEDFY,7469
26
+ datadog_lambda-6.102.0.dist-info/NOTICE,sha256=Jue-d8mQ1ENIHDZdYc2-X8mVYtScXb8pzF1pTLN-kRc,141
27
+ datadog_lambda-6.102.0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
28
+ datadog_lambda-6.102.0.dist-info/RECORD,,