datadog_lambda 5.92.0__py3-none-any.whl → 5.93.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.
datadog_lambda/trigger.py CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  import base64
7
7
  import gzip
8
- import json
8
+ import ujson as json
9
9
  from io import BytesIO, BufferedReader
10
10
  from enum import Enum
11
11
  from typing import Any
@@ -110,10 +110,10 @@ def get_first_record(event):
110
110
 
111
111
  def parse_event_source(event: dict) -> _EventSource:
112
112
  """Determines the source of the trigger event"""
113
- if type(event) is not dict:
113
+ if not isinstance(event, dict):
114
114
  return _EventSource(EventTypes.UNKNOWN)
115
115
 
116
- event_source = _EventSource(EventTypes.UNKNOWN)
116
+ event_source = None
117
117
 
118
118
  request_context = event.get("requestContext")
119
119
  if request_context and request_context.get("stage"):
@@ -126,7 +126,7 @@ def parse_event_source(event: dict) -> _EventSource:
126
126
  event_source.subtype = EventSubtypes.API_GATEWAY
127
127
  if "routeKey" in event:
128
128
  event_source.subtype = EventSubtypes.HTTP_API
129
- if event.get("requestContext", {}).get("messageDirection"):
129
+ if request_context.get("messageDirection"):
130
130
  event_source.subtype = EventSubtypes.WEBSOCKET
131
131
 
132
132
  if request_context and request_context.get("elb"):
@@ -151,10 +151,9 @@ def parse_event_source(event: dict) -> _EventSource:
151
151
 
152
152
  event_record = get_first_record(event)
153
153
  if event_record:
154
- aws_event_source = event_record.get(
155
- "eventSource", event_record.get("EventSource")
154
+ aws_event_source = event_record.get("eventSource") or event_record.get(
155
+ "EventSource"
156
156
  )
157
-
158
157
  if aws_event_source == "aws:dynamodb":
159
158
  event_source = _EventSource(EventTypes.DYNAMODB)
160
159
  if aws_event_source == "aws:kinesis":
@@ -165,11 +164,10 @@ def parse_event_source(event: dict) -> _EventSource:
165
164
  event_source = _EventSource(EventTypes.SNS)
166
165
  if aws_event_source == "aws:sqs":
167
166
  event_source = _EventSource(EventTypes.SQS)
168
-
169
167
  if event_record.get("cf"):
170
168
  event_source = _EventSource(EventTypes.CLOUDFRONT)
171
169
 
172
- return event_source
170
+ return event_source or _EventSource(EventTypes.UNKNOWN)
173
171
 
174
172
 
175
173
  def detect_lambda_function_url_domain(domain: str) -> bool:
@@ -193,20 +191,26 @@ def parse_event_source_arn(source: _EventSource, event: dict, context: Any) -> s
193
191
  event_record = get_first_record(event)
194
192
  # e.g. arn:aws:s3:::lambda-xyz123-abc890
195
193
  if source.to_string() == "s3":
196
- return event_record.get("s3", {}).get("bucket", {}).get("arn")
194
+ s3 = event_record.get("s3")
195
+ if s3:
196
+ bucket = s3.get("bucket")
197
+ if bucket:
198
+ return bucket.get("arn")
199
+ return None
197
200
 
198
201
  # e.g. arn:aws:sns:us-east-1:123456789012:sns-lambda
199
202
  if source.to_string() == "sns":
200
- return event_record.get("Sns", {}).get("TopicArn")
203
+ sns = event_record.get("Sns")
204
+ if sns:
205
+ return sns.get("TopicArn")
206
+ return None
201
207
 
202
208
  # e.g. arn:aws:cloudfront::123456789012:distribution/ABC123XYZ
203
209
  if source.event_type == EventTypes.CLOUDFRONT:
204
210
  distribution_id = (
205
211
  event_record.get("cf", {}).get("config", {}).get("distributionId")
206
212
  )
207
- return "arn:{}:cloudfront::{}:distribution/{}".format(
208
- aws_arn, account_id, distribution_id
209
- )
213
+ return f"arn:{aws_arn}:cloudfront::{account_id}:distribution/{distribution_id}"
210
214
 
211
215
  # e.g. arn:aws:lambda:<region>:<account_id>:url:<function-name>:<function-qualifier>
212
216
  if source.equals(EventTypes.LAMBDA_FUNCTION_URL):
@@ -223,14 +227,18 @@ def parse_event_source_arn(source: _EventSource, event: dict, context: Any) -> s
223
227
  # e.g. arn:aws:apigateway:us-east-1::/restapis/xyz123/stages/default
224
228
  if source.event_type == EventTypes.API_GATEWAY:
225
229
  request_context = event.get("requestContext")
226
- return "arn:{}:apigateway:{}::/restapis/{}/stages/{}".format(
227
- aws_arn, region, request_context.get("apiId"), request_context.get("stage")
228
- )
230
+ api_id = request_context.get("apiId")
231
+ stage = request_context.get("stage")
232
+ return f"arn:{aws_arn}:apigateway:{region}::/restapis/{api_id}/stages/{stage}"
229
233
 
230
234
  # e.g. arn:aws:elasticloadbalancing:us-east-1:123456789012:targetgroup/lambda-xyz/123
231
235
  if source.event_type == EventTypes.ALB:
232
236
  request_context = event.get("requestContext")
233
- return request_context.get("elb", {}).get("targetGroupArn")
237
+ if request_context:
238
+ elb = request_context.get("elb")
239
+ if elb:
240
+ return elb.get("targetGroupArn")
241
+ return None
234
242
 
235
243
  # e.g. arn:aws:logs:us-west-1:123456789012:log-group:/my-log-group-xyz
236
244
  if source.event_type == EventTypes.CLOUDWATCH_LOGS:
@@ -240,9 +248,7 @@ def parse_event_source_arn(source: _EventSource, event: dict, context: Any) -> s
240
248
  data = b"".join(BufferedReader(decompress_stream))
241
249
  logs = json.loads(data)
242
250
  log_group = logs.get("logGroup", "cloudwatch")
243
- return "arn:{}:logs:{}:{}:log-group:{}".format(
244
- aws_arn, region, account_id, log_group
245
- )
251
+ return f"arn:{aws_arn}:logs:{region}:{account_id}:log-group:{log_group}"
246
252
 
247
253
  # e.g. arn:aws:events:us-east-1:123456789012:rule/my-schedule
248
254
  if source.event_type == EventTypes.CLOUDWATCH_EVENTS and event.get("resources"):
@@ -296,6 +302,13 @@ def extract_http_tags(event):
296
302
  return http_tags
297
303
 
298
304
 
305
+ _http_event_types = (
306
+ EventTypes.API_GATEWAY,
307
+ EventTypes.ALB,
308
+ EventTypes.LAMBDA_FUNCTION_URL,
309
+ )
310
+
311
+
299
312
  def extract_trigger_tags(event: dict, context: Any) -> dict:
300
313
  """
301
314
  Parses the trigger event object to get tags to be added to the span metadata
@@ -309,16 +322,15 @@ def extract_trigger_tags(event: dict, context: Any) -> dict:
309
322
  if event_source_arn:
310
323
  trigger_tags["function_trigger.event_source_arn"] = event_source_arn
311
324
 
312
- if event_source.event_type in [
313
- EventTypes.API_GATEWAY,
314
- EventTypes.ALB,
315
- EventTypes.LAMBDA_FUNCTION_URL,
316
- ]:
325
+ if event_source.event_type in _http_event_types:
317
326
  trigger_tags.update(extract_http_tags(event))
318
327
 
319
328
  return trigger_tags
320
329
 
321
330
 
331
+ _str_http_triggers = [et.value for et in _http_event_types]
332
+
333
+
322
334
  def extract_http_status_code_tag(trigger_tags, response):
323
335
  """
324
336
  If the Lambda was triggered by API Gateway, Lambda Function URL, or ALB,
@@ -329,15 +341,7 @@ def extract_http_status_code_tag(trigger_tags, response):
329
341
  str_event_source = trigger_tags.get("function_trigger.event_source")
330
342
  # it would be cleaner if each event type was a constant object that
331
343
  # knew some properties about itself like this.
332
- str_http_triggers = [
333
- et.value
334
- for et in [
335
- EventTypes.API_GATEWAY,
336
- EventTypes.LAMBDA_FUNCTION_URL,
337
- EventTypes.ALB,
338
- ]
339
- ]
340
- if str_event_source not in str_http_triggers:
344
+ if str_event_source not in _str_http_triggers:
341
345
  return
342
346
 
343
347
  status_code = "200"
@@ -0,0 +1 @@
1
+ __version__ = "5.93.0"
datadog_lambda/wrapper.py CHANGED
@@ -6,8 +6,8 @@ import base64
6
6
  import os
7
7
  import logging
8
8
  import traceback
9
+ import ujson as json
9
10
  from importlib import import_module
10
- import json
11
11
  from time import time_ns
12
12
 
13
13
  from datadog_lambda.extension import should_use_extension, flush_extension
@@ -258,7 +258,9 @@ class _LambdaDecorator(object):
258
258
  injected_headers[Headers.Parent_Span_Finish_Time] = finish_time_ns
259
259
  if request_id is not None:
260
260
  injected_headers[Headers.Authorizing_Request_Id] = request_id
261
- datadog_data = base64.b64encode(json.dumps(injected_headers).encode()).decode()
261
+ datadog_data = base64.b64encode(
262
+ json.dumps(injected_headers, escape_forward_slashes=False).encode()
263
+ ).decode()
262
264
  self.response.setdefault("context", {})
263
265
  self.response["context"]["_datadog"] = datadog_data
264
266
 
@@ -381,9 +383,8 @@ class _LambdaDecorator(object):
381
383
 
382
384
 
383
385
  def format_err_with_traceback(e):
384
- return "Error {}. Traceback: {}".format(
385
- e, traceback.format_exc().replace("\n", "\r")
386
- )
386
+ tb = traceback.format_exc().replace("\n", "\r")
387
+ return f"Error {e}. Traceback: {tb}"
387
388
 
388
389
 
389
390
  datadog_lambda_wrapper = _LambdaDecorator
datadog_lambda/xray.py CHANGED
@@ -1,47 +1,60 @@
1
1
  import os
2
2
  import logging
3
- import json
4
3
  import binascii
5
4
  import time
6
5
  import socket
6
+ import ujson as json
7
7
 
8
8
  from datadog_lambda.constants import XrayDaemon, XraySubsegment, TraceContextSource
9
9
 
10
10
  logger = logging.getLogger(__name__)
11
11
 
12
12
 
13
- def get_xray_host_port(address):
14
- if address == "":
15
- logger.debug("X-Ray daemon env var not set, not sending sub-segment")
16
- return None
17
- parts = address.split(":")
18
- if len(parts) <= 1:
19
- logger.debug("X-Ray daemon env var not set, not sending sub-segment")
20
- return None
21
- port = int(parts[1])
22
- host = parts[0]
23
- return (host, port)
24
-
25
-
26
- def send(host_port_tuple, payload):
27
- sock = None
28
- try:
29
- sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
30
- sock.setblocking(0)
31
- sock.connect(host_port_tuple)
32
- sock.send(payload.encode("utf-8"))
33
- except Exception as e_send:
34
- logger.error("Error occurred submitting to xray daemon: %s", str(e_send))
35
- try:
36
- sock.close()
37
- except Exception as e_close:
38
- logger.error("Error while closing the socket: %s", str(e_close))
13
+ class Socket(object):
14
+ def __init__(self):
15
+ self.sock = None
16
+
17
+ @property
18
+ def host_port_tuple(self):
19
+ if not hasattr(self, "_host_port_tuple"):
20
+ self._host_port_tuple = self._get_xray_host_port(
21
+ os.environ.get(XrayDaemon.XRAY_DAEMON_ADDRESS, "")
22
+ )
23
+ return self._host_port_tuple
24
+
25
+ def send(self, payload):
26
+ if not self.sock:
27
+ self._connect()
28
+ try:
29
+ self.sock.send(payload.encode("utf-8"))
30
+ except Exception as e_send:
31
+ logger.error("Error occurred submitting to xray daemon: %s", e_send)
32
+
33
+ def _connect(self):
34
+ self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
35
+ self.sock.setblocking(0)
36
+ self.sock.connect(self.host_port_tuple)
37
+
38
+ def _get_xray_host_port(self, address):
39
+ if address == "":
40
+ logger.debug("X-Ray daemon env var not set, not sending sub-segment")
41
+ return None
42
+ parts = address.split(":")
43
+ if len(parts) <= 1:
44
+ logger.debug("X-Ray daemon env var not set, not sending sub-segment")
45
+ return None
46
+ port = int(parts[1])
47
+ host = parts[0]
48
+ return (host, port)
49
+
50
+
51
+ sock = Socket()
39
52
 
40
53
 
41
54
  def build_segment_payload(payload):
42
55
  if payload is None:
43
56
  return None
44
- return '{"format": "json", "version": 1}' + "\n" + payload
57
+ return '{"format": "json", "version": 1}\n' + payload
45
58
 
46
59
 
47
60
  def parse_xray_header(raw_trace_id):
@@ -89,16 +102,14 @@ def build_segment(context, key, metadata):
89
102
  key: metadata,
90
103
  }
91
104
  },
92
- }
105
+ },
106
+ escape_forward_slashes=False,
93
107
  )
94
108
  return segment
95
109
 
96
110
 
97
111
  def send_segment(key, metadata):
98
- host_port_tuple = get_xray_host_port(
99
- os.environ.get(XrayDaemon.XRAY_DAEMON_ADDRESS, "")
100
- )
101
- if host_port_tuple is None:
112
+ if sock.host_port_tuple is None:
102
113
  return None
103
114
  context = parse_xray_header(
104
115
  os.environ.get(XrayDaemon.XRAY_TRACE_ID_HEADER_NAME, "")
@@ -115,4 +126,4 @@ def send_segment(key, metadata):
115
126
  return None
116
127
  segment = build_segment(context, key, metadata)
117
128
  segment_payload = build_segment_payload(segment)
118
- send(host_port_tuple, segment_payload)
129
+ sock.send(segment_payload)
@@ -0,0 +1,13 @@
1
+ Component,Origin,License,Copyright
2
+ datadog,github.com/DataDog/datadogpy,BSD-3-Clause,"Copyright (c) 2015-Present Datadog, Inc <opensource@datadoghq.com>"
3
+ wrapt,github.com/GrahamDumpleton/wrapt,BSD-2-Clause,"Copyright (c) 2013-2019, Graham Dumpleton"
4
+ ddtrace,github.com/DataDog/dd-trace-py,BSD-3-Clause,"Copyright (c) 2016, Datadog <info@datadoghq.com>"
5
+ urllib3,github.com/urllib3/urllib3,MIT,Copyright (c) 2008-2020 Andrey Petrov and contributors.
6
+ ujson,github.com/ultrajson/ultrajson,BSD-3-Clause,"Copyright (c) 2014, Electronic Arts Inc"
7
+ importlib_metadata,github.com/python/importlib_metadata,Apache-2.0,Copyright © Jason R. Coombs
8
+ boto3,github.com/boto/boto3,Apache-2.0,"Copyright 2013-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved."
9
+ typing_extensions,github.com/python/typing_extensions,PSF-2.0,"Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, The Netherlands. All rights reserved"
10
+ requests,github.com/psf/requests,Apache-2.0,"Copyright 2018 Kenneth Reitz"
11
+ pytest,github.com/pytest-dev/pytest,MIT,Copyright (c) 2004 Holger Krekel and others
12
+ pytest-benchmark,github.com/ionelmc/pytest-benchmark,BSD-2-Clause,"Copyright (c) 2014-2023, Ionel Cristian Mărieș. All rights reserved."
13
+ flake8,gitlab.com/pycqa/flake8,MIT,"Copyright (C) 2011-2013 Tarek Ziade <tarek@ziade.org>. Copyright (C) 2012-2016 Ian Cordasco <graffatcolmingov@gmail.com>."
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: datadog_lambda
3
- Version: 5.92.0
3
+ Version: 5.93.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
@@ -20,10 +20,10 @@ Requires-Dist: boto3 (>=1.28.0,<2.0.0) ; extra == "dev"
20
20
  Requires-Dist: datadog (>=0.41.0,<1.0.0)
21
21
  Requires-Dist: ddtrace (>=2.7.2)
22
22
  Requires-Dist: flake8 (>=5.0.4,<6.0.0) ; extra == "dev"
23
- Requires-Dist: importlib_metadata ; python_version < "3.8"
24
23
  Requires-Dist: pytest (>=8.0.0,<9.0.0) ; extra == "dev"
24
+ Requires-Dist: pytest-benchmark (>=4.0,<5.0) ; extra == "dev"
25
25
  Requires-Dist: requests (>=2.22.0,<3.0.0) ; extra == "dev"
26
- Requires-Dist: typing_extensions (>=4.0,<5.0) ; python_version < "3.8"
26
+ Requires-Dist: ujson (>=5.9.0)
27
27
  Requires-Dist: urllib3 (<2.0.0) ; python_version < "3.11"
28
28
  Requires-Dist: urllib3 (<2.1.0) ; python_version >= "3.11"
29
29
  Requires-Dist: wrapt (>=1.11.2,<2.0.0)
@@ -0,0 +1,27 @@
1
+ datadog_lambda/__init__.py,sha256=F_KG5XbNq9QEzbioec7DXzyTv3oYJHxeEgXE88dxXRQ,637
2
+ datadog_lambda/api.py,sha256=TFg7gCek088_C53cZQQHDoLXGlTAhP2AD8NAuWYOVco,3653
3
+ datadog_lambda/cold_start.py,sha256=8-MsHGUo4fH88HrcOpjnHa6uRBEHOW3bI-fhiRNZQzg,8171
4
+ datadog_lambda/constants.py,sha256=DeujbnguBT9nDioiaYlgQQdZ6Ps53sWXmYhruLVoCHE,1669
5
+ datadog_lambda/dogstatsd.py,sha256=HCyl72oQUSF3E4y1ivrHaGTHL9WG1asGjB1Xo2D_Abc,4769
6
+ datadog_lambda/extension.py,sha256=ZU64QpA2K9K9C0jfqusBgpiWQe0QA2dcJCNk7UgjVfw,621
7
+ datadog_lambda/handler.py,sha256=P-ImnqDohdNBqiA-YGlhJf83FHgweCOC0LgzudZlc7A,992
8
+ datadog_lambda/logger.py,sha256=nGxNMouF7wcjmoPsgivzzjNLvSy3WbGtKElxOvITZDg,766
9
+ datadog_lambda/metric.py,sha256=JzErzS_ZCYbQ7iojnDSSVSypWj_EyrSSqO2-CQ3cWSE,4595
10
+ datadog_lambda/module_name.py,sha256=5FmOCjjgjq78b6a83QePZZFmqahAoy9XHdUNWdq2D1Q,139
11
+ datadog_lambda/patch.py,sha256=6a-BqovSRKsU5hTQpzxgY-_bducT-UEVCLvd3fdxeWc,4710
12
+ datadog_lambda/stats_writer.py,sha256=SIac96wu45AxDOZ4GraCbK3r1RKr4AFgXcEPHg1VX0A,243
13
+ datadog_lambda/statsd_writer.py,sha256=F4SCJ6-J6YfvQNh0uQfAkP6QYiAtV3-MCsxz4QnaBBI,403
14
+ datadog_lambda/tag_object.py,sha256=cZ7W9Ae5k3YxLOZzN5Hu8UqvOKtq5AWARele0L18Gjs,2091
15
+ datadog_lambda/tags.py,sha256=PMoxJhIGMWrG7798rqdK8oBp5UzWJrOJaCcK83AeQ3o,2487
16
+ datadog_lambda/thread_stats_writer.py,sha256=fkjMDgrzwACrK_ZrCwl9mHz5U3CMLEyrsaondjdM3r8,2522
17
+ datadog_lambda/tracing.py,sha256=wngNyiUuHcuy_TmWeKEQBsJiKSj0JyNoHHxhBOlm9Zs,47962
18
+ datadog_lambda/trigger.py,sha256=JK5am_XmEvueuLKrrF7k08sWnZVDOD6QvQjrsUJx1dM,12177
19
+ datadog_lambda/version.py,sha256=uZmcswY6DeOIt6kTpeQsTfsvVvo4yNIPQZ1BLpNMuQE,23
20
+ datadog_lambda/wrapper.py,sha256=aU2sQdtv_7g1Cb1gAAxkEy4zUcFSsZVwRGgHreIWwB0,15272
21
+ datadog_lambda/xray.py,sha256=jvA4Fk76PLMgsjUoUZ7gp2otv53hFt39Nvso1ZNaivg,3749
22
+ datadog_lambda-5.93.0.dist-info/LICENSE,sha256=4yQmjpKp1MKL7DdRDPVHkKYc2W0aezm5SIDske8oAdM,11379
23
+ datadog_lambda-5.93.0.dist-info/LICENSE-3rdparty.csv,sha256=9CDAR1GKawwTbZkqt1RP0uwEcaRM3RhOeTB5tWXr8Ts,1381
24
+ datadog_lambda-5.93.0.dist-info/METADATA,sha256=sm8-SEF9ywrAI4x8fMpviEuH4_Fub6NChFTEFmNjtWw,7289
25
+ datadog_lambda-5.93.0.dist-info/NOTICE,sha256=Jue-d8mQ1ENIHDZdYc2-X8mVYtScXb8pzF1pTLN-kRc,141
26
+ datadog_lambda-5.93.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
27
+ datadog_lambda-5.93.0.dist-info/RECORD,,
@@ -1,3 +0,0 @@
1
- Component,Origin,License,Copyright
2
- flake8,gitlab.com/pycqa/flake8,MIT,"Copyright (C) 2011-2013 Tarek Ziade <tarek@ziade.org>. Copyright (C) 2012-2016 Ian Cordasco <graffatcolmingov@gmail.com>."
3
- wrapt,github.com/GrahamDumpleton/wrapt,BSD-2-Clause,"Copyright (c) 2013-2019, Graham Dumpleton"
@@ -1,26 +0,0 @@
1
- datadog_lambda/__init__.py,sha256=3LWiCnMOHS1_XzwaHrltXTiq_1IsuqYcG6LcPTk-5ww,723
2
- datadog_lambda/api.py,sha256=TFg7gCek088_C53cZQQHDoLXGlTAhP2AD8NAuWYOVco,3653
3
- datadog_lambda/cold_start.py,sha256=UEi0QJ1-35YgZiMwF1MKa2cTNifYmfN3fsIB4PmL-XA,8107
4
- datadog_lambda/constants.py,sha256=DeujbnguBT9nDioiaYlgQQdZ6Ps53sWXmYhruLVoCHE,1669
5
- datadog_lambda/dogstatsd.py,sha256=HCyl72oQUSF3E4y1ivrHaGTHL9WG1asGjB1Xo2D_Abc,4769
6
- datadog_lambda/extension.py,sha256=GE_7gJeMAic14i8IAr8GkkWbB5lJsyNNwJVJgk7sDU0,662
7
- datadog_lambda/handler.py,sha256=r2MiZoIfTWuVAN-f6iXXIjhdtd1t7m9bTnwplVm2SEY,994
8
- datadog_lambda/logger.py,sha256=nGxNMouF7wcjmoPsgivzzjNLvSy3WbGtKElxOvITZDg,766
9
- datadog_lambda/metric.py,sha256=jk4jRgb0pwxd_c4D2zzAZ3olN_8ci64fpYk3cuxbg0U,4707
10
- datadog_lambda/module_name.py,sha256=5FmOCjjgjq78b6a83QePZZFmqahAoy9XHdUNWdq2D1Q,139
11
- datadog_lambda/patch.py,sha256=Hr_zeekk9PeAizTDFoZ_ZwTWptjgtKjl9A-XHX5kA1k,4641
12
- datadog_lambda/stats_writer.py,sha256=SIac96wu45AxDOZ4GraCbK3r1RKr4AFgXcEPHg1VX0A,243
13
- datadog_lambda/statsd_writer.py,sha256=F4SCJ6-J6YfvQNh0uQfAkP6QYiAtV3-MCsxz4QnaBBI,403
14
- datadog_lambda/tag_object.py,sha256=Kcys4Mo4_4vdXxq4XS7ilWpCuSQQyVRSjDejgq6RJS4,2112
15
- datadog_lambda/tags.py,sha256=wIG1f5iq85dq3FNV-yi-D0XwqYOx8jE0x_8Re6Ucmso,3240
16
- datadog_lambda/thread_stats_writer.py,sha256=fkjMDgrzwACrK_ZrCwl9mHz5U3CMLEyrsaondjdM3r8,2522
17
- datadog_lambda/tracing.py,sha256=4iYZ89Ow9pb9FpV8A5wrIwybvBdi6HJ_Ze3qdsCT990,48234
18
- datadog_lambda/trigger.py,sha256=_Sxpy9UpMDHdw_X1hD61G4OTex7CIYQw1guFu6dzByo,12082
19
- datadog_lambda/wrapper.py,sha256=ikeMVhpZO9bK6zf0YjbpU6qOcPMyXY13pOIOUUfKJMA,15223
20
- datadog_lambda/xray.py,sha256=05-8xd3GOOIDtGaB4k2Ow1kbWn86Px2mhyKEUYIwKIc,3448
21
- datadog_lambda-5.92.0.dist-info/LICENSE,sha256=4yQmjpKp1MKL7DdRDPVHkKYc2W0aezm5SIDske8oAdM,11379
22
- datadog_lambda-5.92.0.dist-info/LICENSE-3rdparty.csv,sha256=JDC3fYxFni7456BCvwPTA-DEDv8l8B0QHYDuqnu9UjI,290
23
- datadog_lambda-5.92.0.dist-info/METADATA,sha256=HCeMsVTiswHqnKnfVRDOX47uz665OuddZbDYqxYhAtc,7326
24
- datadog_lambda-5.92.0.dist-info/NOTICE,sha256=Jue-d8mQ1ENIHDZdYc2-X8mVYtScXb8pzF1pTLN-kRc,141
25
- datadog_lambda-5.92.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
26
- datadog_lambda-5.92.0.dist-info/RECORD,,