From ea42d491eb86031621758fe44193202f779ad979 Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez Date: Tue, 16 May 2023 10:30:31 -0700 Subject: [PATCH 01/10] DD_SERVICE_MAPPING implementation with tests --- datadog_lambda/tracing.py | 109 +++++++- tests/event_samples/lambda-url.json | 47 ++++ tests/test_tracing.py | 411 ++++++++++++++++++++++++++++ 3 files changed, 557 insertions(+), 10 deletions(-) create mode 100644 tests/event_samples/lambda-url.json diff --git a/datadog_lambda/tracing.py b/datadog_lambda/tracing.py index 7879697e..eaf205a2 100644 --- a/datadog_lambda/tracing.py +++ b/datadog_lambda/tracing.py @@ -685,9 +685,31 @@ def create_inferred_span( return None +def get_service_mapping(service_name): + service_mapping = os.getenv("DD_SERVICE_MAPPING", "") + mapping = {} + + for entry in service_mapping.split(","): + parts = entry.split("|") + if len(parts) == 2: + key, value = parts + mapping[key.strip()] = value.strip() + + return mapping.get(service_name) + + def create_inferred_span_from_lambda_function_url_event(event, context): request_context = event.get("requestContext") domain = request_context.get("domainName") + # Attempt to get the service mapping for the domain so that we don't remap all apigw services + # Allows the customer to have more fine-grained control + domain_mapping = get_service_mapping(str(domain)) + # If the domain mapping is not found, + # attempt to get the service mapping for 'lambda_api_gateway' + lambda_url_mapping = None if domain_mapping else get_service_mapping("lambda_url") + # If neither mapping is found, default to the domain name + service_name = domain_mapping or lambda_url_mapping or domain + method = request_context.get("http", {}).get("method") path = request_context.get("http", {}).get("path") resource = "{0} {1}".format(method, path) @@ -701,7 +723,7 @@ def create_inferred_span_from_lambda_function_url_event(event, context): } request_time_epoch = request_context.get("timeEpoch") args = { - "service": domain, + "service": service_name, "resource": resource, "span_type": "http", } @@ -838,6 +860,17 @@ def create_inferred_span_from_api_gateway_event( ): request_context = event.get("requestContext") domain = request_context.get("domainName", "") + # Attempt to get the service mapping for the domain so that we don't remap all apigw services + # Allows the customer to have more fine-grained control + domain_mapping = get_service_mapping(str(domain)) + # If the domain mapping is not found, + # attempt to get the service mapping for 'lambda_api_gateway' + api_gateway_mapping = ( + None if domain_mapping else get_service_mapping("lambda_api_gateway") + ) + # If neither mapping is found, default to the domain name + service_name = domain_mapping or api_gateway_mapping or domain + method = event.get("httpMethod") path = event.get("path") resource = "{0} {1}".format(method, path) @@ -858,7 +891,7 @@ def create_inferred_span_from_api_gateway_event( else: InferredSpanInfo.set_tags(tags, tag_source="self", synchronicity="sync") args = { - "service": domain, + "service": service_name, "resource": resource, "span_type": "http", } @@ -936,6 +969,14 @@ def create_inferred_span_from_sqs_event(event, context): event_record = get_first_record(event) event_source_arn = event_record.get("eventSourceARN") queue_name = event_source_arn.split(":")[-1] + queue_mapping = get_service_mapping(str(event_source_arn)) + + # If the domain mapping is not found, attempt to get the service mapping for 'sqs' + sqs_mapping = None if queue_mapping else get_service_mapping("lambda_sqs") + + # If neither mapping is found, default to the sns name + service_name = queue_mapping or sqs_mapping or "sqs" + tags = { "operation_name": "aws.sqs", "resource_names": queue_name, @@ -947,7 +988,7 @@ def create_inferred_span_from_sqs_event(event, context): InferredSpanInfo.set_tags(tags, tag_source="self", synchronicity="async") request_time_epoch = event_record.get("attributes", {}).get("SentTimestamp") args = { - "service": "sqs", + "service": service_name, "resource": queue_name, "span_type": "web", } @@ -990,6 +1031,13 @@ def create_inferred_span_from_sns_event(event, context): sns_message = event_record.get("Sns") topic_arn = event_record.get("Sns", {}).get("TopicArn") topic_name = topic_arn.split(":")[-1] + queue_mapping = get_service_mapping(str(topic_arn)) + + # If the domain mapping is not found, attempt to get the service mapping for 'sns' + sns_mapping = None if queue_mapping else get_service_mapping("lambda_sns") + + # If neither mapping is found, default to the sns name + service_name = queue_mapping or sns_mapping or "sns" tags = { "operation_name": "aws.sns", "resource_names": topic_name, @@ -1009,7 +1057,7 @@ def create_inferred_span_from_sns_event(event, context): dt = datetime.strptime(timestamp, sns_dt_format) args = { - "service": "sns", + "service": service_name, "resource": topic_name, "span_type": "web", } @@ -1027,6 +1075,13 @@ def create_inferred_span_from_kinesis_event(event, context): event_id = event_record.get("eventID") stream_name = event_source_arn.split(":")[-1] shard_id = event_id.split(":")[0] + stream_name_mapping = get_service_mapping(str(event_source_arn)) + kinesis_mapping = ( + None if stream_name_mapping else get_service_mapping("lambda_kinesis") + ) + + # If neither mapping is found, default to the kinesis name + service_name = stream_name_mapping or kinesis_mapping or "kinesis" tags = { "operation_name": "aws.kinesis", "resource_names": stream_name, @@ -1044,7 +1099,7 @@ def create_inferred_span_from_kinesis_event(event, context): ) args = { - "service": "kinesis", + "service": service_name, "resource": stream_name, "span_type": "web", } @@ -1059,7 +1114,25 @@ def create_inferred_span_from_kinesis_event(event, context): def create_inferred_span_from_dynamodb_event(event, context): event_record = get_first_record(event) event_source_arn = event_record.get("eventSourceARN") - table_name = event_source_arn.split("/")[1] + parts = event_source_arn.split("/") if event_source_arn else [None, None] + + # parts now contains all split elements + table_arn_prefix, table_name, *rest = parts + full_table_arn = None + if table_arn_prefix and table_name: + full_table_arn = f"{table_arn_prefix}/{table_name}" + # Attempt to get the service mapping for the domain so that we don't remap all apigw services + # Allows the customer to have more fine grained control + table_arn_mapping = get_service_mapping(full_table_arn) if full_table_arn else None + + # If the domain mapping is not found, attempt to get the service mapping for 'dynamodb' + dynamo_db_mapping = ( + None if table_arn_mapping else get_service_mapping("lambda_dynamodb") + ) + + # If neither mapping is found, default to "dynamodb" + service_name = table_arn_mapping or dynamo_db_mapping or "dynamodb" + dynamodb_message = event_record.get("dynamodb") tags = { "operation_name": "aws.dynamodb", @@ -1077,7 +1150,7 @@ def create_inferred_span_from_dynamodb_event(event, context): "ApproximateCreationDateTime" ) args = { - "service": "dynamodb", + "service": service_name, "resource": table_name, "span_type": "web", } @@ -1093,12 +1166,20 @@ def create_inferred_span_from_dynamodb_event(event, context): def create_inferred_span_from_s3_event(event, context): event_record = get_first_record(event) bucket_name = event_record.get("s3", {}).get("bucket", {}).get("name") + bucket_arn = event_record.get("s3", {}).get("bucket", {}).get("arn") + bucket_name_mapping = get_service_mapping(str(bucket_arn)) + # If the domain mapping is not found, attempt to get the service mapping for 's3' + s3_mapping = None if bucket_name_mapping else get_service_mapping("lambda_s3") + + # If neither mapping is found, default to the s3 name + service_name = bucket_name_mapping or s3_mapping or "s3" + tags = { "operation_name": "aws.s3", "resource_names": bucket_name, "event_name": event_record.get("eventName"), "bucketname": bucket_name, - "bucket_arn": event_record.get("s3", {}).get("bucket", {}).get("arn"), + "bucket_arn": bucket_arn, "object_key": event_record.get("s3", {}).get("object", {}).get("key"), "object_size": str(event_record.get("s3", {}).get("object", {}).get("size")), "object_etag": event_record.get("s3", {}).get("object", {}).get("eTag"), @@ -1109,7 +1190,7 @@ def create_inferred_span_from_s3_event(event, context): dt = datetime.strptime(timestamp, dt_format) args = { - "service": "s3", + "service": service_name, "resource": bucket_name, "span_type": "web", } @@ -1123,6 +1204,14 @@ def create_inferred_span_from_s3_event(event, context): def create_inferred_span_from_eventbridge_event(event, context): source = event.get("source") + source_mapping = get_service_mapping(str(source)) + # If the domain mapping is not found, attempt to get the service mapping for 'eventbridge' + event_bridge_mapping = ( + None if source_mapping else get_service_mapping("lambda_eventbridge") + ) + + # If neither mapping is found, default to the eventbridge name + service_name = source_mapping or event_bridge_mapping or "eventbridge" tags = { "operation_name": "aws.eventbridge", "resource_names": source, @@ -1138,7 +1227,7 @@ def create_inferred_span_from_eventbridge_event(event, context): dt = datetime.strptime(timestamp, dt_format) args = { - "service": "eventbridge", + "service": service_name, "resource": source, "span_type": "web", } diff --git a/tests/event_samples/lambda-url.json b/tests/event_samples/lambda-url.json new file mode 100644 index 00000000..8e78650a --- /dev/null +++ b/tests/event_samples/lambda-url.json @@ -0,0 +1,47 @@ +{ + "version": "2.0", + "routeKey": "$default", + "rawPath": "/", + "rawQueryString": "", + "headers": { + "sec-fetch-mode": "navigate", + "sec-fetch-site": "none", + "accept-language": "en-US,en;q=0.9", + "x-forwarded-proto": "https", + "x-forwarded-port": "443", + "x-forwarded-for": "71.195.30.42", + "sec-fetch-user": "?1", + "pragma": "no-cache", + "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9", + "sec-ch-ua": "\"Google Chrome\";v=\"95\", \"Chromium\";v=\"95\", \";Not A Brand\";v=\"99\"", + "sec-ch-ua-mobile": "?0", + "x-amzn-trace-id": "Root=1-61953929-1ec00c3011062a48477b169e", + "sec-ch-ua-platform": "\"macOS\"", + "host": "a8hyhsshac.lambda-url.eu-south-1.amazonaws.com", + "upgrade-insecure-requests": "1", + "cache-control": "no-cache", + "accept-encoding": "gzip, deflate, br", + "sec-fetch-dest": "document", + "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36" + }, + "requestContext": { + "accountId": "601427279990", + "apiId": "a8hyhsshac", + "domainName": "a8hyhsshac.lambda-url.eu-south-1.amazonaws.com", + "domainPrefix": "a8hyhsshac", + "http": { + "method": "GET", + "path": "/", + "protocol": "HTTP/1.1", + "sourceIp": "71.195.30.42", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36" + }, + "requestId": "ec4d58f8-2b8b-4ceb-a1d5-2be7bff58505", + "routeKey": "$default", + "stage": "$default", + "time": "17/Nov/2021:17:17:29 +0000", + "timeEpoch": 1637169449721 + }, + "isBase64Encoded": false + } + \ No newline at end of file diff --git a/tests/test_tracing.py b/tests/test_tracing.py index e19c66aa..ccceb6bd 100644 --- a/tests/test_tracing.py +++ b/tests/test_tracing.py @@ -1,6 +1,8 @@ import unittest import json import os +import copy + from unittest.mock import MagicMock, Mock, patch, call @@ -732,6 +734,415 @@ def _basic_common_checks( self.assertEqual(span.get_tag("request_id"), "abc123") +class TestServiceMapping(unittest.TestCase): + def tearDown(self): + del os.environ["DD_SERVICE_MAPPING"] + + def test_remaps_all_inferred_span_service_names_from_api_gateway_event(self): + os.environ["DD_SERVICE_MAPPING"] = "lambda_api_gateway|new-name" + + event_sample_source = "api-gateway" + test_file = event_samples + event_sample_source + ".json" + with open(test_file, "r") as event: + original_event = json.load(event) + + ctx = get_mock_context() + ctx.aws_request_id = "123" + + span1 = create_inferred_span(original_event, ctx) + self.assertEqual(span1.get_tag("operation_name"), "aws.apigateway.rest") + self.assertEqual(span1.service, "new-name") + + # Testing the second event + event2 = copy.deepcopy( + original_event + ) # Create a deep copy so we don't modify the original event + # Modify event2 as necessary + event2["requestContext"][ + "domainName" + ] = "different.execute-api.us-east-2.amazonaws.com" + span2 = create_inferred_span(event2, ctx) + self.assertEqual(span2.get_tag("operation_name"), "aws.apigateway.rest") + self.assertEqual(span2.service, "new-name") + + def test_remaps_specific_inferred_span_service_names_from_api_gateway_event(self): + os.environ[ + "DD_SERVICE_MAPPING" + ] = "70ixmpl4fl.execute-api.us-east-2.amazonaws.com|new-name" + + event_sample_source = "api-gateway" + test_file = event_samples + event_sample_source + ".json" + with open(test_file, "r") as event: + original_event = json.load(event) + + ctx = get_mock_context() + ctx.aws_request_id = "123" + + span1 = create_inferred_span(original_event, ctx) + self.assertEqual(span1.get_tag("operation_name"), "aws.apigateway.rest") + self.assertEqual(span1.service, "new-name") + + # Testing the second event + event2 = copy.deepcopy( + original_event + ) # Create a deep copy so we don't modify the original event + # Modify event2 as necessary + event2["requestContext"][ + "domainName" + ] = "different.execute-api.us-east-2.amazonaws.com" + span2 = create_inferred_span(event2, ctx) + self.assertEqual(span2.get_tag("operation_name"), "aws.apigateway.rest") + self.assertEqual(span2.service, "different.execute-api.us-east-2.amazonaws.com") + + def test_remaps_all_inferred_span_service_names_from_lambda_url_event(self): + os.environ["DD_SERVICE_MAPPING"] = "lambda_url|new-name" + + event_sample_source = "lambda-url" + test_file = event_samples + event_sample_source + ".json" + with open(test_file, "r") as event: + original_event = json.load(event) + + ctx = get_mock_context() + ctx.aws_request_id = "123" + + span1 = create_inferred_span(original_event, ctx) + self.assertEqual(span1.get_tag("operation_name"), "aws.lambda.url") + self.assertEqual(span1.service, "new-name") + + # Testing the second event + event2 = copy.deepcopy( + original_event + ) # Create a deep copy so we don't modify the original event + # Modify event2 as necessary + event2["requestContext"][ + "domainName" + ] = "different.lambda-url.eu-south-1.amazonaws.com" + span2 = create_inferred_span(event2, ctx) + self.assertEqual(span2.get_tag("operation_name"), "aws.lambda.url") + self.assertEqual(span2.service, "new-name") + + def test_remaps_specific_inferred_span_service_names_from_lambda_url_event(self): + os.environ[ + "DD_SERVICE_MAPPING" + ] = "a8hyhsshac.lambda-url.eu-south-1.amazonaws.com|new-name" + + event_sample_source = "lambda-url" + test_file = event_samples + event_sample_source + ".json" + with open(test_file, "r") as event: + original_event = json.load(event) + + ctx = get_mock_context() + ctx.aws_request_id = "123" + + span1 = create_inferred_span(original_event, ctx) + self.assertEqual(span1.get_tag("operation_name"), "aws.lambda.url") + self.assertEqual(span1.service, "new-name") + + # Testing the second event + event2 = copy.deepcopy( + original_event + ) # Create a deep copy so we don't modify the original event + # Modify event2 as necessary + event2["requestContext"][ + "domainName" + ] = "different.lambda-url.eu-south-1.amazonaws.com" + span2 = create_inferred_span(event2, ctx) + self.assertEqual(span2.get_tag("operation_name"), "aws.lambda.url") + self.assertEqual(span2.service, "different.lambda-url.eu-south-1.amazonaws.com") + + def test_remaps_all_inferred_span_service_names_from_sqs_event(self): + os.environ["DD_SERVICE_MAPPING"] = "lambda_sqs|new-name" + + event_sample_source = "sqs-string-msg-attribute" + test_file = event_samples + event_sample_source + ".json" + with open(test_file, "r") as event: + original_event = json.load(event) + + ctx = get_mock_context() + ctx.aws_request_id = "123" + + span1 = create_inferred_span(original_event, ctx) + self.assertEqual(span1.get_tag("operation_name"), "aws.sqs") + self.assertEqual(span1.service, "new-name") + + # Testing the second event + event2 = copy.deepcopy(original_event) + event2["Records"][0][ + "eventSourceARN" + ] = "arn:aws:sqs:eu-west-1:123456789012:different-sqs-url" + span2 = create_inferred_span(event2, ctx) + self.assertEqual(span2.get_tag("operation_name"), "aws.sqs") + self.assertEqual(span2.service, "new-name") + + def test_remaps_specific_inferred_span_service_names_from_sqs_event(self): + os.environ[ + "DD_SERVICE_MAPPING" + ] = "arn:aws:sqs:eu-west-1:601427279990:InferredSpansQueueNode|new-name" + + event_sample_source = "sqs-string-msg-attribute" + test_file = event_samples + event_sample_source + ".json" + with open(test_file, "r") as event: + original_event = json.load(event) + + ctx = get_mock_context() + ctx.aws_request_id = "123" + + span1 = create_inferred_span(original_event, ctx) + self.assertEqual(span1.get_tag("operation_name"), "aws.sqs") + self.assertEqual(span1.service, "new-name") + + # Testing the second event + event2 = copy.deepcopy(original_event) + event2["Records"][0][ + "eventSourceARN" + ] = "arn:aws:sqs:eu-west-1:123456789012:different-sqs-url" + span2 = create_inferred_span(event2, ctx) + self.assertEqual(span2.get_tag("operation_name"), "aws.sqs") + self.assertEqual(span2.service, "sqs") + + def test_remaps_all_inferred_span_service_names_from_sns_event(self): + os.environ["DD_SERVICE_MAPPING"] = "lambda_sns|new-name" + + event_sample_source = "sns-string-msg-attribute" + test_file = event_samples + event_sample_source + ".json" + with open(test_file, "r") as event: + original_event = json.load(event) + + ctx = get_mock_context() + ctx.aws_request_id = "123" + + span1 = create_inferred_span(original_event, ctx) + self.assertEqual(span1.get_tag("operation_name"), "aws.sns") + self.assertEqual(span1.service, "new-name") + + # Testing the second event + event2 = copy.deepcopy(original_event) + event2["Records"][0]["Sns"][ + "TopicArn" + ] = "arn:aws:sns:us-west-2:123456789012:different-sns-topic" + span2 = create_inferred_span(event2, ctx) + self.assertEqual(span2.get_tag("operation_name"), "aws.sns") + self.assertEqual(span2.service, "new-name") + + def test_remaps_specific_inferred_span_service_names_from_sns_event(self): + os.environ[ + "DD_SERVICE_MAPPING" + ] = "arn:aws:sns:eu-west-1:601427279990:serverlessTracingTopicPy|new-name" + + event_sample_source = "sns-string-msg-attribute" + test_file = event_samples + event_sample_source + ".json" + with open(test_file, "r") as event: + original_event = json.load(event) + + ctx = get_mock_context() + ctx.aws_request_id = "123" + + span1 = create_inferred_span(original_event, ctx) + self.assertEqual(span1.get_tag("operation_name"), "aws.sns") + self.assertEqual(span1.service, "new-name") + + # Testing the second event + event2 = copy.deepcopy(original_event) + event2["Records"][0]["Sns"][ + "TopicArn" + ] = "arn:aws:sns:us-west-2:123456789012:different-sns-topic" + span2 = create_inferred_span(event2, ctx) + self.assertEqual(span2.get_tag("operation_name"), "aws.sns") + self.assertEqual(span2.service, "sns") + + def test_remaps_all_inferred_span_service_names_from_kinesis_event(self): + os.environ["DD_SERVICE_MAPPING"] = "lambda_kinesis|new-name" + + event_sample_source = "kinesis" + test_file = event_samples + event_sample_source + ".json" + with open(test_file, "r") as event: + original_event = json.load(event) + + ctx = get_mock_context() + ctx.aws_request_id = "123" + + span1 = create_inferred_span(original_event, ctx) + self.assertEqual(span1.get_tag("operation_name"), "aws.kinesis") + self.assertEqual(span1.service, "new-name") + + # Testing the second event + event2 = copy.deepcopy(original_event) + event2["Records"][0][ + "eventSourceARN" + ] = "arn:aws:kinesis:eu-west-1:601427279990:stream/differentKinesisStream" + span2 = create_inferred_span(event2, ctx) + self.assertEqual(span2.get_tag("operation_name"), "aws.kinesis") + self.assertEqual(span2.service, "new-name") + + def test_remaps_specific_inferred_span_service_names_from_kinesis_event(self): + os.environ[ + "DD_SERVICE_MAPPING" + ] = "arn:aws:kinesis:eu-west-1:601427279990:stream/kinesisStream|new-name" + + event_sample_source = "kinesis" + test_file = event_samples + event_sample_source + ".json" + with open(test_file, "r") as event: + original_event = json.load(event) + + ctx = get_mock_context() + ctx.aws_request_id = "123" + + span1 = create_inferred_span(original_event, ctx) + self.assertEqual(span1.get_tag("operation_name"), "aws.kinesis") + self.assertEqual(span1.service, "new-name") + + # Testing the second event + event2 = copy.deepcopy(original_event) + event2["Records"][0][ + "eventSourceARN" + ] = "arn:aws:kinesis:eu-west-1:601427279990:stream/differentKinesisStream" + span2 = create_inferred_span(event2, ctx) + self.assertEqual(span2.get_tag("operation_name"), "aws.kinesis") + self.assertEqual(span2.service, "kinesis") + + def test_remaps_all_inferred_span_service_names_from_s3_event(self): + os.environ["DD_SERVICE_MAPPING"] = "lambda_s3|new-name" + + event_sample_source = "s3" + test_file = event_samples + event_sample_source + ".json" + with open(test_file, "r") as event: + original_event = json.load(event) + + ctx = get_mock_context() + ctx.aws_request_id = "123" + + span1 = create_inferred_span(original_event, ctx) + self.assertEqual(span1.get_tag("operation_name"), "aws.s3") + self.assertEqual(span1.service, "new-name") + + # Testing the second event + event2 = copy.deepcopy(original_event) + event2["Records"][0]["s3"]["bucket"][ + "arn" + ] = "arn:aws:s3:::different-example-bucket" + span2 = create_inferred_span(event2, ctx) + self.assertEqual(span2.get_tag("operation_name"), "aws.s3") + self.assertEqual(span2.service, "new-name") + + def test_remaps_specific_inferred_span_service_names_from_s3_event(self): + os.environ["DD_SERVICE_MAPPING"] = "arn:aws:s3:::example-bucket|new-name" + + event_sample_source = "s3" + test_file = event_samples + event_sample_source + ".json" + with open(test_file, "r") as event: + original_event = json.load(event) + + ctx = get_mock_context() + ctx.aws_request_id = "123" + + span1 = create_inferred_span(original_event, ctx) + self.assertEqual(span1.get_tag("operation_name"), "aws.s3") + self.assertEqual(span1.service, "new-name") + + # Testing the second event + event2 = copy.deepcopy(original_event) + event2["Records"][0]["s3"]["bucket"][ + "arn" + ] = "arn:aws:s3:::different-example-bucket" + span2 = create_inferred_span(event2, ctx) + self.assertEqual(span2.get_tag("operation_name"), "aws.s3") + self.assertEqual(span2.service, "s3") + + def test_remaps_all_inferred_span_service_names_from_dynamodb_event(self): + os.environ["DD_SERVICE_MAPPING"] = "lambda_dynamodb|new-name" + + event_sample_source = "dynamodb" + test_file = event_samples + event_sample_source + ".json" + with open(test_file, "r") as event: + original_event = json.load(event) + + ctx = get_mock_context() + ctx.aws_request_id = "123" + + span1 = create_inferred_span(original_event, ctx) + self.assertEqual(span1.get_tag("operation_name"), "aws.dynamodb") + self.assertEqual(span1.service, "new-name") + + # Testing the second event + event2 = copy.deepcopy(original_event) + event2["Records"][0][ + "eventSourceARN" + ] = "arn:aws:dynamodb:us-east-1:123456789012:table/DifferentExampleTableWithStream/stream/2015-06-27T00:48:05.899" + span2 = create_inferred_span(event2, ctx) + self.assertEqual(span2.get_tag("operation_name"), "aws.dynamodb") + self.assertEqual(span2.service, "new-name") + + def test_remaps_specific_inferred_span_service_names_from_dynamodb_event(self): + os.environ[ + "DD_SERVICE_MAPPING" + ] = "arn:aws:dynamodb:us-east-1:123456789012:table/ExampleTableWithStream|new-name" + + event_sample_source = "dynamodb" + test_file = event_samples + event_sample_source + ".json" + with open(test_file, "r") as event: + original_event = json.load(event) + + ctx = get_mock_context() + ctx.aws_request_id = "123" + + span1 = create_inferred_span(original_event, ctx) + self.assertEqual(span1.get_tag("operation_name"), "aws.dynamodb") + self.assertEqual(span1.service, "new-name") + + # Testing the second event + event2 = copy.deepcopy(original_event) + event2["Records"][0][ + "eventSourceARN" + ] = "arn:aws:dynamodb:us-east-1:123456789012:table/DifferentExampleTableWithStream/stream/2015-06-27T00:48:05.899" + span2 = create_inferred_span(event2, ctx) + self.assertEqual(span2.get_tag("operation_name"), "aws.dynamodb") + self.assertEqual(span2.service, "dynamodb") + + def test_remaps_all_inferred_span_service_names_from_eventbridge_event(self): + os.environ["DD_SERVICE_MAPPING"] = "lambda_eventbridge|new-name" + + event_sample_source = "eventbridge-custom" + test_file = event_samples + event_sample_source + ".json" + with open(test_file, "r") as event: + original_event = json.load(event) + + ctx = get_mock_context() + ctx.aws_request_id = "123" + + span1 = create_inferred_span(original_event, ctx) + self.assertEqual(span1.get_tag("operation_name"), "aws.eventbridge") + self.assertEqual(span1.service, "new-name") + + # Testing the second event + event2 = copy.deepcopy(original_event) + event2["source"] = "different.eventbridge.custom.event.sender" + span2 = create_inferred_span(event2, ctx) + self.assertEqual(span2.get_tag("operation_name"), "aws.eventbridge") + self.assertEqual(span2.service, "new-name") + + def test_remaps_specific_inferred_span_service_names_from_eventbridge_event(self): + os.environ["DD_SERVICE_MAPPING"] = "eventbridge.custom.event.sender|new-name" + + event_sample_source = "eventbridge-custom" + test_file = event_samples + event_sample_source + ".json" + with open(test_file, "r") as event: + original_event = json.load(event) + + ctx = get_mock_context() + ctx.aws_request_id = "123" + + span1 = create_inferred_span(original_event, ctx) + self.assertEqual(span1.get_tag("operation_name"), "aws.eventbridge") + self.assertEqual(span1.service, "new-name") + + # Testing the second event + event2 = copy.deepcopy(original_event) + event2["source"] = "different.eventbridge.custom.event.sender" + span2 = create_inferred_span(event2, ctx) + self.assertEqual(span2.get_tag("operation_name"), "aws.eventbridge") + self.assertEqual(span2.service, "eventbridge") + + class TestInferredSpans(unittest.TestCase): def test_create_inferred_span_from_api_gateway_event(self): event_sample_source = "api-gateway" From 8bde3aef7af9c4907d7e4db9a4c3e41c9435007b Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez Date: Wed, 17 May 2023 16:20:32 -0700 Subject: [PATCH 02/10] use colon as delimiter --- datadog_lambda/tracing.py | 67 ++++++++++++-------- tests/test_tracing.py | 126 +++++++++++++++++++++++++------------- 2 files changed, 127 insertions(+), 66 deletions(-) diff --git a/datadog_lambda/tracing.py b/datadog_lambda/tracing.py index eaf205a2..0bc8e6f5 100644 --- a/datadog_lambda/tracing.py +++ b/datadog_lambda/tracing.py @@ -690,7 +690,7 @@ def get_service_mapping(service_name): mapping = {} for entry in service_mapping.split(","): - parts = entry.split("|") + parts = entry.split(":") if len(parts) == 2: key, value = parts mapping[key.strip()] = value.strip() @@ -700,15 +700,16 @@ def get_service_mapping(service_name): def create_inferred_span_from_lambda_function_url_event(event, context): request_context = event.get("requestContext") + api_id = request_context.get("apiId") domain = request_context.get("domainName") # Attempt to get the service mapping for the domain so that we don't remap all apigw services # Allows the customer to have more fine-grained control - domain_mapping = get_service_mapping(str(domain)) + apiid_mapping = get_service_mapping(str(api_id)) # If the domain mapping is not found, # attempt to get the service mapping for 'lambda_api_gateway' - lambda_url_mapping = None if domain_mapping else get_service_mapping("lambda_url") + lambda_url_mapping = None if apiid_mapping else get_service_mapping("lambda_url") # If neither mapping is found, default to the domain name - service_name = domain_mapping or lambda_url_mapping or domain + service_name = apiid_mapping or lambda_url_mapping or domain method = request_context.get("http", {}).get("method") path = request_context.get("http", {}).get("path") @@ -812,6 +813,17 @@ def create_inferred_span_from_api_gateway_websocket_event( request_context = event.get("requestContext") domain = request_context.get("domainName") endpoint = request_context.get("routeKey") + api_id = request_context.get("apiId") + # Attempt to get the service mapping for the domain so that we don't remap all apigw services + # Allows the customer to have more fine-grained control + apiid_mapping = get_service_mapping(str(api_id)) + # If the domain mapping is not found, + # attempt to get the service mapping for 'lambda_api_gateway_websocket' + api_gateway_mapping = ( + None if apiid_mapping else get_service_mapping("lambda_api_gateway_websocket") + ) + # If neither mapping is found, default to the domain name + service_name = apiid_mapping or api_gateway_mapping or domain tags = { "operation_name": "aws.apigateway.websocket", "http.url": domain + endpoint, @@ -831,7 +843,7 @@ def create_inferred_span_from_api_gateway_websocket_event( else: InferredSpanInfo.set_tags(tags, tag_source="self", synchronicity="sync") args = { - "service": domain, + "service": service_name, "resource": endpoint, "span_type": "web", } @@ -860,16 +872,17 @@ def create_inferred_span_from_api_gateway_event( ): request_context = event.get("requestContext") domain = request_context.get("domainName", "") + api_id = request_context.get("apiId") # Attempt to get the service mapping for the domain so that we don't remap all apigw services # Allows the customer to have more fine-grained control - domain_mapping = get_service_mapping(str(domain)) + apiid_mapping = get_service_mapping(str(api_id)) # If the domain mapping is not found, # attempt to get the service mapping for 'lambda_api_gateway' api_gateway_mapping = ( - None if domain_mapping else get_service_mapping("lambda_api_gateway") + None if apiid_mapping else get_service_mapping("lambda_api_gateway") ) # If neither mapping is found, default to the domain name - service_name = domain_mapping or api_gateway_mapping or domain + service_name = apiid_mapping or api_gateway_mapping or domain method = event.get("httpMethod") path = event.get("path") @@ -921,6 +934,17 @@ def create_inferred_span_from_http_api_event( ): request_context = event.get("requestContext") domain = request_context.get("domainName") + api_id = request_context.get("apiId") + # Attempt to get the service mapping for the domain so that we don't remap all apigw services + # Allows the customer to have more fine-grained control + apiid_mapping = get_service_mapping(str(api_id)) + # If the domain mapping is not found, + # attempt to get the service mapping for 'api_gateway_mapping' + api_gateway_mapping = ( + None if apiid_mapping else get_service_mapping("lambda_http_api") + ) + # If neither mapping is found, default to the domain name + service_name = apiid_mapping or api_gateway_mapping or domain method = request_context.get("http", {}).get("method") path = event.get("rawPath") resource = "{0} {1}".format(method, path) @@ -944,7 +968,7 @@ def create_inferred_span_from_http_api_event( else: InferredSpanInfo.set_tags(tags, tag_source="self", synchronicity="sync") args = { - "service": domain, + "service": service_name, "resource": resource, "span_type": "http", } @@ -969,7 +993,7 @@ def create_inferred_span_from_sqs_event(event, context): event_record = get_first_record(event) event_source_arn = event_record.get("eventSourceARN") queue_name = event_source_arn.split(":")[-1] - queue_mapping = get_service_mapping(str(event_source_arn)) + queue_mapping = get_service_mapping(str(queue_name)) # If the domain mapping is not found, attempt to get the service mapping for 'sqs' sqs_mapping = None if queue_mapping else get_service_mapping("lambda_sqs") @@ -1031,7 +1055,7 @@ def create_inferred_span_from_sns_event(event, context): sns_message = event_record.get("Sns") topic_arn = event_record.get("Sns", {}).get("TopicArn") topic_name = topic_arn.split(":")[-1] - queue_mapping = get_service_mapping(str(topic_arn)) + queue_mapping = get_service_mapping(str(topic_name)) # If the domain mapping is not found, attempt to get the service mapping for 'sns' sns_mapping = None if queue_mapping else get_service_mapping("lambda_sns") @@ -1075,7 +1099,7 @@ def create_inferred_span_from_kinesis_event(event, context): event_id = event_record.get("eventID") stream_name = event_source_arn.split(":")[-1] shard_id = event_id.split(":")[0] - stream_name_mapping = get_service_mapping(str(event_source_arn)) + stream_name_mapping = get_service_mapping(str(stream_name)) kinesis_mapping = ( None if stream_name_mapping else get_service_mapping("lambda_kinesis") ) @@ -1114,24 +1138,18 @@ def create_inferred_span_from_kinesis_event(event, context): def create_inferred_span_from_dynamodb_event(event, context): event_record = get_first_record(event) event_source_arn = event_record.get("eventSourceARN") - parts = event_source_arn.split("/") if event_source_arn else [None, None] - - # parts now contains all split elements - table_arn_prefix, table_name, *rest = parts - full_table_arn = None - if table_arn_prefix and table_name: - full_table_arn = f"{table_arn_prefix}/{table_name}" + table_name = event_source_arn.split("/")[1] # Attempt to get the service mapping for the domain so that we don't remap all apigw services # Allows the customer to have more fine grained control - table_arn_mapping = get_service_mapping(full_table_arn) if full_table_arn else None + table_mapping = get_service_mapping(str(table_name)) # If the domain mapping is not found, attempt to get the service mapping for 'dynamodb' dynamo_db_mapping = ( - None if table_arn_mapping else get_service_mapping("lambda_dynamodb") + None if table_mapping else get_service_mapping("lambda_dynamodb") ) # If neither mapping is found, default to "dynamodb" - service_name = table_arn_mapping or dynamo_db_mapping or "dynamodb" + service_name = table_mapping or dynamo_db_mapping or "dynamodb" dynamodb_message = event_record.get("dynamodb") tags = { @@ -1166,8 +1184,7 @@ def create_inferred_span_from_dynamodb_event(event, context): def create_inferred_span_from_s3_event(event, context): event_record = get_first_record(event) bucket_name = event_record.get("s3", {}).get("bucket", {}).get("name") - bucket_arn = event_record.get("s3", {}).get("bucket", {}).get("arn") - bucket_name_mapping = get_service_mapping(str(bucket_arn)) + bucket_name_mapping = get_service_mapping(str(bucket_name)) # If the domain mapping is not found, attempt to get the service mapping for 's3' s3_mapping = None if bucket_name_mapping else get_service_mapping("lambda_s3") @@ -1179,7 +1196,7 @@ def create_inferred_span_from_s3_event(event, context): "resource_names": bucket_name, "event_name": event_record.get("eventName"), "bucketname": bucket_name, - "bucket_arn": bucket_arn, + "bucket_arn": event_record.get("s3", {}).get("bucket", {}).get("arn"), "object_key": event_record.get("s3", {}).get("object", {}).get("key"), "object_size": str(event_record.get("s3", {}).get("object", {}).get("size")), "object_etag": event_record.get("s3", {}).get("object", {}).get("eTag"), diff --git a/tests/test_tracing.py b/tests/test_tracing.py index ccceb6bd..66ceb89b 100644 --- a/tests/test_tracing.py +++ b/tests/test_tracing.py @@ -739,7 +739,7 @@ def tearDown(self): del os.environ["DD_SERVICE_MAPPING"] def test_remaps_all_inferred_span_service_names_from_api_gateway_event(self): - os.environ["DD_SERVICE_MAPPING"] = "lambda_api_gateway|new-name" + os.environ["DD_SERVICE_MAPPING"] = "lambda_api_gateway:new-name" event_sample_source = "api-gateway" test_file = event_samples + event_sample_source + ".json" @@ -766,9 +766,7 @@ def test_remaps_all_inferred_span_service_names_from_api_gateway_event(self): self.assertEqual(span2.service, "new-name") def test_remaps_specific_inferred_span_service_names_from_api_gateway_event(self): - os.environ[ - "DD_SERVICE_MAPPING" - ] = "70ixmpl4fl.execute-api.us-east-2.amazonaws.com|new-name" + os.environ["DD_SERVICE_MAPPING"] = "1234567890:new-name" event_sample_source = "api-gateway" test_file = event_samples + event_sample_source + ".json" @@ -787,15 +785,73 @@ def test_remaps_specific_inferred_span_service_names_from_api_gateway_event(self original_event ) # Create a deep copy so we don't modify the original event # Modify event2 as necessary - event2["requestContext"][ - "domainName" - ] = "different.execute-api.us-east-2.amazonaws.com" + event2["requestContext"]["apiId"] = "different" span2 = create_inferred_span(event2, ctx) self.assertEqual(span2.get_tag("operation_name"), "aws.apigateway.rest") - self.assertEqual(span2.service, "different.execute-api.us-east-2.amazonaws.com") + self.assertEqual( + span2.service, "70ixmpl4fl.execute-api.us-east-2.amazonaws.com" + ) + + def test_remaps_specific_inferred_span_service_names_from_api_gateway_websocket_event( + self, + ): + os.environ["DD_SERVICE_MAPPING"] = "p62c47itsb:new-name" + + event_sample_source = "api-gateway-websocket-default" + test_file = event_samples + event_sample_source + ".json" + with open(test_file, "r") as event: + original_event = json.load(event) + + ctx = get_mock_context() + ctx.aws_request_id = "123" + + span1 = create_inferred_span(original_event, ctx) + self.assertEqual(span1.get_tag("operation_name"), "aws.apigateway.websocket") + self.assertEqual(span1.service, "new-name") + + # Testing the second event + event2 = copy.deepcopy( + original_event + ) # Create a deep copy so we don't modify the original event + # Modify event2 as necessary + event2["requestContext"]["apiId"] = "different" + span2 = create_inferred_span(event2, ctx) + self.assertEqual(span2.get_tag("operation_name"), "aws.apigateway.websocket") + self.assertEqual( + span2.service, "p62c47itsb.execute-api.eu-west-1.amazonaws.com" + ) + + def test_remapQs_specific_inferred_span_service_names_from_api_gateway_http_event( + self, + ): + os.environ["DD_SERVICE_MAPPING"] = "x02yirxc7a:new-name" + + event_sample_source = "http-api" + test_file = event_samples + event_sample_source + ".json" + with open(test_file, "r") as event: + original_event = json.load(event) + + ctx = get_mock_context() + ctx.aws_request_id = "123" + + span1 = create_inferred_span(original_event, ctx) + self.assertEqual(span1.get_tag("operation_name"), "aws.httpapi") + self.assertEqual(span1.service, "new-name") + + # Testing the second event + event2 = copy.deepcopy( + original_event + ) # Create a deep copy so we don't modify the original event + # Modify event2 as necessary + event2["requestContext"]["apiId"] = "different" + span2 = create_inferred_span(event2, ctx) + self.assertEqual(span2.get_tag("operation_name"), "aws.httpapi") + self.assertEqual( + span2.service, "x02yirxc7a.execute-api.eu-west-1.amazonaws.com" + ) def test_remaps_all_inferred_span_service_names_from_lambda_url_event(self): - os.environ["DD_SERVICE_MAPPING"] = "lambda_url|new-name" + os.environ["DD_SERVICE_MAPPING"] = "lambda_url:new-name" event_sample_source = "lambda-url" test_file = event_samples + event_sample_source + ".json" @@ -822,9 +878,7 @@ def test_remaps_all_inferred_span_service_names_from_lambda_url_event(self): self.assertEqual(span2.service, "new-name") def test_remaps_specific_inferred_span_service_names_from_lambda_url_event(self): - os.environ[ - "DD_SERVICE_MAPPING" - ] = "a8hyhsshac.lambda-url.eu-south-1.amazonaws.com|new-name" + os.environ["DD_SERVICE_MAPPING"] = "a8hyhsshac:new-name" event_sample_source = "lambda-url" test_file = event_samples + event_sample_source + ".json" @@ -843,15 +897,15 @@ def test_remaps_specific_inferred_span_service_names_from_lambda_url_event(self) original_event ) # Create a deep copy so we don't modify the original event # Modify event2 as necessary - event2["requestContext"][ - "domainName" - ] = "different.lambda-url.eu-south-1.amazonaws.com" + event2["requestContext"]["apiId"] = "different" span2 = create_inferred_span(event2, ctx) self.assertEqual(span2.get_tag("operation_name"), "aws.lambda.url") - self.assertEqual(span2.service, "different.lambda-url.eu-south-1.amazonaws.com") + self.assertEqual( + span2.service, "a8hyhsshac.lambda-url.eu-south-1.amazonaws.com" + ) def test_remaps_all_inferred_span_service_names_from_sqs_event(self): - os.environ["DD_SERVICE_MAPPING"] = "lambda_sqs|new-name" + os.environ["DD_SERVICE_MAPPING"] = "lambda_sqs:new-name" event_sample_source = "sqs-string-msg-attribute" test_file = event_samples + event_sample_source + ".json" @@ -875,9 +929,7 @@ def test_remaps_all_inferred_span_service_names_from_sqs_event(self): self.assertEqual(span2.service, "new-name") def test_remaps_specific_inferred_span_service_names_from_sqs_event(self): - os.environ[ - "DD_SERVICE_MAPPING" - ] = "arn:aws:sqs:eu-west-1:601427279990:InferredSpansQueueNode|new-name" + os.environ["DD_SERVICE_MAPPING"] = "InferredSpansQueueNode:new-name" event_sample_source = "sqs-string-msg-attribute" test_file = event_samples + event_sample_source + ".json" @@ -901,7 +953,7 @@ def test_remaps_specific_inferred_span_service_names_from_sqs_event(self): self.assertEqual(span2.service, "sqs") def test_remaps_all_inferred_span_service_names_from_sns_event(self): - os.environ["DD_SERVICE_MAPPING"] = "lambda_sns|new-name" + os.environ["DD_SERVICE_MAPPING"] = "lambda_sns:new-name" event_sample_source = "sns-string-msg-attribute" test_file = event_samples + event_sample_source + ".json" @@ -925,9 +977,7 @@ def test_remaps_all_inferred_span_service_names_from_sns_event(self): self.assertEqual(span2.service, "new-name") def test_remaps_specific_inferred_span_service_names_from_sns_event(self): - os.environ[ - "DD_SERVICE_MAPPING" - ] = "arn:aws:sns:eu-west-1:601427279990:serverlessTracingTopicPy|new-name" + os.environ["DD_SERVICE_MAPPING"] = "serverlessTracingTopicPy:new-name" event_sample_source = "sns-string-msg-attribute" test_file = event_samples + event_sample_source + ".json" @@ -951,7 +1001,7 @@ def test_remaps_specific_inferred_span_service_names_from_sns_event(self): self.assertEqual(span2.service, "sns") def test_remaps_all_inferred_span_service_names_from_kinesis_event(self): - os.environ["DD_SERVICE_MAPPING"] = "lambda_kinesis|new-name" + os.environ["DD_SERVICE_MAPPING"] = "lambda_kinesis:new-name" event_sample_source = "kinesis" test_file = event_samples + event_sample_source + ".json" @@ -975,9 +1025,7 @@ def test_remaps_all_inferred_span_service_names_from_kinesis_event(self): self.assertEqual(span2.service, "new-name") def test_remaps_specific_inferred_span_service_names_from_kinesis_event(self): - os.environ[ - "DD_SERVICE_MAPPING" - ] = "arn:aws:kinesis:eu-west-1:601427279990:stream/kinesisStream|new-name" + os.environ["DD_SERVICE_MAPPING"] = "Different_EXAMPLE:new-name" event_sample_source = "kinesis" test_file = event_samples + event_sample_source + ".json" @@ -989,19 +1037,19 @@ def test_remaps_specific_inferred_span_service_names_from_kinesis_event(self): span1 = create_inferred_span(original_event, ctx) self.assertEqual(span1.get_tag("operation_name"), "aws.kinesis") - self.assertEqual(span1.service, "new-name") + self.assertEqual(span1.service, "kinesis") # Testing the second event event2 = copy.deepcopy(original_event) event2["Records"][0][ "eventSourceARN" - ] = "arn:aws:kinesis:eu-west-1:601427279990:stream/differentKinesisStream" + ] = "arn:aws:kinesis:eu-west-1:601427279990:stream/DifferentKinesisStream" span2 = create_inferred_span(event2, ctx) self.assertEqual(span2.get_tag("operation_name"), "aws.kinesis") self.assertEqual(span2.service, "kinesis") def test_remaps_all_inferred_span_service_names_from_s3_event(self): - os.environ["DD_SERVICE_MAPPING"] = "lambda_s3|new-name" + os.environ["DD_SERVICE_MAPPING"] = "lambda_s3:new-name" event_sample_source = "s3" test_file = event_samples + event_sample_source + ".json" @@ -1025,7 +1073,7 @@ def test_remaps_all_inferred_span_service_names_from_s3_event(self): self.assertEqual(span2.service, "new-name") def test_remaps_specific_inferred_span_service_names_from_s3_event(self): - os.environ["DD_SERVICE_MAPPING"] = "arn:aws:s3:::example-bucket|new-name" + os.environ["DD_SERVICE_MAPPING"] = "example-bucket:new-name" event_sample_source = "s3" test_file = event_samples + event_sample_source + ".json" @@ -1041,15 +1089,13 @@ def test_remaps_specific_inferred_span_service_names_from_s3_event(self): # Testing the second event event2 = copy.deepcopy(original_event) - event2["Records"][0]["s3"]["bucket"][ - "arn" - ] = "arn:aws:s3:::different-example-bucket" + event2["Records"][0]["s3"]["bucket"]["name"] = "different-example-bucket" span2 = create_inferred_span(event2, ctx) self.assertEqual(span2.get_tag("operation_name"), "aws.s3") self.assertEqual(span2.service, "s3") def test_remaps_all_inferred_span_service_names_from_dynamodb_event(self): - os.environ["DD_SERVICE_MAPPING"] = "lambda_dynamodb|new-name" + os.environ["DD_SERVICE_MAPPING"] = "lambda_dynamodb:new-name" event_sample_source = "dynamodb" test_file = event_samples + event_sample_source + ".json" @@ -1073,9 +1119,7 @@ def test_remaps_all_inferred_span_service_names_from_dynamodb_event(self): self.assertEqual(span2.service, "new-name") def test_remaps_specific_inferred_span_service_names_from_dynamodb_event(self): - os.environ[ - "DD_SERVICE_MAPPING" - ] = "arn:aws:dynamodb:us-east-1:123456789012:table/ExampleTableWithStream|new-name" + os.environ["DD_SERVICE_MAPPING"] = "ExampleTableWithStream:new-name" event_sample_source = "dynamodb" test_file = event_samples + event_sample_source + ".json" @@ -1099,7 +1143,7 @@ def test_remaps_specific_inferred_span_service_names_from_dynamodb_event(self): self.assertEqual(span2.service, "dynamodb") def test_remaps_all_inferred_span_service_names_from_eventbridge_event(self): - os.environ["DD_SERVICE_MAPPING"] = "lambda_eventbridge|new-name" + os.environ["DD_SERVICE_MAPPING"] = "lambda_eventbridge:new-name" event_sample_source = "eventbridge-custom" test_file = event_samples + event_sample_source + ".json" @@ -1121,7 +1165,7 @@ def test_remaps_all_inferred_span_service_names_from_eventbridge_event(self): self.assertEqual(span2.service, "new-name") def test_remaps_specific_inferred_span_service_names_from_eventbridge_event(self): - os.environ["DD_SERVICE_MAPPING"] = "eventbridge.custom.event.sender|new-name" + os.environ["DD_SERVICE_MAPPING"] = "eventbridge.custom.event.sender:new-name" event_sample_source = "eventbridge-custom" test_file = event_samples + event_sample_source + ".json" From abcc0a3d5672f1d9a17da651fe34f1f25ee8ffa5 Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez Date: Wed, 17 May 2023 18:35:02 -0700 Subject: [PATCH 03/10] pin urllib3 to below 2.0.0 --- poetry.lock | 680 +++++++++++++++++++++++++++++-------------------- pyproject.toml | 2 +- 2 files changed, 402 insertions(+), 280 deletions(-) diff --git a/poetry.lock b/poetry.lock index c1946f57..69c0675b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,38 +1,41 @@ -# This file is automatically @generated by Poetry and should not be changed by hand. +# This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand. [[package]] name = "attrs" -version = "22.2.0" +version = "23.1.0" description = "Classes Without Boilerplate" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "attrs-22.2.0-py3-none-any.whl", hash = "sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836"}, - {file = "attrs-22.2.0.tar.gz", hash = "sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99"}, + {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, + {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, ] +[package.dependencies] +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} + [package.extras] -cov = ["attrs[tests]", "coverage-enable-subprocess", "coverage[toml] (>=5.3)"] -dev = ["attrs[docs,tests]"] -docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope.interface"] -tests = ["attrs[tests-no-zope]", "zope.interface"] -tests-no-zope = ["cloudpickle", "cloudpickle", "hypothesis", "hypothesis", "mypy (>=0.971,<0.990)", "mypy (>=0.971,<0.990)", "pympler", "pympler", "pytest (>=4.3.0)", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-mypy-plugins", "pytest-xdist[psutil]", "pytest-xdist[psutil]"] +cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] +dev = ["attrs[docs,tests]", "pre-commit"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] +tests = ["attrs[tests-no-zope]", "zope-interface"] +tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] [[package]] name = "boto3" -version = "1.26.41" +version = "1.26.135" description = "The AWS SDK for Python" category = "main" optional = true python-versions = ">= 3.7" files = [ - {file = "boto3-1.26.41-py3-none-any.whl", hash = "sha256:05a5ce3af2d7419e39d93498c7f56fd5c2cc17870c92c4abc75659553b0b16de"}, - {file = "boto3-1.26.41.tar.gz", hash = "sha256:8cbea352f28ec6b241f348356bcb8f331fc433bec3ad76ebf6194227f1a7f613"}, + {file = "boto3-1.26.135-py3-none-any.whl", hash = "sha256:ba7ca9215a1026620741273da10d0d3cceb9f7649f7c101e616a287071826f9d"}, + {file = "boto3-1.26.135.tar.gz", hash = "sha256:23523d5d6aa51bba2461d67f6eb458d83b6a52d18e3d953b1ce71209b66462ec"}, ] [package.dependencies] -botocore = ">=1.29.41,<1.30.0" +botocore = ">=1.29.135,<1.30.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.6.0,<0.7.0" @@ -41,14 +44,14 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.29.41" +version = "1.29.135" description = "Low-level, data-driven core of boto 3." category = "main" optional = true python-versions = ">= 3.7" files = [ - {file = "botocore-1.29.41-py3-none-any.whl", hash = "sha256:b670b7f8958a2908167081efb6ea39794bf61d618be729984629a63d85cf8bfe"}, - {file = "botocore-1.29.41.tar.gz", hash = "sha256:78761227d986d393956b6d08fdadcfe142748828e0e9db33f2f4c42a482dcd35"}, + {file = "botocore-1.29.135-py3-none-any.whl", hash = "sha256:06502a4473924ef60ac0de908385a5afab9caee6c5b49cf6a330fab0d76ddf5f"}, + {file = "botocore-1.29.135.tar.gz", hash = "sha256:0c61d4e5e04fe5329fa65da6b31492ef9d0d5174d72fc2af69de2ed0f87804ca"}, ] [package.dependencies] @@ -57,7 +60,7 @@ python-dateutil = ">=2.1,<3.0.0" urllib3 = ">=1.25.4,<1.27" [package.extras] -crt = ["awscrt (==0.15.3)"] +crt = ["awscrt (==0.16.9)"] [[package]] name = "bytecode" @@ -73,14 +76,14 @@ files = [ [[package]] name = "bytecode" -version = "0.14.0" +version = "0.14.1" description = "Python module to generate and modify bytecode" category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "bytecode-0.14.0-py3-none-any.whl", hash = "sha256:f7b7cbed3239acee036d6c0f9d04286b100921114601bf844ae569b95bf91a9f"}, - {file = "bytecode-0.14.0.tar.gz", hash = "sha256:d41ad53c657ba0bef1cb4828d9d6e450766e31cb66c6f91fc1851f052889d1b7"}, + {file = "bytecode-0.14.1-py3-none-any.whl", hash = "sha256:00a8f87d9e2385d445c9ee630a1860b75b4a93d646c6dfb15e769bec827609cc"}, + {file = "bytecode-0.14.1.tar.gz", hash = "sha256:82e99af6b0f9e71ba9c5daba11f370fc93adf97d423e93a22659dfc7895fb6a2"}, ] [package.dependencies] @@ -105,90 +108,160 @@ typing_extensions = {version = "*", markers = "python_version < \"3.8\""} [[package]] name = "certifi" -version = "2022.12.7" +version = "2023.5.7" description = "Python package for providing Mozilla's CA Bundle." category = "main" optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"}, - {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"}, + {file = "certifi-2023.5.7-py3-none-any.whl", hash = "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716"}, + {file = "certifi-2023.5.7.tar.gz", hash = "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7"}, ] [[package]] name = "charset-normalizer" -version = "2.1.1" +version = "3.1.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." category = "main" optional = false -python-versions = ">=3.6.0" -files = [ - {file = "charset-normalizer-2.1.1.tar.gz", hash = "sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845"}, - {file = "charset_normalizer-2.1.1-py3-none-any.whl", hash = "sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f"}, +python-versions = ">=3.7.0" +files = [ + {file = "charset-normalizer-3.1.0.tar.gz", hash = "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-win32.whl", hash = "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-win32.whl", hash = "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-win32.whl", hash = "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-win32.whl", hash = "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-win32.whl", hash = "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b"}, + {file = "charset_normalizer-3.1.0-py3-none-any.whl", hash = "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d"}, ] -[package.extras] -unicode-backport = ["unicodedata2"] - [[package]] name = "coverage" -version = "7.0.1" +version = "7.2.5" description = "Code coverage measurement for Python" category = "main" optional = true python-versions = ">=3.7" files = [ - {file = "coverage-7.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b3695c4f4750bca943b3e1f74ad4be8d29e4aeab927d50772c41359107bd5d5c"}, - {file = "coverage-7.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fa6a5a224b7f4cfb226f4fc55a57e8537fcc096f42219128c2c74c0e7d0953e1"}, - {file = "coverage-7.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74f70cd92669394eaf8d7756d1b195c8032cf7bbbdfce3bc489d4e15b3b8cf73"}, - {file = "coverage-7.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b66bb21a23680dee0be66557dc6b02a3152ddb55edf9f6723fa4a93368f7158d"}, - {file = "coverage-7.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d87717959d4d0ee9db08a0f1d80d21eb585aafe30f9b0a54ecf779a69cb015f6"}, - {file = "coverage-7.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:854f22fa361d1ff914c7efa347398374cc7d567bdafa48ac3aa22334650dfba2"}, - {file = "coverage-7.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:1e414dc32ee5c3f36544ea466b6f52f28a7af788653744b8570d0bf12ff34bc0"}, - {file = "coverage-7.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6c5ad996c6fa4d8ed669cfa1e8551348729d008a2caf81489ab9ea67cfbc7498"}, - {file = "coverage-7.0.1-cp310-cp310-win32.whl", hash = "sha256:691571f31ace1837838b7e421d3a09a8c00b4aac32efacb4fc9bd0a5c647d25a"}, - {file = "coverage-7.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:89caf4425fe88889e2973a8e9a3f6f5f9bbe5dd411d7d521e86428c08a873a4a"}, - {file = "coverage-7.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:63d56165a7c76265468d7e0c5548215a5ba515fc2cba5232d17df97bffa10f6c"}, - {file = "coverage-7.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4f943a3b2bc520102dd3e0bb465e1286e12c9a54f58accd71b9e65324d9c7c01"}, - {file = "coverage-7.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:830525361249dc4cd013652b0efad645a385707a5ae49350c894b67d23fbb07c"}, - {file = "coverage-7.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd1b9c5adc066db699ccf7fa839189a649afcdd9e02cb5dc9d24e67e7922737d"}, - {file = "coverage-7.0.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e00c14720b8b3b6c23b487e70bd406abafc976ddc50490f645166f111c419c39"}, - {file = "coverage-7.0.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6d55d840e1b8c0002fce66443e124e8581f30f9ead2e54fbf6709fb593181f2c"}, - {file = "coverage-7.0.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:66b18c3cf8bbab0cce0d7b9e4262dc830e93588986865a8c78ab2ae324b3ed56"}, - {file = "coverage-7.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:12a5aa77783d49e05439fbe6e6b427484f8a0f9f456b46a51d8aac022cfd024d"}, - {file = "coverage-7.0.1-cp311-cp311-win32.whl", hash = "sha256:b77015d1cb8fe941be1222a5a8b4e3fbca88180cfa7e2d4a4e58aeabadef0ab7"}, - {file = "coverage-7.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:fb992c47cb1e5bd6a01e97182400bcc2ba2077080a17fcd7be23aaa6e572e390"}, - {file = "coverage-7.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e78e9dcbf4f3853d3ae18a8f9272111242531535ec9e1009fa8ec4a2b74557dc"}, - {file = "coverage-7.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e60bef2e2416f15fdc05772bf87db06c6a6f9870d1db08fdd019fbec98ae24a9"}, - {file = "coverage-7.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9823e4789ab70f3ec88724bba1a203f2856331986cd893dedbe3e23a6cfc1e4e"}, - {file = "coverage-7.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9158f8fb06747ac17bd237930c4372336edc85b6e13bdc778e60f9d685c3ca37"}, - {file = "coverage-7.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:486ee81fa694b4b796fc5617e376326a088f7b9729c74d9defa211813f3861e4"}, - {file = "coverage-7.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1285648428a6101b5f41a18991c84f1c3959cee359e51b8375c5882fc364a13f"}, - {file = "coverage-7.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2c44fcfb3781b41409d0f060a4ed748537557de9362a8a9282182fafb7a76ab4"}, - {file = "coverage-7.0.1-cp37-cp37m-win32.whl", hash = "sha256:d6814854c02cbcd9c873c0f3286a02e3ac1250625cca822ca6bc1018c5b19f1c"}, - {file = "coverage-7.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:f66460f17c9319ea4f91c165d46840314f0a7c004720b20be58594d162a441d8"}, - {file = "coverage-7.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9b373c9345c584bb4b5f5b8840df7f4ab48c4cbb7934b58d52c57020d911b856"}, - {file = "coverage-7.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d3022c3007d3267a880b5adcf18c2a9bf1fc64469b394a804886b401959b8742"}, - {file = "coverage-7.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92651580bd46519067e36493acb394ea0607b55b45bd81dd4e26379ed1871f55"}, - {file = "coverage-7.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3cfc595d2af13856505631be072835c59f1acf30028d1c860b435c5fc9c15b69"}, - {file = "coverage-7.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b4b3a4d9915b2be879aff6299c0a6129f3d08a775d5a061f503cf79571f73e4"}, - {file = "coverage-7.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b6f22bb64cc39bcb883e5910f99a27b200fdc14cdd79df8696fa96b0005c9444"}, - {file = "coverage-7.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:72d1507f152abacea81f65fee38e4ef3ac3c02ff8bc16f21d935fd3a8a4ad910"}, - {file = "coverage-7.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0a79137fc99815fff6a852c233628e735ec15903cfd16da0f229d9c4d45926ab"}, - {file = "coverage-7.0.1-cp38-cp38-win32.whl", hash = "sha256:b3763e7fcade2ff6c8e62340af9277f54336920489ceb6a8cd6cc96da52fcc62"}, - {file = "coverage-7.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:09f6b5a8415b6b3e136d5fec62b552972187265cb705097bf030eb9d4ffb9b60"}, - {file = "coverage-7.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:978258fec36c154b5e250d356c59af7d4c3ba02bef4b99cda90b6029441d797d"}, - {file = "coverage-7.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:19ec666533f0f70a0993f88b8273057b96c07b9d26457b41863ccd021a043b9a"}, - {file = "coverage-7.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cfded268092a84605f1cc19e5c737f9ce630a8900a3589e9289622db161967e9"}, - {file = "coverage-7.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07bcfb1d8ac94af886b54e18a88b393f6a73d5959bb31e46644a02453c36e475"}, - {file = "coverage-7.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:397b4a923cc7566bbc7ae2dfd0ba5a039b61d19c740f1373791f2ebd11caea59"}, - {file = "coverage-7.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:aec2d1515d9d39ff270059fd3afbb3b44e6ec5758af73caf18991807138c7118"}, - {file = "coverage-7.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c20cfebcc149a4c212f6491a5f9ff56f41829cd4f607b5be71bb2d530ef243b1"}, - {file = "coverage-7.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:fd556ff16a57a070ce4f31c635953cc44e25244f91a0378c6e9bdfd40fdb249f"}, - {file = "coverage-7.0.1-cp39-cp39-win32.whl", hash = "sha256:b9ea158775c7c2d3e54530a92da79496fb3fb577c876eec761c23e028f1e216c"}, - {file = "coverage-7.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:d1991f1dd95eba69d2cd7708ff6c2bbd2426160ffc73c2b81f617a053ebcb1a8"}, - {file = "coverage-7.0.1-pp37.pp38.pp39-none-any.whl", hash = "sha256:3dd4ee135e08037f458425b8842d24a95a0961831a33f89685ff86b77d378f89"}, - {file = "coverage-7.0.1.tar.gz", hash = "sha256:a4a574a19eeb67575a5328a5760bbbb737faa685616586a9f9da4281f940109c"}, + {file = "coverage-7.2.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:883123d0bbe1c136f76b56276074b0c79b5817dd4238097ffa64ac67257f4b6c"}, + {file = "coverage-7.2.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d2fbc2a127e857d2f8898aaabcc34c37771bf78a4d5e17d3e1f5c30cd0cbc62a"}, + {file = "coverage-7.2.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f3671662dc4b422b15776cdca89c041a6349b4864a43aa2350b6b0b03bbcc7f"}, + {file = "coverage-7.2.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780551e47d62095e088f251f5db428473c26db7829884323e56d9c0c3118791a"}, + {file = "coverage-7.2.5-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:066b44897c493e0dcbc9e6a6d9f8bbb6607ef82367cf6810d387c09f0cd4fe9a"}, + {file = "coverage-7.2.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b9a4ee55174b04f6af539218f9f8083140f61a46eabcaa4234f3c2a452c4ed11"}, + {file = "coverage-7.2.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:706ec567267c96717ab9363904d846ec009a48d5f832140b6ad08aad3791b1f5"}, + {file = "coverage-7.2.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ae453f655640157d76209f42c62c64c4d4f2c7f97256d3567e3b439bd5c9b06c"}, + {file = "coverage-7.2.5-cp310-cp310-win32.whl", hash = "sha256:f81c9b4bd8aa747d417407a7f6f0b1469a43b36a85748145e144ac4e8d303cb5"}, + {file = "coverage-7.2.5-cp310-cp310-win_amd64.whl", hash = "sha256:dc945064a8783b86fcce9a0a705abd7db2117d95e340df8a4333f00be5efb64c"}, + {file = "coverage-7.2.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:40cc0f91c6cde033da493227797be2826cbf8f388eaa36a0271a97a332bfd7ce"}, + {file = "coverage-7.2.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a66e055254a26c82aead7ff420d9fa8dc2da10c82679ea850d8feebf11074d88"}, + {file = "coverage-7.2.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c10fbc8a64aa0f3ed136b0b086b6b577bc64d67d5581acd7cc129af52654384e"}, + {file = "coverage-7.2.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9a22cbb5ede6fade0482111fa7f01115ff04039795d7092ed0db43522431b4f2"}, + {file = "coverage-7.2.5-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:292300f76440651529b8ceec283a9370532f4ecba9ad67d120617021bb5ef139"}, + {file = "coverage-7.2.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:7ff8f3fb38233035028dbc93715551d81eadc110199e14bbbfa01c5c4a43f8d8"}, + {file = "coverage-7.2.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:a08c7401d0b24e8c2982f4e307124b671c6736d40d1c39e09d7a8687bddf83ed"}, + {file = "coverage-7.2.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ef9659d1cda9ce9ac9585c045aaa1e59223b143f2407db0eaee0b61a4f266fb6"}, + {file = "coverage-7.2.5-cp311-cp311-win32.whl", hash = "sha256:30dcaf05adfa69c2a7b9f7dfd9f60bc8e36b282d7ed25c308ef9e114de7fc23b"}, + {file = "coverage-7.2.5-cp311-cp311-win_amd64.whl", hash = "sha256:97072cc90f1009386c8a5b7de9d4fc1a9f91ba5ef2146c55c1f005e7b5c5e068"}, + {file = "coverage-7.2.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:bebea5f5ed41f618797ce3ffb4606c64a5de92e9c3f26d26c2e0aae292f015c1"}, + {file = "coverage-7.2.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:828189fcdda99aae0d6bf718ea766b2e715eabc1868670a0a07bf8404bf58c33"}, + {file = "coverage-7.2.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e8a95f243d01ba572341c52f89f3acb98a3b6d1d5d830efba86033dd3687ade"}, + {file = "coverage-7.2.5-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8834e5f17d89e05697c3c043d3e58a8b19682bf365048837383abfe39adaed5"}, + {file = "coverage-7.2.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d1f25ee9de21a39b3a8516f2c5feb8de248f17da7eead089c2e04aa097936b47"}, + {file = "coverage-7.2.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1637253b11a18f453e34013c665d8bf15904c9e3c44fbda34c643fbdc9d452cd"}, + {file = "coverage-7.2.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8e575a59315a91ccd00c7757127f6b2488c2f914096077c745c2f1ba5b8c0969"}, + {file = "coverage-7.2.5-cp37-cp37m-win32.whl", hash = "sha256:509ecd8334c380000d259dc66feb191dd0a93b21f2453faa75f7f9cdcefc0718"}, + {file = "coverage-7.2.5-cp37-cp37m-win_amd64.whl", hash = "sha256:12580845917b1e59f8a1c2ffa6af6d0908cb39220f3019e36c110c943dc875b0"}, + {file = "coverage-7.2.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b5016e331b75310610c2cf955d9f58a9749943ed5f7b8cfc0bb89c6134ab0a84"}, + {file = "coverage-7.2.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:373ea34dca98f2fdb3e5cb33d83b6d801007a8074f992b80311fc589d3e6b790"}, + {file = "coverage-7.2.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a063aad9f7b4c9f9da7b2550eae0a582ffc7623dca1c925e50c3fbde7a579771"}, + {file = "coverage-7.2.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38c0a497a000d50491055805313ed83ddba069353d102ece8aef5d11b5faf045"}, + {file = "coverage-7.2.5-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2b3b05e22a77bb0ae1a3125126a4e08535961c946b62f30985535ed40e26614"}, + {file = "coverage-7.2.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0342a28617e63ad15d96dca0f7ae9479a37b7d8a295f749c14f3436ea59fdcb3"}, + {file = "coverage-7.2.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:cf97ed82ca986e5c637ea286ba2793c85325b30f869bf64d3009ccc1a31ae3fd"}, + {file = "coverage-7.2.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c2c41c1b1866b670573657d584de413df701f482574bad7e28214a2362cb1fd1"}, + {file = "coverage-7.2.5-cp38-cp38-win32.whl", hash = "sha256:10b15394c13544fce02382360cab54e51a9e0fd1bd61ae9ce012c0d1e103c813"}, + {file = "coverage-7.2.5-cp38-cp38-win_amd64.whl", hash = "sha256:a0b273fe6dc655b110e8dc89b8ec7f1a778d78c9fd9b4bda7c384c8906072212"}, + {file = "coverage-7.2.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5c587f52c81211d4530fa6857884d37f514bcf9453bdeee0ff93eaaf906a5c1b"}, + {file = "coverage-7.2.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4436cc9ba5414c2c998eaedee5343f49c02ca93b21769c5fdfa4f9d799e84200"}, + {file = "coverage-7.2.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6599bf92f33ab041e36e06d25890afbdf12078aacfe1f1d08c713906e49a3fe5"}, + {file = "coverage-7.2.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:857abe2fa6a4973f8663e039ead8d22215d31db613ace76e4a98f52ec919068e"}, + {file = "coverage-7.2.5-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6f5cab2d7f0c12f8187a376cc6582c477d2df91d63f75341307fcdcb5d60303"}, + {file = "coverage-7.2.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:aa387bd7489f3e1787ff82068b295bcaafbf6f79c3dad3cbc82ef88ce3f48ad3"}, + {file = "coverage-7.2.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:156192e5fd3dbbcb11cd777cc469cf010a294f4c736a2b2c891c77618cb1379a"}, + {file = "coverage-7.2.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bd3b4b8175c1db502adf209d06136c000df4d245105c8839e9d0be71c94aefe1"}, + {file = "coverage-7.2.5-cp39-cp39-win32.whl", hash = "sha256:ddc5a54edb653e9e215f75de377354e2455376f416c4378e1d43b08ec50acc31"}, + {file = "coverage-7.2.5-cp39-cp39-win_amd64.whl", hash = "sha256:338aa9d9883aaaad53695cb14ccdeb36d4060485bb9388446330bef9c361c252"}, + {file = "coverage-7.2.5-pp37.pp38.pp39-none-any.whl", hash = "sha256:8877d9b437b35a85c18e3c6499b23674684bf690f5d96c1006a1ef61f9fdf0f3"}, + {file = "coverage-7.2.5.tar.gz", hash = "sha256:f99ef080288f09ffc687423b8d60978cf3a465d3f404a18d1a05474bd8575a47"}, ] [package.extras] @@ -196,18 +269,17 @@ toml = ["tomli"] [[package]] name = "datadog" -version = "0.41.0" +version = "0.45.0" description = "The Datadog Python library" category = "main" optional = false -python-versions = "*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ - {file = "datadog-0.41.0-py2.py3-none-any.whl", hash = "sha256:ab79ed38fb09ff1942c341e32849c4eeaf8b2e4d467b9e6bb1c6071808f454d6"}, - {file = "datadog-0.41.0.tar.gz", hash = "sha256:3de1a43b8a8d5f6b19d162ec1b482dc5ab2636c59cf65e60589702304510a689"}, + {file = "datadog-0.45.0-py2.py3-none-any.whl", hash = "sha256:144fce48bda79484b102349f159c4ea4c7cd35361f9e0d031ddf931a922a38a4"}, + {file = "datadog-0.45.0.tar.gz", hash = "sha256:6bffed67448cb4bf5dff559fb2acee1c06e7da8612b8e2a734f278b50b396603"}, ] [package.dependencies] -decorator = ">=3.3.2" requests = ">=2.6.0" [[package]] @@ -228,81 +300,81 @@ six = "*" [[package]] name = "ddtrace" -version = "1.6.4" +version = "1.13.3" description = "Datadog APM client library" category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ - {file = "ddtrace-1.6.4-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3c4c9a18cf3270fc10801e286410c30a1a603cb848ee1f08bbd118e0b97ddfcc"}, - {file = "ddtrace-1.6.4-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:204c560719c31d3f9ff8456a4c6ca4d0d6b527c13951815cbcf1012ea48ff759"}, - {file = "ddtrace-1.6.4-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:c97a1cf8a8e50a12c6bd09f0f15e172c447ac5a5350a7bd256f6685897c9efbf"}, - {file = "ddtrace-1.6.4-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:93ad24ff023d9c364288f422e0d46eb7b866c91e6c0453a36e5a3fdbfb01a627"}, - {file = "ddtrace-1.6.4-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:6e65f860656488d6b6e005301c7138ba573b5cbf03270ec811c6d34f8aebf0b5"}, - {file = "ddtrace-1.6.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b77e7d7e2e4de5851d8ff332e63957a46a367e6e3c5c94d4ad37dcaf047f11e1"}, - {file = "ddtrace-1.6.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:96d141807d5e446c67a4dcb16178cfa25523cedd075d73dad254f13a62a1231f"}, - {file = "ddtrace-1.6.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d65e211995e379b06a809dcaa229c09a08a02b161d574ca4716d055a65d9db05"}, - {file = "ddtrace-1.6.4-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0ed65ebd21f80acccba804fe671646e2476ce5e96162b9b2bfb0b8fd417fa6fa"}, - {file = "ddtrace-1.6.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07ffa019d48175e23f1ccd449c45b0250656cbe210a0603900a981c29ae7786e"}, - {file = "ddtrace-1.6.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:5d9ab8cba1a808da3f6da7aa0303a227245d8b25617e0673a299c3e4cae16506"}, - {file = "ddtrace-1.6.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:72ddb4bfa46660d082be50ae09faec026c46a295524a3a722570c770bf632f98"}, - {file = "ddtrace-1.6.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:03e52db04d3ada8d234d050e66988b8ec559e4db57a03fd56112e50885bc2767"}, - {file = "ddtrace-1.6.4-cp310-cp310-win32.whl", hash = "sha256:aba27dd41468e06fbe0534ce45b182e7cf7fa582eb70a03fd341da63fea07032"}, - {file = "ddtrace-1.6.4-cp310-cp310-win_amd64.whl", hash = "sha256:cf0754548216361ce9de00b750b5a5ff8eb57e9fd1fd85f223b5f23cc36ba68a"}, - {file = "ddtrace-1.6.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4464d1e886450d8c2c149ced95c4ecbe4481bc80225ebc5301385d0bf450e162"}, - {file = "ddtrace-1.6.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d32a006a1919282394e9095abb92d99efbadca7fec304bf07952e2d6f90383c5"}, - {file = "ddtrace-1.6.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a121b3417c444e9bb827c6d0a0b183f1c5517a9c8769c7ca43787ec48ad08bb1"}, - {file = "ddtrace-1.6.4-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7372e54b27d4359fa6d86d664880852a96a1786304ab2580e81796889ada449b"}, - {file = "ddtrace-1.6.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb88df54546891cb738af2d00208d10ab4c391c03b489bbd6a8745f1c8a10d5c"}, - {file = "ddtrace-1.6.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:52ffa9c4324d26f58c4ddf4ca22abcc160386f53bfbdfd56bb772580a72cf958"}, - {file = "ddtrace-1.6.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:bc33cb8501db1d049160a312d9a4e68e2fb35d61fec4a3fa9665c940489246e3"}, - {file = "ddtrace-1.6.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f64498947e696efd1ff192d56f63987cd9b09beabb481e443aa802cca51eb841"}, - {file = "ddtrace-1.6.4-cp311-cp311-win32.whl", hash = "sha256:7766d7253ccab625c07203da36e10c1926d565e465897fdb34f03f532b0610b9"}, - {file = "ddtrace-1.6.4-cp311-cp311-win_amd64.whl", hash = "sha256:981cfe27a13e4347a8fdea9d7a8936b592359ad879df1de98077b1b70e5eeace"}, - {file = "ddtrace-1.6.4-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:cd25cf8e1457c94bb7fe5fc2bab700a9e22378f137cbb73a2fe847dbd2305020"}, - {file = "ddtrace-1.6.4-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:b9bfe5e83a1ea8c8673068a5218f4a80054d87eb9c3e2b581bacbdbac67a28ec"}, - {file = "ddtrace-1.6.4-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:57613420ae32d56a76d67f571210cc134368cbef17607e71b8eb66a5b1ea2d72"}, - {file = "ddtrace-1.6.4-cp35-cp35m-win32.whl", hash = "sha256:d574f29ab02b4f43bd93214891423f27145ff54c34242db6a47fc5a591e0e5d0"}, - {file = "ddtrace-1.6.4-cp35-cp35m-win_amd64.whl", hash = "sha256:89618a300428d53b25428d728bf2ba026a5e996bbd65d82917e8a47a4a0c7815"}, - {file = "ddtrace-1.6.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:ee954e1ebc8dc47328b7e145736e7b6d7167cec1d43ba661056210d08594ade8"}, - {file = "ddtrace-1.6.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cbda998fd438701a20461cd819a1d1a1d168ea7b3bcaa0ced6f41bac30ba359"}, - {file = "ddtrace-1.6.4-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fcbffb017cdeb468d083b4c07c91fa024a0652416acc35fcfabfbff366f522d2"}, - {file = "ddtrace-1.6.4-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f36f85ff84a7535fbdcbeed40d430f6d047a2cdd0c4de6dc7bc375e82708f646"}, - {file = "ddtrace-1.6.4-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0a016a8d2f666e0e677d00d1f4057035ac5dc753f9b0e4fb378dd4f7882f2ade"}, - {file = "ddtrace-1.6.4-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:0a1be96afa6df810a32cc403a0d133ad87d6c5a9eeec861b178aaa3048d47da6"}, - {file = "ddtrace-1.6.4-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:10accb64d6ad8cc5dfddbb3150c0dd1c96ed5f62161d521d264b0afbaf3f075c"}, - {file = "ddtrace-1.6.4-cp36-cp36m-win32.whl", hash = "sha256:c1c35e16c71dd22c6f21e0d4a135071237fe988082048bc361a3213031e77170"}, - {file = "ddtrace-1.6.4-cp36-cp36m-win_amd64.whl", hash = "sha256:51156177b60331c2d9b024487d25418b1d1308b4d1eaa196cf4673a649bcc057"}, - {file = "ddtrace-1.6.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:04284a33f831ec5efb396f2b7e664d326982008ef8761d4054c3d663e13166bb"}, - {file = "ddtrace-1.6.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1dd4c3743fb93228c7470f447eff1d986417298b7242e80753ec406f67288a75"}, - {file = "ddtrace-1.6.4-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88c90fbfb22b707e6ab07d5c109634c17986d8090363f1e69cc0fb43ccb77098"}, - {file = "ddtrace-1.6.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14430eda72c2d28b92b782201ea4edc6efdc8c74845a407039c1f6a4f244fb24"}, - {file = "ddtrace-1.6.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:a056086975d607acaa0377231615fa1a94c632fd4ece979f0d5554a423663e61"}, - {file = "ddtrace-1.6.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:dae04139b42b42e5eda3f544c7fe9875a5b190aeca9ce09eb01853d35a7f0054"}, - {file = "ddtrace-1.6.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:86a91dc39cc2f2a1c301e8549fb7bd84da78122d4c6ff4b60a97d89601d1c66c"}, - {file = "ddtrace-1.6.4-cp37-cp37m-win32.whl", hash = "sha256:e1efd72c2377f605dc053c763e9449b7188659190d48efb75669158db5a92844"}, - {file = "ddtrace-1.6.4-cp37-cp37m-win_amd64.whl", hash = "sha256:108c045b332a034f3e8e0df8d87b6b7a26e9e94007a8a84000f445450c11c44b"}, - {file = "ddtrace-1.6.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:121c2d6212142fb6815d2dcc56a82fb06e9e3568ee217015e6d72ec3caad7268"}, - {file = "ddtrace-1.6.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3da580615a97e61ffbf564782679b98b81ba026248926619b030d648ff389a40"}, - {file = "ddtrace-1.6.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:73be527f3a2912e74045ee60e9d37fc8f1a8410b90ae3ac8fb94f01e6ee3f6d3"}, - {file = "ddtrace-1.6.4-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae70de026c79a895b2a5beecbbc0e46bb0c07d27af77a1662352a5608068b005"}, - {file = "ddtrace-1.6.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45a4f2c200c22ab4b6dbeb16b6f6b9aafa2a674b3c3e175f86cb2c2e16f69fff"}, - {file = "ddtrace-1.6.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4a183627202355377d9e369f8d4d18ceee82dd2312d0d098fb1242f387ebcb2b"}, - {file = "ddtrace-1.6.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:97f1ed98e1a14091515aa482d528846ee4437260d68e819bb6ba09af4774fb3c"}, - {file = "ddtrace-1.6.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f08d858a045a9117295e3008ba7c9586865ed16690c682441347508744c338e2"}, - {file = "ddtrace-1.6.4-cp38-cp38-win32.whl", hash = "sha256:71fae938615e77cb5cd04978a36874fa97c1d929c1b697c690affedd538914ed"}, - {file = "ddtrace-1.6.4-cp38-cp38-win_amd64.whl", hash = "sha256:53a0db94ae562222338490e5f409d3e2740d03f7d1099fdd02e769690ca70de2"}, - {file = "ddtrace-1.6.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d727012ee9b4725cdbb0666e40e4e99cae3418c88b98159e073ec1479d30db73"}, - {file = "ddtrace-1.6.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:102c49d38d67efe6da378509ed7f9f88bc9c6c9a95bcc493c06e02a15e4865c2"}, - {file = "ddtrace-1.6.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5e6cc5ad17a456c6e93d25c6bd06580436fb5c007cef27c89b060a277e35b7a"}, - {file = "ddtrace-1.6.4-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad9abf5879abad5b143ef9fcd9b557193b19000d8ff798b06ec86f1fe992cb89"}, - {file = "ddtrace-1.6.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:289edf7ea4f506f329b20394b08971487bf72351b0a9b9a63a5c7f4d18e1cda8"}, - {file = "ddtrace-1.6.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3a3432c72a082e8f4090a55833cda1b6840676b5f58dbaca041d566f581a3062"}, - {file = "ddtrace-1.6.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7504b21d88ce528e86eb8727270e677a7b4a254ee070e54d0e81111bd68a6d0b"}, - {file = "ddtrace-1.6.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5e744e81727d1328e6830de6a749378e7cd31fc0e1c0aceb19b17685e90cb8fa"}, - {file = "ddtrace-1.6.4-cp39-cp39-win32.whl", hash = "sha256:2aed59c1a0ed33f0b752daa801980d9ab395f89ea8fbc2c788fea0b11a3ea826"}, - {file = "ddtrace-1.6.4-cp39-cp39-win_amd64.whl", hash = "sha256:4fb94ee5113141becb7e447bdf57e30bb447f9347785bf20211d0cf06e1e98e7"}, - {file = "ddtrace-1.6.4.tar.gz", hash = "sha256:33effab386caaaab314e08900b798c02ab5771f88697acb9bf64e5ba98c8009a"}, + {file = "ddtrace-1.13.3-cp27-cp27m-macosx_11_0_x86_64.whl", hash = "sha256:f80e1ce52e16f4d708d7bb4e146a113749a9b9779f132785f74bea0c8037321a"}, + {file = "ddtrace-1.13.3-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:8179a15de9a25994540c4de0b1aa71cc446749f3cb30afcf2104033a52f88730"}, + {file = "ddtrace-1.13.3-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:1ae90609990bd0014038ac2b8a7acfebffb774aa9355f6d0f940c6885f0036ee"}, + {file = "ddtrace-1.13.3-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:a56a7559506a3f46791ef4f42a0558c842a4f6d96d5bf2a32703fca4a4341104"}, + {file = "ddtrace-1.13.3-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:7379b8212e2aeb3f8ccea9f093c6e729489ef1222a80cba5db62a26a1b3dd4ac"}, + {file = "ddtrace-1.13.3-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:ec62bb16faa7b646f230eb1092b9244899aa1039103077f02449c859008e244c"}, + {file = "ddtrace-1.13.3-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:cf7ad2ec744b82fbe6abf49d6ac7a9ea4f3e05f00d5a449ee225e1ad06aeb8b7"}, + {file = "ddtrace-1.13.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b1cd438c0d9ca66e10b9e513751b30e29ff28f56668ec990e904fd565528c9"}, + {file = "ddtrace-1.13.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3e92d6e43ac891920af7c820579ec2e549327039c9d14604424576ef5aa4e978"}, + {file = "ddtrace-1.13.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76f419d6984a20eae7311f282c7159bc591001c16f05c4a127d236e07815bfa2"}, + {file = "ddtrace-1.13.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:aca7462329d9b7b1b4882670225b832e20420270d6be216140487b3200e28aff"}, + {file = "ddtrace-1.13.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:833e643839c23e21b488d780140ccacd2063269dbad3ae71af923d85c91ec919"}, + {file = "ddtrace-1.13.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b2516a009316c76fe5b078a8e839256d93519815fd1ddc6aa2fb483c5d5d43cd"}, + {file = "ddtrace-1.13.3-cp310-cp310-win32.whl", hash = "sha256:382f59f36ace1e0704e5d839bcbb3a3d0f1d2398586ee1cfacadf82b6632c35c"}, + {file = "ddtrace-1.13.3-cp310-cp310-win_amd64.whl", hash = "sha256:aad95e27bf84f745e26e9259a2b0fb71f1d8dbec0d80bc57a8054a39439161d9"}, + {file = "ddtrace-1.13.3-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:0bb50183547280f38d6b881012fef6e7bb5294e7ff5c17dd7f94a01774c5655b"}, + {file = "ddtrace-1.13.3-cp311-cp311-macosx_11_0_x86_64.whl", hash = "sha256:52d8d400ed7678d5db03324b5c45eb48f52f27b8079705c93e2878d009fea23f"}, + {file = "ddtrace-1.13.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5799452a0c72a6c4c25d4cf7031bd60ac8d8925a95e19048f7654073b57be794"}, + {file = "ddtrace-1.13.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:99f4ee527b5ed8b51294af67a29d2472123663b409d1f0f12885e3ff63ad22f7"}, + {file = "ddtrace-1.13.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:855bf4b19c13fdf1d1b6b3362e2798d5f909fd92db90d50fa4c9e79000cb1af8"}, + {file = "ddtrace-1.13.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6d21362ca7672287c5f4f51fd55507c9b51e283a1b47e217f37a88b57010eb74"}, + {file = "ddtrace-1.13.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7d72285917afa12b14f6e857a3bb3b4c29c996603d9f2b950a064ebb2ddc35d7"}, + {file = "ddtrace-1.13.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e48079cac6c3677aa451f3c8c35afd9de344fdb33d7fbccb325a2ac6971ff690"}, + {file = "ddtrace-1.13.3-cp311-cp311-win32.whl", hash = "sha256:7565d33cf3e812f64d1801d029b9529c90d662b0a834c769cf870f1038312191"}, + {file = "ddtrace-1.13.3-cp311-cp311-win_amd64.whl", hash = "sha256:0f446d64dff2fece4e1b23896367215381490166e669f49206d88a592192df57"}, + {file = "ddtrace-1.13.3-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:ed2e8cd5168c6e0e2ea493fb05dab2225402a4958291d07187bcb19be15023e5"}, + {file = "ddtrace-1.13.3-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:423601871c17d19ee9dde6264ad25873fa6c8ba15946dcd85ed5d3c450d4244d"}, + {file = "ddtrace-1.13.3-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:5fa56e2a53ed199fd5e6fff216baa501fd28a94eeb3f29fc8ffe23ff4a5f7683"}, + {file = "ddtrace-1.13.3-cp35-cp35m-win32.whl", hash = "sha256:fdb9eee6d449b97971bc9a2a188b2e645b3d0cb16b3af67293c792263d030e1b"}, + {file = "ddtrace-1.13.3-cp35-cp35m-win_amd64.whl", hash = "sha256:1b7ece12f91e789325f128363b64f0dcb0002db991bc747836150f3f6de68bf3"}, + {file = "ddtrace-1.13.3-cp36-cp36m-macosx_11_0_x86_64.whl", hash = "sha256:e8e75efa3a9453509dee6bc74c3804f65a6a4fc9a385aa03b8dfa4f01f9fe736"}, + {file = "ddtrace-1.13.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58bc46f734185eeb292b2a243c3941ed9fda9e120d717ef01caafb504c03f673"}, + {file = "ddtrace-1.13.3-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c0f869c05417185b15d56b2514207af37cb7fef847888b265a7dc2bdeaf7d449"}, + {file = "ddtrace-1.13.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65b63f8fd1c12cfb484a5aa38cfa43933c325cc9933a24bf1070ef31d5817ea7"}, + {file = "ddtrace-1.13.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:5bb6548b0167fbc0b5ba4c0621ec0ab5ee7660f28cbc570a3f09c2b29aaf7fb7"}, + {file = "ddtrace-1.13.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:604324085744e96c251da697537f131fb642e628ddfcdaa6656c1f41c28d86d7"}, + {file = "ddtrace-1.13.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:f64f63bb7fd65037fed32fc87ae3912b78b4a72cb31e3e840c2490b07ac9a7b2"}, + {file = "ddtrace-1.13.3-cp36-cp36m-win32.whl", hash = "sha256:dab08fa94a06a861974e43e095030b2b958987937ba54484a2f30e05e98ed9af"}, + {file = "ddtrace-1.13.3-cp36-cp36m-win_amd64.whl", hash = "sha256:1620ce6dfb61bd007a3936a8f3154bdfbc84313db4a28a5e017cba223945fa81"}, + {file = "ddtrace-1.13.3-cp37-cp37m-macosx_11_0_x86_64.whl", hash = "sha256:38ae5cafdae328257e0bb858b39d92ef9e1da21ec1b485e8abdc97f4ec70d499"}, + {file = "ddtrace-1.13.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f88a33eb24bfb724f1fde0329e60fb327ee320d3e3448cb348a5a9dae9cf1d61"}, + {file = "ddtrace-1.13.3-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7f0ff79bfcfa558f7f758aa0694541796f8581ba0b633e252e6722745574c644"}, + {file = "ddtrace-1.13.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c7cc483458ae942db83bc1d3ebf443a9c77f10d295fa53c6ca9043bbb053d709"}, + {file = "ddtrace-1.13.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3ccdc601d5441ce316b24e56b8c7fe35480b27e3d01daf2339726316bd74f94c"}, + {file = "ddtrace-1.13.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7355cde5e20b91305ba24496ec88ec8080f6bd66d7620846d1dac47f0a20695a"}, + {file = "ddtrace-1.13.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:b6c5cb3b77fdc53a198697747dedbbfc12bc05853fa99449940e1f887b71e163"}, + {file = "ddtrace-1.13.3-cp37-cp37m-win32.whl", hash = "sha256:18c643eb41e9ab51efbc8b27c33e7c526db2aa095a30a6842bd848e6e7deb052"}, + {file = "ddtrace-1.13.3-cp37-cp37m-win_amd64.whl", hash = "sha256:0456b9bd1fafd64c1a174f2755b77b4acab6717c4d01212b8f737b12f43aaf26"}, + {file = "ddtrace-1.13.3-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:18b0ec720201b6f6f0fcce74dc74d2e6bb83528216b1c2ddc316cfd77ad2dfb0"}, + {file = "ddtrace-1.13.3-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:2f5df56e2965a577d034578e4bb0d4b63c834c94e467b654d01ce9df8eb3b661"}, + {file = "ddtrace-1.13.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ddc742369a92c622e63cb6b186c392d2b4263a66f4e7ac1829e43692b0339234"}, + {file = "ddtrace-1.13.3-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4fa4fe1e708073482e490ba6b0f260136cc31782fd170ef50a105b8165084f4"}, + {file = "ddtrace-1.13.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:072d3b5c90959df4b11c981b67734b3b9eef92199ae639d0b183912f8120097e"}, + {file = "ddtrace-1.13.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0e6f89cf95a95e76d1278365de1b87a78a2bc3a2677af6cdd71690a0a27fdffd"}, + {file = "ddtrace-1.13.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b622f7c2f37b0e6924d997f4215cdde094612872479bac55bd401981bc60db6f"}, + {file = "ddtrace-1.13.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6b21e49d4c7b5d5aade0f892920badc2e1167875d4dba3f9dfd01e45a3a2a2d3"}, + {file = "ddtrace-1.13.3-cp38-cp38-win32.whl", hash = "sha256:5fe4f06e51d5ae00f778a1a13cf5c4cae7789749b36ca5b9b495ee7f20d44d86"}, + {file = "ddtrace-1.13.3-cp38-cp38-win_amd64.whl", hash = "sha256:dd31051fbdce7cfe3b16d938b3313c4387011b72d796212a74676124fdd60855"}, + {file = "ddtrace-1.13.3-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:297e4f7779a3208124488c6b209c882dbfd68218355f1341b573da5c3672976c"}, + {file = "ddtrace-1.13.3-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:b41a45ed2dabdf2f091f804f2d2ceb41e1547ade435c2c992a74f9edefc7b2ee"}, + {file = "ddtrace-1.13.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59d32ca0e2d7c3236c559885aa1645185121cc8a739eb658dbdcb96dce72ae53"}, + {file = "ddtrace-1.13.3-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2dea250e64ce9f537a913e98f3ece125f3340474e3e83bad602313f6d6f8aa1b"}, + {file = "ddtrace-1.13.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:881c472d1eb8735ed6cdc524abe311acd0bfd234fbbeee3d766d7b879ff2ee00"}, + {file = "ddtrace-1.13.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:90b9cf9ed80b8af8b2d7c5e9dfce6482ce9c5ca12f9deeaaa225f2650737b82d"}, + {file = "ddtrace-1.13.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f6418606d511567e06a667d7759b07d90b8ac0f707b8e559fefe42bad4ce64a7"}, + {file = "ddtrace-1.13.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f24d0a75ee1b4ea3b6f86bd4246d2506e2c8f65339ed71b29bc6438b21baadea"}, + {file = "ddtrace-1.13.3-cp39-cp39-win32.whl", hash = "sha256:6f36dec03adf3f6666fb7fa6aee984d20b0ac5ba9de1dccfc0b9801785ba91a7"}, + {file = "ddtrace-1.13.3-cp39-cp39-win_amd64.whl", hash = "sha256:68341a4fbe413ac6a7c05763fa831a64735a08f00dc7b11db54de3c578145bfa"}, + {file = "ddtrace-1.13.3.tar.gz", hash = "sha256:59675234bd50603d6eb0b49a67440c4d22bc14c0b716e181a135e590da9c0037"}, ] [package.dependencies] @@ -316,6 +388,7 @@ ddsketch = ">=2.0.1" envier = "*" importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} jsonschema = "*" +opentelemetry-api = {version = ">=1", markers = "python_version >= \"3.7\""} packaging = ">=17.1" protobuf = {version = ">=3", markers = "python_version >= \"3.7\""} six = ">=1.12.0" @@ -327,17 +400,23 @@ xmltodict = ">=0.12" opentracing = ["opentracing (>=2.0.0)"] [[package]] -name = "decorator" -version = "5.1.1" -description = "Decorators for Humans" +name = "deprecated" +version = "1.2.13" +description = "Python @deprecated decorator to deprecate old python classes, functions or methods." category = "main" optional = false -python-versions = ">=3.5" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ - {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, - {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, + {file = "Deprecated-1.2.13-py2.py3-none-any.whl", hash = "sha256:64756e3e14c8c5eea9795d93c524551432a0be75629f8f29e67ab8caf076c76d"}, + {file = "Deprecated-1.2.13.tar.gz", hash = "sha256:43ac5335da90c31c24ba028af536a91d41d53f9e6901ddb021bcc572ce44e38d"}, ] +[package.dependencies] +wrapt = ">=1.10,<2" + +[package.extras] +dev = ["PyTest", "PyTest (<5)", "PyTest-Cov", "PyTest-Cov (<2.6)", "bump2version (<1)", "configparser (<5)", "importlib-metadata (<3)", "importlib-resources (<4)", "sphinx (<2)", "sphinxcontrib-websupport (<2)", "tox", "zipp (<2)"] + [[package]] name = "envier" version = "0.4.0" @@ -355,14 +434,14 @@ mypy = ["mypy"] [[package]] name = "exceptiongroup" -version = "1.1.0" +version = "1.1.1" description = "Backport of PEP 654 (exception groups)" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.1.0-py3-none-any.whl", hash = "sha256:327cbda3da756e2de031a3107b81ab7b3770a602c4d16ca618298c526f4bec1e"}, - {file = "exceptiongroup-1.1.0.tar.gz", hash = "sha256:bcb67d800a4497e1b404c2dd44fca47d3b7a5e5433dbab67f96c1a685cdfdf23"}, + {file = "exceptiongroup-1.1.1-py3-none-any.whl", hash = "sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e"}, + {file = "exceptiongroup-1.1.1.tar.gz", hash = "sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785"}, ] [package.extras] @@ -433,14 +512,14 @@ testing = ["importlib-resources (>=1.3)", "packaging", "pep517"] [[package]] name = "importlib-resources" -version = "5.10.2" +version = "5.12.0" description = "Read resources from Python packages" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "importlib_resources-5.10.2-py3-none-any.whl", hash = "sha256:7d543798b0beca10b6a01ac7cafda9f822c54db9e8376a6bf57e0cbd74d486b6"}, - {file = "importlib_resources-5.10.2.tar.gz", hash = "sha256:e4a96c8cc0339647ff9a5e0550d9f276fc5a01ffa276012b58ec108cfd7b8484"}, + {file = "importlib_resources-5.12.0-py3-none-any.whl", hash = "sha256:7b1deeebbf351c7578e09bf2f63fa2ce8b5ffec296e0d349139d43cca061a81a"}, + {file = "importlib_resources-5.12.0.tar.gz", hash = "sha256:4be82589bf5c1d7999aedf2a45159d10cb3ca4f19b2271f8792bc8e6da7b22f6"}, ] [package.dependencies] @@ -518,16 +597,32 @@ six = ">=1.7" coverage-plugin = ["coverage (>=4.4.1)"] doc = ["Sphinx (>=1.6.5)", "mock", "sphinx-rtd-theme"] +[[package]] +name = "opentelemetry-api" +version = "1.15.0" +description = "OpenTelemetry Python API" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "opentelemetry_api-1.15.0-py3-none-any.whl", hash = "sha256:e6c2d2e42140fd396e96edf75a7ceb11073f4efb4db87565a431cc9d0f93f2e0"}, + {file = "opentelemetry_api-1.15.0.tar.gz", hash = "sha256:79ab791b4aaad27acc3dc3ba01596db5b5aac2ef75c70622c6038051d6c2cded"}, +] + +[package.dependencies] +deprecated = ">=1.2.6" +setuptools = ">=16.0" + [[package]] name = "packaging" -version = "22.0" +version = "23.1" description = "Core utilities for Python packages" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "packaging-22.0-py3-none-any.whl", hash = "sha256:957e2148ba0e1a3b282772e791ef1d8083648bc131c8ab0c1feba110ce1146c3"}, - {file = "packaging-22.0.tar.gz", hash = "sha256:2198ec20bd4c017b8f9717e00f0c8714076fc2fd93816750ab48e2c41de2cfd3"}, + {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, + {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, ] [[package]] @@ -544,26 +639,25 @@ files = [ [[package]] name = "protobuf" -version = "4.21.12" +version = "4.23.1" description = "" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "protobuf-4.21.12-cp310-abi3-win32.whl", hash = "sha256:b135410244ebe777db80298297a97fbb4c862c881b4403b71bac9d4107d61fd1"}, - {file = "protobuf-4.21.12-cp310-abi3-win_amd64.whl", hash = "sha256:89f9149e4a0169cddfc44c74f230d7743002e3aa0b9472d8c28f0388102fc4c2"}, - {file = "protobuf-4.21.12-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:299ea899484ee6f44604deb71f424234f654606b983cb496ea2a53e3c63ab791"}, - {file = "protobuf-4.21.12-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:d1736130bce8cf131ac7957fa26880ca19227d4ad68b4888b3be0dea1f95df97"}, - {file = "protobuf-4.21.12-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:78a28c9fa223998472886c77042e9b9afb6fe4242bd2a2a5aced88e3f4422aa7"}, - {file = "protobuf-4.21.12-cp37-cp37m-win32.whl", hash = "sha256:3d164928ff0727d97022957c2b849250ca0e64777ee31efd7d6de2e07c494717"}, - {file = "protobuf-4.21.12-cp37-cp37m-win_amd64.whl", hash = "sha256:f45460f9ee70a0ec1b6694c6e4e348ad2019275680bd68a1d9314b8c7e01e574"}, - {file = "protobuf-4.21.12-cp38-cp38-win32.whl", hash = "sha256:6ab80df09e3208f742c98443b6166bcb70d65f52cfeb67357d52032ea1ae9bec"}, - {file = "protobuf-4.21.12-cp38-cp38-win_amd64.whl", hash = "sha256:1f22ac0ca65bb70a876060d96d914dae09ac98d114294f77584b0d2644fa9c30"}, - {file = "protobuf-4.21.12-cp39-cp39-win32.whl", hash = "sha256:27f4d15021da6d2b706ddc3860fac0a5ddaba34ab679dc182b60a8bb4e1121cc"}, - {file = "protobuf-4.21.12-cp39-cp39-win_amd64.whl", hash = "sha256:237216c3326d46808a9f7c26fd1bd4b20015fb6867dc5d263a493ef9a539293b"}, - {file = "protobuf-4.21.12-py2.py3-none-any.whl", hash = "sha256:a53fd3f03e578553623272dc46ac2f189de23862e68565e83dde203d41b76fc5"}, - {file = "protobuf-4.21.12-py3-none-any.whl", hash = "sha256:b98d0148f84e3a3c569e19f52103ca1feacdac0d2df8d6533cf983d1fda28462"}, - {file = "protobuf-4.21.12.tar.gz", hash = "sha256:7cd532c4566d0e6feafecc1059d04c7915aec8e182d1cf7adee8b24ef1e2e6ab"}, + {file = "protobuf-4.23.1-cp310-abi3-win32.whl", hash = "sha256:410bcc0a5b279f634d3e16082ce221dfef7c3392fac723500e2e64d1806dd2be"}, + {file = "protobuf-4.23.1-cp310-abi3-win_amd64.whl", hash = "sha256:32e78beda26d7a101fecf15d7a4a792278a0d26a31bc327ff05564a9d68ab8ee"}, + {file = "protobuf-4.23.1-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:f9510cac91e764e86acd74e2b7f7bc5e6127a7f3fb646d7c8033cfb84fd1176a"}, + {file = "protobuf-4.23.1-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:346990f634272caac1f09efbcfbbacb23098b1f606d172534c6fa2d9758bb436"}, + {file = "protobuf-4.23.1-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:3ce113b3f3362493bddc9069c2163a38f240a9ed685ff83e7bcb756b05e1deb0"}, + {file = "protobuf-4.23.1-cp37-cp37m-win32.whl", hash = "sha256:2036a3a1e7fc27f973fa0a7888dce712393af644f4695385f117886abc792e39"}, + {file = "protobuf-4.23.1-cp37-cp37m-win_amd64.whl", hash = "sha256:3b8905eafe4439076e1f58e9d1fa327025fd2777cf90f14083092ae47f77b0aa"}, + {file = "protobuf-4.23.1-cp38-cp38-win32.whl", hash = "sha256:5b9cd6097e6acae48a68cb29b56bc79339be84eca65b486910bb1e7a30e2b7c1"}, + {file = "protobuf-4.23.1-cp38-cp38-win_amd64.whl", hash = "sha256:decf119d54e820f298ee6d89c72d6b289ea240c32c521f00433f9dc420595f38"}, + {file = "protobuf-4.23.1-cp39-cp39-win32.whl", hash = "sha256:91fac0753c3c4951fbb98a93271c43cc7cf3b93cf67747b3e600bb1e5cc14d61"}, + {file = "protobuf-4.23.1-cp39-cp39-win_amd64.whl", hash = "sha256:ac50be82491369a9ec3710565777e4da87c6d2e20404e0abb1f3a8f10ffd20f0"}, + {file = "protobuf-4.23.1-py3-none-any.whl", hash = "sha256:65f0ac96ef67d7dd09b19a46aad81a851b6f85f89725577f16de38f2d68ad477"}, + {file = "protobuf-4.23.1.tar.gz", hash = "sha256:95789b569418a3e32a53f43d7763be3d490a831e9c08042539462b6d972c2d7e"}, ] [[package]] @@ -644,21 +738,21 @@ six = ">=1.5" [[package]] name = "requests" -version = "2.28.1" +version = "2.30.0" description = "Python HTTP for Humans." category = "main" optional = false -python-versions = ">=3.7, <4" +python-versions = ">=3.7" files = [ - {file = "requests-2.28.1-py3-none-any.whl", hash = "sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349"}, - {file = "requests-2.28.1.tar.gz", hash = "sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983"}, + {file = "requests-2.30.0-py3-none-any.whl", hash = "sha256:10e94cc4f3121ee6da529d358cdaeaff2f1c409cd377dbc72b825852f2f7e294"}, + {file = "requests-2.30.0.tar.gz", hash = "sha256:239d7d4458afcb28a692cdd298d87542235f4ca8d36d03a15bfc128a6559a2f4"}, ] [package.dependencies] certifi = ">=2017.4.17" -charset-normalizer = ">=2,<3" +charset-normalizer = ">=2,<4" idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<1.27" +urllib3 = ">=1.21.1,<3" [package.extras] socks = ["PySocks (>=1.5.6,!=1.5.7)"] @@ -666,14 +760,14 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "s3transfer" -version = "0.6.0" +version = "0.6.1" description = "An Amazon S3 Transfer Manager" category = "main" optional = true python-versions = ">= 3.7" files = [ - {file = "s3transfer-0.6.0-py3-none-any.whl", hash = "sha256:06176b74f3a15f61f1b4f25a1fc29a4429040b7647133a463da8fa5bd28d5ecd"}, - {file = "s3transfer-0.6.0.tar.gz", hash = "sha256:2ed07d3866f523cc561bf4a00fc5535827981b117dd7876f036b0c1aca42c947"}, + {file = "s3transfer-0.6.1-py3-none-any.whl", hash = "sha256:3c0da2d074bf35d6870ef157158641178a4204a6e689e82546083e31e0311346"}, + {file = "s3transfer-0.6.1.tar.gz", hash = "sha256:640bb492711f4c0c0905e1f62b6aaeb771881935ad27884852411f8e9cacbca9"}, ] [package.dependencies] @@ -682,6 +776,23 @@ botocore = ">=1.12.36,<2.0a.0" [package.extras] crt = ["botocore[crt] (>=1.20.29,<2.0a.0)"] +[[package]] +name = "setuptools" +version = "67.7.2" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "setuptools-67.7.2-py3-none-any.whl", hash = "sha256:23aaf86b85ca52ceb801d32703f12d77517b2556af839621c641fca11287952b"}, + {file = "setuptools-67.7.2.tar.gz", hash = "sha256:f104fa03692a2602fa0fec6c6a9e63b6c8a968de13e17c026957dd1f53d80990"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8 (<5)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] + [[package]] name = "six" version = "1.16.0" @@ -696,14 +807,14 @@ files = [ [[package]] name = "tenacity" -version = "8.1.0" +version = "8.2.2" description = "Retry code until it succeeds" category = "main" optional = false python-versions = ">=3.6" files = [ - {file = "tenacity-8.1.0-py3-none-any.whl", hash = "sha256:35525cd47f82830069f0d6b73f7eb83bc5b73ee2fff0437952cedf98b27653ac"}, - {file = "tenacity-8.1.0.tar.gz", hash = "sha256:e48c437fdf9340f5666b92cd7990e96bc5fc955e1298baf4a907e3972067a445"}, + {file = "tenacity-8.2.2-py3-none-any.whl", hash = "sha256:2f277afb21b851637e8f52e6a613ff08734c347dc19ade928e519d7d2d8569b0"}, + {file = "tenacity-8.2.2.tar.gz", hash = "sha256:43af037822bd0029025877f3b2d97cc4d7bb0c2991000a3d59d71517c5c969e0"}, ] [package.extras] @@ -711,26 +822,26 @@ doc = ["reno", "sphinx", "tornado (>=4.5)"] [[package]] name = "typing-extensions" -version = "4.4.0" +version = "4.5.0" description = "Backported and Experimental Type Hints for Python 3.7+" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "typing_extensions-4.4.0-py3-none-any.whl", hash = "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"}, - {file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"}, + {file = "typing_extensions-4.5.0-py3-none-any.whl", hash = "sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4"}, + {file = "typing_extensions-4.5.0.tar.gz", hash = "sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb"}, ] [[package]] name = "urllib3" -version = "1.26.13" +version = "1.26.15" description = "HTTP library with thread-safe connection pooling, file post, and more." category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ - {file = "urllib3-1.26.13-py2.py3-none-any.whl", hash = "sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc"}, - {file = "urllib3-1.26.13.tar.gz", hash = "sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8"}, + {file = "urllib3-1.26.15-py2.py3-none-any.whl", hash = "sha256:aa751d169e23c7479ce47a0cb0da579e3ede798f994f5816a74e4f4500dcea42"}, + {file = "urllib3-1.26.15.tar.gz", hash = "sha256:8a388717b9476f934a21484e8c8e61875ab60644d29b9b39e11e4b9dc1c6b305"}, ] [package.extras] @@ -740,76 +851,87 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] name = "wrapt" -version = "1.14.1" +version = "1.15.0" description = "Module for decorators, wrappers and monkey patching." category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" files = [ - {file = "wrapt-1.14.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3"}, - {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:903500616422a40a98a5a3c4ff4ed9d0066f3b4c951fa286018ecdf0750194ef"}, - {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5a9a0d155deafd9448baff28c08e150d9b24ff010e899311ddd63c45c2445e28"}, - {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ddaea91abf8b0d13443f6dac52e89051a5063c7d014710dcb4d4abb2ff811a59"}, - {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:36f582d0c6bc99d5f39cd3ac2a9062e57f3cf606ade29a0a0d6b323462f4dd87"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:7ef58fb89674095bfc57c4069e95d7a31cfdc0939e2a579882ac7d55aadfd2a1"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:e2f83e18fe2f4c9e7db597e988f72712c0c3676d337d8b101f6758107c42425b"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:ee2b1b1769f6707a8a445162ea16dddf74285c3964f605877a20e38545c3c462"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:833b58d5d0b7e5b9832869f039203389ac7cbf01765639c7309fd50ef619e0b1"}, - {file = "wrapt-1.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:80bb5c256f1415f747011dc3604b59bc1f91c6e7150bd7db03b19170ee06b320"}, - {file = "wrapt-1.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:07f7a7d0f388028b2df1d916e94bbb40624c59b48ecc6cbc232546706fac74c2"}, - {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02b41b633c6261feff8ddd8d11c711df6842aba629fdd3da10249a53211a72c4"}, - {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fe803deacd09a233e4762a1adcea5db5d31e6be577a43352936179d14d90069"}, - {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:257fd78c513e0fb5cdbe058c27a0624c9884e735bbd131935fd49e9fe719d310"}, - {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4fcc4649dc762cddacd193e6b55bc02edca674067f5f98166d7713b193932b7f"}, - {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:11871514607b15cfeb87c547a49bca19fde402f32e2b1c24a632506c0a756656"}, - {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8ad85f7f4e20964db4daadcab70b47ab05c7c1cf2a7c1e51087bfaa83831854c"}, - {file = "wrapt-1.14.1-cp310-cp310-win32.whl", hash = "sha256:a9a52172be0b5aae932bef82a79ec0a0ce87288c7d132946d645eba03f0ad8a8"}, - {file = "wrapt-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:6d323e1554b3d22cfc03cd3243b5bb815a51f5249fdcbb86fda4bf62bab9e164"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:43ca3bbbe97af00f49efb06e352eae40434ca9d915906f77def219b88e85d907"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:6b1a564e6cb69922c7fe3a678b9f9a3c54e72b469875aa8018f18b4d1dd1adf3"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:00b6d4ea20a906c0ca56d84f93065b398ab74b927a7a3dbd470f6fc503f95dc3"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:a85d2b46be66a71bedde836d9e41859879cc54a2a04fad1191eb50c2066f6e9d"}, - {file = "wrapt-1.14.1-cp35-cp35m-win32.whl", hash = "sha256:dbcda74c67263139358f4d188ae5faae95c30929281bc6866d00573783c422b7"}, - {file = "wrapt-1.14.1-cp35-cp35m-win_amd64.whl", hash = "sha256:b21bb4c09ffabfa0e85e3a6b623e19b80e7acd709b9f91452b8297ace2a8ab00"}, - {file = "wrapt-1.14.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9e0fd32e0148dd5dea6af5fee42beb949098564cc23211a88d799e434255a1f4"}, - {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9736af4641846491aedb3c3f56b9bc5568d92b0692303b5a305301a95dfd38b1"}, - {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b02d65b9ccf0ef6c34cba6cf5bf2aab1bb2f49c6090bafeecc9cd81ad4ea1c1"}, - {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21ac0156c4b089b330b7666db40feee30a5d52634cc4560e1905d6529a3897ff"}, - {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:9f3e6f9e05148ff90002b884fbc2a86bd303ae847e472f44ecc06c2cd2fcdb2d"}, - {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:6e743de5e9c3d1b7185870f480587b75b1cb604832e380d64f9504a0535912d1"}, - {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:d79d7d5dc8a32b7093e81e97dad755127ff77bcc899e845f41bf71747af0c569"}, - {file = "wrapt-1.14.1-cp36-cp36m-win32.whl", hash = "sha256:81b19725065dcb43df02b37e03278c011a09e49757287dca60c5aecdd5a0b8ed"}, - {file = "wrapt-1.14.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b014c23646a467558be7da3d6b9fa409b2c567d2110599b7cf9a0c5992b3b471"}, - {file = "wrapt-1.14.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:88bd7b6bd70a5b6803c1abf6bca012f7ed963e58c68d76ee20b9d751c74a3248"}, - {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5901a312f4d14c59918c221323068fad0540e34324925c8475263841dbdfe68"}, - {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d77c85fedff92cf788face9bfa3ebaa364448ebb1d765302e9af11bf449ca36d"}, - {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d649d616e5c6a678b26d15ece345354f7c2286acd6db868e65fcc5ff7c24a77"}, - {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7d2872609603cb35ca513d7404a94d6d608fc13211563571117046c9d2bcc3d7"}, - {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:ee6acae74a2b91865910eef5e7de37dc6895ad96fa23603d1d27ea69df545015"}, - {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2b39d38039a1fdad98c87279b48bc5dce2c0ca0d73483b12cb72aa9609278e8a"}, - {file = "wrapt-1.14.1-cp37-cp37m-win32.whl", hash = "sha256:60db23fa423575eeb65ea430cee741acb7c26a1365d103f7b0f6ec412b893853"}, - {file = "wrapt-1.14.1-cp37-cp37m-win_amd64.whl", hash = "sha256:709fe01086a55cf79d20f741f39325018f4df051ef39fe921b1ebe780a66184c"}, - {file = "wrapt-1.14.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8c0ce1e99116d5ab21355d8ebe53d9460366704ea38ae4d9f6933188f327b456"}, - {file = "wrapt-1.14.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e3fb1677c720409d5f671e39bac6c9e0e422584e5f518bfd50aa4cbbea02433f"}, - {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:642c2e7a804fcf18c222e1060df25fc210b9c58db7c91416fb055897fc27e8cc"}, - {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b7c050ae976e286906dd3f26009e117eb000fb2cf3533398c5ad9ccc86867b1"}, - {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef3f72c9666bba2bab70d2a8b79f2c6d2c1a42a7f7e2b0ec83bb2f9e383950af"}, - {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:01c205616a89d09827986bc4e859bcabd64f5a0662a7fe95e0d359424e0e071b"}, - {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5a0f54ce2c092aaf439813735584b9537cad479575a09892b8352fea5e988dc0"}, - {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2cf71233a0ed05ccdabe209c606fe0bac7379fdcf687f39b944420d2a09fdb57"}, - {file = "wrapt-1.14.1-cp38-cp38-win32.whl", hash = "sha256:aa31fdcc33fef9eb2552cbcbfee7773d5a6792c137b359e82879c101e98584c5"}, - {file = "wrapt-1.14.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1967f46ea8f2db647c786e78d8cc7e4313dbd1b0aca360592d8027b8508e24d"}, - {file = "wrapt-1.14.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3232822c7d98d23895ccc443bbdf57c7412c5a65996c30442ebe6ed3df335383"}, - {file = "wrapt-1.14.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:988635d122aaf2bdcef9e795435662bcd65b02f4f4c1ae37fbee7401c440b3a7"}, - {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cca3c2cdadb362116235fdbd411735de4328c61425b0aa9f872fd76d02c4e86"}, - {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d52a25136894c63de15a35bc0bdc5adb4b0e173b9c0d07a2be9d3ca64a332735"}, - {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40e7bc81c9e2b2734ea4bc1aceb8a8f0ceaac7c5299bc5d69e37c44d9081d43b"}, - {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b9b7a708dd92306328117d8c4b62e2194d00c365f18eff11a9b53c6f923b01e3"}, - {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6a9a25751acb379b466ff6be78a315e2b439d4c94c1e99cb7266d40a537995d3"}, - {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:34aa51c45f28ba7f12accd624225e2b1e5a3a45206aa191f6f9aac931d9d56fe"}, - {file = "wrapt-1.14.1-cp39-cp39-win32.whl", hash = "sha256:dee0ce50c6a2dd9056c20db781e9c1cfd33e77d2d569f5d1d9321c641bb903d5"}, - {file = "wrapt-1.14.1-cp39-cp39-win_amd64.whl", hash = "sha256:dee60e1de1898bde3b238f18340eec6148986da0455d8ba7848d50470a7a32fb"}, - {file = "wrapt-1.14.1.tar.gz", hash = "sha256:380a85cf89e0e69b7cfbe2ea9f765f004ff419f34194018a6827ac0e3edfed4d"}, + {file = "wrapt-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a"}, + {file = "wrapt-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923"}, + {file = "wrapt-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee"}, + {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727"}, + {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7"}, + {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0"}, + {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec"}, + {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90"}, + {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975"}, + {file = "wrapt-1.15.0-cp310-cp310-win32.whl", hash = "sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1"}, + {file = "wrapt-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e"}, + {file = "wrapt-1.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7"}, + {file = "wrapt-1.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72"}, + {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb"}, + {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e"}, + {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c"}, + {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3"}, + {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92"}, + {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98"}, + {file = "wrapt-1.15.0-cp311-cp311-win32.whl", hash = "sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416"}, + {file = "wrapt-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248"}, + {file = "wrapt-1.15.0-cp35-cp35m-win32.whl", hash = "sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559"}, + {file = "wrapt-1.15.0-cp35-cp35m-win_amd64.whl", hash = "sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639"}, + {file = "wrapt-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba"}, + {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752"}, + {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364"}, + {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475"}, + {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8"}, + {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418"}, + {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2"}, + {file = "wrapt-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1"}, + {file = "wrapt-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420"}, + {file = "wrapt-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317"}, + {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e"}, + {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e"}, + {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0"}, + {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019"}, + {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034"}, + {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653"}, + {file = "wrapt-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0"}, + {file = "wrapt-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e"}, + {file = "wrapt-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145"}, + {file = "wrapt-1.15.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f"}, + {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd"}, + {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b"}, + {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f"}, + {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6"}, + {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094"}, + {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7"}, + {file = "wrapt-1.15.0-cp38-cp38-win32.whl", hash = "sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b"}, + {file = "wrapt-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1"}, + {file = "wrapt-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86"}, + {file = "wrapt-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c"}, + {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d"}, + {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc"}, + {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29"}, + {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a"}, + {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8"}, + {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9"}, + {file = "wrapt-1.15.0-cp39-cp39-win32.whl", hash = "sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff"}, + {file = "wrapt-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6"}, + {file = "wrapt-1.15.0-py3-none-any.whl", hash = "sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640"}, + {file = "wrapt-1.15.0.tar.gz", hash = "sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a"}, ] [[package]] @@ -826,24 +948,24 @@ files = [ [[package]] name = "zipp" -version = "3.11.0" +version = "3.15.0" description = "Backport of pathlib-compatible object wrapper for zip files" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "zipp-3.11.0-py3-none-any.whl", hash = "sha256:83a28fcb75844b5c0cdaf5aa4003c2d728c77e05f5aeabe8e95e56727005fbaa"}, - {file = "zipp-3.11.0.tar.gz", hash = "sha256:a7a22e05929290a67401440b39690ae6563279bced5f314609d9d03798f56766"}, + {file = "zipp-3.15.0-py3-none-any.whl", hash = "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556"}, + {file = "zipp-3.15.0.tar.gz", hash = "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)"] -testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] [extras] -dev = ["boto3", "requests", "nose2", "flake8", "httpretty"] +dev = ["boto3", "flake8", "httpretty", "nose2", "requests"] [metadata] lock-version = "2.0" python-versions = ">=3.7.0,<4" -content-hash = "6ba474ff11bf0665dea4165d426c582eda61054671cd1d0d75889a24bb1bd48c" +content-hash = "3285f9f97dcc98b7515fe79b1108096376ede26ab8aa6a1884c3e0c49778c9b7" diff --git a/pyproject.toml b/pyproject.toml index 452d8263..feb180b5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -34,7 +34,7 @@ requests = { version ="^2.22.0", optional = true } nose2 = { version= "^0.9.1", optional = true } flake8 = { version = "^3.7.9", optional = true } httpretty = {version = "^0.9.7", optional = true } - +urllib3 = "<2.0.0" [tool.poetry.extras] dev = [ From cea730a0bc343b64b0c76a1dac9f46e1b638076e Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez Date: Fri, 19 May 2023 08:50:12 -0700 Subject: [PATCH 04/10] use module level dictionary, make control flow easier to understand, refactor tests to work --- datadog_lambda/tracing.py | 173 ++++++++---------- tests/test_tracing.py | 367 +++++++++++++++++++------------------- 2 files changed, 261 insertions(+), 279 deletions(-) diff --git a/datadog_lambda/tracing.py b/datadog_lambda/tracing.py index 0bc8e6f5..03bfdc73 100644 --- a/datadog_lambda/tracing.py +++ b/datadog_lambda/tracing.py @@ -685,31 +685,25 @@ def create_inferred_span( return None -def get_service_mapping(service_name): - service_mapping = os.getenv("DD_SERVICE_MAPPING", "") - mapping = {} - - for entry in service_mapping.split(","): - parts = entry.split(":") - if len(parts) == 2: - key, value = parts - mapping[key.strip()] = value.strip() - - return mapping.get(service_name) +service_mapping = {} +for entry in os.getenv("DD_SERVICE_MAPPING", "").split(","): + parts = entry.split(":") + if len(parts) == 2: + key, value = parts + service_mapping[key.strip()] = value.strip() def create_inferred_span_from_lambda_function_url_event(event, context): request_context = event.get("requestContext") api_id = request_context.get("apiId") domain = request_context.get("domainName") - # Attempt to get the service mapping for the domain so that we don't remap all apigw services - # Allows the customer to have more fine-grained control - apiid_mapping = get_service_mapping(str(api_id)) - # If the domain mapping is not found, - # attempt to get the service mapping for 'lambda_api_gateway' - lambda_url_mapping = None if apiid_mapping else get_service_mapping("lambda_url") - # If neither mapping is found, default to the domain name - service_name = apiid_mapping or lambda_url_mapping or domain + service_name = None + if api_id in service_mapping: + service_name = service_mapping.get(api_id) + elif "lambda_url" in service_mapping: + service_name = service_mapping.get("lambda_url") + else: + service_name = domain method = request_context.get("http", {}).get("method") path = request_context.get("http", {}).get("path") @@ -814,23 +808,21 @@ def create_inferred_span_from_api_gateway_websocket_event( domain = request_context.get("domainName") endpoint = request_context.get("routeKey") api_id = request_context.get("apiId") - # Attempt to get the service mapping for the domain so that we don't remap all apigw services - # Allows the customer to have more fine-grained control - apiid_mapping = get_service_mapping(str(api_id)) - # If the domain mapping is not found, - # attempt to get the service mapping for 'lambda_api_gateway_websocket' - api_gateway_mapping = ( - None if apiid_mapping else get_service_mapping("lambda_api_gateway_websocket") - ) - # If neither mapping is found, default to the domain name - service_name = apiid_mapping or api_gateway_mapping or domain + + service_name = None + if api_id in service_mapping: + service_name = service_mapping.get(api_id) + elif "lambda_api_gateway_websocket" in service_mapping: + service_name = service_mapping.get("lambda_api_gateway_websocket") + else: + service_name = domain tags = { "operation_name": "aws.apigateway.websocket", "http.url": domain + endpoint, "endpoint": endpoint, "resource_names": endpoint, - "apiid": request_context.get("apiId"), - "apiname": request_context.get("apiId"), + "apiid": api_id, + "apiname": api_id, "stage": request_context.get("stage"), "request_id": context.aws_request_id, "connection_id": request_context.get("connectionId"), @@ -873,16 +865,13 @@ def create_inferred_span_from_api_gateway_event( request_context = event.get("requestContext") domain = request_context.get("domainName", "") api_id = request_context.get("apiId") - # Attempt to get the service mapping for the domain so that we don't remap all apigw services - # Allows the customer to have more fine-grained control - apiid_mapping = get_service_mapping(str(api_id)) - # If the domain mapping is not found, - # attempt to get the service mapping for 'lambda_api_gateway' - api_gateway_mapping = ( - None if apiid_mapping else get_service_mapping("lambda_api_gateway") - ) - # If neither mapping is found, default to the domain name - service_name = apiid_mapping or api_gateway_mapping or domain + service_name = None + if api_id in service_mapping: + service_name = service_mapping.get(api_id) + elif "lambda_api_gateway" in service_mapping: + service_name = service_mapping.get("lambda_api_gateway") + else: + service_name = domain method = event.get("httpMethod") path = event.get("path") @@ -893,8 +882,8 @@ def create_inferred_span_from_api_gateway_event( "endpoint": path, "http.method": method, "resource_names": resource, - "apiid": request_context.get("apiId"), - "apiname": request_context.get("apiId"), + "apiid": api_id, + "apiname": api_id, "stage": request_context.get("stage"), "request_id": context.aws_request_id, } @@ -935,16 +924,12 @@ def create_inferred_span_from_http_api_event( request_context = event.get("requestContext") domain = request_context.get("domainName") api_id = request_context.get("apiId") - # Attempt to get the service mapping for the domain so that we don't remap all apigw services - # Allows the customer to have more fine-grained control - apiid_mapping = get_service_mapping(str(api_id)) - # If the domain mapping is not found, - # attempt to get the service mapping for 'api_gateway_mapping' - api_gateway_mapping = ( - None if apiid_mapping else get_service_mapping("lambda_http_api") - ) - # If neither mapping is found, default to the domain name - service_name = apiid_mapping or api_gateway_mapping or domain + if api_id in service_mapping: + service_name = service_mapping.get(api_id) + elif "lambda_http_api" in service_mapping: + service_name = service_mapping.get("lambda_http_api") + else: + service_name = domain method = request_context.get("http", {}).get("method") path = event.get("rawPath") resource = "{0} {1}".format(method, path) @@ -958,8 +943,8 @@ def create_inferred_span_from_http_api_event( "http.user_agent": request_context.get("http", {}).get("userAgent"), "resource_names": resource, "request_id": context.aws_request_id, - "apiid": request_context.get("apiId"), - "apiname": request_context.get("apiId"), + "apiid": api_id, + "apiname": api_id, "stage": request_context.get("stage"), } request_time_epoch_ms = int(request_context.get("timeEpoch")) @@ -993,13 +978,12 @@ def create_inferred_span_from_sqs_event(event, context): event_record = get_first_record(event) event_source_arn = event_record.get("eventSourceARN") queue_name = event_source_arn.split(":")[-1] - queue_mapping = get_service_mapping(str(queue_name)) - - # If the domain mapping is not found, attempt to get the service mapping for 'sqs' - sqs_mapping = None if queue_mapping else get_service_mapping("lambda_sqs") - - # If neither mapping is found, default to the sns name - service_name = queue_mapping or sqs_mapping or "sqs" + if queue_name in service_mapping: + service_name = service_mapping.get(queue_name) + elif "lambda_sqs" in service_mapping: + service_name = service_mapping.get("lambda_sqs") + else: + service_name = "sqs" tags = { "operation_name": "aws.sqs", @@ -1055,13 +1039,13 @@ def create_inferred_span_from_sns_event(event, context): sns_message = event_record.get("Sns") topic_arn = event_record.get("Sns", {}).get("TopicArn") topic_name = topic_arn.split(":")[-1] - queue_mapping = get_service_mapping(str(topic_name)) - - # If the domain mapping is not found, attempt to get the service mapping for 'sns' - sns_mapping = None if queue_mapping else get_service_mapping("lambda_sns") - # If neither mapping is found, default to the sns name - service_name = queue_mapping or sns_mapping or "sns" + if topic_name in service_mapping: + service_name = service_mapping.get(topic_name) + elif "lambda_sns" in service_mapping: + service_name = service_mapping.get("lambda_sns") + else: + service_name = "sns" tags = { "operation_name": "aws.sns", "resource_names": topic_name, @@ -1099,13 +1083,12 @@ def create_inferred_span_from_kinesis_event(event, context): event_id = event_record.get("eventID") stream_name = event_source_arn.split(":")[-1] shard_id = event_id.split(":")[0] - stream_name_mapping = get_service_mapping(str(stream_name)) - kinesis_mapping = ( - None if stream_name_mapping else get_service_mapping("lambda_kinesis") - ) - - # If neither mapping is found, default to the kinesis name - service_name = stream_name_mapping or kinesis_mapping or "kinesis" + if stream_name in service_mapping: + service_name = service_mapping.get(stream_name) + elif ("lambda_kinesis") in service_mapping: + service_name = service_mapping.get("lambda_kinesis") + else: + service_name = "kinesis" tags = { "operation_name": "aws.kinesis", "resource_names": stream_name, @@ -1139,17 +1122,13 @@ def create_inferred_span_from_dynamodb_event(event, context): event_record = get_first_record(event) event_source_arn = event_record.get("eventSourceARN") table_name = event_source_arn.split("/")[1] - # Attempt to get the service mapping for the domain so that we don't remap all apigw services - # Allows the customer to have more fine grained control - table_mapping = get_service_mapping(str(table_name)) - # If the domain mapping is not found, attempt to get the service mapping for 'dynamodb' - dynamo_db_mapping = ( - None if table_mapping else get_service_mapping("lambda_dynamodb") - ) - - # If neither mapping is found, default to "dynamodb" - service_name = table_mapping or dynamo_db_mapping or "dynamodb" + if table_name in service_mapping: + service_name = service_mapping.get(table_name) + elif "lambda_dynamodb" in service_mapping: + service_name = service_mapping.get("lambda_dynamodb") + else: + service_name = "dynamodb" dynamodb_message = event_record.get("dynamodb") tags = { @@ -1184,12 +1163,13 @@ def create_inferred_span_from_dynamodb_event(event, context): def create_inferred_span_from_s3_event(event, context): event_record = get_first_record(event) bucket_name = event_record.get("s3", {}).get("bucket", {}).get("name") - bucket_name_mapping = get_service_mapping(str(bucket_name)) - # If the domain mapping is not found, attempt to get the service mapping for 's3' - s3_mapping = None if bucket_name_mapping else get_service_mapping("lambda_s3") - # If neither mapping is found, default to the s3 name - service_name = bucket_name_mapping or s3_mapping or "s3" + if bucket_name in service_mapping: + service_name = service_mapping.get(bucket_name) + elif "lambda_s3" in service_mapping: + service_name = service_mapping.get("lambda_s3") + else: + service_name = "s3" tags = { "operation_name": "aws.s3", @@ -1221,14 +1201,13 @@ def create_inferred_span_from_s3_event(event, context): def create_inferred_span_from_eventbridge_event(event, context): source = event.get("source") - source_mapping = get_service_mapping(str(source)) - # If the domain mapping is not found, attempt to get the service mapping for 'eventbridge' - event_bridge_mapping = ( - None if source_mapping else get_service_mapping("lambda_eventbridge") - ) - # If neither mapping is found, default to the eventbridge name - service_name = source_mapping or event_bridge_mapping or "eventbridge" + if source in service_mapping: + service_name = service_mapping.get(source) + elif "lambda_eventbridge" in service_mapping: + service_name = service_mapping.get("lambda_eventbridge") + else: + service_name = "eventbridge" tags = { "operation_name": "aws.eventbridge", "resource_names": source, diff --git a/tests/test_tracing.py b/tests/test_tracing.py index 66ceb89b..b97675c2 100644 --- a/tests/test_tracing.py +++ b/tests/test_tracing.py @@ -2,7 +2,7 @@ import json import os import copy - +import importlib from unittest.mock import MagicMock, Mock, patch, call @@ -16,22 +16,7 @@ TraceHeader, XraySubsegment, ) -from datadog_lambda.tracing import ( - _deterministic_md5_hash, - create_inferred_span, - extract_dd_trace_context, - create_dd_dummy_metadata_subsegment, - create_function_execution_span, - get_dd_trace_context, - mark_trace_as_error_for_5xx_responses, - set_correlation_ids, - set_dd_trace_py_root, - _convert_xray_trace_id, - _convert_xray_entity_id, - _convert_xray_sampling, - InferredSpanInfo, - extract_context_from_eventbridge_event, -) +import datadog_lambda.tracing as dt from datadog_lambda.trigger import EventTypes function_arn = "arn:aws:lambda:us-west-1:123457598159:function:python-layer-test" @@ -88,7 +73,7 @@ def tearDown(self): def test_without_datadog_trace_headers(self): lambda_ctx = get_mock_context() - ctx, source, event_source = extract_dd_trace_context({}, lambda_ctx) + ctx, source, event_source = dt.extract_dd_trace_context({}, lambda_ctx) self.assertEqual(source, "xray") self.assertDictEqual( ctx, @@ -99,7 +84,7 @@ def test_without_datadog_trace_headers(self): }, ) self.assertDictEqual( - get_dd_trace_context(), + dt.get_dd_trace_context(), { TraceHeader.TRACE_ID: fake_xray_header_value_root_decimal, TraceHeader.PARENT_ID: fake_xray_header_value_parent_decimal, @@ -110,7 +95,7 @@ def test_without_datadog_trace_headers(self): def test_with_non_object_event(self): lambda_ctx = get_mock_context() - ctx, source, event_source = extract_dd_trace_context(b"", lambda_ctx) + ctx, source, event_source = dt.extract_dd_trace_context(b"", lambda_ctx) self.assertEqual(source, "xray") self.assertDictEqual( ctx, @@ -121,7 +106,7 @@ def test_with_non_object_event(self): }, ) self.assertDictEqual( - get_dd_trace_context(), + dt.get_dd_trace_context(), { TraceHeader.TRACE_ID: fake_xray_header_value_root_decimal, TraceHeader.PARENT_ID: fake_xray_header_value_parent_decimal, @@ -132,7 +117,7 @@ def test_with_non_object_event(self): def test_with_incomplete_datadog_trace_headers(self): lambda_ctx = get_mock_context() - ctx, source, event_source = extract_dd_trace_context( + ctx, source, event_source = dt.extract_dd_trace_context( {"headers": {TraceHeader.TRACE_ID: "123", TraceHeader.PARENT_ID: "321"}}, lambda_ctx, ) @@ -146,7 +131,7 @@ def test_with_incomplete_datadog_trace_headers(self): }, ) self.assertDictEqual( - get_dd_trace_context(), + dt.get_dd_trace_context(), { TraceHeader.TRACE_ID: fake_xray_header_value_root_decimal, TraceHeader.PARENT_ID: fake_xray_header_value_parent_decimal, @@ -156,7 +141,7 @@ def test_with_incomplete_datadog_trace_headers(self): def test_with_complete_datadog_trace_headers(self): lambda_ctx = get_mock_context() - ctx, source, event_source = extract_dd_trace_context( + ctx, source, event_source = dt.extract_dd_trace_context( { "headers": { TraceHeader.TRACE_ID: "123", @@ -172,14 +157,14 @@ def test_with_complete_datadog_trace_headers(self): {"trace-id": "123", "parent-id": "321", "sampling-priority": "1"}, ) self.assertDictEqual( - get_dd_trace_context(), + dt.get_dd_trace_context(), { TraceHeader.TRACE_ID: "123", TraceHeader.PARENT_ID: fake_xray_header_value_parent_decimal, TraceHeader.SAMPLING_PRIORITY: "1", }, ) - create_dd_dummy_metadata_subsegment(ctx, XraySubsegment.TRACE_KEY) + dt.create_dd_dummy_metadata_subsegment(ctx, XraySubsegment.TRACE_KEY) self.mock_send_segment.assert_called() self.mock_send_segment.assert_called_with( XraySubsegment.TRACE_KEY, @@ -197,7 +182,7 @@ def extractor_foo(event, context): return trace_id, parent_id, sampling_priority lambda_ctx = get_mock_context() - ctx, ctx_source, event_source = extract_dd_trace_context( + ctx, ctx_source, event_source = dt.extract_dd_trace_context( { "foo": { TraceHeader.TRACE_ID: "123", @@ -218,7 +203,7 @@ def extractor_foo(event, context): }, ) self.assertDictEqual( - get_dd_trace_context(), + dt.get_dd_trace_context(), { TraceHeader.TRACE_ID: "123", TraceHeader.PARENT_ID: fake_xray_header_value_parent_decimal, @@ -231,7 +216,7 @@ def extractor_raiser(event, context): raise Exception("kreator") lambda_ctx = get_mock_context() - ctx, ctx_source, event_source = extract_dd_trace_context( + ctx, ctx_source, event_source = dt.extract_dd_trace_context( { "foo": { TraceHeader.TRACE_ID: "123", @@ -252,7 +237,7 @@ def extractor_raiser(event, context): }, ) self.assertDictEqual( - get_dd_trace_context(), + dt.get_dd_trace_context(), { TraceHeader.TRACE_ID: fake_xray_header_value_root_decimal, TraceHeader.PARENT_ID: fake_xray_header_value_parent_decimal, @@ -293,7 +278,7 @@ def test_with_sqs_distributed_datadog_trace_data(self): } ] } - ctx, source, event_source = extract_dd_trace_context(sqs_event, lambda_ctx) + ctx, source, event_source = dt.extract_dd_trace_context(sqs_event, lambda_ctx) self.assertEqual(source, "event") self.assertDictEqual( ctx, @@ -304,14 +289,14 @@ def test_with_sqs_distributed_datadog_trace_data(self): }, ) self.assertDictEqual( - get_dd_trace_context(), + dt.get_dd_trace_context(), { TraceHeader.TRACE_ID: "123", TraceHeader.PARENT_ID: fake_xray_header_value_parent_decimal, TraceHeader.SAMPLING_PRIORITY: "1", }, ) - create_dd_dummy_metadata_subsegment(ctx, XraySubsegment.TRACE_KEY) + dt.create_dd_dummy_metadata_subsegment(ctx, XraySubsegment.TRACE_KEY) self.mock_send_segment.assert_called_with( XraySubsegment.TRACE_KEY, {"trace-id": "123", "parent-id": "321", "sampling-priority": "1"}, @@ -327,7 +312,7 @@ def test_with_legacy_client_context_datadog_trace_data(self): } } ) - ctx, source, event_source = extract_dd_trace_context({}, lambda_ctx) + ctx, source, event_source = dt.extract_dd_trace_context({}, lambda_ctx) self.assertEqual(source, "event") self.assertDictEqual( ctx, @@ -338,14 +323,14 @@ def test_with_legacy_client_context_datadog_trace_data(self): }, ) self.assertDictEqual( - get_dd_trace_context(), + dt.get_dd_trace_context(), { TraceHeader.TRACE_ID: "666", TraceHeader.PARENT_ID: fake_xray_header_value_parent_decimal, TraceHeader.SAMPLING_PRIORITY: "1", }, ) - create_dd_dummy_metadata_subsegment(ctx, XraySubsegment.TRACE_KEY) + dt.create_dd_dummy_metadata_subsegment(ctx, XraySubsegment.TRACE_KEY) self.mock_send_segment.assert_called() self.mock_send_segment.assert_called_with( XraySubsegment.TRACE_KEY, @@ -360,7 +345,7 @@ def test_with_new_client_context_datadog_trace_data(self): TraceHeader.SAMPLING_PRIORITY: "1", } ) - ctx, source, event_source = extract_dd_trace_context({}, lambda_ctx) + ctx, source, event_source = dt.extract_dd_trace_context({}, lambda_ctx) self.assertEqual(source, "event") self.assertDictEqual( ctx, @@ -371,14 +356,14 @@ def test_with_new_client_context_datadog_trace_data(self): }, ) self.assertDictEqual( - get_dd_trace_context(), + dt.get_dd_trace_context(), { TraceHeader.TRACE_ID: "666", TraceHeader.PARENT_ID: fake_xray_header_value_parent_decimal, TraceHeader.SAMPLING_PRIORITY: "1", }, ) - create_dd_dummy_metadata_subsegment(ctx, XraySubsegment.TRACE_KEY) + dt.create_dd_dummy_metadata_subsegment(ctx, XraySubsegment.TRACE_KEY) self.mock_send_segment.assert_called() self.mock_send_segment.assert_called_with( XraySubsegment.TRACE_KEY, @@ -387,7 +372,7 @@ def test_with_new_client_context_datadog_trace_data(self): def test_with_complete_datadog_trace_headers_with_mixed_casing(self): lambda_ctx = get_mock_context() - extract_dd_trace_context( + dt.extract_dd_trace_context( { "headers": { "X-Datadog-Trace-Id": "123", @@ -398,7 +383,7 @@ def test_with_complete_datadog_trace_headers_with_mixed_casing(self): lambda_ctx, ) self.assertDictEqual( - get_dd_trace_context(), + dt.get_dd_trace_context(), { TraceHeader.TRACE_ID: "123", TraceHeader.PARENT_ID: fake_xray_header_value_parent_decimal, @@ -411,7 +396,7 @@ def test_with_complete_datadog_trace_headers_with_trigger_tags(self): "function_trigger.event_source": "sqs", "function_trigger.event_source_arn": "arn:aws:sqs:us-east-1:123456789012:MyQueue", } - create_dd_dummy_metadata_subsegment( + dt.create_dd_dummy_metadata_subsegment( trigger_tags, XraySubsegment.LAMBDA_FUNCTION_TAGS_KEY ) self.mock_send_segment.assert_called() @@ -431,36 +416,36 @@ def test_with_complete_datadog_trace_headers_with_trigger_tags(self): class TestXRayContextConversion(unittest.TestCase): def test_convert_xray_trace_id(self): self.assertEqual( - _convert_xray_trace_id("00000000e1be46a994272793"), "7043144561403045779" + dt._convert_xray_trace_id("00000000e1be46a994272793"), "7043144561403045779" ) self.assertEqual( - _convert_xray_trace_id("bd862e3fe1be46a994272793"), "7043144561403045779" + dt._convert_xray_trace_id("bd862e3fe1be46a994272793"), "7043144561403045779" ) self.assertEqual( - _convert_xray_trace_id("ffffffffffffffffffffffff"), + dt._convert_xray_trace_id("ffffffffffffffffffffffff"), "9223372036854775807", # 0x7FFFFFFFFFFFFFFF ) def test_convert_xray_entity_id(self): self.assertEqual( - _convert_xray_entity_id("53995c3f42cd8ad8"), "6023947403358210776" + dt._convert_xray_entity_id("53995c3f42cd8ad8"), "6023947403358210776" ) self.assertEqual( - _convert_xray_entity_id("1000000000000000"), "1152921504606846976" + dt._convert_xray_entity_id("1000000000000000"), "1152921504606846976" ) self.assertEqual( - _convert_xray_entity_id("ffffffffffffffff"), "18446744073709551615" + dt._convert_xray_entity_id("ffffffffffffffff"), "18446744073709551615" ) def test_convert_xray_sampling(self): - self.assertEqual(_convert_xray_sampling(True), str(SamplingPriority.USER_KEEP)) + self.assertEqual(dt._convert_xray_sampling(True), str(SamplingPriority.USER_KEEP)) self.assertEqual( - _convert_xray_sampling(False), str(SamplingPriority.USER_REJECT) + dt._convert_xray_sampling(False), str(SamplingPriority.USER_REJECT) ) @@ -480,7 +465,7 @@ def setUp(self): self.addCleanup(patcher.stop) def test_set_correlation_ids(self): - set_correlation_ids() + dt.set_correlation_ids() span = tracer.current_span() self.assertEqual(span.trace_id, 123) self.assertEqual(span.span_id, 456) @@ -489,7 +474,7 @@ def test_set_correlation_ids(self): class TestFunctionSpanTags(unittest.TestCase): def test_function(self): ctx = get_mock_context() - span = create_function_execution_span(ctx, "", False, {"source": ""}, False, {}) + span = dt.create_function_execution_span(ctx, "", False, {"source": ""}, False, {}) self.assertEqual(span.get_tag("function_arn"), function_arn) self.assertEqual(span.get_tag("function_version"), "$LATEST") self.assertEqual(span.get_tag("resource_names"), "Function") @@ -500,7 +485,7 @@ def test_function_with_version(self): ctx = get_mock_context( invoked_function_arn=function_arn + ":" + function_version ) - span = create_function_execution_span(ctx, "", False, {"source": ""}, False, {}) + span = dt.create_function_execution_span(ctx, "", False, {"source": ""}, False, {}) self.assertEqual(span.get_tag("function_arn"), function_arn) self.assertEqual(span.get_tag("function_version"), function_version) self.assertEqual(span.get_tag("resource_names"), "Function") @@ -509,7 +494,7 @@ def test_function_with_version(self): def test_function_with_alias(self): function_alias = "alias" ctx = get_mock_context(invoked_function_arn=function_arn + ":" + function_alias) - span = create_function_execution_span(ctx, "", False, {"source": ""}, False, {}) + span = dt.create_function_execution_span(ctx, "", False, {"source": ""}, False, {}) self.assertEqual(span.get_tag("function_arn"), function_arn) self.assertEqual(span.get_tag("function_version"), function_alias) self.assertEqual(span.get_tag("resource_names"), "Function") @@ -517,7 +502,7 @@ def test_function_with_alias(self): def test_function_with_trigger_tags(self): ctx = get_mock_context() - span = create_function_execution_span( + span = dt.create_function_execution_span( ctx, "", False, @@ -560,7 +545,7 @@ def test_mixed_parent_context_when_merging(self): # use the dd-trace trace-id and the x-ray parent-id # This allows parenting relationships like dd-trace -> x-ray -> dd-trace lambda_ctx = get_mock_context() - ctx, source, event_type = extract_dd_trace_context( + ctx, source, event_type = dt.extract_dd_trace_context( { "headers": { TraceHeader.TRACE_ID: "123", @@ -570,7 +555,7 @@ def test_mixed_parent_context_when_merging(self): }, lambda_ctx, ) - set_dd_trace_py_root( + dt.set_dd_trace_py_root( source, True ) # When merging is off, always use dd-trace-context @@ -606,7 +591,7 @@ def test_create_inferred_span_from_authorizer_request_api_gateway_v1_cached_even event = json.load(event) ctx = get_mock_context() ctx.aws_request_id = "abc123" # injected data's requestId is abc321 - span = create_inferred_span(event, ctx) + span = dt.create_inferred_span(event, ctx) self.mock_span_stop.assert_not_called() # NO authorizer span is injected self._basic_common_checks(span, "aws.apigateway.rest") @@ -627,7 +612,7 @@ def test_create_inferred_span_from_authorizer_token_api_gateway_v2_cached_event( event = json.load(event) ctx = get_mock_context() ctx.aws_request_id = "abc123" # injected data's requestId is abc321 - span = create_inferred_span(event, ctx) + span = dt.create_inferred_span(event, ctx) self.mock_span_stop.assert_not_called() # NO authorizer span is injected self._basic_common_checks(span, "aws.apigateway.rest") @@ -639,9 +624,9 @@ def test_create_inferred_span_from_authorizer_request_api_gateway_v2_event(self) event = json.load(event) ctx = get_mock_context() ctx.aws_request_id = "abc123" - span = create_inferred_span(event, ctx) - self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") - self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "sync") + span = dt.create_inferred_span(event, ctx) + self.assertEqual(span.get_tag(dt.InferredSpanInfo.TAG_SOURCE), "self") + self.assertEqual(span.get_tag(dt.InferredSpanInfo.SYNCHRONICITY), "sync") self.mock_span_stop.assert_not_called() self.assertEqual(span.start_ns, finish_time) self._basic_common_checks(span, "aws.httpapi") @@ -655,7 +640,7 @@ def test_create_inferred_span_from_authorizer_request_api_gateway_v2_cached_even event = json.load(event) ctx = get_mock_context() ctx.aws_request_id = "abc123" # injected data's requestId is abc321 - span = create_inferred_span(event, ctx) + span = dt.create_inferred_span(event, ctx) self.mock_span_stop.assert_not_called() # NO authorizer span is injected self._basic_common_checks(span, "aws.httpapi") @@ -680,7 +665,7 @@ def test_create_inferred_span_from_authorizer_request_api_gateway_websocket_mess event = json.load(event) ctx = get_mock_context() ctx.aws_request_id = "abc123" # injected data's requestId is abc321 - span = create_inferred_span(event, ctx) + span = dt.create_inferred_span(event, ctx) self.mock_span_stop.assert_not_called() # NO authorizer span is injected self._basic_common_checks(span, "aws.apigateway.websocket", "web", "main", None) @@ -690,9 +675,9 @@ def _authorizer_span_testing_items(self, event_sample_source, finish_time): event = json.load(event) ctx = get_mock_context() ctx.aws_request_id = "abc123" - span = create_inferred_span(event, ctx) - self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") - self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "sync") + span = dt.create_inferred_span(event, ctx) + self.assertEqual(span.get_tag(dt.InferredSpanInfo.TAG_SOURCE), "self") + self.assertEqual(span.get_tag(dt.InferredSpanInfo.SYNCHRONICITY), "sync") # checking the upstream_authorizer_span self.mock_span_stop.assert_called_once() @@ -740,7 +725,8 @@ def tearDown(self): def test_remaps_all_inferred_span_service_names_from_api_gateway_event(self): os.environ["DD_SERVICE_MAPPING"] = "lambda_api_gateway:new-name" - + global dt + dt = importlib.reload(dt) event_sample_source = "api-gateway" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -749,7 +735,7 @@ def test_remaps_all_inferred_span_service_names_from_api_gateway_event(self): ctx = get_mock_context() ctx.aws_request_id = "123" - span1 = create_inferred_span(original_event, ctx) + span1 = dt.create_inferred_span(original_event, ctx) self.assertEqual(span1.get_tag("operation_name"), "aws.apigateway.rest") self.assertEqual(span1.service, "new-name") @@ -761,13 +747,14 @@ def test_remaps_all_inferred_span_service_names_from_api_gateway_event(self): event2["requestContext"][ "domainName" ] = "different.execute-api.us-east-2.amazonaws.com" - span2 = create_inferred_span(event2, ctx) + span2 = dt.create_inferred_span(event2, ctx) self.assertEqual(span2.get_tag("operation_name"), "aws.apigateway.rest") self.assertEqual(span2.service, "new-name") def test_remaps_specific_inferred_span_service_names_from_api_gateway_event(self): os.environ["DD_SERVICE_MAPPING"] = "1234567890:new-name" - + global dt + dt = importlib.reload(dt) event_sample_source = "api-gateway" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -776,7 +763,7 @@ def test_remaps_specific_inferred_span_service_names_from_api_gateway_event(self ctx = get_mock_context() ctx.aws_request_id = "123" - span1 = create_inferred_span(original_event, ctx) + span1 = dt.create_inferred_span(original_event, ctx) self.assertEqual(span1.get_tag("operation_name"), "aws.apigateway.rest") self.assertEqual(span1.service, "new-name") @@ -786,7 +773,7 @@ def test_remaps_specific_inferred_span_service_names_from_api_gateway_event(self ) # Create a deep copy so we don't modify the original event # Modify event2 as necessary event2["requestContext"]["apiId"] = "different" - span2 = create_inferred_span(event2, ctx) + span2 = dt.create_inferred_span(event2, ctx) self.assertEqual(span2.get_tag("operation_name"), "aws.apigateway.rest") self.assertEqual( span2.service, "70ixmpl4fl.execute-api.us-east-2.amazonaws.com" @@ -796,7 +783,8 @@ def test_remaps_specific_inferred_span_service_names_from_api_gateway_websocket_ self, ): os.environ["DD_SERVICE_MAPPING"] = "p62c47itsb:new-name" - + global dt + dt = importlib.reload(dt) event_sample_source = "api-gateway-websocket-default" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -805,7 +793,7 @@ def test_remaps_specific_inferred_span_service_names_from_api_gateway_websocket_ ctx = get_mock_context() ctx.aws_request_id = "123" - span1 = create_inferred_span(original_event, ctx) + span1 = dt.create_inferred_span(original_event, ctx) self.assertEqual(span1.get_tag("operation_name"), "aws.apigateway.websocket") self.assertEqual(span1.service, "new-name") @@ -815,17 +803,18 @@ def test_remaps_specific_inferred_span_service_names_from_api_gateway_websocket_ ) # Create a deep copy so we don't modify the original event # Modify event2 as necessary event2["requestContext"]["apiId"] = "different" - span2 = create_inferred_span(event2, ctx) + span2 = dt.create_inferred_span(event2, ctx) self.assertEqual(span2.get_tag("operation_name"), "aws.apigateway.websocket") self.assertEqual( span2.service, "p62c47itsb.execute-api.eu-west-1.amazonaws.com" ) - def test_remapQs_specific_inferred_span_service_names_from_api_gateway_http_event( + def test_remaps_specific_inferred_span_service_names_from_api_gateway_http_event( self, ): os.environ["DD_SERVICE_MAPPING"] = "x02yirxc7a:new-name" - + global dt + dt = importlib.reload(dt) event_sample_source = "http-api" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -834,7 +823,7 @@ def test_remapQs_specific_inferred_span_service_names_from_api_gateway_http_even ctx = get_mock_context() ctx.aws_request_id = "123" - span1 = create_inferred_span(original_event, ctx) + span1 = dt.create_inferred_span(original_event, ctx) self.assertEqual(span1.get_tag("operation_name"), "aws.httpapi") self.assertEqual(span1.service, "new-name") @@ -844,7 +833,7 @@ def test_remapQs_specific_inferred_span_service_names_from_api_gateway_http_even ) # Create a deep copy so we don't modify the original event # Modify event2 as necessary event2["requestContext"]["apiId"] = "different" - span2 = create_inferred_span(event2, ctx) + span2 = dt.create_inferred_span(event2, ctx) self.assertEqual(span2.get_tag("operation_name"), "aws.httpapi") self.assertEqual( span2.service, "x02yirxc7a.execute-api.eu-west-1.amazonaws.com" @@ -852,7 +841,8 @@ def test_remapQs_specific_inferred_span_service_names_from_api_gateway_http_even def test_remaps_all_inferred_span_service_names_from_lambda_url_event(self): os.environ["DD_SERVICE_MAPPING"] = "lambda_url:new-name" - + global dt + dt = importlib.reload(dt) event_sample_source = "lambda-url" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -861,7 +851,7 @@ def test_remaps_all_inferred_span_service_names_from_lambda_url_event(self): ctx = get_mock_context() ctx.aws_request_id = "123" - span1 = create_inferred_span(original_event, ctx) + span1 = dt.create_inferred_span(original_event, ctx) self.assertEqual(span1.get_tag("operation_name"), "aws.lambda.url") self.assertEqual(span1.service, "new-name") @@ -873,13 +863,14 @@ def test_remaps_all_inferred_span_service_names_from_lambda_url_event(self): event2["requestContext"][ "domainName" ] = "different.lambda-url.eu-south-1.amazonaws.com" - span2 = create_inferred_span(event2, ctx) + span2 = dt.create_inferred_span(event2, ctx) self.assertEqual(span2.get_tag("operation_name"), "aws.lambda.url") self.assertEqual(span2.service, "new-name") def test_remaps_specific_inferred_span_service_names_from_lambda_url_event(self): os.environ["DD_SERVICE_MAPPING"] = "a8hyhsshac:new-name" - + global dt + dt = importlib.reload(dt) event_sample_source = "lambda-url" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -888,7 +879,7 @@ def test_remaps_specific_inferred_span_service_names_from_lambda_url_event(self) ctx = get_mock_context() ctx.aws_request_id = "123" - span1 = create_inferred_span(original_event, ctx) + span1 = dt.create_inferred_span(original_event, ctx) self.assertEqual(span1.get_tag("operation_name"), "aws.lambda.url") self.assertEqual(span1.service, "new-name") @@ -898,7 +889,7 @@ def test_remaps_specific_inferred_span_service_names_from_lambda_url_event(self) ) # Create a deep copy so we don't modify the original event # Modify event2 as necessary event2["requestContext"]["apiId"] = "different" - span2 = create_inferred_span(event2, ctx) + span2 = dt.create_inferred_span(event2, ctx) self.assertEqual(span2.get_tag("operation_name"), "aws.lambda.url") self.assertEqual( span2.service, "a8hyhsshac.lambda-url.eu-south-1.amazonaws.com" @@ -906,7 +897,8 @@ def test_remaps_specific_inferred_span_service_names_from_lambda_url_event(self) def test_remaps_all_inferred_span_service_names_from_sqs_event(self): os.environ["DD_SERVICE_MAPPING"] = "lambda_sqs:new-name" - + global dt + dt = importlib.reload(dt) event_sample_source = "sqs-string-msg-attribute" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -915,7 +907,7 @@ def test_remaps_all_inferred_span_service_names_from_sqs_event(self): ctx = get_mock_context() ctx.aws_request_id = "123" - span1 = create_inferred_span(original_event, ctx) + span1 = dt.create_inferred_span(original_event, ctx) self.assertEqual(span1.get_tag("operation_name"), "aws.sqs") self.assertEqual(span1.service, "new-name") @@ -924,13 +916,14 @@ def test_remaps_all_inferred_span_service_names_from_sqs_event(self): event2["Records"][0][ "eventSourceARN" ] = "arn:aws:sqs:eu-west-1:123456789012:different-sqs-url" - span2 = create_inferred_span(event2, ctx) + span2 = dt.create_inferred_span(event2, ctx) self.assertEqual(span2.get_tag("operation_name"), "aws.sqs") self.assertEqual(span2.service, "new-name") def test_remaps_specific_inferred_span_service_names_from_sqs_event(self): os.environ["DD_SERVICE_MAPPING"] = "InferredSpansQueueNode:new-name" - + global dt + dt = importlib.reload(dt) event_sample_source = "sqs-string-msg-attribute" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -939,7 +932,7 @@ def test_remaps_specific_inferred_span_service_names_from_sqs_event(self): ctx = get_mock_context() ctx.aws_request_id = "123" - span1 = create_inferred_span(original_event, ctx) + span1 = dt.create_inferred_span(original_event, ctx) self.assertEqual(span1.get_tag("operation_name"), "aws.sqs") self.assertEqual(span1.service, "new-name") @@ -948,13 +941,14 @@ def test_remaps_specific_inferred_span_service_names_from_sqs_event(self): event2["Records"][0][ "eventSourceARN" ] = "arn:aws:sqs:eu-west-1:123456789012:different-sqs-url" - span2 = create_inferred_span(event2, ctx) + span2 = dt.create_inferred_span(event2, ctx) self.assertEqual(span2.get_tag("operation_name"), "aws.sqs") self.assertEqual(span2.service, "sqs") def test_remaps_all_inferred_span_service_names_from_sns_event(self): os.environ["DD_SERVICE_MAPPING"] = "lambda_sns:new-name" - + global dt + dt = importlib.reload(dt) event_sample_source = "sns-string-msg-attribute" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -963,7 +957,7 @@ def test_remaps_all_inferred_span_service_names_from_sns_event(self): ctx = get_mock_context() ctx.aws_request_id = "123" - span1 = create_inferred_span(original_event, ctx) + span1 = dt.create_inferred_span(original_event, ctx) self.assertEqual(span1.get_tag("operation_name"), "aws.sns") self.assertEqual(span1.service, "new-name") @@ -972,13 +966,14 @@ def test_remaps_all_inferred_span_service_names_from_sns_event(self): event2["Records"][0]["Sns"][ "TopicArn" ] = "arn:aws:sns:us-west-2:123456789012:different-sns-topic" - span2 = create_inferred_span(event2, ctx) + span2 = dt.create_inferred_span(event2, ctx) self.assertEqual(span2.get_tag("operation_name"), "aws.sns") self.assertEqual(span2.service, "new-name") def test_remaps_specific_inferred_span_service_names_from_sns_event(self): os.environ["DD_SERVICE_MAPPING"] = "serverlessTracingTopicPy:new-name" - + global dt + dt = importlib.reload(dt) event_sample_source = "sns-string-msg-attribute" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -987,7 +982,7 @@ def test_remaps_specific_inferred_span_service_names_from_sns_event(self): ctx = get_mock_context() ctx.aws_request_id = "123" - span1 = create_inferred_span(original_event, ctx) + span1 = dt.create_inferred_span(original_event, ctx) self.assertEqual(span1.get_tag("operation_name"), "aws.sns") self.assertEqual(span1.service, "new-name") @@ -996,13 +991,14 @@ def test_remaps_specific_inferred_span_service_names_from_sns_event(self): event2["Records"][0]["Sns"][ "TopicArn" ] = "arn:aws:sns:us-west-2:123456789012:different-sns-topic" - span2 = create_inferred_span(event2, ctx) + span2 = dt.create_inferred_span(event2, ctx) self.assertEqual(span2.get_tag("operation_name"), "aws.sns") self.assertEqual(span2.service, "sns") def test_remaps_all_inferred_span_service_names_from_kinesis_event(self): os.environ["DD_SERVICE_MAPPING"] = "lambda_kinesis:new-name" - + global dt + dt = importlib.reload(dt) event_sample_source = "kinesis" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -1011,7 +1007,7 @@ def test_remaps_all_inferred_span_service_names_from_kinesis_event(self): ctx = get_mock_context() ctx.aws_request_id = "123" - span1 = create_inferred_span(original_event, ctx) + span1 = dt.create_inferred_span(original_event, ctx) self.assertEqual(span1.get_tag("operation_name"), "aws.kinesis") self.assertEqual(span1.service, "new-name") @@ -1020,13 +1016,14 @@ def test_remaps_all_inferred_span_service_names_from_kinesis_event(self): event2["Records"][0][ "eventSourceARN" ] = "arn:aws:kinesis:eu-west-1:601427279990:stream/differentKinesisStream" - span2 = create_inferred_span(event2, ctx) + span2 = dt.create_inferred_span(event2, ctx) self.assertEqual(span2.get_tag("operation_name"), "aws.kinesis") self.assertEqual(span2.service, "new-name") def test_remaps_specific_inferred_span_service_names_from_kinesis_event(self): os.environ["DD_SERVICE_MAPPING"] = "Different_EXAMPLE:new-name" - + global dt + dt = importlib.reload(dt) event_sample_source = "kinesis" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -1035,7 +1032,7 @@ def test_remaps_specific_inferred_span_service_names_from_kinesis_event(self): ctx = get_mock_context() ctx.aws_request_id = "123" - span1 = create_inferred_span(original_event, ctx) + span1 = dt.create_inferred_span(original_event, ctx) self.assertEqual(span1.get_tag("operation_name"), "aws.kinesis") self.assertEqual(span1.service, "kinesis") @@ -1044,13 +1041,14 @@ def test_remaps_specific_inferred_span_service_names_from_kinesis_event(self): event2["Records"][0][ "eventSourceARN" ] = "arn:aws:kinesis:eu-west-1:601427279990:stream/DifferentKinesisStream" - span2 = create_inferred_span(event2, ctx) + span2 = dt.create_inferred_span(event2, ctx) self.assertEqual(span2.get_tag("operation_name"), "aws.kinesis") self.assertEqual(span2.service, "kinesis") def test_remaps_all_inferred_span_service_names_from_s3_event(self): os.environ["DD_SERVICE_MAPPING"] = "lambda_s3:new-name" - + global dt + dt = importlib.reload(dt) event_sample_source = "s3" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -1059,7 +1057,7 @@ def test_remaps_all_inferred_span_service_names_from_s3_event(self): ctx = get_mock_context() ctx.aws_request_id = "123" - span1 = create_inferred_span(original_event, ctx) + span1 = dt.create_inferred_span(original_event, ctx) self.assertEqual(span1.get_tag("operation_name"), "aws.s3") self.assertEqual(span1.service, "new-name") @@ -1068,13 +1066,14 @@ def test_remaps_all_inferred_span_service_names_from_s3_event(self): event2["Records"][0]["s3"]["bucket"][ "arn" ] = "arn:aws:s3:::different-example-bucket" - span2 = create_inferred_span(event2, ctx) + span2 = dt.create_inferred_span(event2, ctx) self.assertEqual(span2.get_tag("operation_name"), "aws.s3") self.assertEqual(span2.service, "new-name") def test_remaps_specific_inferred_span_service_names_from_s3_event(self): os.environ["DD_SERVICE_MAPPING"] = "example-bucket:new-name" - + global dt + dt = importlib.reload(dt) event_sample_source = "s3" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -1083,20 +1082,21 @@ def test_remaps_specific_inferred_span_service_names_from_s3_event(self): ctx = get_mock_context() ctx.aws_request_id = "123" - span1 = create_inferred_span(original_event, ctx) + span1 = dt.create_inferred_span(original_event, ctx) self.assertEqual(span1.get_tag("operation_name"), "aws.s3") self.assertEqual(span1.service, "new-name") # Testing the second event event2 = copy.deepcopy(original_event) event2["Records"][0]["s3"]["bucket"]["name"] = "different-example-bucket" - span2 = create_inferred_span(event2, ctx) + span2 = dt.create_inferred_span(event2, ctx) self.assertEqual(span2.get_tag("operation_name"), "aws.s3") self.assertEqual(span2.service, "s3") def test_remaps_all_inferred_span_service_names_from_dynamodb_event(self): os.environ["DD_SERVICE_MAPPING"] = "lambda_dynamodb:new-name" - + global dt + dt = importlib.reload(dt) event_sample_source = "dynamodb" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -1105,7 +1105,7 @@ def test_remaps_all_inferred_span_service_names_from_dynamodb_event(self): ctx = get_mock_context() ctx.aws_request_id = "123" - span1 = create_inferred_span(original_event, ctx) + span1 = dt.create_inferred_span(original_event, ctx) self.assertEqual(span1.get_tag("operation_name"), "aws.dynamodb") self.assertEqual(span1.service, "new-name") @@ -1114,13 +1114,14 @@ def test_remaps_all_inferred_span_service_names_from_dynamodb_event(self): event2["Records"][0][ "eventSourceARN" ] = "arn:aws:dynamodb:us-east-1:123456789012:table/DifferentExampleTableWithStream/stream/2015-06-27T00:48:05.899" - span2 = create_inferred_span(event2, ctx) + span2 = dt.create_inferred_span(event2, ctx) self.assertEqual(span2.get_tag("operation_name"), "aws.dynamodb") self.assertEqual(span2.service, "new-name") def test_remaps_specific_inferred_span_service_names_from_dynamodb_event(self): os.environ["DD_SERVICE_MAPPING"] = "ExampleTableWithStream:new-name" - + global dt + dt = importlib.reload(dt) event_sample_source = "dynamodb" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -1129,7 +1130,7 @@ def test_remaps_specific_inferred_span_service_names_from_dynamodb_event(self): ctx = get_mock_context() ctx.aws_request_id = "123" - span1 = create_inferred_span(original_event, ctx) + span1 = dt.create_inferred_span(original_event, ctx) self.assertEqual(span1.get_tag("operation_name"), "aws.dynamodb") self.assertEqual(span1.service, "new-name") @@ -1138,13 +1139,14 @@ def test_remaps_specific_inferred_span_service_names_from_dynamodb_event(self): event2["Records"][0][ "eventSourceARN" ] = "arn:aws:dynamodb:us-east-1:123456789012:table/DifferentExampleTableWithStream/stream/2015-06-27T00:48:05.899" - span2 = create_inferred_span(event2, ctx) + span2 = dt.create_inferred_span(event2, ctx) self.assertEqual(span2.get_tag("operation_name"), "aws.dynamodb") self.assertEqual(span2.service, "dynamodb") def test_remaps_all_inferred_span_service_names_from_eventbridge_event(self): os.environ["DD_SERVICE_MAPPING"] = "lambda_eventbridge:new-name" - + global dt + dt = importlib.reload(dt) event_sample_source = "eventbridge-custom" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -1153,20 +1155,21 @@ def test_remaps_all_inferred_span_service_names_from_eventbridge_event(self): ctx = get_mock_context() ctx.aws_request_id = "123" - span1 = create_inferred_span(original_event, ctx) + span1 = dt.create_inferred_span(original_event, ctx) self.assertEqual(span1.get_tag("operation_name"), "aws.eventbridge") self.assertEqual(span1.service, "new-name") # Testing the second event event2 = copy.deepcopy(original_event) event2["source"] = "different.eventbridge.custom.event.sender" - span2 = create_inferred_span(event2, ctx) + span2 = dt.create_inferred_span(event2, ctx) self.assertEqual(span2.get_tag("operation_name"), "aws.eventbridge") self.assertEqual(span2.service, "new-name") def test_remaps_specific_inferred_span_service_names_from_eventbridge_event(self): os.environ["DD_SERVICE_MAPPING"] = "eventbridge.custom.event.sender:new-name" - + global dt + dt = importlib.reload(dt) event_sample_source = "eventbridge-custom" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -1175,14 +1178,14 @@ def test_remaps_specific_inferred_span_service_names_from_eventbridge_event(self ctx = get_mock_context() ctx.aws_request_id = "123" - span1 = create_inferred_span(original_event, ctx) + span1 = dt.create_inferred_span(original_event, ctx) self.assertEqual(span1.get_tag("operation_name"), "aws.eventbridge") self.assertEqual(span1.service, "new-name") # Testing the second event event2 = copy.deepcopy(original_event) event2["source"] = "different.eventbridge.custom.event.sender" - span2 = create_inferred_span(event2, ctx) + span2 = dt.create_inferred_span(event2, ctx) self.assertEqual(span2.get_tag("operation_name"), "aws.eventbridge") self.assertEqual(span2.service, "eventbridge") @@ -1195,7 +1198,7 @@ def test_create_inferred_span_from_api_gateway_event(self): event = json.load(event) ctx = get_mock_context() ctx.aws_request_id = "123" - span = create_inferred_span(event, ctx) + span = dt.create_inferred_span(event, ctx) self.assertEqual(span.get_tag("operation_name"), "aws.apigateway.rest") self.assertEqual( span.service, @@ -1217,8 +1220,8 @@ def test_create_inferred_span_from_api_gateway_event(self): self.assertEqual(span.get_tag("stage"), "prod") self.assertEqual(span.start, 1428582896.0) self.assertEqual(span.span_type, "http") - self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") - self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "sync") + self.assertEqual(span.get_tag(dt.InferredSpanInfo.TAG_SOURCE), "self") + self.assertEqual(span.get_tag(dt.InferredSpanInfo.SYNCHRONICITY), "sync") def test_create_inferred_span_from_api_gateway_non_proxy_event_async(self): event_sample_source = "api-gateway-non-proxy-async" @@ -1227,7 +1230,7 @@ def test_create_inferred_span_from_api_gateway_non_proxy_event_async(self): event = json.load(event) ctx = get_mock_context() ctx.aws_request_id = "123" - span = create_inferred_span(event, ctx) + span = dt.create_inferred_span(event, ctx) self.assertEqual(span.get_tag("operation_name"), "aws.apigateway.rest") self.assertEqual( span.service, @@ -1249,8 +1252,8 @@ def test_create_inferred_span_from_api_gateway_non_proxy_event_async(self): self.assertEqual(span.get_tag("stage"), "dev") self.assertEqual(span.start, 1631210915.2510002) self.assertEqual(span.span_type, "http") - self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") - self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "async") + self.assertEqual(span.get_tag(dt.InferredSpanInfo.TAG_SOURCE), "self") + self.assertEqual(span.get_tag(dt.InferredSpanInfo.SYNCHRONICITY), "async") def test_create_inferred_span_from_api_gateway_non_proxy_event_sync(self): event_sample_source = "api-gateway-non-proxy" @@ -1259,7 +1262,7 @@ def test_create_inferred_span_from_api_gateway_non_proxy_event_sync(self): event = json.load(event) ctx = get_mock_context() ctx.aws_request_id = "123" - span = create_inferred_span(event, ctx) + span = dt.create_inferred_span(event, ctx) self.assertEqual(span.get_tag("operation_name"), "aws.apigateway.rest") self.assertEqual( span.service, @@ -1281,8 +1284,8 @@ def test_create_inferred_span_from_api_gateway_non_proxy_event_sync(self): self.assertEqual(span.get_tag("stage"), "dev") self.assertEqual(span.start, 1631210915.2510002) self.assertEqual(span.span_type, "http") - self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") - self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "sync") + self.assertEqual(span.get_tag(dt.InferredSpanInfo.TAG_SOURCE), "self") + self.assertEqual(span.get_tag(dt.InferredSpanInfo.SYNCHRONICITY), "sync") def test_create_inferred_span_from_http_api_event(self): event_sample_source = "http-api" @@ -1291,7 +1294,7 @@ def test_create_inferred_span_from_http_api_event(self): event = json.load(event) ctx = get_mock_context() ctx.aws_request_id = "123" - span = create_inferred_span(event, ctx) + span = dt.create_inferred_span(event, ctx) self.assertEqual(span.get_tag("operation_name"), "aws.httpapi") self.assertEqual( span.service, @@ -1316,8 +1319,8 @@ def test_create_inferred_span_from_http_api_event(self): self.assertEqual(span.get_tag("http.user_agent"), "curl/7.64.1") self.assertEqual(span.start, 1631212283.738) self.assertEqual(span.span_type, "http") - self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") - self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "sync") + self.assertEqual(span.get_tag(dt.InferredSpanInfo.TAG_SOURCE), "self") + self.assertEqual(span.get_tag(dt.InferredSpanInfo.SYNCHRONICITY), "sync") def test_create_inferred_span_from_api_gateway_websocket_default_event(self): event_sample_source = "api-gateway-websocket-default" @@ -1326,7 +1329,7 @@ def test_create_inferred_span_from_api_gateway_websocket_default_event(self): event = json.load(event) ctx = get_mock_context() ctx.aws_request_id = "123" - span = create_inferred_span(event, ctx) + span = dt.create_inferred_span(event, ctx) self.assertEqual(span.get_tag("operation_name"), "aws.apigateway.websocket") self.assertEqual( span.service, @@ -1351,8 +1354,8 @@ def test_create_inferred_span_from_api_gateway_websocket_default_event(self): self.assertEqual(span.get_tag("message_direction"), "IN") self.assertEqual(span.start, 1631285061.365) self.assertEqual(span.span_type, "web") - self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") - self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "sync") + self.assertEqual(span.get_tag(dt.InferredSpanInfo.TAG_SOURCE), "self") + self.assertEqual(span.get_tag(dt.InferredSpanInfo.SYNCHRONICITY), "sync") def test_create_inferred_span_from_api_gateway_websocket_connect_event(self): event_sample_source = "api-gateway-websocket-connect" @@ -1361,7 +1364,7 @@ def test_create_inferred_span_from_api_gateway_websocket_connect_event(self): event = json.load(event) ctx = get_mock_context() ctx.aws_request_id = "123" - span = create_inferred_span(event, ctx) + span = dt.create_inferred_span(event, ctx) self.assertEqual(span.get_tag("operation_name"), "aws.apigateway.websocket") self.assertEqual( span.service, @@ -1386,8 +1389,8 @@ def test_create_inferred_span_from_api_gateway_websocket_connect_event(self): self.assertEqual(span.get_tag("message_direction"), "IN") self.assertEqual(span.start, 1631284003.071) self.assertEqual(span.span_type, "web") - self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") - self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "sync") + self.assertEqual(span.get_tag(dt.InferredSpanInfo.TAG_SOURCE), "self") + self.assertEqual(span.get_tag(dt.InferredSpanInfo.SYNCHRONICITY), "sync") def test_create_inferred_span_from_api_gateway_websocket_disconnect_event(self): event_sample_source = "api-gateway-websocket-disconnect" @@ -1396,7 +1399,7 @@ def test_create_inferred_span_from_api_gateway_websocket_disconnect_event(self): event = json.load(event) ctx = get_mock_context() ctx.aws_request_id = "123" - span = create_inferred_span(event, ctx) + span = dt.create_inferred_span(event, ctx) self.assertEqual(span.get_tag("operation_name"), "aws.apigateway.websocket") self.assertEqual( span.service, @@ -1421,8 +1424,8 @@ def test_create_inferred_span_from_api_gateway_websocket_disconnect_event(self): self.assertEqual(span.get_tag("message_direction"), "IN") self.assertEqual(span.start, 1631284034.737) self.assertEqual(span.span_type, "web") - self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") - self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "sync") + self.assertEqual(span.get_tag(dt.InferredSpanInfo.TAG_SOURCE), "self") + self.assertEqual(span.get_tag(dt.InferredSpanInfo.SYNCHRONICITY), "sync") def test_create_inferred_span_from_sqs_event_string_msg_attr(self): event_sample_name = "sqs-string-msg-attribute" @@ -1431,7 +1434,7 @@ def test_create_inferred_span_from_sqs_event_string_msg_attr(self): event = json.load(event) ctx = get_mock_context() ctx.aws_request_id = "123" - span = create_inferred_span(event, ctx) + span = dt.create_inferred_span(event, ctx) self.assertEqual(span.get_tag("operation_name"), "aws.sqs") self.assertEqual( span.service, @@ -1459,8 +1462,8 @@ def test_create_inferred_span_from_sqs_event_string_msg_attr(self): ) self.assertEqual(span.start, 1634662094.538) self.assertEqual(span.span_type, "web") - self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") - self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "async") + self.assertEqual(span.get_tag(dt.InferredSpanInfo.TAG_SOURCE), "self") + self.assertEqual(span.get_tag(dt.InferredSpanInfo.SYNCHRONICITY), "async") def test_create_inferred_span_from_sns_event_string_msg_attr(self): event_sample_name = "sns-string-msg-attribute" @@ -1469,7 +1472,7 @@ def test_create_inferred_span_from_sns_event_string_msg_attr(self): event = json.load(event) ctx = get_mock_context() ctx.aws_request_id = "123" - span = create_inferred_span(event, ctx) + span = dt.create_inferred_span(event, ctx) self.assertEqual(span.get_tag("operation_name"), "aws.sns") self.assertEqual( span.service, @@ -1497,8 +1500,8 @@ def test_create_inferred_span_from_sns_event_string_msg_attr(self): self.assertEqual(span.get_tag("subject"), None) self.assertEqual(span.start, 1643638421.637) self.assertEqual(span.span_type, "web") - self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") - self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "async") + self.assertEqual(span.get_tag(dt.InferredSpanInfo.TAG_SOURCE), "self") + self.assertEqual(span.get_tag(dt.InferredSpanInfo.SYNCHRONICITY), "async") def test_create_inferred_span_from_sns_event_b64_msg_attr(self): event_sample_name = "sns-b64-msg-attribute" @@ -1507,7 +1510,7 @@ def test_create_inferred_span_from_sns_event_b64_msg_attr(self): event = json.load(event) ctx = get_mock_context() ctx.aws_request_id = "123" - span = create_inferred_span(event, ctx) + span = dt.create_inferred_span(event, ctx) self.assertEqual(span.get_tag("operation_name"), "aws.sns") self.assertEqual( span.service, @@ -1535,8 +1538,8 @@ def test_create_inferred_span_from_sns_event_b64_msg_attr(self): self.assertEqual(span.get_tag("subject"), None) self.assertEqual(span.start, 1643638421.637) self.assertEqual(span.span_type, "web") - self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") - self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "async") + self.assertEqual(span.get_tag(dt.InferredSpanInfo.TAG_SOURCE), "self") + self.assertEqual(span.get_tag(dt.InferredSpanInfo.SYNCHRONICITY), "async") def test_create_inferred_span_from_kinesis_event(self): event_sample_source = "kinesis" @@ -1545,7 +1548,7 @@ def test_create_inferred_span_from_kinesis_event(self): event = json.load(event) ctx = get_mock_context() ctx.aws_request_id = "123" - span = create_inferred_span(event, ctx) + span = dt.create_inferred_span(event, ctx) self.assertEqual(span.get_tag("operation_name"), "aws.kinesis") self.assertEqual( span.service, @@ -1577,8 +1580,8 @@ def test_create_inferred_span_from_kinesis_event(self): self.assertEqual(span.get_tag("partition_key"), "partitionkey") self.assertEqual(span.start, 1643638425.163) self.assertEqual(span.span_type, "web") - self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") - self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "async") + self.assertEqual(span.get_tag(dt.InferredSpanInfo.TAG_SOURCE), "self") + self.assertEqual(span.get_tag(dt.InferredSpanInfo.SYNCHRONICITY), "async") def test_create_inferred_span_from_dynamodb_event(self): event_sample_source = "dynamodb" @@ -1587,7 +1590,7 @@ def test_create_inferred_span_from_dynamodb_event(self): event = json.load(event) ctx = get_mock_context() ctx.aws_request_id = "123" - span = create_inferred_span(event, ctx) + span = dt.create_inferred_span(event, ctx) self.assertEqual(span.get_tag("operation_name"), "aws.dynamodb") self.assertEqual( span.service, @@ -1616,8 +1619,8 @@ def test_create_inferred_span_from_dynamodb_event(self): self.assertEqual(span.get_tag("size_bytes"), "26") self.assertEqual(span.start, 1428537600.0) self.assertEqual(span.span_type, "web") - self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") - self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "async") + self.assertEqual(span.get_tag(dt.InferredSpanInfo.TAG_SOURCE), "self") + self.assertEqual(span.get_tag(dt.InferredSpanInfo.SYNCHRONICITY), "async") def test_create_inferred_span_from_s3_event(self): event_sample_source = "s3" @@ -1626,7 +1629,7 @@ def test_create_inferred_span_from_s3_event(self): event = json.load(event) ctx = get_mock_context() ctx.aws_request_id = "123" - span = create_inferred_span(event, ctx) + span = dt.create_inferred_span(event, ctx) self.assertEqual(span.get_tag("operation_name"), "aws.s3") self.assertEqual( span.service, @@ -1653,8 +1656,8 @@ def test_create_inferred_span_from_s3_event(self): ) self.assertEqual(span.start, 0.0) self.assertEqual(span.span_type, "web") - self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") - self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "async") + self.assertEqual(span.get_tag(dt.InferredSpanInfo.TAG_SOURCE), "self") + self.assertEqual(span.get_tag(dt.InferredSpanInfo.SYNCHRONICITY), "async") def test_create_inferred_span_from_eventbridge_event(self): event_sample_source = "eventbridge-custom" @@ -1663,7 +1666,7 @@ def test_create_inferred_span_from_eventbridge_event(self): event = json.load(event) ctx = get_mock_context() ctx.aws_request_id = "123" - span = create_inferred_span(event, ctx) + span = dt.create_inferred_span(event, ctx) self.assertEqual(span.get_tag("operation_name"), "aws.eventbridge") self.assertEqual( span.service, @@ -1682,8 +1685,8 @@ def test_create_inferred_span_from_eventbridge_event(self): self.assertEqual(span.get_tag("request_id"), None) self.assertEqual(span.start, 1635989865.0) self.assertEqual(span.span_type, "web") - self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") - self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "async") + self.assertEqual(span.get_tag(dt.InferredSpanInfo.TAG_SOURCE), "self") + self.assertEqual(span.get_tag(dt.InferredSpanInfo.SYNCHRONICITY), "async") def test_extract_context_from_eventbridge_event(self): event_sample_source = "eventbridge-custom" @@ -1691,7 +1694,7 @@ def test_extract_context_from_eventbridge_event(self): with open(test_file, "r") as event: event = json.load(event) ctx = get_mock_context() - trace, parent, sampling = extract_context_from_eventbridge_event(event, ctx) + trace, parent, sampling = dt.extract_context_from_eventbridge_event(event, ctx) self.assertEqual(trace, "12345") self.assertEqual(parent, "67890"), self.assertEqual(sampling, "2") @@ -1702,7 +1705,7 @@ def test_extract_dd_trace_context_for_eventbridge(self): with open(test_file, "r") as event: event = json.load(event) ctx = get_mock_context() - context, source, event_type = extract_dd_trace_context(event, ctx) + context, source, event_type = dt.extract_dd_trace_context(event, ctx) self.assertEqual(context["trace-id"], "12345") self.assertEqual(context["parent-id"], "67890") @@ -1712,7 +1715,7 @@ def test_extract_context_from_sqs_event_with_string_msg_attr(self): with open(test_file, "r") as event: event = json.load(event) ctx = get_mock_context() - context, source, event_type = extract_dd_trace_context(event, ctx) + context, source, event_type = dt.extract_dd_trace_context(event, ctx) self.assertEqual(context["trace-id"], "2684756524522091840") self.assertEqual(context["parent-id"], "7431398482019833808") self.assertEqual(context["sampling-priority"], "1") @@ -1723,7 +1726,7 @@ def test_extract_context_from_sqs_batch_event(self): with open(test_file, "r") as event: event = json.load(event) ctx = get_mock_context() - context, source, event_source = extract_dd_trace_context(event, ctx) + context, source, event_source = dt.extract_dd_trace_context(event, ctx) self.assertEqual(context["trace-id"], "2684756524522091840") self.assertEqual(context["parent-id"], "7431398482019833808") self.assertEqual(context["sampling-priority"], "1") @@ -1734,7 +1737,7 @@ def test_extract_context_from_sns_event_with_string_msg_attr(self): with open(test_file, "r") as event: event = json.load(event) ctx = get_mock_context() - context, source, event_source = extract_dd_trace_context(event, ctx) + context, source, event_source = dt.extract_dd_trace_context(event, ctx) self.assertEqual(context["trace-id"], "4948377316357291421") self.assertEqual(context["parent-id"], "6746998015037429512") self.assertEqual(context["sampling-priority"], "1") @@ -1745,7 +1748,7 @@ def test_extract_context_from_sns_event_with_b64_msg_attr(self): with open(test_file, "r") as event: event = json.load(event) ctx = get_mock_context() - context, source, event_source = extract_dd_trace_context(event, ctx) + context, source, event_source = dt.extract_dd_trace_context(event, ctx) self.assertEqual(context["trace-id"], "4948377316357291421") self.assertEqual(context["parent-id"], "6746998015037429512") self.assertEqual(context["sampling-priority"], "1") @@ -1756,7 +1759,7 @@ def test_extract_context_from_sns_batch_event(self): with open(test_file, "r") as event: event = json.load(event) ctx = get_mock_context() - context, source, event_source = extract_dd_trace_context(event, ctx) + context, source, event_source = dt.extract_dd_trace_context(event, ctx) self.assertEqual(context["trace-id"], "4948377316357291421") self.assertEqual(context["parent-id"], "6746998015037429512") self.assertEqual(context["sampling-priority"], "1") @@ -1767,7 +1770,7 @@ def test_extract_context_from_kinesis_event(self): with open(test_file, "r") as event: event = json.load(event) ctx = get_mock_context() - context, source, event_source = extract_dd_trace_context(event, ctx) + context, source, event_source = dt.extract_dd_trace_context(event, ctx) self.assertEqual(context["trace-id"], "4948377316357291421") self.assertEqual(context["parent-id"], "2876253380018681026") self.assertEqual(context["sampling-priority"], "1") @@ -1778,7 +1781,7 @@ def test_extract_context_from_kinesis_batch_event(self): with open(test_file, "r") as event: event = json.load(event) ctx = get_mock_context() - context, source, event_source = extract_dd_trace_context(event, ctx) + context, source, event_source = dt.extract_dd_trace_context(event, ctx) self.assertEqual(context["trace-id"], "4948377316357291421") self.assertEqual(context["parent-id"], "2876253380018681026") self.assertEqual(context["sampling-priority"], "1") @@ -1790,7 +1793,7 @@ def test_create_inferred_span_from_api_gateway_event_no_apiid(self): event = json.load(event) ctx = get_mock_context() ctx.aws_request_id = "123" - span = create_inferred_span(event, ctx) + span = dt.create_inferred_span(event, ctx) self.assertEqual(span.get_tag("operation_name"), "aws.apigateway.rest") self.assertEqual( span.service, @@ -1812,14 +1815,14 @@ def test_create_inferred_span_from_api_gateway_event_no_apiid(self): self.assertEqual(span.get_tag("stage"), "prod") self.assertEqual(span.start, 1428582896.0) self.assertEqual(span.span_type, "http") - self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") - self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "sync") + self.assertEqual(span.get_tag(dt.InferredSpanInfo.TAG_SOURCE), "self") + self.assertEqual(span.get_tag(dt.InferredSpanInfo.SYNCHRONICITY), "sync") @patch("datadog_lambda.tracing.submit_errors_metric") def test_mark_trace_as_error_for_5xx_responses_getting_400_response_code( self, mock_submit_errors_metric ): - mark_trace_as_error_for_5xx_responses( + dt.mark_trace_as_error_for_5xx_responses( context="fake_context", status_code="400", span="empty_span" ) mock_submit_errors_metric.assert_not_called() @@ -1830,7 +1833,7 @@ def test_mark_trace_as_error_for_5xx_responses_sends_error_metric_and_set_error_ ): mock_span = Mock(ddtrace.span.Span) status_code = "500" - mark_trace_as_error_for_5xx_responses( + dt.mark_trace_as_error_for_5xx_responses( context="fake_context", status_code=status_code, span=mock_span ) mock_submit_errors_metric.assert_called_once() @@ -1838,7 +1841,7 @@ def test_mark_trace_as_error_for_5xx_responses_sends_error_metric_and_set_error_ def test_no_error_with_nonetype_headers(self): lambda_ctx = get_mock_context() - ctx, source, event_type = extract_dd_trace_context( + ctx, source, event_type = dt.extract_dd_trace_context( {"headers": None}, lambda_ctx, ) @@ -1847,11 +1850,11 @@ def test_no_error_with_nonetype_headers(self): class TestStepFunctionsTraceContext(unittest.TestCase): def test_deterministic_m5_hash(self): - result = _deterministic_md5_hash("some_testing_random_string") + result = dt._deterministic_md5_hash("some_testing_random_string") self.assertEqual("2251275791555400689", result) def test_deterministic_m5_hash__result_the_same_as_backend(self): - result = _deterministic_md5_hash( + result = dt._deterministic_md5_hash( "arn:aws:states:sa-east-1:601427271234:express:DatadogStateMachine:acaf1a67-336a-e854-1599-2a627eb2dd8a" ":c8baf081-31f1-464d-971f-70cb17d01111#step-one#2022-12-08T21:08:19.224Z" ) @@ -1859,7 +1862,7 @@ def test_deterministic_m5_hash__result_the_same_as_backend(self): def test_deterministic_m5_hash__always_leading_with_zero(self): for i in range(100): - result = _deterministic_md5_hash(str(i)) + result = dt._deterministic_md5_hash(str(i)) result_in_binary = bin(int(result)) # Leading zeros will be omitted, so only test for full 64 bits present if len(result_in_binary) == 66: # "0b" + 64 bits. From e0dd56660889570fa1053f4765f828039ed37c70 Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez <49878080+zARODz11z@users.noreply.github.com> Date: Fri, 19 May 2023 08:56:45 -0700 Subject: [PATCH 05/10] revert poetry.lock and pyproject.toml --- poetry.lock | 680 +++++++++++++++++++++------------------------------- 1 file changed, 279 insertions(+), 401 deletions(-) diff --git a/poetry.lock b/poetry.lock index 69c0675b..c1946f57 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,41 +1,38 @@ -# This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand. +# This file is automatically @generated by Poetry and should not be changed by hand. [[package]] name = "attrs" -version = "23.1.0" +version = "22.2.0" description = "Classes Without Boilerplate" category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.6" files = [ - {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, - {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, + {file = "attrs-22.2.0-py3-none-any.whl", hash = "sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836"}, + {file = "attrs-22.2.0.tar.gz", hash = "sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99"}, ] -[package.dependencies] -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} - [package.extras] -cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] -dev = ["attrs[docs,tests]", "pre-commit"] -docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] -tests = ["attrs[tests-no-zope]", "zope-interface"] -tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +cov = ["attrs[tests]", "coverage-enable-subprocess", "coverage[toml] (>=5.3)"] +dev = ["attrs[docs,tests]"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope.interface"] +tests = ["attrs[tests-no-zope]", "zope.interface"] +tests-no-zope = ["cloudpickle", "cloudpickle", "hypothesis", "hypothesis", "mypy (>=0.971,<0.990)", "mypy (>=0.971,<0.990)", "pympler", "pympler", "pytest (>=4.3.0)", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-mypy-plugins", "pytest-xdist[psutil]", "pytest-xdist[psutil]"] [[package]] name = "boto3" -version = "1.26.135" +version = "1.26.41" description = "The AWS SDK for Python" category = "main" optional = true python-versions = ">= 3.7" files = [ - {file = "boto3-1.26.135-py3-none-any.whl", hash = "sha256:ba7ca9215a1026620741273da10d0d3cceb9f7649f7c101e616a287071826f9d"}, - {file = "boto3-1.26.135.tar.gz", hash = "sha256:23523d5d6aa51bba2461d67f6eb458d83b6a52d18e3d953b1ce71209b66462ec"}, + {file = "boto3-1.26.41-py3-none-any.whl", hash = "sha256:05a5ce3af2d7419e39d93498c7f56fd5c2cc17870c92c4abc75659553b0b16de"}, + {file = "boto3-1.26.41.tar.gz", hash = "sha256:8cbea352f28ec6b241f348356bcb8f331fc433bec3ad76ebf6194227f1a7f613"}, ] [package.dependencies] -botocore = ">=1.29.135,<1.30.0" +botocore = ">=1.29.41,<1.30.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.6.0,<0.7.0" @@ -44,14 +41,14 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.29.135" +version = "1.29.41" description = "Low-level, data-driven core of boto 3." category = "main" optional = true python-versions = ">= 3.7" files = [ - {file = "botocore-1.29.135-py3-none-any.whl", hash = "sha256:06502a4473924ef60ac0de908385a5afab9caee6c5b49cf6a330fab0d76ddf5f"}, - {file = "botocore-1.29.135.tar.gz", hash = "sha256:0c61d4e5e04fe5329fa65da6b31492ef9d0d5174d72fc2af69de2ed0f87804ca"}, + {file = "botocore-1.29.41-py3-none-any.whl", hash = "sha256:b670b7f8958a2908167081efb6ea39794bf61d618be729984629a63d85cf8bfe"}, + {file = "botocore-1.29.41.tar.gz", hash = "sha256:78761227d986d393956b6d08fdadcfe142748828e0e9db33f2f4c42a482dcd35"}, ] [package.dependencies] @@ -60,7 +57,7 @@ python-dateutil = ">=2.1,<3.0.0" urllib3 = ">=1.25.4,<1.27" [package.extras] -crt = ["awscrt (==0.16.9)"] +crt = ["awscrt (==0.15.3)"] [[package]] name = "bytecode" @@ -76,14 +73,14 @@ files = [ [[package]] name = "bytecode" -version = "0.14.1" +version = "0.14.0" description = "Python module to generate and modify bytecode" category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "bytecode-0.14.1-py3-none-any.whl", hash = "sha256:00a8f87d9e2385d445c9ee630a1860b75b4a93d646c6dfb15e769bec827609cc"}, - {file = "bytecode-0.14.1.tar.gz", hash = "sha256:82e99af6b0f9e71ba9c5daba11f370fc93adf97d423e93a22659dfc7895fb6a2"}, + {file = "bytecode-0.14.0-py3-none-any.whl", hash = "sha256:f7b7cbed3239acee036d6c0f9d04286b100921114601bf844ae569b95bf91a9f"}, + {file = "bytecode-0.14.0.tar.gz", hash = "sha256:d41ad53c657ba0bef1cb4828d9d6e450766e31cb66c6f91fc1851f052889d1b7"}, ] [package.dependencies] @@ -108,160 +105,90 @@ typing_extensions = {version = "*", markers = "python_version < \"3.8\""} [[package]] name = "certifi" -version = "2023.5.7" +version = "2022.12.7" description = "Python package for providing Mozilla's CA Bundle." category = "main" optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2023.5.7-py3-none-any.whl", hash = "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716"}, - {file = "certifi-2023.5.7.tar.gz", hash = "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7"}, + {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"}, + {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"}, ] [[package]] name = "charset-normalizer" -version = "3.1.0" +version = "2.1.1" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." category = "main" optional = false -python-versions = ">=3.7.0" -files = [ - {file = "charset-normalizer-3.1.0.tar.gz", hash = "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-win32.whl", hash = "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-win32.whl", hash = "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-win32.whl", hash = "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-win32.whl", hash = "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-win32.whl", hash = "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b"}, - {file = "charset_normalizer-3.1.0-py3-none-any.whl", hash = "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d"}, +python-versions = ">=3.6.0" +files = [ + {file = "charset-normalizer-2.1.1.tar.gz", hash = "sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845"}, + {file = "charset_normalizer-2.1.1-py3-none-any.whl", hash = "sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f"}, ] +[package.extras] +unicode-backport = ["unicodedata2"] + [[package]] name = "coverage" -version = "7.2.5" +version = "7.0.1" description = "Code coverage measurement for Python" category = "main" optional = true python-versions = ">=3.7" files = [ - {file = "coverage-7.2.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:883123d0bbe1c136f76b56276074b0c79b5817dd4238097ffa64ac67257f4b6c"}, - {file = "coverage-7.2.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d2fbc2a127e857d2f8898aaabcc34c37771bf78a4d5e17d3e1f5c30cd0cbc62a"}, - {file = "coverage-7.2.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f3671662dc4b422b15776cdca89c041a6349b4864a43aa2350b6b0b03bbcc7f"}, - {file = "coverage-7.2.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780551e47d62095e088f251f5db428473c26db7829884323e56d9c0c3118791a"}, - {file = "coverage-7.2.5-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:066b44897c493e0dcbc9e6a6d9f8bbb6607ef82367cf6810d387c09f0cd4fe9a"}, - {file = "coverage-7.2.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b9a4ee55174b04f6af539218f9f8083140f61a46eabcaa4234f3c2a452c4ed11"}, - {file = "coverage-7.2.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:706ec567267c96717ab9363904d846ec009a48d5f832140b6ad08aad3791b1f5"}, - {file = "coverage-7.2.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ae453f655640157d76209f42c62c64c4d4f2c7f97256d3567e3b439bd5c9b06c"}, - {file = "coverage-7.2.5-cp310-cp310-win32.whl", hash = "sha256:f81c9b4bd8aa747d417407a7f6f0b1469a43b36a85748145e144ac4e8d303cb5"}, - {file = "coverage-7.2.5-cp310-cp310-win_amd64.whl", hash = "sha256:dc945064a8783b86fcce9a0a705abd7db2117d95e340df8a4333f00be5efb64c"}, - {file = "coverage-7.2.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:40cc0f91c6cde033da493227797be2826cbf8f388eaa36a0271a97a332bfd7ce"}, - {file = "coverage-7.2.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a66e055254a26c82aead7ff420d9fa8dc2da10c82679ea850d8feebf11074d88"}, - {file = "coverage-7.2.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c10fbc8a64aa0f3ed136b0b086b6b577bc64d67d5581acd7cc129af52654384e"}, - {file = "coverage-7.2.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9a22cbb5ede6fade0482111fa7f01115ff04039795d7092ed0db43522431b4f2"}, - {file = "coverage-7.2.5-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:292300f76440651529b8ceec283a9370532f4ecba9ad67d120617021bb5ef139"}, - {file = "coverage-7.2.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:7ff8f3fb38233035028dbc93715551d81eadc110199e14bbbfa01c5c4a43f8d8"}, - {file = "coverage-7.2.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:a08c7401d0b24e8c2982f4e307124b671c6736d40d1c39e09d7a8687bddf83ed"}, - {file = "coverage-7.2.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ef9659d1cda9ce9ac9585c045aaa1e59223b143f2407db0eaee0b61a4f266fb6"}, - {file = "coverage-7.2.5-cp311-cp311-win32.whl", hash = "sha256:30dcaf05adfa69c2a7b9f7dfd9f60bc8e36b282d7ed25c308ef9e114de7fc23b"}, - {file = "coverage-7.2.5-cp311-cp311-win_amd64.whl", hash = "sha256:97072cc90f1009386c8a5b7de9d4fc1a9f91ba5ef2146c55c1f005e7b5c5e068"}, - {file = "coverage-7.2.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:bebea5f5ed41f618797ce3ffb4606c64a5de92e9c3f26d26c2e0aae292f015c1"}, - {file = "coverage-7.2.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:828189fcdda99aae0d6bf718ea766b2e715eabc1868670a0a07bf8404bf58c33"}, - {file = "coverage-7.2.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e8a95f243d01ba572341c52f89f3acb98a3b6d1d5d830efba86033dd3687ade"}, - {file = "coverage-7.2.5-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8834e5f17d89e05697c3c043d3e58a8b19682bf365048837383abfe39adaed5"}, - {file = "coverage-7.2.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d1f25ee9de21a39b3a8516f2c5feb8de248f17da7eead089c2e04aa097936b47"}, - {file = "coverage-7.2.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1637253b11a18f453e34013c665d8bf15904c9e3c44fbda34c643fbdc9d452cd"}, - {file = "coverage-7.2.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8e575a59315a91ccd00c7757127f6b2488c2f914096077c745c2f1ba5b8c0969"}, - {file = "coverage-7.2.5-cp37-cp37m-win32.whl", hash = "sha256:509ecd8334c380000d259dc66feb191dd0a93b21f2453faa75f7f9cdcefc0718"}, - {file = "coverage-7.2.5-cp37-cp37m-win_amd64.whl", hash = "sha256:12580845917b1e59f8a1c2ffa6af6d0908cb39220f3019e36c110c943dc875b0"}, - {file = "coverage-7.2.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b5016e331b75310610c2cf955d9f58a9749943ed5f7b8cfc0bb89c6134ab0a84"}, - {file = "coverage-7.2.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:373ea34dca98f2fdb3e5cb33d83b6d801007a8074f992b80311fc589d3e6b790"}, - {file = "coverage-7.2.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a063aad9f7b4c9f9da7b2550eae0a582ffc7623dca1c925e50c3fbde7a579771"}, - {file = "coverage-7.2.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38c0a497a000d50491055805313ed83ddba069353d102ece8aef5d11b5faf045"}, - {file = "coverage-7.2.5-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2b3b05e22a77bb0ae1a3125126a4e08535961c946b62f30985535ed40e26614"}, - {file = "coverage-7.2.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0342a28617e63ad15d96dca0f7ae9479a37b7d8a295f749c14f3436ea59fdcb3"}, - {file = "coverage-7.2.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:cf97ed82ca986e5c637ea286ba2793c85325b30f869bf64d3009ccc1a31ae3fd"}, - {file = "coverage-7.2.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c2c41c1b1866b670573657d584de413df701f482574bad7e28214a2362cb1fd1"}, - {file = "coverage-7.2.5-cp38-cp38-win32.whl", hash = "sha256:10b15394c13544fce02382360cab54e51a9e0fd1bd61ae9ce012c0d1e103c813"}, - {file = "coverage-7.2.5-cp38-cp38-win_amd64.whl", hash = "sha256:a0b273fe6dc655b110e8dc89b8ec7f1a778d78c9fd9b4bda7c384c8906072212"}, - {file = "coverage-7.2.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5c587f52c81211d4530fa6857884d37f514bcf9453bdeee0ff93eaaf906a5c1b"}, - {file = "coverage-7.2.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4436cc9ba5414c2c998eaedee5343f49c02ca93b21769c5fdfa4f9d799e84200"}, - {file = "coverage-7.2.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6599bf92f33ab041e36e06d25890afbdf12078aacfe1f1d08c713906e49a3fe5"}, - {file = "coverage-7.2.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:857abe2fa6a4973f8663e039ead8d22215d31db613ace76e4a98f52ec919068e"}, - {file = "coverage-7.2.5-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6f5cab2d7f0c12f8187a376cc6582c477d2df91d63f75341307fcdcb5d60303"}, - {file = "coverage-7.2.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:aa387bd7489f3e1787ff82068b295bcaafbf6f79c3dad3cbc82ef88ce3f48ad3"}, - {file = "coverage-7.2.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:156192e5fd3dbbcb11cd777cc469cf010a294f4c736a2b2c891c77618cb1379a"}, - {file = "coverage-7.2.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bd3b4b8175c1db502adf209d06136c000df4d245105c8839e9d0be71c94aefe1"}, - {file = "coverage-7.2.5-cp39-cp39-win32.whl", hash = "sha256:ddc5a54edb653e9e215f75de377354e2455376f416c4378e1d43b08ec50acc31"}, - {file = "coverage-7.2.5-cp39-cp39-win_amd64.whl", hash = "sha256:338aa9d9883aaaad53695cb14ccdeb36d4060485bb9388446330bef9c361c252"}, - {file = "coverage-7.2.5-pp37.pp38.pp39-none-any.whl", hash = "sha256:8877d9b437b35a85c18e3c6499b23674684bf690f5d96c1006a1ef61f9fdf0f3"}, - {file = "coverage-7.2.5.tar.gz", hash = "sha256:f99ef080288f09ffc687423b8d60978cf3a465d3f404a18d1a05474bd8575a47"}, + {file = "coverage-7.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b3695c4f4750bca943b3e1f74ad4be8d29e4aeab927d50772c41359107bd5d5c"}, + {file = "coverage-7.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fa6a5a224b7f4cfb226f4fc55a57e8537fcc096f42219128c2c74c0e7d0953e1"}, + {file = "coverage-7.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74f70cd92669394eaf8d7756d1b195c8032cf7bbbdfce3bc489d4e15b3b8cf73"}, + {file = "coverage-7.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b66bb21a23680dee0be66557dc6b02a3152ddb55edf9f6723fa4a93368f7158d"}, + {file = "coverage-7.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d87717959d4d0ee9db08a0f1d80d21eb585aafe30f9b0a54ecf779a69cb015f6"}, + {file = "coverage-7.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:854f22fa361d1ff914c7efa347398374cc7d567bdafa48ac3aa22334650dfba2"}, + {file = "coverage-7.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:1e414dc32ee5c3f36544ea466b6f52f28a7af788653744b8570d0bf12ff34bc0"}, + {file = "coverage-7.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6c5ad996c6fa4d8ed669cfa1e8551348729d008a2caf81489ab9ea67cfbc7498"}, + {file = "coverage-7.0.1-cp310-cp310-win32.whl", hash = "sha256:691571f31ace1837838b7e421d3a09a8c00b4aac32efacb4fc9bd0a5c647d25a"}, + {file = "coverage-7.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:89caf4425fe88889e2973a8e9a3f6f5f9bbe5dd411d7d521e86428c08a873a4a"}, + {file = "coverage-7.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:63d56165a7c76265468d7e0c5548215a5ba515fc2cba5232d17df97bffa10f6c"}, + {file = "coverage-7.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4f943a3b2bc520102dd3e0bb465e1286e12c9a54f58accd71b9e65324d9c7c01"}, + {file = "coverage-7.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:830525361249dc4cd013652b0efad645a385707a5ae49350c894b67d23fbb07c"}, + {file = "coverage-7.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd1b9c5adc066db699ccf7fa839189a649afcdd9e02cb5dc9d24e67e7922737d"}, + {file = "coverage-7.0.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e00c14720b8b3b6c23b487e70bd406abafc976ddc50490f645166f111c419c39"}, + {file = "coverage-7.0.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6d55d840e1b8c0002fce66443e124e8581f30f9ead2e54fbf6709fb593181f2c"}, + {file = "coverage-7.0.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:66b18c3cf8bbab0cce0d7b9e4262dc830e93588986865a8c78ab2ae324b3ed56"}, + {file = "coverage-7.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:12a5aa77783d49e05439fbe6e6b427484f8a0f9f456b46a51d8aac022cfd024d"}, + {file = "coverage-7.0.1-cp311-cp311-win32.whl", hash = "sha256:b77015d1cb8fe941be1222a5a8b4e3fbca88180cfa7e2d4a4e58aeabadef0ab7"}, + {file = "coverage-7.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:fb992c47cb1e5bd6a01e97182400bcc2ba2077080a17fcd7be23aaa6e572e390"}, + {file = "coverage-7.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e78e9dcbf4f3853d3ae18a8f9272111242531535ec9e1009fa8ec4a2b74557dc"}, + {file = "coverage-7.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e60bef2e2416f15fdc05772bf87db06c6a6f9870d1db08fdd019fbec98ae24a9"}, + {file = "coverage-7.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9823e4789ab70f3ec88724bba1a203f2856331986cd893dedbe3e23a6cfc1e4e"}, + {file = "coverage-7.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9158f8fb06747ac17bd237930c4372336edc85b6e13bdc778e60f9d685c3ca37"}, + {file = "coverage-7.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:486ee81fa694b4b796fc5617e376326a088f7b9729c74d9defa211813f3861e4"}, + {file = "coverage-7.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1285648428a6101b5f41a18991c84f1c3959cee359e51b8375c5882fc364a13f"}, + {file = "coverage-7.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2c44fcfb3781b41409d0f060a4ed748537557de9362a8a9282182fafb7a76ab4"}, + {file = "coverage-7.0.1-cp37-cp37m-win32.whl", hash = "sha256:d6814854c02cbcd9c873c0f3286a02e3ac1250625cca822ca6bc1018c5b19f1c"}, + {file = "coverage-7.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:f66460f17c9319ea4f91c165d46840314f0a7c004720b20be58594d162a441d8"}, + {file = "coverage-7.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9b373c9345c584bb4b5f5b8840df7f4ab48c4cbb7934b58d52c57020d911b856"}, + {file = "coverage-7.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d3022c3007d3267a880b5adcf18c2a9bf1fc64469b394a804886b401959b8742"}, + {file = "coverage-7.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92651580bd46519067e36493acb394ea0607b55b45bd81dd4e26379ed1871f55"}, + {file = "coverage-7.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3cfc595d2af13856505631be072835c59f1acf30028d1c860b435c5fc9c15b69"}, + {file = "coverage-7.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b4b3a4d9915b2be879aff6299c0a6129f3d08a775d5a061f503cf79571f73e4"}, + {file = "coverage-7.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b6f22bb64cc39bcb883e5910f99a27b200fdc14cdd79df8696fa96b0005c9444"}, + {file = "coverage-7.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:72d1507f152abacea81f65fee38e4ef3ac3c02ff8bc16f21d935fd3a8a4ad910"}, + {file = "coverage-7.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0a79137fc99815fff6a852c233628e735ec15903cfd16da0f229d9c4d45926ab"}, + {file = "coverage-7.0.1-cp38-cp38-win32.whl", hash = "sha256:b3763e7fcade2ff6c8e62340af9277f54336920489ceb6a8cd6cc96da52fcc62"}, + {file = "coverage-7.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:09f6b5a8415b6b3e136d5fec62b552972187265cb705097bf030eb9d4ffb9b60"}, + {file = "coverage-7.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:978258fec36c154b5e250d356c59af7d4c3ba02bef4b99cda90b6029441d797d"}, + {file = "coverage-7.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:19ec666533f0f70a0993f88b8273057b96c07b9d26457b41863ccd021a043b9a"}, + {file = "coverage-7.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cfded268092a84605f1cc19e5c737f9ce630a8900a3589e9289622db161967e9"}, + {file = "coverage-7.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07bcfb1d8ac94af886b54e18a88b393f6a73d5959bb31e46644a02453c36e475"}, + {file = "coverage-7.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:397b4a923cc7566bbc7ae2dfd0ba5a039b61d19c740f1373791f2ebd11caea59"}, + {file = "coverage-7.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:aec2d1515d9d39ff270059fd3afbb3b44e6ec5758af73caf18991807138c7118"}, + {file = "coverage-7.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c20cfebcc149a4c212f6491a5f9ff56f41829cd4f607b5be71bb2d530ef243b1"}, + {file = "coverage-7.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:fd556ff16a57a070ce4f31c635953cc44e25244f91a0378c6e9bdfd40fdb249f"}, + {file = "coverage-7.0.1-cp39-cp39-win32.whl", hash = "sha256:b9ea158775c7c2d3e54530a92da79496fb3fb577c876eec761c23e028f1e216c"}, + {file = "coverage-7.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:d1991f1dd95eba69d2cd7708ff6c2bbd2426160ffc73c2b81f617a053ebcb1a8"}, + {file = "coverage-7.0.1-pp37.pp38.pp39-none-any.whl", hash = "sha256:3dd4ee135e08037f458425b8842d24a95a0961831a33f89685ff86b77d378f89"}, + {file = "coverage-7.0.1.tar.gz", hash = "sha256:a4a574a19eeb67575a5328a5760bbbb737faa685616586a9f9da4281f940109c"}, ] [package.extras] @@ -269,17 +196,18 @@ toml = ["tomli"] [[package]] name = "datadog" -version = "0.45.0" +version = "0.41.0" description = "The Datadog Python library" category = "main" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +python-versions = "*" files = [ - {file = "datadog-0.45.0-py2.py3-none-any.whl", hash = "sha256:144fce48bda79484b102349f159c4ea4c7cd35361f9e0d031ddf931a922a38a4"}, - {file = "datadog-0.45.0.tar.gz", hash = "sha256:6bffed67448cb4bf5dff559fb2acee1c06e7da8612b8e2a734f278b50b396603"}, + {file = "datadog-0.41.0-py2.py3-none-any.whl", hash = "sha256:ab79ed38fb09ff1942c341e32849c4eeaf8b2e4d467b9e6bb1c6071808f454d6"}, + {file = "datadog-0.41.0.tar.gz", hash = "sha256:3de1a43b8a8d5f6b19d162ec1b482dc5ab2636c59cf65e60589702304510a689"}, ] [package.dependencies] +decorator = ">=3.3.2" requests = ">=2.6.0" [[package]] @@ -300,81 +228,81 @@ six = "*" [[package]] name = "ddtrace" -version = "1.13.3" +version = "1.6.4" description = "Datadog APM client library" category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ - {file = "ddtrace-1.13.3-cp27-cp27m-macosx_11_0_x86_64.whl", hash = "sha256:f80e1ce52e16f4d708d7bb4e146a113749a9b9779f132785f74bea0c8037321a"}, - {file = "ddtrace-1.13.3-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:8179a15de9a25994540c4de0b1aa71cc446749f3cb30afcf2104033a52f88730"}, - {file = "ddtrace-1.13.3-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:1ae90609990bd0014038ac2b8a7acfebffb774aa9355f6d0f940c6885f0036ee"}, - {file = "ddtrace-1.13.3-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:a56a7559506a3f46791ef4f42a0558c842a4f6d96d5bf2a32703fca4a4341104"}, - {file = "ddtrace-1.13.3-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:7379b8212e2aeb3f8ccea9f093c6e729489ef1222a80cba5db62a26a1b3dd4ac"}, - {file = "ddtrace-1.13.3-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:ec62bb16faa7b646f230eb1092b9244899aa1039103077f02449c859008e244c"}, - {file = "ddtrace-1.13.3-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:cf7ad2ec744b82fbe6abf49d6ac7a9ea4f3e05f00d5a449ee225e1ad06aeb8b7"}, - {file = "ddtrace-1.13.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b1cd438c0d9ca66e10b9e513751b30e29ff28f56668ec990e904fd565528c9"}, - {file = "ddtrace-1.13.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3e92d6e43ac891920af7c820579ec2e549327039c9d14604424576ef5aa4e978"}, - {file = "ddtrace-1.13.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76f419d6984a20eae7311f282c7159bc591001c16f05c4a127d236e07815bfa2"}, - {file = "ddtrace-1.13.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:aca7462329d9b7b1b4882670225b832e20420270d6be216140487b3200e28aff"}, - {file = "ddtrace-1.13.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:833e643839c23e21b488d780140ccacd2063269dbad3ae71af923d85c91ec919"}, - {file = "ddtrace-1.13.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b2516a009316c76fe5b078a8e839256d93519815fd1ddc6aa2fb483c5d5d43cd"}, - {file = "ddtrace-1.13.3-cp310-cp310-win32.whl", hash = "sha256:382f59f36ace1e0704e5d839bcbb3a3d0f1d2398586ee1cfacadf82b6632c35c"}, - {file = "ddtrace-1.13.3-cp310-cp310-win_amd64.whl", hash = "sha256:aad95e27bf84f745e26e9259a2b0fb71f1d8dbec0d80bc57a8054a39439161d9"}, - {file = "ddtrace-1.13.3-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:0bb50183547280f38d6b881012fef6e7bb5294e7ff5c17dd7f94a01774c5655b"}, - {file = "ddtrace-1.13.3-cp311-cp311-macosx_11_0_x86_64.whl", hash = "sha256:52d8d400ed7678d5db03324b5c45eb48f52f27b8079705c93e2878d009fea23f"}, - {file = "ddtrace-1.13.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5799452a0c72a6c4c25d4cf7031bd60ac8d8925a95e19048f7654073b57be794"}, - {file = "ddtrace-1.13.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:99f4ee527b5ed8b51294af67a29d2472123663b409d1f0f12885e3ff63ad22f7"}, - {file = "ddtrace-1.13.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:855bf4b19c13fdf1d1b6b3362e2798d5f909fd92db90d50fa4c9e79000cb1af8"}, - {file = "ddtrace-1.13.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6d21362ca7672287c5f4f51fd55507c9b51e283a1b47e217f37a88b57010eb74"}, - {file = "ddtrace-1.13.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7d72285917afa12b14f6e857a3bb3b4c29c996603d9f2b950a064ebb2ddc35d7"}, - {file = "ddtrace-1.13.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e48079cac6c3677aa451f3c8c35afd9de344fdb33d7fbccb325a2ac6971ff690"}, - {file = "ddtrace-1.13.3-cp311-cp311-win32.whl", hash = "sha256:7565d33cf3e812f64d1801d029b9529c90d662b0a834c769cf870f1038312191"}, - {file = "ddtrace-1.13.3-cp311-cp311-win_amd64.whl", hash = "sha256:0f446d64dff2fece4e1b23896367215381490166e669f49206d88a592192df57"}, - {file = "ddtrace-1.13.3-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:ed2e8cd5168c6e0e2ea493fb05dab2225402a4958291d07187bcb19be15023e5"}, - {file = "ddtrace-1.13.3-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:423601871c17d19ee9dde6264ad25873fa6c8ba15946dcd85ed5d3c450d4244d"}, - {file = "ddtrace-1.13.3-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:5fa56e2a53ed199fd5e6fff216baa501fd28a94eeb3f29fc8ffe23ff4a5f7683"}, - {file = "ddtrace-1.13.3-cp35-cp35m-win32.whl", hash = "sha256:fdb9eee6d449b97971bc9a2a188b2e645b3d0cb16b3af67293c792263d030e1b"}, - {file = "ddtrace-1.13.3-cp35-cp35m-win_amd64.whl", hash = "sha256:1b7ece12f91e789325f128363b64f0dcb0002db991bc747836150f3f6de68bf3"}, - {file = "ddtrace-1.13.3-cp36-cp36m-macosx_11_0_x86_64.whl", hash = "sha256:e8e75efa3a9453509dee6bc74c3804f65a6a4fc9a385aa03b8dfa4f01f9fe736"}, - {file = "ddtrace-1.13.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58bc46f734185eeb292b2a243c3941ed9fda9e120d717ef01caafb504c03f673"}, - {file = "ddtrace-1.13.3-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c0f869c05417185b15d56b2514207af37cb7fef847888b265a7dc2bdeaf7d449"}, - {file = "ddtrace-1.13.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65b63f8fd1c12cfb484a5aa38cfa43933c325cc9933a24bf1070ef31d5817ea7"}, - {file = "ddtrace-1.13.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:5bb6548b0167fbc0b5ba4c0621ec0ab5ee7660f28cbc570a3f09c2b29aaf7fb7"}, - {file = "ddtrace-1.13.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:604324085744e96c251da697537f131fb642e628ddfcdaa6656c1f41c28d86d7"}, - {file = "ddtrace-1.13.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:f64f63bb7fd65037fed32fc87ae3912b78b4a72cb31e3e840c2490b07ac9a7b2"}, - {file = "ddtrace-1.13.3-cp36-cp36m-win32.whl", hash = "sha256:dab08fa94a06a861974e43e095030b2b958987937ba54484a2f30e05e98ed9af"}, - {file = "ddtrace-1.13.3-cp36-cp36m-win_amd64.whl", hash = "sha256:1620ce6dfb61bd007a3936a8f3154bdfbc84313db4a28a5e017cba223945fa81"}, - {file = "ddtrace-1.13.3-cp37-cp37m-macosx_11_0_x86_64.whl", hash = "sha256:38ae5cafdae328257e0bb858b39d92ef9e1da21ec1b485e8abdc97f4ec70d499"}, - {file = "ddtrace-1.13.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f88a33eb24bfb724f1fde0329e60fb327ee320d3e3448cb348a5a9dae9cf1d61"}, - {file = "ddtrace-1.13.3-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7f0ff79bfcfa558f7f758aa0694541796f8581ba0b633e252e6722745574c644"}, - {file = "ddtrace-1.13.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c7cc483458ae942db83bc1d3ebf443a9c77f10d295fa53c6ca9043bbb053d709"}, - {file = "ddtrace-1.13.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3ccdc601d5441ce316b24e56b8c7fe35480b27e3d01daf2339726316bd74f94c"}, - {file = "ddtrace-1.13.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7355cde5e20b91305ba24496ec88ec8080f6bd66d7620846d1dac47f0a20695a"}, - {file = "ddtrace-1.13.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:b6c5cb3b77fdc53a198697747dedbbfc12bc05853fa99449940e1f887b71e163"}, - {file = "ddtrace-1.13.3-cp37-cp37m-win32.whl", hash = "sha256:18c643eb41e9ab51efbc8b27c33e7c526db2aa095a30a6842bd848e6e7deb052"}, - {file = "ddtrace-1.13.3-cp37-cp37m-win_amd64.whl", hash = "sha256:0456b9bd1fafd64c1a174f2755b77b4acab6717c4d01212b8f737b12f43aaf26"}, - {file = "ddtrace-1.13.3-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:18b0ec720201b6f6f0fcce74dc74d2e6bb83528216b1c2ddc316cfd77ad2dfb0"}, - {file = "ddtrace-1.13.3-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:2f5df56e2965a577d034578e4bb0d4b63c834c94e467b654d01ce9df8eb3b661"}, - {file = "ddtrace-1.13.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ddc742369a92c622e63cb6b186c392d2b4263a66f4e7ac1829e43692b0339234"}, - {file = "ddtrace-1.13.3-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4fa4fe1e708073482e490ba6b0f260136cc31782fd170ef50a105b8165084f4"}, - {file = "ddtrace-1.13.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:072d3b5c90959df4b11c981b67734b3b9eef92199ae639d0b183912f8120097e"}, - {file = "ddtrace-1.13.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0e6f89cf95a95e76d1278365de1b87a78a2bc3a2677af6cdd71690a0a27fdffd"}, - {file = "ddtrace-1.13.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b622f7c2f37b0e6924d997f4215cdde094612872479bac55bd401981bc60db6f"}, - {file = "ddtrace-1.13.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6b21e49d4c7b5d5aade0f892920badc2e1167875d4dba3f9dfd01e45a3a2a2d3"}, - {file = "ddtrace-1.13.3-cp38-cp38-win32.whl", hash = "sha256:5fe4f06e51d5ae00f778a1a13cf5c4cae7789749b36ca5b9b495ee7f20d44d86"}, - {file = "ddtrace-1.13.3-cp38-cp38-win_amd64.whl", hash = "sha256:dd31051fbdce7cfe3b16d938b3313c4387011b72d796212a74676124fdd60855"}, - {file = "ddtrace-1.13.3-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:297e4f7779a3208124488c6b209c882dbfd68218355f1341b573da5c3672976c"}, - {file = "ddtrace-1.13.3-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:b41a45ed2dabdf2f091f804f2d2ceb41e1547ade435c2c992a74f9edefc7b2ee"}, - {file = "ddtrace-1.13.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59d32ca0e2d7c3236c559885aa1645185121cc8a739eb658dbdcb96dce72ae53"}, - {file = "ddtrace-1.13.3-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2dea250e64ce9f537a913e98f3ece125f3340474e3e83bad602313f6d6f8aa1b"}, - {file = "ddtrace-1.13.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:881c472d1eb8735ed6cdc524abe311acd0bfd234fbbeee3d766d7b879ff2ee00"}, - {file = "ddtrace-1.13.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:90b9cf9ed80b8af8b2d7c5e9dfce6482ce9c5ca12f9deeaaa225f2650737b82d"}, - {file = "ddtrace-1.13.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f6418606d511567e06a667d7759b07d90b8ac0f707b8e559fefe42bad4ce64a7"}, - {file = "ddtrace-1.13.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f24d0a75ee1b4ea3b6f86bd4246d2506e2c8f65339ed71b29bc6438b21baadea"}, - {file = "ddtrace-1.13.3-cp39-cp39-win32.whl", hash = "sha256:6f36dec03adf3f6666fb7fa6aee984d20b0ac5ba9de1dccfc0b9801785ba91a7"}, - {file = "ddtrace-1.13.3-cp39-cp39-win_amd64.whl", hash = "sha256:68341a4fbe413ac6a7c05763fa831a64735a08f00dc7b11db54de3c578145bfa"}, - {file = "ddtrace-1.13.3.tar.gz", hash = "sha256:59675234bd50603d6eb0b49a67440c4d22bc14c0b716e181a135e590da9c0037"}, + {file = "ddtrace-1.6.4-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3c4c9a18cf3270fc10801e286410c30a1a603cb848ee1f08bbd118e0b97ddfcc"}, + {file = "ddtrace-1.6.4-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:204c560719c31d3f9ff8456a4c6ca4d0d6b527c13951815cbcf1012ea48ff759"}, + {file = "ddtrace-1.6.4-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:c97a1cf8a8e50a12c6bd09f0f15e172c447ac5a5350a7bd256f6685897c9efbf"}, + {file = "ddtrace-1.6.4-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:93ad24ff023d9c364288f422e0d46eb7b866c91e6c0453a36e5a3fdbfb01a627"}, + {file = "ddtrace-1.6.4-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:6e65f860656488d6b6e005301c7138ba573b5cbf03270ec811c6d34f8aebf0b5"}, + {file = "ddtrace-1.6.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b77e7d7e2e4de5851d8ff332e63957a46a367e6e3c5c94d4ad37dcaf047f11e1"}, + {file = "ddtrace-1.6.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:96d141807d5e446c67a4dcb16178cfa25523cedd075d73dad254f13a62a1231f"}, + {file = "ddtrace-1.6.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d65e211995e379b06a809dcaa229c09a08a02b161d574ca4716d055a65d9db05"}, + {file = "ddtrace-1.6.4-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0ed65ebd21f80acccba804fe671646e2476ce5e96162b9b2bfb0b8fd417fa6fa"}, + {file = "ddtrace-1.6.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07ffa019d48175e23f1ccd449c45b0250656cbe210a0603900a981c29ae7786e"}, + {file = "ddtrace-1.6.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:5d9ab8cba1a808da3f6da7aa0303a227245d8b25617e0673a299c3e4cae16506"}, + {file = "ddtrace-1.6.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:72ddb4bfa46660d082be50ae09faec026c46a295524a3a722570c770bf632f98"}, + {file = "ddtrace-1.6.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:03e52db04d3ada8d234d050e66988b8ec559e4db57a03fd56112e50885bc2767"}, + {file = "ddtrace-1.6.4-cp310-cp310-win32.whl", hash = "sha256:aba27dd41468e06fbe0534ce45b182e7cf7fa582eb70a03fd341da63fea07032"}, + {file = "ddtrace-1.6.4-cp310-cp310-win_amd64.whl", hash = "sha256:cf0754548216361ce9de00b750b5a5ff8eb57e9fd1fd85f223b5f23cc36ba68a"}, + {file = "ddtrace-1.6.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4464d1e886450d8c2c149ced95c4ecbe4481bc80225ebc5301385d0bf450e162"}, + {file = "ddtrace-1.6.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d32a006a1919282394e9095abb92d99efbadca7fec304bf07952e2d6f90383c5"}, + {file = "ddtrace-1.6.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a121b3417c444e9bb827c6d0a0b183f1c5517a9c8769c7ca43787ec48ad08bb1"}, + {file = "ddtrace-1.6.4-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7372e54b27d4359fa6d86d664880852a96a1786304ab2580e81796889ada449b"}, + {file = "ddtrace-1.6.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb88df54546891cb738af2d00208d10ab4c391c03b489bbd6a8745f1c8a10d5c"}, + {file = "ddtrace-1.6.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:52ffa9c4324d26f58c4ddf4ca22abcc160386f53bfbdfd56bb772580a72cf958"}, + {file = "ddtrace-1.6.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:bc33cb8501db1d049160a312d9a4e68e2fb35d61fec4a3fa9665c940489246e3"}, + {file = "ddtrace-1.6.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f64498947e696efd1ff192d56f63987cd9b09beabb481e443aa802cca51eb841"}, + {file = "ddtrace-1.6.4-cp311-cp311-win32.whl", hash = "sha256:7766d7253ccab625c07203da36e10c1926d565e465897fdb34f03f532b0610b9"}, + {file = "ddtrace-1.6.4-cp311-cp311-win_amd64.whl", hash = "sha256:981cfe27a13e4347a8fdea9d7a8936b592359ad879df1de98077b1b70e5eeace"}, + {file = "ddtrace-1.6.4-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:cd25cf8e1457c94bb7fe5fc2bab700a9e22378f137cbb73a2fe847dbd2305020"}, + {file = "ddtrace-1.6.4-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:b9bfe5e83a1ea8c8673068a5218f4a80054d87eb9c3e2b581bacbdbac67a28ec"}, + {file = "ddtrace-1.6.4-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:57613420ae32d56a76d67f571210cc134368cbef17607e71b8eb66a5b1ea2d72"}, + {file = "ddtrace-1.6.4-cp35-cp35m-win32.whl", hash = "sha256:d574f29ab02b4f43bd93214891423f27145ff54c34242db6a47fc5a591e0e5d0"}, + {file = "ddtrace-1.6.4-cp35-cp35m-win_amd64.whl", hash = "sha256:89618a300428d53b25428d728bf2ba026a5e996bbd65d82917e8a47a4a0c7815"}, + {file = "ddtrace-1.6.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:ee954e1ebc8dc47328b7e145736e7b6d7167cec1d43ba661056210d08594ade8"}, + {file = "ddtrace-1.6.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cbda998fd438701a20461cd819a1d1a1d168ea7b3bcaa0ced6f41bac30ba359"}, + {file = "ddtrace-1.6.4-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fcbffb017cdeb468d083b4c07c91fa024a0652416acc35fcfabfbff366f522d2"}, + {file = "ddtrace-1.6.4-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f36f85ff84a7535fbdcbeed40d430f6d047a2cdd0c4de6dc7bc375e82708f646"}, + {file = "ddtrace-1.6.4-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0a016a8d2f666e0e677d00d1f4057035ac5dc753f9b0e4fb378dd4f7882f2ade"}, + {file = "ddtrace-1.6.4-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:0a1be96afa6df810a32cc403a0d133ad87d6c5a9eeec861b178aaa3048d47da6"}, + {file = "ddtrace-1.6.4-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:10accb64d6ad8cc5dfddbb3150c0dd1c96ed5f62161d521d264b0afbaf3f075c"}, + {file = "ddtrace-1.6.4-cp36-cp36m-win32.whl", hash = "sha256:c1c35e16c71dd22c6f21e0d4a135071237fe988082048bc361a3213031e77170"}, + {file = "ddtrace-1.6.4-cp36-cp36m-win_amd64.whl", hash = "sha256:51156177b60331c2d9b024487d25418b1d1308b4d1eaa196cf4673a649bcc057"}, + {file = "ddtrace-1.6.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:04284a33f831ec5efb396f2b7e664d326982008ef8761d4054c3d663e13166bb"}, + {file = "ddtrace-1.6.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1dd4c3743fb93228c7470f447eff1d986417298b7242e80753ec406f67288a75"}, + {file = "ddtrace-1.6.4-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88c90fbfb22b707e6ab07d5c109634c17986d8090363f1e69cc0fb43ccb77098"}, + {file = "ddtrace-1.6.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14430eda72c2d28b92b782201ea4edc6efdc8c74845a407039c1f6a4f244fb24"}, + {file = "ddtrace-1.6.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:a056086975d607acaa0377231615fa1a94c632fd4ece979f0d5554a423663e61"}, + {file = "ddtrace-1.6.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:dae04139b42b42e5eda3f544c7fe9875a5b190aeca9ce09eb01853d35a7f0054"}, + {file = "ddtrace-1.6.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:86a91dc39cc2f2a1c301e8549fb7bd84da78122d4c6ff4b60a97d89601d1c66c"}, + {file = "ddtrace-1.6.4-cp37-cp37m-win32.whl", hash = "sha256:e1efd72c2377f605dc053c763e9449b7188659190d48efb75669158db5a92844"}, + {file = "ddtrace-1.6.4-cp37-cp37m-win_amd64.whl", hash = "sha256:108c045b332a034f3e8e0df8d87b6b7a26e9e94007a8a84000f445450c11c44b"}, + {file = "ddtrace-1.6.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:121c2d6212142fb6815d2dcc56a82fb06e9e3568ee217015e6d72ec3caad7268"}, + {file = "ddtrace-1.6.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3da580615a97e61ffbf564782679b98b81ba026248926619b030d648ff389a40"}, + {file = "ddtrace-1.6.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:73be527f3a2912e74045ee60e9d37fc8f1a8410b90ae3ac8fb94f01e6ee3f6d3"}, + {file = "ddtrace-1.6.4-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae70de026c79a895b2a5beecbbc0e46bb0c07d27af77a1662352a5608068b005"}, + {file = "ddtrace-1.6.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45a4f2c200c22ab4b6dbeb16b6f6b9aafa2a674b3c3e175f86cb2c2e16f69fff"}, + {file = "ddtrace-1.6.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4a183627202355377d9e369f8d4d18ceee82dd2312d0d098fb1242f387ebcb2b"}, + {file = "ddtrace-1.6.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:97f1ed98e1a14091515aa482d528846ee4437260d68e819bb6ba09af4774fb3c"}, + {file = "ddtrace-1.6.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f08d858a045a9117295e3008ba7c9586865ed16690c682441347508744c338e2"}, + {file = "ddtrace-1.6.4-cp38-cp38-win32.whl", hash = "sha256:71fae938615e77cb5cd04978a36874fa97c1d929c1b697c690affedd538914ed"}, + {file = "ddtrace-1.6.4-cp38-cp38-win_amd64.whl", hash = "sha256:53a0db94ae562222338490e5f409d3e2740d03f7d1099fdd02e769690ca70de2"}, + {file = "ddtrace-1.6.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d727012ee9b4725cdbb0666e40e4e99cae3418c88b98159e073ec1479d30db73"}, + {file = "ddtrace-1.6.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:102c49d38d67efe6da378509ed7f9f88bc9c6c9a95bcc493c06e02a15e4865c2"}, + {file = "ddtrace-1.6.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5e6cc5ad17a456c6e93d25c6bd06580436fb5c007cef27c89b060a277e35b7a"}, + {file = "ddtrace-1.6.4-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad9abf5879abad5b143ef9fcd9b557193b19000d8ff798b06ec86f1fe992cb89"}, + {file = "ddtrace-1.6.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:289edf7ea4f506f329b20394b08971487bf72351b0a9b9a63a5c7f4d18e1cda8"}, + {file = "ddtrace-1.6.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3a3432c72a082e8f4090a55833cda1b6840676b5f58dbaca041d566f581a3062"}, + {file = "ddtrace-1.6.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7504b21d88ce528e86eb8727270e677a7b4a254ee070e54d0e81111bd68a6d0b"}, + {file = "ddtrace-1.6.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5e744e81727d1328e6830de6a749378e7cd31fc0e1c0aceb19b17685e90cb8fa"}, + {file = "ddtrace-1.6.4-cp39-cp39-win32.whl", hash = "sha256:2aed59c1a0ed33f0b752daa801980d9ab395f89ea8fbc2c788fea0b11a3ea826"}, + {file = "ddtrace-1.6.4-cp39-cp39-win_amd64.whl", hash = "sha256:4fb94ee5113141becb7e447bdf57e30bb447f9347785bf20211d0cf06e1e98e7"}, + {file = "ddtrace-1.6.4.tar.gz", hash = "sha256:33effab386caaaab314e08900b798c02ab5771f88697acb9bf64e5ba98c8009a"}, ] [package.dependencies] @@ -388,7 +316,6 @@ ddsketch = ">=2.0.1" envier = "*" importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} jsonschema = "*" -opentelemetry-api = {version = ">=1", markers = "python_version >= \"3.7\""} packaging = ">=17.1" protobuf = {version = ">=3", markers = "python_version >= \"3.7\""} six = ">=1.12.0" @@ -400,23 +327,17 @@ xmltodict = ">=0.12" opentracing = ["opentracing (>=2.0.0)"] [[package]] -name = "deprecated" -version = "1.2.13" -description = "Python @deprecated decorator to deprecate old python classes, functions or methods." +name = "decorator" +version = "5.1.1" +description = "Decorators for Humans" category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=3.5" files = [ - {file = "Deprecated-1.2.13-py2.py3-none-any.whl", hash = "sha256:64756e3e14c8c5eea9795d93c524551432a0be75629f8f29e67ab8caf076c76d"}, - {file = "Deprecated-1.2.13.tar.gz", hash = "sha256:43ac5335da90c31c24ba028af536a91d41d53f9e6901ddb021bcc572ce44e38d"}, + {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, + {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, ] -[package.dependencies] -wrapt = ">=1.10,<2" - -[package.extras] -dev = ["PyTest", "PyTest (<5)", "PyTest-Cov", "PyTest-Cov (<2.6)", "bump2version (<1)", "configparser (<5)", "importlib-metadata (<3)", "importlib-resources (<4)", "sphinx (<2)", "sphinxcontrib-websupport (<2)", "tox", "zipp (<2)"] - [[package]] name = "envier" version = "0.4.0" @@ -434,14 +355,14 @@ mypy = ["mypy"] [[package]] name = "exceptiongroup" -version = "1.1.1" +version = "1.1.0" description = "Backport of PEP 654 (exception groups)" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.1.1-py3-none-any.whl", hash = "sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e"}, - {file = "exceptiongroup-1.1.1.tar.gz", hash = "sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785"}, + {file = "exceptiongroup-1.1.0-py3-none-any.whl", hash = "sha256:327cbda3da756e2de031a3107b81ab7b3770a602c4d16ca618298c526f4bec1e"}, + {file = "exceptiongroup-1.1.0.tar.gz", hash = "sha256:bcb67d800a4497e1b404c2dd44fca47d3b7a5e5433dbab67f96c1a685cdfdf23"}, ] [package.extras] @@ -512,14 +433,14 @@ testing = ["importlib-resources (>=1.3)", "packaging", "pep517"] [[package]] name = "importlib-resources" -version = "5.12.0" +version = "5.10.2" description = "Read resources from Python packages" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "importlib_resources-5.12.0-py3-none-any.whl", hash = "sha256:7b1deeebbf351c7578e09bf2f63fa2ce8b5ffec296e0d349139d43cca061a81a"}, - {file = "importlib_resources-5.12.0.tar.gz", hash = "sha256:4be82589bf5c1d7999aedf2a45159d10cb3ca4f19b2271f8792bc8e6da7b22f6"}, + {file = "importlib_resources-5.10.2-py3-none-any.whl", hash = "sha256:7d543798b0beca10b6a01ac7cafda9f822c54db9e8376a6bf57e0cbd74d486b6"}, + {file = "importlib_resources-5.10.2.tar.gz", hash = "sha256:e4a96c8cc0339647ff9a5e0550d9f276fc5a01ffa276012b58ec108cfd7b8484"}, ] [package.dependencies] @@ -597,32 +518,16 @@ six = ">=1.7" coverage-plugin = ["coverage (>=4.4.1)"] doc = ["Sphinx (>=1.6.5)", "mock", "sphinx-rtd-theme"] -[[package]] -name = "opentelemetry-api" -version = "1.15.0" -description = "OpenTelemetry Python API" -category = "main" -optional = false -python-versions = ">=3.7" -files = [ - {file = "opentelemetry_api-1.15.0-py3-none-any.whl", hash = "sha256:e6c2d2e42140fd396e96edf75a7ceb11073f4efb4db87565a431cc9d0f93f2e0"}, - {file = "opentelemetry_api-1.15.0.tar.gz", hash = "sha256:79ab791b4aaad27acc3dc3ba01596db5b5aac2ef75c70622c6038051d6c2cded"}, -] - -[package.dependencies] -deprecated = ">=1.2.6" -setuptools = ">=16.0" - [[package]] name = "packaging" -version = "23.1" +version = "22.0" description = "Core utilities for Python packages" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, - {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, + {file = "packaging-22.0-py3-none-any.whl", hash = "sha256:957e2148ba0e1a3b282772e791ef1d8083648bc131c8ab0c1feba110ce1146c3"}, + {file = "packaging-22.0.tar.gz", hash = "sha256:2198ec20bd4c017b8f9717e00f0c8714076fc2fd93816750ab48e2c41de2cfd3"}, ] [[package]] @@ -639,25 +544,26 @@ files = [ [[package]] name = "protobuf" -version = "4.23.1" +version = "4.21.12" description = "" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "protobuf-4.23.1-cp310-abi3-win32.whl", hash = "sha256:410bcc0a5b279f634d3e16082ce221dfef7c3392fac723500e2e64d1806dd2be"}, - {file = "protobuf-4.23.1-cp310-abi3-win_amd64.whl", hash = "sha256:32e78beda26d7a101fecf15d7a4a792278a0d26a31bc327ff05564a9d68ab8ee"}, - {file = "protobuf-4.23.1-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:f9510cac91e764e86acd74e2b7f7bc5e6127a7f3fb646d7c8033cfb84fd1176a"}, - {file = "protobuf-4.23.1-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:346990f634272caac1f09efbcfbbacb23098b1f606d172534c6fa2d9758bb436"}, - {file = "protobuf-4.23.1-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:3ce113b3f3362493bddc9069c2163a38f240a9ed685ff83e7bcb756b05e1deb0"}, - {file = "protobuf-4.23.1-cp37-cp37m-win32.whl", hash = "sha256:2036a3a1e7fc27f973fa0a7888dce712393af644f4695385f117886abc792e39"}, - {file = "protobuf-4.23.1-cp37-cp37m-win_amd64.whl", hash = "sha256:3b8905eafe4439076e1f58e9d1fa327025fd2777cf90f14083092ae47f77b0aa"}, - {file = "protobuf-4.23.1-cp38-cp38-win32.whl", hash = "sha256:5b9cd6097e6acae48a68cb29b56bc79339be84eca65b486910bb1e7a30e2b7c1"}, - {file = "protobuf-4.23.1-cp38-cp38-win_amd64.whl", hash = "sha256:decf119d54e820f298ee6d89c72d6b289ea240c32c521f00433f9dc420595f38"}, - {file = "protobuf-4.23.1-cp39-cp39-win32.whl", hash = "sha256:91fac0753c3c4951fbb98a93271c43cc7cf3b93cf67747b3e600bb1e5cc14d61"}, - {file = "protobuf-4.23.1-cp39-cp39-win_amd64.whl", hash = "sha256:ac50be82491369a9ec3710565777e4da87c6d2e20404e0abb1f3a8f10ffd20f0"}, - {file = "protobuf-4.23.1-py3-none-any.whl", hash = "sha256:65f0ac96ef67d7dd09b19a46aad81a851b6f85f89725577f16de38f2d68ad477"}, - {file = "protobuf-4.23.1.tar.gz", hash = "sha256:95789b569418a3e32a53f43d7763be3d490a831e9c08042539462b6d972c2d7e"}, + {file = "protobuf-4.21.12-cp310-abi3-win32.whl", hash = "sha256:b135410244ebe777db80298297a97fbb4c862c881b4403b71bac9d4107d61fd1"}, + {file = "protobuf-4.21.12-cp310-abi3-win_amd64.whl", hash = "sha256:89f9149e4a0169cddfc44c74f230d7743002e3aa0b9472d8c28f0388102fc4c2"}, + {file = "protobuf-4.21.12-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:299ea899484ee6f44604deb71f424234f654606b983cb496ea2a53e3c63ab791"}, + {file = "protobuf-4.21.12-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:d1736130bce8cf131ac7957fa26880ca19227d4ad68b4888b3be0dea1f95df97"}, + {file = "protobuf-4.21.12-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:78a28c9fa223998472886c77042e9b9afb6fe4242bd2a2a5aced88e3f4422aa7"}, + {file = "protobuf-4.21.12-cp37-cp37m-win32.whl", hash = "sha256:3d164928ff0727d97022957c2b849250ca0e64777ee31efd7d6de2e07c494717"}, + {file = "protobuf-4.21.12-cp37-cp37m-win_amd64.whl", hash = "sha256:f45460f9ee70a0ec1b6694c6e4e348ad2019275680bd68a1d9314b8c7e01e574"}, + {file = "protobuf-4.21.12-cp38-cp38-win32.whl", hash = "sha256:6ab80df09e3208f742c98443b6166bcb70d65f52cfeb67357d52032ea1ae9bec"}, + {file = "protobuf-4.21.12-cp38-cp38-win_amd64.whl", hash = "sha256:1f22ac0ca65bb70a876060d96d914dae09ac98d114294f77584b0d2644fa9c30"}, + {file = "protobuf-4.21.12-cp39-cp39-win32.whl", hash = "sha256:27f4d15021da6d2b706ddc3860fac0a5ddaba34ab679dc182b60a8bb4e1121cc"}, + {file = "protobuf-4.21.12-cp39-cp39-win_amd64.whl", hash = "sha256:237216c3326d46808a9f7c26fd1bd4b20015fb6867dc5d263a493ef9a539293b"}, + {file = "protobuf-4.21.12-py2.py3-none-any.whl", hash = "sha256:a53fd3f03e578553623272dc46ac2f189de23862e68565e83dde203d41b76fc5"}, + {file = "protobuf-4.21.12-py3-none-any.whl", hash = "sha256:b98d0148f84e3a3c569e19f52103ca1feacdac0d2df8d6533cf983d1fda28462"}, + {file = "protobuf-4.21.12.tar.gz", hash = "sha256:7cd532c4566d0e6feafecc1059d04c7915aec8e182d1cf7adee8b24ef1e2e6ab"}, ] [[package]] @@ -738,21 +644,21 @@ six = ">=1.5" [[package]] name = "requests" -version = "2.30.0" +version = "2.28.1" description = "Python HTTP for Humans." category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.7, <4" files = [ - {file = "requests-2.30.0-py3-none-any.whl", hash = "sha256:10e94cc4f3121ee6da529d358cdaeaff2f1c409cd377dbc72b825852f2f7e294"}, - {file = "requests-2.30.0.tar.gz", hash = "sha256:239d7d4458afcb28a692cdd298d87542235f4ca8d36d03a15bfc128a6559a2f4"}, + {file = "requests-2.28.1-py3-none-any.whl", hash = "sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349"}, + {file = "requests-2.28.1.tar.gz", hash = "sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983"}, ] [package.dependencies] certifi = ">=2017.4.17" -charset-normalizer = ">=2,<4" +charset-normalizer = ">=2,<3" idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<3" +urllib3 = ">=1.21.1,<1.27" [package.extras] socks = ["PySocks (>=1.5.6,!=1.5.7)"] @@ -760,14 +666,14 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "s3transfer" -version = "0.6.1" +version = "0.6.0" description = "An Amazon S3 Transfer Manager" category = "main" optional = true python-versions = ">= 3.7" files = [ - {file = "s3transfer-0.6.1-py3-none-any.whl", hash = "sha256:3c0da2d074bf35d6870ef157158641178a4204a6e689e82546083e31e0311346"}, - {file = "s3transfer-0.6.1.tar.gz", hash = "sha256:640bb492711f4c0c0905e1f62b6aaeb771881935ad27884852411f8e9cacbca9"}, + {file = "s3transfer-0.6.0-py3-none-any.whl", hash = "sha256:06176b74f3a15f61f1b4f25a1fc29a4429040b7647133a463da8fa5bd28d5ecd"}, + {file = "s3transfer-0.6.0.tar.gz", hash = "sha256:2ed07d3866f523cc561bf4a00fc5535827981b117dd7876f036b0c1aca42c947"}, ] [package.dependencies] @@ -776,23 +682,6 @@ botocore = ">=1.12.36,<2.0a.0" [package.extras] crt = ["botocore[crt] (>=1.20.29,<2.0a.0)"] -[[package]] -name = "setuptools" -version = "67.7.2" -description = "Easily download, build, install, upgrade, and uninstall Python packages" -category = "main" -optional = false -python-versions = ">=3.7" -files = [ - {file = "setuptools-67.7.2-py3-none-any.whl", hash = "sha256:23aaf86b85ca52ceb801d32703f12d77517b2556af839621c641fca11287952b"}, - {file = "setuptools-67.7.2.tar.gz", hash = "sha256:f104fa03692a2602fa0fec6c6a9e63b6c8a968de13e17c026957dd1f53d80990"}, -] - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8 (<5)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] - [[package]] name = "six" version = "1.16.0" @@ -807,14 +696,14 @@ files = [ [[package]] name = "tenacity" -version = "8.2.2" +version = "8.1.0" description = "Retry code until it succeeds" category = "main" optional = false python-versions = ">=3.6" files = [ - {file = "tenacity-8.2.2-py3-none-any.whl", hash = "sha256:2f277afb21b851637e8f52e6a613ff08734c347dc19ade928e519d7d2d8569b0"}, - {file = "tenacity-8.2.2.tar.gz", hash = "sha256:43af037822bd0029025877f3b2d97cc4d7bb0c2991000a3d59d71517c5c969e0"}, + {file = "tenacity-8.1.0-py3-none-any.whl", hash = "sha256:35525cd47f82830069f0d6b73f7eb83bc5b73ee2fff0437952cedf98b27653ac"}, + {file = "tenacity-8.1.0.tar.gz", hash = "sha256:e48c437fdf9340f5666b92cd7990e96bc5fc955e1298baf4a907e3972067a445"}, ] [package.extras] @@ -822,26 +711,26 @@ doc = ["reno", "sphinx", "tornado (>=4.5)"] [[package]] name = "typing-extensions" -version = "4.5.0" +version = "4.4.0" description = "Backported and Experimental Type Hints for Python 3.7+" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "typing_extensions-4.5.0-py3-none-any.whl", hash = "sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4"}, - {file = "typing_extensions-4.5.0.tar.gz", hash = "sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb"}, + {file = "typing_extensions-4.4.0-py3-none-any.whl", hash = "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"}, + {file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"}, ] [[package]] name = "urllib3" -version = "1.26.15" +version = "1.26.13" description = "HTTP library with thread-safe connection pooling, file post, and more." category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ - {file = "urllib3-1.26.15-py2.py3-none-any.whl", hash = "sha256:aa751d169e23c7479ce47a0cb0da579e3ede798f994f5816a74e4f4500dcea42"}, - {file = "urllib3-1.26.15.tar.gz", hash = "sha256:8a388717b9476f934a21484e8c8e61875ab60644d29b9b39e11e4b9dc1c6b305"}, + {file = "urllib3-1.26.13-py2.py3-none-any.whl", hash = "sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc"}, + {file = "urllib3-1.26.13.tar.gz", hash = "sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8"}, ] [package.extras] @@ -851,87 +740,76 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] name = "wrapt" -version = "1.15.0" +version = "1.14.1" description = "Module for decorators, wrappers and monkey patching." category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" files = [ - {file = "wrapt-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1"}, - {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29"}, - {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2"}, - {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46"}, - {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c"}, - {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09"}, - {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079"}, - {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e"}, - {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a"}, - {file = "wrapt-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923"}, - {file = "wrapt-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee"}, - {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727"}, - {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7"}, - {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0"}, - {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec"}, - {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90"}, - {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975"}, - {file = "wrapt-1.15.0-cp310-cp310-win32.whl", hash = "sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1"}, - {file = "wrapt-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e"}, - {file = "wrapt-1.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7"}, - {file = "wrapt-1.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72"}, - {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb"}, - {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e"}, - {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c"}, - {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3"}, - {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92"}, - {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98"}, - {file = "wrapt-1.15.0-cp311-cp311-win32.whl", hash = "sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416"}, - {file = "wrapt-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705"}, - {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29"}, - {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd"}, - {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb"}, - {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248"}, - {file = "wrapt-1.15.0-cp35-cp35m-win32.whl", hash = "sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559"}, - {file = "wrapt-1.15.0-cp35-cp35m-win_amd64.whl", hash = "sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639"}, - {file = "wrapt-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba"}, - {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752"}, - {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364"}, - {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475"}, - {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8"}, - {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418"}, - {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2"}, - {file = "wrapt-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1"}, - {file = "wrapt-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420"}, - {file = "wrapt-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317"}, - {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e"}, - {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e"}, - {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0"}, - {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019"}, - {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034"}, - {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653"}, - {file = "wrapt-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0"}, - {file = "wrapt-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e"}, - {file = "wrapt-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145"}, - {file = "wrapt-1.15.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f"}, - {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd"}, - {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b"}, - {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f"}, - {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6"}, - {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094"}, - {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7"}, - {file = "wrapt-1.15.0-cp38-cp38-win32.whl", hash = "sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b"}, - {file = "wrapt-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1"}, - {file = "wrapt-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86"}, - {file = "wrapt-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c"}, - {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d"}, - {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc"}, - {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29"}, - {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a"}, - {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8"}, - {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9"}, - {file = "wrapt-1.15.0-cp39-cp39-win32.whl", hash = "sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff"}, - {file = "wrapt-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6"}, - {file = "wrapt-1.15.0-py3-none-any.whl", hash = "sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640"}, - {file = "wrapt-1.15.0.tar.gz", hash = "sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a"}, + {file = "wrapt-1.14.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3"}, + {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:903500616422a40a98a5a3c4ff4ed9d0066f3b4c951fa286018ecdf0750194ef"}, + {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5a9a0d155deafd9448baff28c08e150d9b24ff010e899311ddd63c45c2445e28"}, + {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ddaea91abf8b0d13443f6dac52e89051a5063c7d014710dcb4d4abb2ff811a59"}, + {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:36f582d0c6bc99d5f39cd3ac2a9062e57f3cf606ade29a0a0d6b323462f4dd87"}, + {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:7ef58fb89674095bfc57c4069e95d7a31cfdc0939e2a579882ac7d55aadfd2a1"}, + {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:e2f83e18fe2f4c9e7db597e988f72712c0c3676d337d8b101f6758107c42425b"}, + {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:ee2b1b1769f6707a8a445162ea16dddf74285c3964f605877a20e38545c3c462"}, + {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:833b58d5d0b7e5b9832869f039203389ac7cbf01765639c7309fd50ef619e0b1"}, + {file = "wrapt-1.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:80bb5c256f1415f747011dc3604b59bc1f91c6e7150bd7db03b19170ee06b320"}, + {file = "wrapt-1.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:07f7a7d0f388028b2df1d916e94bbb40624c59b48ecc6cbc232546706fac74c2"}, + {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02b41b633c6261feff8ddd8d11c711df6842aba629fdd3da10249a53211a72c4"}, + {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fe803deacd09a233e4762a1adcea5db5d31e6be577a43352936179d14d90069"}, + {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:257fd78c513e0fb5cdbe058c27a0624c9884e735bbd131935fd49e9fe719d310"}, + {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4fcc4649dc762cddacd193e6b55bc02edca674067f5f98166d7713b193932b7f"}, + {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:11871514607b15cfeb87c547a49bca19fde402f32e2b1c24a632506c0a756656"}, + {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8ad85f7f4e20964db4daadcab70b47ab05c7c1cf2a7c1e51087bfaa83831854c"}, + {file = "wrapt-1.14.1-cp310-cp310-win32.whl", hash = "sha256:a9a52172be0b5aae932bef82a79ec0a0ce87288c7d132946d645eba03f0ad8a8"}, + {file = "wrapt-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:6d323e1554b3d22cfc03cd3243b5bb815a51f5249fdcbb86fda4bf62bab9e164"}, + {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:43ca3bbbe97af00f49efb06e352eae40434ca9d915906f77def219b88e85d907"}, + {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:6b1a564e6cb69922c7fe3a678b9f9a3c54e72b469875aa8018f18b4d1dd1adf3"}, + {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:00b6d4ea20a906c0ca56d84f93065b398ab74b927a7a3dbd470f6fc503f95dc3"}, + {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:a85d2b46be66a71bedde836d9e41859879cc54a2a04fad1191eb50c2066f6e9d"}, + {file = "wrapt-1.14.1-cp35-cp35m-win32.whl", hash = "sha256:dbcda74c67263139358f4d188ae5faae95c30929281bc6866d00573783c422b7"}, + {file = "wrapt-1.14.1-cp35-cp35m-win_amd64.whl", hash = "sha256:b21bb4c09ffabfa0e85e3a6b623e19b80e7acd709b9f91452b8297ace2a8ab00"}, + {file = "wrapt-1.14.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9e0fd32e0148dd5dea6af5fee42beb949098564cc23211a88d799e434255a1f4"}, + {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9736af4641846491aedb3c3f56b9bc5568d92b0692303b5a305301a95dfd38b1"}, + {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b02d65b9ccf0ef6c34cba6cf5bf2aab1bb2f49c6090bafeecc9cd81ad4ea1c1"}, + {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21ac0156c4b089b330b7666db40feee30a5d52634cc4560e1905d6529a3897ff"}, + {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:9f3e6f9e05148ff90002b884fbc2a86bd303ae847e472f44ecc06c2cd2fcdb2d"}, + {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:6e743de5e9c3d1b7185870f480587b75b1cb604832e380d64f9504a0535912d1"}, + {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:d79d7d5dc8a32b7093e81e97dad755127ff77bcc899e845f41bf71747af0c569"}, + {file = "wrapt-1.14.1-cp36-cp36m-win32.whl", hash = "sha256:81b19725065dcb43df02b37e03278c011a09e49757287dca60c5aecdd5a0b8ed"}, + {file = "wrapt-1.14.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b014c23646a467558be7da3d6b9fa409b2c567d2110599b7cf9a0c5992b3b471"}, + {file = "wrapt-1.14.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:88bd7b6bd70a5b6803c1abf6bca012f7ed963e58c68d76ee20b9d751c74a3248"}, + {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5901a312f4d14c59918c221323068fad0540e34324925c8475263841dbdfe68"}, + {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d77c85fedff92cf788face9bfa3ebaa364448ebb1d765302e9af11bf449ca36d"}, + {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d649d616e5c6a678b26d15ece345354f7c2286acd6db868e65fcc5ff7c24a77"}, + {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7d2872609603cb35ca513d7404a94d6d608fc13211563571117046c9d2bcc3d7"}, + {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:ee6acae74a2b91865910eef5e7de37dc6895ad96fa23603d1d27ea69df545015"}, + {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2b39d38039a1fdad98c87279b48bc5dce2c0ca0d73483b12cb72aa9609278e8a"}, + {file = "wrapt-1.14.1-cp37-cp37m-win32.whl", hash = "sha256:60db23fa423575eeb65ea430cee741acb7c26a1365d103f7b0f6ec412b893853"}, + {file = "wrapt-1.14.1-cp37-cp37m-win_amd64.whl", hash = "sha256:709fe01086a55cf79d20f741f39325018f4df051ef39fe921b1ebe780a66184c"}, + {file = "wrapt-1.14.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8c0ce1e99116d5ab21355d8ebe53d9460366704ea38ae4d9f6933188f327b456"}, + {file = "wrapt-1.14.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e3fb1677c720409d5f671e39bac6c9e0e422584e5f518bfd50aa4cbbea02433f"}, + {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:642c2e7a804fcf18c222e1060df25fc210b9c58db7c91416fb055897fc27e8cc"}, + {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b7c050ae976e286906dd3f26009e117eb000fb2cf3533398c5ad9ccc86867b1"}, + {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef3f72c9666bba2bab70d2a8b79f2c6d2c1a42a7f7e2b0ec83bb2f9e383950af"}, + {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:01c205616a89d09827986bc4e859bcabd64f5a0662a7fe95e0d359424e0e071b"}, + {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5a0f54ce2c092aaf439813735584b9537cad479575a09892b8352fea5e988dc0"}, + {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2cf71233a0ed05ccdabe209c606fe0bac7379fdcf687f39b944420d2a09fdb57"}, + {file = "wrapt-1.14.1-cp38-cp38-win32.whl", hash = "sha256:aa31fdcc33fef9eb2552cbcbfee7773d5a6792c137b359e82879c101e98584c5"}, + {file = "wrapt-1.14.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1967f46ea8f2db647c786e78d8cc7e4313dbd1b0aca360592d8027b8508e24d"}, + {file = "wrapt-1.14.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3232822c7d98d23895ccc443bbdf57c7412c5a65996c30442ebe6ed3df335383"}, + {file = "wrapt-1.14.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:988635d122aaf2bdcef9e795435662bcd65b02f4f4c1ae37fbee7401c440b3a7"}, + {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cca3c2cdadb362116235fdbd411735de4328c61425b0aa9f872fd76d02c4e86"}, + {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d52a25136894c63de15a35bc0bdc5adb4b0e173b9c0d07a2be9d3ca64a332735"}, + {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40e7bc81c9e2b2734ea4bc1aceb8a8f0ceaac7c5299bc5d69e37c44d9081d43b"}, + {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b9b7a708dd92306328117d8c4b62e2194d00c365f18eff11a9b53c6f923b01e3"}, + {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6a9a25751acb379b466ff6be78a315e2b439d4c94c1e99cb7266d40a537995d3"}, + {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:34aa51c45f28ba7f12accd624225e2b1e5a3a45206aa191f6f9aac931d9d56fe"}, + {file = "wrapt-1.14.1-cp39-cp39-win32.whl", hash = "sha256:dee0ce50c6a2dd9056c20db781e9c1cfd33e77d2d569f5d1d9321c641bb903d5"}, + {file = "wrapt-1.14.1-cp39-cp39-win_amd64.whl", hash = "sha256:dee60e1de1898bde3b238f18340eec6148986da0455d8ba7848d50470a7a32fb"}, + {file = "wrapt-1.14.1.tar.gz", hash = "sha256:380a85cf89e0e69b7cfbe2ea9f765f004ff419f34194018a6827ac0e3edfed4d"}, ] [[package]] @@ -948,24 +826,24 @@ files = [ [[package]] name = "zipp" -version = "3.15.0" +version = "3.11.0" description = "Backport of pathlib-compatible object wrapper for zip files" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "zipp-3.15.0-py3-none-any.whl", hash = "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556"}, - {file = "zipp-3.15.0.tar.gz", hash = "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b"}, + {file = "zipp-3.11.0-py3-none-any.whl", hash = "sha256:83a28fcb75844b5c0cdaf5aa4003c2d728c77e05f5aeabe8e95e56727005fbaa"}, + {file = "zipp-3.11.0.tar.gz", hash = "sha256:a7a22e05929290a67401440b39690ae6563279bced5f314609d9d03798f56766"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)"] +testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] [extras] -dev = ["boto3", "flake8", "httpretty", "nose2", "requests"] +dev = ["boto3", "requests", "nose2", "flake8", "httpretty"] [metadata] lock-version = "2.0" python-versions = ">=3.7.0,<4" -content-hash = "3285f9f97dcc98b7515fe79b1108096376ede26ab8aa6a1884c3e0c49778c9b7" +content-hash = "6ba474ff11bf0665dea4165d426c582eda61054671cd1d0d75889a24bb1bd48c" From 744fb0b427fd7fa6d7e72d293bd76b488ad0159b Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez <49878080+zARODz11z@users.noreply.github.com> Date: Fri, 19 May 2023 08:57:06 -0700 Subject: [PATCH 06/10] remove my urllib addition --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 0992c578..b60bf1dc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,7 +35,7 @@ requests = { version ="^2.22.0", optional = true } nose2 = { version= "^0.9.1", optional = true } flake8 = { version = "^3.7.9", optional = true } httpretty = {version = "^0.9.7", optional = true } -urllib3 = "<2.0.0" + [tool.poetry.extras] dev = [ From 0d6ea51ab2f567dab4d34745327129ec92555f98 Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez Date: Fri, 19 May 2023 09:02:03 -0700 Subject: [PATCH 07/10] format with black --- tests/test_tracing.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/tests/test_tracing.py b/tests/test_tracing.py index b97675c2..8a90b47f 100644 --- a/tests/test_tracing.py +++ b/tests/test_tracing.py @@ -442,7 +442,9 @@ def test_convert_xray_entity_id(self): ) def test_convert_xray_sampling(self): - self.assertEqual(dt._convert_xray_sampling(True), str(SamplingPriority.USER_KEEP)) + self.assertEqual( + dt._convert_xray_sampling(True), str(SamplingPriority.USER_KEEP) + ) self.assertEqual( dt._convert_xray_sampling(False), str(SamplingPriority.USER_REJECT) @@ -474,7 +476,9 @@ def test_set_correlation_ids(self): class TestFunctionSpanTags(unittest.TestCase): def test_function(self): ctx = get_mock_context() - span = dt.create_function_execution_span(ctx, "", False, {"source": ""}, False, {}) + span = dt.create_function_execution_span( + ctx, "", False, {"source": ""}, False, {} + ) self.assertEqual(span.get_tag("function_arn"), function_arn) self.assertEqual(span.get_tag("function_version"), "$LATEST") self.assertEqual(span.get_tag("resource_names"), "Function") @@ -485,7 +489,9 @@ def test_function_with_version(self): ctx = get_mock_context( invoked_function_arn=function_arn + ":" + function_version ) - span = dt.create_function_execution_span(ctx, "", False, {"source": ""}, False, {}) + span = dt.create_function_execution_span( + ctx, "", False, {"source": ""}, False, {} + ) self.assertEqual(span.get_tag("function_arn"), function_arn) self.assertEqual(span.get_tag("function_version"), function_version) self.assertEqual(span.get_tag("resource_names"), "Function") @@ -494,7 +500,9 @@ def test_function_with_version(self): def test_function_with_alias(self): function_alias = "alias" ctx = get_mock_context(invoked_function_arn=function_arn + ":" + function_alias) - span = dt.create_function_execution_span(ctx, "", False, {"source": ""}, False, {}) + span = dt.create_function_execution_span( + ctx, "", False, {"source": ""}, False, {} + ) self.assertEqual(span.get_tag("function_arn"), function_arn) self.assertEqual(span.get_tag("function_version"), function_alias) self.assertEqual(span.get_tag("resource_names"), "Function") From 3511ec5effd9a6fba0cad9c280913b7d6b0f71b0 Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez Date: Mon, 22 May 2023 11:16:58 -0700 Subject: [PATCH 08/10] use generic lambda_api_gateway instead of lambda_api_gateway_websocket --- datadog_lambda/tracing.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/datadog_lambda/tracing.py b/datadog_lambda/tracing.py index 03bfdc73..fd8c9339 100644 --- a/datadog_lambda/tracing.py +++ b/datadog_lambda/tracing.py @@ -812,8 +812,8 @@ def create_inferred_span_from_api_gateway_websocket_event( service_name = None if api_id in service_mapping: service_name = service_mapping.get(api_id) - elif "lambda_api_gateway_websocket" in service_mapping: - service_name = service_mapping.get("lambda_api_gateway_websocket") + elif "lambda_api_gateway" in service_mapping: + service_name = service_mapping.get("lambda_api_gateway") else: service_name = domain tags = { From b2c30e43b100d4552e483ae4ab733a95b016dae3 Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez Date: Wed, 24 May 2023 11:15:58 -0700 Subject: [PATCH 09/10] refactor tests and src code to leverage helper functions instead of env vars --- datadog_lambda/tracing.py | 135 +++++------ tests/test_tracing.py | 475 +++++++++++++++++++------------------- 2 files changed, 298 insertions(+), 312 deletions(-) diff --git a/datadog_lambda/tracing.py b/datadog_lambda/tracing.py index fd8c9339..3ec3edbc 100644 --- a/datadog_lambda/tracing.py +++ b/datadog_lambda/tracing.py @@ -685,26 +685,44 @@ def create_inferred_span( return None +def create_service_mapping(val): + new_service_mapping = {} + for entry in val.split(","): + parts = entry.split(":") + if len(parts) == 2: + key = parts[0].strip() + value = parts[1].strip() + new_service_mapping[key] = value + return new_service_mapping + + +def set_service_mapping(new_service_mapping): + global service_mapping + service_mapping = new_service_mapping + + +def get_service_mapping(): + return service_mapping + + +def determine_service_name(service_mapping, specific_key, generic_key, default_value): + service_name = service_mapping.get(specific_key) + if service_name is None: + service_name = service_mapping.get(generic_key, default_value) + return service_name + + service_mapping = {} -for entry in os.getenv("DD_SERVICE_MAPPING", "").split(","): - parts = entry.split(":") - if len(parts) == 2: - key, value = parts - service_mapping[key.strip()] = value.strip() +# Initialization code +service_mapping_str = os.getenv("DD_SERVICE_MAPPING", "") +service_mapping = create_service_mapping(service_mapping_str) def create_inferred_span_from_lambda_function_url_event(event, context): request_context = event.get("requestContext") api_id = request_context.get("apiId") domain = request_context.get("domainName") - service_name = None - if api_id in service_mapping: - service_name = service_mapping.get(api_id) - elif "lambda_url" in service_mapping: - service_name = service_mapping.get("lambda_url") - else: - service_name = domain - + service_name = determine_service_name(service_mapping, api_id, "lambda_url", domain) method = request_context.get("http", {}).get("method") path = request_context.get("http", {}).get("path") resource = "{0} {1}".format(method, path) @@ -809,13 +827,9 @@ def create_inferred_span_from_api_gateway_websocket_event( endpoint = request_context.get("routeKey") api_id = request_context.get("apiId") - service_name = None - if api_id in service_mapping: - service_name = service_mapping.get(api_id) - elif "lambda_api_gateway" in service_mapping: - service_name = service_mapping.get("lambda_api_gateway") - else: - service_name = domain + service_name = determine_service_name( + service_mapping, api_id, "lambda_api_gateway", domain + ) tags = { "operation_name": "aws.apigateway.websocket", "http.url": domain + endpoint, @@ -865,14 +879,9 @@ def create_inferred_span_from_api_gateway_event( request_context = event.get("requestContext") domain = request_context.get("domainName", "") api_id = request_context.get("apiId") - service_name = None - if api_id in service_mapping: - service_name = service_mapping.get(api_id) - elif "lambda_api_gateway" in service_mapping: - service_name = service_mapping.get("lambda_api_gateway") - else: - service_name = domain - + service_name = determine_service_name( + service_mapping, api_id, "lambda_api_gateway", domain + ) method = event.get("httpMethod") path = event.get("path") resource = "{0} {1}".format(method, path) @@ -924,12 +933,9 @@ def create_inferred_span_from_http_api_event( request_context = event.get("requestContext") domain = request_context.get("domainName") api_id = request_context.get("apiId") - if api_id in service_mapping: - service_name = service_mapping.get(api_id) - elif "lambda_http_api" in service_mapping: - service_name = service_mapping.get("lambda_http_api") - else: - service_name = domain + service_name = determine_service_name( + service_mapping, api_id, "lambda_api_gateway", domain + ) method = request_context.get("http", {}).get("method") path = event.get("rawPath") resource = "{0} {1}".format(method, path) @@ -978,13 +984,9 @@ def create_inferred_span_from_sqs_event(event, context): event_record = get_first_record(event) event_source_arn = event_record.get("eventSourceARN") queue_name = event_source_arn.split(":")[-1] - if queue_name in service_mapping: - service_name = service_mapping.get(queue_name) - elif "lambda_sqs" in service_mapping: - service_name = service_mapping.get("lambda_sqs") - else: - service_name = "sqs" - + service_name = determine_service_name( + service_mapping, queue_name, "lambda_sqs", "sqs" + ) tags = { "operation_name": "aws.sqs", "resource_names": queue_name, @@ -1039,13 +1041,9 @@ def create_inferred_span_from_sns_event(event, context): sns_message = event_record.get("Sns") topic_arn = event_record.get("Sns", {}).get("TopicArn") topic_name = topic_arn.split(":")[-1] - - if topic_name in service_mapping: - service_name = service_mapping.get(topic_name) - elif "lambda_sns" in service_mapping: - service_name = service_mapping.get("lambda_sns") - else: - service_name = "sns" + service_name = determine_service_name( + service_mapping, topic_name, "lambda_sns", "sns" + ) tags = { "operation_name": "aws.sns", "resource_names": topic_name, @@ -1083,12 +1081,9 @@ def create_inferred_span_from_kinesis_event(event, context): event_id = event_record.get("eventID") stream_name = event_source_arn.split(":")[-1] shard_id = event_id.split(":")[0] - if stream_name in service_mapping: - service_name = service_mapping.get(stream_name) - elif ("lambda_kinesis") in service_mapping: - service_name = service_mapping.get("lambda_kinesis") - else: - service_name = "kinesis" + service_name = determine_service_name( + service_mapping, stream_name, "lambda_kinesis", "kinesis" + ) tags = { "operation_name": "aws.kinesis", "resource_names": stream_name, @@ -1122,14 +1117,9 @@ def create_inferred_span_from_dynamodb_event(event, context): event_record = get_first_record(event) event_source_arn = event_record.get("eventSourceARN") table_name = event_source_arn.split("/")[1] - - if table_name in service_mapping: - service_name = service_mapping.get(table_name) - elif "lambda_dynamodb" in service_mapping: - service_name = service_mapping.get("lambda_dynamodb") - else: - service_name = "dynamodb" - + service_name = determine_service_name( + service_mapping, table_name, "lambda_dynamodb", "dynamodb" + ) dynamodb_message = event_record.get("dynamodb") tags = { "operation_name": "aws.dynamodb", @@ -1163,14 +1153,9 @@ def create_inferred_span_from_dynamodb_event(event, context): def create_inferred_span_from_s3_event(event, context): event_record = get_first_record(event) bucket_name = event_record.get("s3", {}).get("bucket", {}).get("name") - - if bucket_name in service_mapping: - service_name = service_mapping.get(bucket_name) - elif "lambda_s3" in service_mapping: - service_name = service_mapping.get("lambda_s3") - else: - service_name = "s3" - + service_name = determine_service_name( + service_mapping, bucket_name, "lambda_s3", "s3" + ) tags = { "operation_name": "aws.s3", "resource_names": bucket_name, @@ -1201,13 +1186,9 @@ def create_inferred_span_from_s3_event(event, context): def create_inferred_span_from_eventbridge_event(event, context): source = event.get("source") - - if source in service_mapping: - service_name = service_mapping.get(source) - elif "lambda_eventbridge" in service_mapping: - service_name = service_mapping.get("lambda_eventbridge") - else: - service_name = "eventbridge" + service_name = determine_service_name( + service_mapping, source, "lambda_eventbridge", "eventbridge" + ) tags = { "operation_name": "aws.eventbridge", "resource_names": source, diff --git a/tests/test_tracing.py b/tests/test_tracing.py index 8a90b47f..b65b6434 100644 --- a/tests/test_tracing.py +++ b/tests/test_tracing.py @@ -16,7 +16,26 @@ TraceHeader, XraySubsegment, ) -import datadog_lambda.tracing as dt +from datadog_lambda.tracing import ( + _deterministic_md5_hash, + create_inferred_span, + extract_dd_trace_context, + create_dd_dummy_metadata_subsegment, + create_function_execution_span, + get_dd_trace_context, + mark_trace_as_error_for_5xx_responses, + set_correlation_ids, + set_dd_trace_py_root, + _convert_xray_trace_id, + _convert_xray_entity_id, + _convert_xray_sampling, + InferredSpanInfo, + extract_context_from_eventbridge_event, + create_service_mapping, + set_service_mapping, + get_service_mapping, + determine_service_name, +) from datadog_lambda.trigger import EventTypes function_arn = "arn:aws:lambda:us-west-1:123457598159:function:python-layer-test" @@ -73,7 +92,7 @@ def tearDown(self): def test_without_datadog_trace_headers(self): lambda_ctx = get_mock_context() - ctx, source, event_source = dt.extract_dd_trace_context({}, lambda_ctx) + ctx, source, event_source = extract_dd_trace_context({}, lambda_ctx) self.assertEqual(source, "xray") self.assertDictEqual( ctx, @@ -84,7 +103,7 @@ def test_without_datadog_trace_headers(self): }, ) self.assertDictEqual( - dt.get_dd_trace_context(), + get_dd_trace_context(), { TraceHeader.TRACE_ID: fake_xray_header_value_root_decimal, TraceHeader.PARENT_ID: fake_xray_header_value_parent_decimal, @@ -95,7 +114,7 @@ def test_without_datadog_trace_headers(self): def test_with_non_object_event(self): lambda_ctx = get_mock_context() - ctx, source, event_source = dt.extract_dd_trace_context(b"", lambda_ctx) + ctx, source, event_source = extract_dd_trace_context(b"", lambda_ctx) self.assertEqual(source, "xray") self.assertDictEqual( ctx, @@ -106,7 +125,7 @@ def test_with_non_object_event(self): }, ) self.assertDictEqual( - dt.get_dd_trace_context(), + get_dd_trace_context(), { TraceHeader.TRACE_ID: fake_xray_header_value_root_decimal, TraceHeader.PARENT_ID: fake_xray_header_value_parent_decimal, @@ -117,7 +136,7 @@ def test_with_non_object_event(self): def test_with_incomplete_datadog_trace_headers(self): lambda_ctx = get_mock_context() - ctx, source, event_source = dt.extract_dd_trace_context( + ctx, source, event_source = extract_dd_trace_context( {"headers": {TraceHeader.TRACE_ID: "123", TraceHeader.PARENT_ID: "321"}}, lambda_ctx, ) @@ -131,7 +150,7 @@ def test_with_incomplete_datadog_trace_headers(self): }, ) self.assertDictEqual( - dt.get_dd_trace_context(), + get_dd_trace_context(), { TraceHeader.TRACE_ID: fake_xray_header_value_root_decimal, TraceHeader.PARENT_ID: fake_xray_header_value_parent_decimal, @@ -141,7 +160,7 @@ def test_with_incomplete_datadog_trace_headers(self): def test_with_complete_datadog_trace_headers(self): lambda_ctx = get_mock_context() - ctx, source, event_source = dt.extract_dd_trace_context( + ctx, source, event_source = extract_dd_trace_context( { "headers": { TraceHeader.TRACE_ID: "123", @@ -157,14 +176,14 @@ def test_with_complete_datadog_trace_headers(self): {"trace-id": "123", "parent-id": "321", "sampling-priority": "1"}, ) self.assertDictEqual( - dt.get_dd_trace_context(), + get_dd_trace_context(), { TraceHeader.TRACE_ID: "123", TraceHeader.PARENT_ID: fake_xray_header_value_parent_decimal, TraceHeader.SAMPLING_PRIORITY: "1", }, ) - dt.create_dd_dummy_metadata_subsegment(ctx, XraySubsegment.TRACE_KEY) + create_dd_dummy_metadata_subsegment(ctx, XraySubsegment.TRACE_KEY) self.mock_send_segment.assert_called() self.mock_send_segment.assert_called_with( XraySubsegment.TRACE_KEY, @@ -182,7 +201,7 @@ def extractor_foo(event, context): return trace_id, parent_id, sampling_priority lambda_ctx = get_mock_context() - ctx, ctx_source, event_source = dt.extract_dd_trace_context( + ctx, ctx_source, event_source = extract_dd_trace_context( { "foo": { TraceHeader.TRACE_ID: "123", @@ -203,7 +222,7 @@ def extractor_foo(event, context): }, ) self.assertDictEqual( - dt.get_dd_trace_context(), + get_dd_trace_context(), { TraceHeader.TRACE_ID: "123", TraceHeader.PARENT_ID: fake_xray_header_value_parent_decimal, @@ -216,7 +235,7 @@ def extractor_raiser(event, context): raise Exception("kreator") lambda_ctx = get_mock_context() - ctx, ctx_source, event_source = dt.extract_dd_trace_context( + ctx, ctx_source, event_source = extract_dd_trace_context( { "foo": { TraceHeader.TRACE_ID: "123", @@ -237,7 +256,7 @@ def extractor_raiser(event, context): }, ) self.assertDictEqual( - dt.get_dd_trace_context(), + get_dd_trace_context(), { TraceHeader.TRACE_ID: fake_xray_header_value_root_decimal, TraceHeader.PARENT_ID: fake_xray_header_value_parent_decimal, @@ -278,7 +297,7 @@ def test_with_sqs_distributed_datadog_trace_data(self): } ] } - ctx, source, event_source = dt.extract_dd_trace_context(sqs_event, lambda_ctx) + ctx, source, event_source = extract_dd_trace_context(sqs_event, lambda_ctx) self.assertEqual(source, "event") self.assertDictEqual( ctx, @@ -289,14 +308,14 @@ def test_with_sqs_distributed_datadog_trace_data(self): }, ) self.assertDictEqual( - dt.get_dd_trace_context(), + get_dd_trace_context(), { TraceHeader.TRACE_ID: "123", TraceHeader.PARENT_ID: fake_xray_header_value_parent_decimal, TraceHeader.SAMPLING_PRIORITY: "1", }, ) - dt.create_dd_dummy_metadata_subsegment(ctx, XraySubsegment.TRACE_KEY) + create_dd_dummy_metadata_subsegment(ctx, XraySubsegment.TRACE_KEY) self.mock_send_segment.assert_called_with( XraySubsegment.TRACE_KEY, {"trace-id": "123", "parent-id": "321", "sampling-priority": "1"}, @@ -312,7 +331,7 @@ def test_with_legacy_client_context_datadog_trace_data(self): } } ) - ctx, source, event_source = dt.extract_dd_trace_context({}, lambda_ctx) + ctx, source, event_source = extract_dd_trace_context({}, lambda_ctx) self.assertEqual(source, "event") self.assertDictEqual( ctx, @@ -323,14 +342,14 @@ def test_with_legacy_client_context_datadog_trace_data(self): }, ) self.assertDictEqual( - dt.get_dd_trace_context(), + get_dd_trace_context(), { TraceHeader.TRACE_ID: "666", TraceHeader.PARENT_ID: fake_xray_header_value_parent_decimal, TraceHeader.SAMPLING_PRIORITY: "1", }, ) - dt.create_dd_dummy_metadata_subsegment(ctx, XraySubsegment.TRACE_KEY) + create_dd_dummy_metadata_subsegment(ctx, XraySubsegment.TRACE_KEY) self.mock_send_segment.assert_called() self.mock_send_segment.assert_called_with( XraySubsegment.TRACE_KEY, @@ -345,7 +364,7 @@ def test_with_new_client_context_datadog_trace_data(self): TraceHeader.SAMPLING_PRIORITY: "1", } ) - ctx, source, event_source = dt.extract_dd_trace_context({}, lambda_ctx) + ctx, source, event_source = extract_dd_trace_context({}, lambda_ctx) self.assertEqual(source, "event") self.assertDictEqual( ctx, @@ -356,14 +375,14 @@ def test_with_new_client_context_datadog_trace_data(self): }, ) self.assertDictEqual( - dt.get_dd_trace_context(), + get_dd_trace_context(), { TraceHeader.TRACE_ID: "666", TraceHeader.PARENT_ID: fake_xray_header_value_parent_decimal, TraceHeader.SAMPLING_PRIORITY: "1", }, ) - dt.create_dd_dummy_metadata_subsegment(ctx, XraySubsegment.TRACE_KEY) + create_dd_dummy_metadata_subsegment(ctx, XraySubsegment.TRACE_KEY) self.mock_send_segment.assert_called() self.mock_send_segment.assert_called_with( XraySubsegment.TRACE_KEY, @@ -372,7 +391,7 @@ def test_with_new_client_context_datadog_trace_data(self): def test_with_complete_datadog_trace_headers_with_mixed_casing(self): lambda_ctx = get_mock_context() - dt.extract_dd_trace_context( + extract_dd_trace_context( { "headers": { "X-Datadog-Trace-Id": "123", @@ -383,7 +402,7 @@ def test_with_complete_datadog_trace_headers_with_mixed_casing(self): lambda_ctx, ) self.assertDictEqual( - dt.get_dd_trace_context(), + get_dd_trace_context(), { TraceHeader.TRACE_ID: "123", TraceHeader.PARENT_ID: fake_xray_header_value_parent_decimal, @@ -396,7 +415,7 @@ def test_with_complete_datadog_trace_headers_with_trigger_tags(self): "function_trigger.event_source": "sqs", "function_trigger.event_source_arn": "arn:aws:sqs:us-east-1:123456789012:MyQueue", } - dt.create_dd_dummy_metadata_subsegment( + create_dd_dummy_metadata_subsegment( trigger_tags, XraySubsegment.LAMBDA_FUNCTION_TAGS_KEY ) self.mock_send_segment.assert_called() @@ -416,38 +435,36 @@ def test_with_complete_datadog_trace_headers_with_trigger_tags(self): class TestXRayContextConversion(unittest.TestCase): def test_convert_xray_trace_id(self): self.assertEqual( - dt._convert_xray_trace_id("00000000e1be46a994272793"), "7043144561403045779" + _convert_xray_trace_id("00000000e1be46a994272793"), "7043144561403045779" ) self.assertEqual( - dt._convert_xray_trace_id("bd862e3fe1be46a994272793"), "7043144561403045779" + _convert_xray_trace_id("bd862e3fe1be46a994272793"), "7043144561403045779" ) self.assertEqual( - dt._convert_xray_trace_id("ffffffffffffffffffffffff"), + _convert_xray_trace_id("ffffffffffffffffffffffff"), "9223372036854775807", # 0x7FFFFFFFFFFFFFFF ) def test_convert_xray_entity_id(self): self.assertEqual( - dt._convert_xray_entity_id("53995c3f42cd8ad8"), "6023947403358210776" + _convert_xray_entity_id("53995c3f42cd8ad8"), "6023947403358210776" ) self.assertEqual( - dt._convert_xray_entity_id("1000000000000000"), "1152921504606846976" + _convert_xray_entity_id("1000000000000000"), "1152921504606846976" ) self.assertEqual( - dt._convert_xray_entity_id("ffffffffffffffff"), "18446744073709551615" + _convert_xray_entity_id("ffffffffffffffff"), "18446744073709551615" ) def test_convert_xray_sampling(self): - self.assertEqual( - dt._convert_xray_sampling(True), str(SamplingPriority.USER_KEEP) - ) + self.assertEqual(_convert_xray_sampling(True), str(SamplingPriority.USER_KEEP)) self.assertEqual( - dt._convert_xray_sampling(False), str(SamplingPriority.USER_REJECT) + _convert_xray_sampling(False), str(SamplingPriority.USER_REJECT) ) @@ -467,7 +484,7 @@ def setUp(self): self.addCleanup(patcher.stop) def test_set_correlation_ids(self): - dt.set_correlation_ids() + set_correlation_ids() span = tracer.current_span() self.assertEqual(span.trace_id, 123) self.assertEqual(span.span_id, 456) @@ -476,9 +493,7 @@ def test_set_correlation_ids(self): class TestFunctionSpanTags(unittest.TestCase): def test_function(self): ctx = get_mock_context() - span = dt.create_function_execution_span( - ctx, "", False, {"source": ""}, False, {} - ) + span = create_function_execution_span(ctx, "", False, {"source": ""}, False, {}) self.assertEqual(span.get_tag("function_arn"), function_arn) self.assertEqual(span.get_tag("function_version"), "$LATEST") self.assertEqual(span.get_tag("resource_names"), "Function") @@ -489,9 +504,7 @@ def test_function_with_version(self): ctx = get_mock_context( invoked_function_arn=function_arn + ":" + function_version ) - span = dt.create_function_execution_span( - ctx, "", False, {"source": ""}, False, {} - ) + span = create_function_execution_span(ctx, "", False, {"source": ""}, False, {}) self.assertEqual(span.get_tag("function_arn"), function_arn) self.assertEqual(span.get_tag("function_version"), function_version) self.assertEqual(span.get_tag("resource_names"), "Function") @@ -500,9 +513,7 @@ def test_function_with_version(self): def test_function_with_alias(self): function_alias = "alias" ctx = get_mock_context(invoked_function_arn=function_arn + ":" + function_alias) - span = dt.create_function_execution_span( - ctx, "", False, {"source": ""}, False, {} - ) + span = create_function_execution_span(ctx, "", False, {"source": ""}, False, {}) self.assertEqual(span.get_tag("function_arn"), function_arn) self.assertEqual(span.get_tag("function_version"), function_alias) self.assertEqual(span.get_tag("resource_names"), "Function") @@ -510,7 +521,7 @@ def test_function_with_alias(self): def test_function_with_trigger_tags(self): ctx = get_mock_context() - span = dt.create_function_execution_span( + span = create_function_execution_span( ctx, "", False, @@ -553,7 +564,7 @@ def test_mixed_parent_context_when_merging(self): # use the dd-trace trace-id and the x-ray parent-id # This allows parenting relationships like dd-trace -> x-ray -> dd-trace lambda_ctx = get_mock_context() - ctx, source, event_type = dt.extract_dd_trace_context( + ctx, source, event_type = extract_dd_trace_context( { "headers": { TraceHeader.TRACE_ID: "123", @@ -563,7 +574,7 @@ def test_mixed_parent_context_when_merging(self): }, lambda_ctx, ) - dt.set_dd_trace_py_root( + set_dd_trace_py_root( source, True ) # When merging is off, always use dd-trace-context @@ -599,7 +610,7 @@ def test_create_inferred_span_from_authorizer_request_api_gateway_v1_cached_even event = json.load(event) ctx = get_mock_context() ctx.aws_request_id = "abc123" # injected data's requestId is abc321 - span = dt.create_inferred_span(event, ctx) + span = create_inferred_span(event, ctx) self.mock_span_stop.assert_not_called() # NO authorizer span is injected self._basic_common_checks(span, "aws.apigateway.rest") @@ -620,7 +631,7 @@ def test_create_inferred_span_from_authorizer_token_api_gateway_v2_cached_event( event = json.load(event) ctx = get_mock_context() ctx.aws_request_id = "abc123" # injected data's requestId is abc321 - span = dt.create_inferred_span(event, ctx) + span = create_inferred_span(event, ctx) self.mock_span_stop.assert_not_called() # NO authorizer span is injected self._basic_common_checks(span, "aws.apigateway.rest") @@ -632,9 +643,9 @@ def test_create_inferred_span_from_authorizer_request_api_gateway_v2_event(self) event = json.load(event) ctx = get_mock_context() ctx.aws_request_id = "abc123" - span = dt.create_inferred_span(event, ctx) - self.assertEqual(span.get_tag(dt.InferredSpanInfo.TAG_SOURCE), "self") - self.assertEqual(span.get_tag(dt.InferredSpanInfo.SYNCHRONICITY), "sync") + span = create_inferred_span(event, ctx) + self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") + self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "sync") self.mock_span_stop.assert_not_called() self.assertEqual(span.start_ns, finish_time) self._basic_common_checks(span, "aws.httpapi") @@ -648,7 +659,7 @@ def test_create_inferred_span_from_authorizer_request_api_gateway_v2_cached_even event = json.load(event) ctx = get_mock_context() ctx.aws_request_id = "abc123" # injected data's requestId is abc321 - span = dt.create_inferred_span(event, ctx) + span = create_inferred_span(event, ctx) self.mock_span_stop.assert_not_called() # NO authorizer span is injected self._basic_common_checks(span, "aws.httpapi") @@ -673,7 +684,7 @@ def test_create_inferred_span_from_authorizer_request_api_gateway_websocket_mess event = json.load(event) ctx = get_mock_context() ctx.aws_request_id = "abc123" # injected data's requestId is abc321 - span = dt.create_inferred_span(event, ctx) + span = create_inferred_span(event, ctx) self.mock_span_stop.assert_not_called() # NO authorizer span is injected self._basic_common_checks(span, "aws.apigateway.websocket", "web", "main", None) @@ -683,9 +694,9 @@ def _authorizer_span_testing_items(self, event_sample_source, finish_time): event = json.load(event) ctx = get_mock_context() ctx.aws_request_id = "abc123" - span = dt.create_inferred_span(event, ctx) - self.assertEqual(span.get_tag(dt.InferredSpanInfo.TAG_SOURCE), "self") - self.assertEqual(span.get_tag(dt.InferredSpanInfo.SYNCHRONICITY), "sync") + span = create_inferred_span(event, ctx) + self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") + self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "sync") # checking the upstream_authorizer_span self.mock_span_stop.assert_called_once() @@ -728,13 +739,57 @@ def _basic_common_checks( class TestServiceMapping(unittest.TestCase): - def tearDown(self): - del os.environ["DD_SERVICE_MAPPING"] + def test_create_service_mapping(self): + val = "api1:service1,api2:service2" + expected_output = {"api1": "service1", "api2": "service2"} + self.assertEqual(create_service_mapping(val), expected_output) + + +def test_get_service_mapping(self): + os.environ["DD_SERVICE_MAPPING"] = "api1:service1,api2:service2" + expected_output = {"api1": "service1", "api2": "service2"} + service_mapping = create_service_mapping(os.environ["DD_SERVICE_MAPPING"]) + self.assertEqual(get_service_mapping(), expected_output) + + +def test_set_service_mapping(self): + new_service_mapping = {"api3": "service3", "api4": "service4"} + set_service_mapping(new_service_mapping) + self.assertEqual(get_service_mapping(), new_service_mapping) + + +def test_determine_service_name(self): + # Prepare the environment + os.environ["DD_SERVICE_MAPPING"] = "api1:service1,api2:service2" + service_mapping = create_service_mapping(os.environ["DD_SERVICE_MAPPING"]) + + # Case where specific key is in the service mapping + specific_key = "api1" + self.assertEqual( + determine_service_name( + get_service_mapping(), specific_key, "lambda_url", "default" + ), + "service1", + ) + + # Case where specific key is not in the service mapping, but generic key is + specific_key = "api3" + self.assertEqual( + determine_service_name(get_service_mapping(), specific_key, "api2", "default"), + "service2", + ) + + # Case where neither specific nor generic keys are in the service mapping + specific_key = "api3" + self.assertEqual( + determine_service_name(get_service_mapping(), specific_key, "api3", "default"), + "default", + ) def test_remaps_all_inferred_span_service_names_from_api_gateway_event(self): - os.environ["DD_SERVICE_MAPPING"] = "lambda_api_gateway:new-name" - global dt - dt = importlib.reload(dt) + service_mapping_str = "lambda_api_gateway:new-name" + new_service_mapping = create_service_mapping(service_mapping_str) + set_service_mapping(new_service_mapping) event_sample_source = "api-gateway" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -743,26 +798,23 @@ def test_remaps_all_inferred_span_service_names_from_api_gateway_event(self): ctx = get_mock_context() ctx.aws_request_id = "123" - span1 = dt.create_inferred_span(original_event, ctx) + span1 = create_inferred_span(original_event, ctx) self.assertEqual(span1.get_tag("operation_name"), "aws.apigateway.rest") self.assertEqual(span1.service, "new-name") # Testing the second event - event2 = copy.deepcopy( - original_event - ) # Create a deep copy so we don't modify the original event - # Modify event2 as necessary + event2 = copy.deepcopy(original_event) event2["requestContext"][ "domainName" ] = "different.execute-api.us-east-2.amazonaws.com" - span2 = dt.create_inferred_span(event2, ctx) + span2 = create_inferred_span(event2, ctx) self.assertEqual(span2.get_tag("operation_name"), "aws.apigateway.rest") self.assertEqual(span2.service, "new-name") def test_remaps_specific_inferred_span_service_names_from_api_gateway_event(self): - os.environ["DD_SERVICE_MAPPING"] = "1234567890:new-name" - global dt - dt = importlib.reload(dt) + service_mapping_str = "1234567890:new-name" + new_service_mapping = create_service_mapping(service_mapping_str) + set_service_mapping(new_service_mapping) event_sample_source = "api-gateway" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -771,17 +823,14 @@ def test_remaps_specific_inferred_span_service_names_from_api_gateway_event(self ctx = get_mock_context() ctx.aws_request_id = "123" - span1 = dt.create_inferred_span(original_event, ctx) + span1 = create_inferred_span(original_event, ctx) self.assertEqual(span1.get_tag("operation_name"), "aws.apigateway.rest") self.assertEqual(span1.service, "new-name") # Testing the second event - event2 = copy.deepcopy( - original_event - ) # Create a deep copy so we don't modify the original event - # Modify event2 as necessary + event2 = copy.deepcopy(original_event) event2["requestContext"]["apiId"] = "different" - span2 = dt.create_inferred_span(event2, ctx) + span2 = create_inferred_span(event2, ctx) self.assertEqual(span2.get_tag("operation_name"), "aws.apigateway.rest") self.assertEqual( span2.service, "70ixmpl4fl.execute-api.us-east-2.amazonaws.com" @@ -790,9 +839,7 @@ def test_remaps_specific_inferred_span_service_names_from_api_gateway_event(self def test_remaps_specific_inferred_span_service_names_from_api_gateway_websocket_event( self, ): - os.environ["DD_SERVICE_MAPPING"] = "p62c47itsb:new-name" - global dt - dt = importlib.reload(dt) + set_service_mapping({"p62c47itsb": "new-name"}) event_sample_source = "api-gateway-websocket-default" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -801,17 +848,14 @@ def test_remaps_specific_inferred_span_service_names_from_api_gateway_websocket_ ctx = get_mock_context() ctx.aws_request_id = "123" - span1 = dt.create_inferred_span(original_event, ctx) + span1 = create_inferred_span(original_event, ctx) self.assertEqual(span1.get_tag("operation_name"), "aws.apigateway.websocket") self.assertEqual(span1.service, "new-name") # Testing the second event - event2 = copy.deepcopy( - original_event - ) # Create a deep copy so we don't modify the original event - # Modify event2 as necessary + event2 = copy.deepcopy(original_event) event2["requestContext"]["apiId"] = "different" - span2 = dt.create_inferred_span(event2, ctx) + span2 = create_inferred_span(event2, ctx) self.assertEqual(span2.get_tag("operation_name"), "aws.apigateway.websocket") self.assertEqual( span2.service, "p62c47itsb.execute-api.eu-west-1.amazonaws.com" @@ -820,9 +864,7 @@ def test_remaps_specific_inferred_span_service_names_from_api_gateway_websocket_ def test_remaps_specific_inferred_span_service_names_from_api_gateway_http_event( self, ): - os.environ["DD_SERVICE_MAPPING"] = "x02yirxc7a:new-name" - global dt - dt = importlib.reload(dt) + set_service_mapping({"x02yirxc7a": "new-name"}) event_sample_source = "http-api" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -831,26 +873,21 @@ def test_remaps_specific_inferred_span_service_names_from_api_gateway_http_event ctx = get_mock_context() ctx.aws_request_id = "123" - span1 = dt.create_inferred_span(original_event, ctx) + span1 = create_inferred_span(original_event, ctx) self.assertEqual(span1.get_tag("operation_name"), "aws.httpapi") self.assertEqual(span1.service, "new-name") # Testing the second event - event2 = copy.deepcopy( - original_event - ) # Create a deep copy so we don't modify the original event - # Modify event2 as necessary + event2 = copy.deepcopy(original_event) event2["requestContext"]["apiId"] = "different" - span2 = dt.create_inferred_span(event2, ctx) + span2 = create_inferred_span(event2, ctx) self.assertEqual(span2.get_tag("operation_name"), "aws.httpapi") self.assertEqual( span2.service, "x02yirxc7a.execute-api.eu-west-1.amazonaws.com" ) def test_remaps_all_inferred_span_service_names_from_lambda_url_event(self): - os.environ["DD_SERVICE_MAPPING"] = "lambda_url:new-name" - global dt - dt = importlib.reload(dt) + set_service_mapping({"lambda_url": "new-name"}) event_sample_source = "lambda-url" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -859,26 +896,21 @@ def test_remaps_all_inferred_span_service_names_from_lambda_url_event(self): ctx = get_mock_context() ctx.aws_request_id = "123" - span1 = dt.create_inferred_span(original_event, ctx) + span1 = create_inferred_span(original_event, ctx) self.assertEqual(span1.get_tag("operation_name"), "aws.lambda.url") self.assertEqual(span1.service, "new-name") # Testing the second event - event2 = copy.deepcopy( - original_event - ) # Create a deep copy so we don't modify the original event - # Modify event2 as necessary + event2 = copy.deepcopy(original_event) event2["requestContext"][ "domainName" ] = "different.lambda-url.eu-south-1.amazonaws.com" - span2 = dt.create_inferred_span(event2, ctx) + span2 = create_inferred_span(event2, ctx) self.assertEqual(span2.get_tag("operation_name"), "aws.lambda.url") self.assertEqual(span2.service, "new-name") def test_remaps_specific_inferred_span_service_names_from_lambda_url_event(self): - os.environ["DD_SERVICE_MAPPING"] = "a8hyhsshac:new-name" - global dt - dt = importlib.reload(dt) + set_service_mapping({"a8hyhsshac": "new-name"}) event_sample_source = "lambda-url" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -887,26 +919,21 @@ def test_remaps_specific_inferred_span_service_names_from_lambda_url_event(self) ctx = get_mock_context() ctx.aws_request_id = "123" - span1 = dt.create_inferred_span(original_event, ctx) + span1 = create_inferred_span(original_event, ctx) self.assertEqual(span1.get_tag("operation_name"), "aws.lambda.url") self.assertEqual(span1.service, "new-name") # Testing the second event - event2 = copy.deepcopy( - original_event - ) # Create a deep copy so we don't modify the original event - # Modify event2 as necessary + event2 = copy.deepcopy(original_event) event2["requestContext"]["apiId"] = "different" - span2 = dt.create_inferred_span(event2, ctx) + span2 = create_inferred_span(event2, ctx) self.assertEqual(span2.get_tag("operation_name"), "aws.lambda.url") self.assertEqual( span2.service, "a8hyhsshac.lambda-url.eu-south-1.amazonaws.com" ) def test_remaps_all_inferred_span_service_names_from_sqs_event(self): - os.environ["DD_SERVICE_MAPPING"] = "lambda_sqs:new-name" - global dt - dt = importlib.reload(dt) + set_service_mapping({"lambda_sqs": "new-name"}) event_sample_source = "sqs-string-msg-attribute" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -915,7 +942,7 @@ def test_remaps_all_inferred_span_service_names_from_sqs_event(self): ctx = get_mock_context() ctx.aws_request_id = "123" - span1 = dt.create_inferred_span(original_event, ctx) + span1 = create_inferred_span(original_event, ctx) self.assertEqual(span1.get_tag("operation_name"), "aws.sqs") self.assertEqual(span1.service, "new-name") @@ -924,14 +951,12 @@ def test_remaps_all_inferred_span_service_names_from_sqs_event(self): event2["Records"][0][ "eventSourceARN" ] = "arn:aws:sqs:eu-west-1:123456789012:different-sqs-url" - span2 = dt.create_inferred_span(event2, ctx) + span2 = create_inferred_span(event2, ctx) self.assertEqual(span2.get_tag("operation_name"), "aws.sqs") self.assertEqual(span2.service, "new-name") def test_remaps_specific_inferred_span_service_names_from_sqs_event(self): - os.environ["DD_SERVICE_MAPPING"] = "InferredSpansQueueNode:new-name" - global dt - dt = importlib.reload(dt) + set_service_mapping({"InferredSpansQueueNode": "new-name"}) event_sample_source = "sqs-string-msg-attribute" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -940,7 +965,7 @@ def test_remaps_specific_inferred_span_service_names_from_sqs_event(self): ctx = get_mock_context() ctx.aws_request_id = "123" - span1 = dt.create_inferred_span(original_event, ctx) + span1 = create_inferred_span(original_event, ctx) self.assertEqual(span1.get_tag("operation_name"), "aws.sqs") self.assertEqual(span1.service, "new-name") @@ -949,14 +974,12 @@ def test_remaps_specific_inferred_span_service_names_from_sqs_event(self): event2["Records"][0][ "eventSourceARN" ] = "arn:aws:sqs:eu-west-1:123456789012:different-sqs-url" - span2 = dt.create_inferred_span(event2, ctx) + span2 = create_inferred_span(event2, ctx) self.assertEqual(span2.get_tag("operation_name"), "aws.sqs") self.assertEqual(span2.service, "sqs") def test_remaps_all_inferred_span_service_names_from_sns_event(self): - os.environ["DD_SERVICE_MAPPING"] = "lambda_sns:new-name" - global dt - dt = importlib.reload(dt) + set_service_mapping({"lambda_sns": "new-name"}) event_sample_source = "sns-string-msg-attribute" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -965,7 +988,7 @@ def test_remaps_all_inferred_span_service_names_from_sns_event(self): ctx = get_mock_context() ctx.aws_request_id = "123" - span1 = dt.create_inferred_span(original_event, ctx) + span1 = create_inferred_span(original_event, ctx) self.assertEqual(span1.get_tag("operation_name"), "aws.sns") self.assertEqual(span1.service, "new-name") @@ -974,14 +997,12 @@ def test_remaps_all_inferred_span_service_names_from_sns_event(self): event2["Records"][0]["Sns"][ "TopicArn" ] = "arn:aws:sns:us-west-2:123456789012:different-sns-topic" - span2 = dt.create_inferred_span(event2, ctx) + span2 = create_inferred_span(event2, ctx) self.assertEqual(span2.get_tag("operation_name"), "aws.sns") self.assertEqual(span2.service, "new-name") def test_remaps_specific_inferred_span_service_names_from_sns_event(self): - os.environ["DD_SERVICE_MAPPING"] = "serverlessTracingTopicPy:new-name" - global dt - dt = importlib.reload(dt) + set_service_mapping({"serverlessTracingTopicPy": "new-name"}) event_sample_source = "sns-string-msg-attribute" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -990,7 +1011,7 @@ def test_remaps_specific_inferred_span_service_names_from_sns_event(self): ctx = get_mock_context() ctx.aws_request_id = "123" - span1 = dt.create_inferred_span(original_event, ctx) + span1 = create_inferred_span(original_event, ctx) self.assertEqual(span1.get_tag("operation_name"), "aws.sns") self.assertEqual(span1.service, "new-name") @@ -999,14 +1020,12 @@ def test_remaps_specific_inferred_span_service_names_from_sns_event(self): event2["Records"][0]["Sns"][ "TopicArn" ] = "arn:aws:sns:us-west-2:123456789012:different-sns-topic" - span2 = dt.create_inferred_span(event2, ctx) + span2 = create_inferred_span(event2, ctx) self.assertEqual(span2.get_tag("operation_name"), "aws.sns") self.assertEqual(span2.service, "sns") def test_remaps_all_inferred_span_service_names_from_kinesis_event(self): - os.environ["DD_SERVICE_MAPPING"] = "lambda_kinesis:new-name" - global dt - dt = importlib.reload(dt) + set_service_mapping({"lambda_kinesis": "new-name"}) event_sample_source = "kinesis" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -1015,7 +1034,7 @@ def test_remaps_all_inferred_span_service_names_from_kinesis_event(self): ctx = get_mock_context() ctx.aws_request_id = "123" - span1 = dt.create_inferred_span(original_event, ctx) + span1 = create_inferred_span(original_event, ctx) self.assertEqual(span1.get_tag("operation_name"), "aws.kinesis") self.assertEqual(span1.service, "new-name") @@ -1024,14 +1043,12 @@ def test_remaps_all_inferred_span_service_names_from_kinesis_event(self): event2["Records"][0][ "eventSourceARN" ] = "arn:aws:kinesis:eu-west-1:601427279990:stream/differentKinesisStream" - span2 = dt.create_inferred_span(event2, ctx) + span2 = create_inferred_span(event2, ctx) self.assertEqual(span2.get_tag("operation_name"), "aws.kinesis") self.assertEqual(span2.service, "new-name") def test_remaps_specific_inferred_span_service_names_from_kinesis_event(self): - os.environ["DD_SERVICE_MAPPING"] = "Different_EXAMPLE:new-name" - global dt - dt = importlib.reload(dt) + set_service_mapping({"Different_EXAMPLE": "new-name"}) event_sample_source = "kinesis" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -1040,7 +1057,7 @@ def test_remaps_specific_inferred_span_service_names_from_kinesis_event(self): ctx = get_mock_context() ctx.aws_request_id = "123" - span1 = dt.create_inferred_span(original_event, ctx) + span1 = create_inferred_span(original_event, ctx) self.assertEqual(span1.get_tag("operation_name"), "aws.kinesis") self.assertEqual(span1.service, "kinesis") @@ -1049,14 +1066,12 @@ def test_remaps_specific_inferred_span_service_names_from_kinesis_event(self): event2["Records"][0][ "eventSourceARN" ] = "arn:aws:kinesis:eu-west-1:601427279990:stream/DifferentKinesisStream" - span2 = dt.create_inferred_span(event2, ctx) + span2 = create_inferred_span(event2, ctx) self.assertEqual(span2.get_tag("operation_name"), "aws.kinesis") self.assertEqual(span2.service, "kinesis") def test_remaps_all_inferred_span_service_names_from_s3_event(self): - os.environ["DD_SERVICE_MAPPING"] = "lambda_s3:new-name" - global dt - dt = importlib.reload(dt) + set_service_mapping({"lambda_s3": "new-name"}) event_sample_source = "s3" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -1065,7 +1080,7 @@ def test_remaps_all_inferred_span_service_names_from_s3_event(self): ctx = get_mock_context() ctx.aws_request_id = "123" - span1 = dt.create_inferred_span(original_event, ctx) + span1 = create_inferred_span(original_event, ctx) self.assertEqual(span1.get_tag("operation_name"), "aws.s3") self.assertEqual(span1.service, "new-name") @@ -1074,14 +1089,12 @@ def test_remaps_all_inferred_span_service_names_from_s3_event(self): event2["Records"][0]["s3"]["bucket"][ "arn" ] = "arn:aws:s3:::different-example-bucket" - span2 = dt.create_inferred_span(event2, ctx) + span2 = create_inferred_span(event2, ctx) self.assertEqual(span2.get_tag("operation_name"), "aws.s3") self.assertEqual(span2.service, "new-name") def test_remaps_specific_inferred_span_service_names_from_s3_event(self): - os.environ["DD_SERVICE_MAPPING"] = "example-bucket:new-name" - global dt - dt = importlib.reload(dt) + set_service_mapping({"example-bucket": "new-name"}) event_sample_source = "s3" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -1090,21 +1103,19 @@ def test_remaps_specific_inferred_span_service_names_from_s3_event(self): ctx = get_mock_context() ctx.aws_request_id = "123" - span1 = dt.create_inferred_span(original_event, ctx) + span1 = create_inferred_span(original_event, ctx) self.assertEqual(span1.get_tag("operation_name"), "aws.s3") self.assertEqual(span1.service, "new-name") # Testing the second event event2 = copy.deepcopy(original_event) event2["Records"][0]["s3"]["bucket"]["name"] = "different-example-bucket" - span2 = dt.create_inferred_span(event2, ctx) + span2 = create_inferred_span(event2, ctx) self.assertEqual(span2.get_tag("operation_name"), "aws.s3") self.assertEqual(span2.service, "s3") def test_remaps_all_inferred_span_service_names_from_dynamodb_event(self): - os.environ["DD_SERVICE_MAPPING"] = "lambda_dynamodb:new-name" - global dt - dt = importlib.reload(dt) + set_service_mapping({"lambda_dynamodb": "new-name"}) event_sample_source = "dynamodb" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -1113,7 +1124,7 @@ def test_remaps_all_inferred_span_service_names_from_dynamodb_event(self): ctx = get_mock_context() ctx.aws_request_id = "123" - span1 = dt.create_inferred_span(original_event, ctx) + span1 = create_inferred_span(original_event, ctx) self.assertEqual(span1.get_tag("operation_name"), "aws.dynamodb") self.assertEqual(span1.service, "new-name") @@ -1122,14 +1133,12 @@ def test_remaps_all_inferred_span_service_names_from_dynamodb_event(self): event2["Records"][0][ "eventSourceARN" ] = "arn:aws:dynamodb:us-east-1:123456789012:table/DifferentExampleTableWithStream/stream/2015-06-27T00:48:05.899" - span2 = dt.create_inferred_span(event2, ctx) + span2 = create_inferred_span(event2, ctx) self.assertEqual(span2.get_tag("operation_name"), "aws.dynamodb") self.assertEqual(span2.service, "new-name") def test_remaps_specific_inferred_span_service_names_from_dynamodb_event(self): - os.environ["DD_SERVICE_MAPPING"] = "ExampleTableWithStream:new-name" - global dt - dt = importlib.reload(dt) + set_service_mapping({"ExampleTableWithStream": "new-name"}) event_sample_source = "dynamodb" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -1138,7 +1147,7 @@ def test_remaps_specific_inferred_span_service_names_from_dynamodb_event(self): ctx = get_mock_context() ctx.aws_request_id = "123" - span1 = dt.create_inferred_span(original_event, ctx) + span1 = create_inferred_span(original_event, ctx) self.assertEqual(span1.get_tag("operation_name"), "aws.dynamodb") self.assertEqual(span1.service, "new-name") @@ -1147,14 +1156,12 @@ def test_remaps_specific_inferred_span_service_names_from_dynamodb_event(self): event2["Records"][0][ "eventSourceARN" ] = "arn:aws:dynamodb:us-east-1:123456789012:table/DifferentExampleTableWithStream/stream/2015-06-27T00:48:05.899" - span2 = dt.create_inferred_span(event2, ctx) + span2 = create_inferred_span(event2, ctx) self.assertEqual(span2.get_tag("operation_name"), "aws.dynamodb") self.assertEqual(span2.service, "dynamodb") def test_remaps_all_inferred_span_service_names_from_eventbridge_event(self): - os.environ["DD_SERVICE_MAPPING"] = "lambda_eventbridge:new-name" - global dt - dt = importlib.reload(dt) + set_service_mapping({"lambda_eventbridge": "new-name"}) event_sample_source = "eventbridge-custom" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -1163,21 +1170,19 @@ def test_remaps_all_inferred_span_service_names_from_eventbridge_event(self): ctx = get_mock_context() ctx.aws_request_id = "123" - span1 = dt.create_inferred_span(original_event, ctx) + span1 = create_inferred_span(original_event, ctx) self.assertEqual(span1.get_tag("operation_name"), "aws.eventbridge") self.assertEqual(span1.service, "new-name") # Testing the second event event2 = copy.deepcopy(original_event) event2["source"] = "different.eventbridge.custom.event.sender" - span2 = dt.create_inferred_span(event2, ctx) + span2 = create_inferred_span(event2, ctx) self.assertEqual(span2.get_tag("operation_name"), "aws.eventbridge") self.assertEqual(span2.service, "new-name") def test_remaps_specific_inferred_span_service_names_from_eventbridge_event(self): - os.environ["DD_SERVICE_MAPPING"] = "eventbridge.custom.event.sender:new-name" - global dt - dt = importlib.reload(dt) + set_service_mapping({"eventbridge.custom.event.sender": "new-name"}) event_sample_source = "eventbridge-custom" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -1186,14 +1191,14 @@ def test_remaps_specific_inferred_span_service_names_from_eventbridge_event(self ctx = get_mock_context() ctx.aws_request_id = "123" - span1 = dt.create_inferred_span(original_event, ctx) + span1 = create_inferred_span(original_event, ctx) self.assertEqual(span1.get_tag("operation_name"), "aws.eventbridge") self.assertEqual(span1.service, "new-name") # Testing the second event event2 = copy.deepcopy(original_event) event2["source"] = "different.eventbridge.custom.event.sender" - span2 = dt.create_inferred_span(event2, ctx) + span2 = create_inferred_span(event2, ctx) self.assertEqual(span2.get_tag("operation_name"), "aws.eventbridge") self.assertEqual(span2.service, "eventbridge") @@ -1206,7 +1211,7 @@ def test_create_inferred_span_from_api_gateway_event(self): event = json.load(event) ctx = get_mock_context() ctx.aws_request_id = "123" - span = dt.create_inferred_span(event, ctx) + span = create_inferred_span(event, ctx) self.assertEqual(span.get_tag("operation_name"), "aws.apigateway.rest") self.assertEqual( span.service, @@ -1228,8 +1233,8 @@ def test_create_inferred_span_from_api_gateway_event(self): self.assertEqual(span.get_tag("stage"), "prod") self.assertEqual(span.start, 1428582896.0) self.assertEqual(span.span_type, "http") - self.assertEqual(span.get_tag(dt.InferredSpanInfo.TAG_SOURCE), "self") - self.assertEqual(span.get_tag(dt.InferredSpanInfo.SYNCHRONICITY), "sync") + self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") + self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "sync") def test_create_inferred_span_from_api_gateway_non_proxy_event_async(self): event_sample_source = "api-gateway-non-proxy-async" @@ -1238,7 +1243,7 @@ def test_create_inferred_span_from_api_gateway_non_proxy_event_async(self): event = json.load(event) ctx = get_mock_context() ctx.aws_request_id = "123" - span = dt.create_inferred_span(event, ctx) + span = create_inferred_span(event, ctx) self.assertEqual(span.get_tag("operation_name"), "aws.apigateway.rest") self.assertEqual( span.service, @@ -1260,8 +1265,8 @@ def test_create_inferred_span_from_api_gateway_non_proxy_event_async(self): self.assertEqual(span.get_tag("stage"), "dev") self.assertEqual(span.start, 1631210915.2510002) self.assertEqual(span.span_type, "http") - self.assertEqual(span.get_tag(dt.InferredSpanInfo.TAG_SOURCE), "self") - self.assertEqual(span.get_tag(dt.InferredSpanInfo.SYNCHRONICITY), "async") + self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") + self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "async") def test_create_inferred_span_from_api_gateway_non_proxy_event_sync(self): event_sample_source = "api-gateway-non-proxy" @@ -1270,7 +1275,7 @@ def test_create_inferred_span_from_api_gateway_non_proxy_event_sync(self): event = json.load(event) ctx = get_mock_context() ctx.aws_request_id = "123" - span = dt.create_inferred_span(event, ctx) + span = create_inferred_span(event, ctx) self.assertEqual(span.get_tag("operation_name"), "aws.apigateway.rest") self.assertEqual( span.service, @@ -1292,8 +1297,8 @@ def test_create_inferred_span_from_api_gateway_non_proxy_event_sync(self): self.assertEqual(span.get_tag("stage"), "dev") self.assertEqual(span.start, 1631210915.2510002) self.assertEqual(span.span_type, "http") - self.assertEqual(span.get_tag(dt.InferredSpanInfo.TAG_SOURCE), "self") - self.assertEqual(span.get_tag(dt.InferredSpanInfo.SYNCHRONICITY), "sync") + self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") + self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "sync") def test_create_inferred_span_from_http_api_event(self): event_sample_source = "http-api" @@ -1302,7 +1307,7 @@ def test_create_inferred_span_from_http_api_event(self): event = json.load(event) ctx = get_mock_context() ctx.aws_request_id = "123" - span = dt.create_inferred_span(event, ctx) + span = create_inferred_span(event, ctx) self.assertEqual(span.get_tag("operation_name"), "aws.httpapi") self.assertEqual( span.service, @@ -1327,8 +1332,8 @@ def test_create_inferred_span_from_http_api_event(self): self.assertEqual(span.get_tag("http.user_agent"), "curl/7.64.1") self.assertEqual(span.start, 1631212283.738) self.assertEqual(span.span_type, "http") - self.assertEqual(span.get_tag(dt.InferredSpanInfo.TAG_SOURCE), "self") - self.assertEqual(span.get_tag(dt.InferredSpanInfo.SYNCHRONICITY), "sync") + self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") + self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "sync") def test_create_inferred_span_from_api_gateway_websocket_default_event(self): event_sample_source = "api-gateway-websocket-default" @@ -1337,7 +1342,7 @@ def test_create_inferred_span_from_api_gateway_websocket_default_event(self): event = json.load(event) ctx = get_mock_context() ctx.aws_request_id = "123" - span = dt.create_inferred_span(event, ctx) + span = create_inferred_span(event, ctx) self.assertEqual(span.get_tag("operation_name"), "aws.apigateway.websocket") self.assertEqual( span.service, @@ -1362,8 +1367,8 @@ def test_create_inferred_span_from_api_gateway_websocket_default_event(self): self.assertEqual(span.get_tag("message_direction"), "IN") self.assertEqual(span.start, 1631285061.365) self.assertEqual(span.span_type, "web") - self.assertEqual(span.get_tag(dt.InferredSpanInfo.TAG_SOURCE), "self") - self.assertEqual(span.get_tag(dt.InferredSpanInfo.SYNCHRONICITY), "sync") + self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") + self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "sync") def test_create_inferred_span_from_api_gateway_websocket_connect_event(self): event_sample_source = "api-gateway-websocket-connect" @@ -1372,7 +1377,7 @@ def test_create_inferred_span_from_api_gateway_websocket_connect_event(self): event = json.load(event) ctx = get_mock_context() ctx.aws_request_id = "123" - span = dt.create_inferred_span(event, ctx) + span = create_inferred_span(event, ctx) self.assertEqual(span.get_tag("operation_name"), "aws.apigateway.websocket") self.assertEqual( span.service, @@ -1397,8 +1402,8 @@ def test_create_inferred_span_from_api_gateway_websocket_connect_event(self): self.assertEqual(span.get_tag("message_direction"), "IN") self.assertEqual(span.start, 1631284003.071) self.assertEqual(span.span_type, "web") - self.assertEqual(span.get_tag(dt.InferredSpanInfo.TAG_SOURCE), "self") - self.assertEqual(span.get_tag(dt.InferredSpanInfo.SYNCHRONICITY), "sync") + self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") + self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "sync") def test_create_inferred_span_from_api_gateway_websocket_disconnect_event(self): event_sample_source = "api-gateway-websocket-disconnect" @@ -1407,7 +1412,7 @@ def test_create_inferred_span_from_api_gateway_websocket_disconnect_event(self): event = json.load(event) ctx = get_mock_context() ctx.aws_request_id = "123" - span = dt.create_inferred_span(event, ctx) + span = create_inferred_span(event, ctx) self.assertEqual(span.get_tag("operation_name"), "aws.apigateway.websocket") self.assertEqual( span.service, @@ -1432,8 +1437,8 @@ def test_create_inferred_span_from_api_gateway_websocket_disconnect_event(self): self.assertEqual(span.get_tag("message_direction"), "IN") self.assertEqual(span.start, 1631284034.737) self.assertEqual(span.span_type, "web") - self.assertEqual(span.get_tag(dt.InferredSpanInfo.TAG_SOURCE), "self") - self.assertEqual(span.get_tag(dt.InferredSpanInfo.SYNCHRONICITY), "sync") + self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") + self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "sync") def test_create_inferred_span_from_sqs_event_string_msg_attr(self): event_sample_name = "sqs-string-msg-attribute" @@ -1442,7 +1447,7 @@ def test_create_inferred_span_from_sqs_event_string_msg_attr(self): event = json.load(event) ctx = get_mock_context() ctx.aws_request_id = "123" - span = dt.create_inferred_span(event, ctx) + span = create_inferred_span(event, ctx) self.assertEqual(span.get_tag("operation_name"), "aws.sqs") self.assertEqual( span.service, @@ -1470,8 +1475,8 @@ def test_create_inferred_span_from_sqs_event_string_msg_attr(self): ) self.assertEqual(span.start, 1634662094.538) self.assertEqual(span.span_type, "web") - self.assertEqual(span.get_tag(dt.InferredSpanInfo.TAG_SOURCE), "self") - self.assertEqual(span.get_tag(dt.InferredSpanInfo.SYNCHRONICITY), "async") + self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") + self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "async") def test_create_inferred_span_from_sns_event_string_msg_attr(self): event_sample_name = "sns-string-msg-attribute" @@ -1480,7 +1485,7 @@ def test_create_inferred_span_from_sns_event_string_msg_attr(self): event = json.load(event) ctx = get_mock_context() ctx.aws_request_id = "123" - span = dt.create_inferred_span(event, ctx) + span = create_inferred_span(event, ctx) self.assertEqual(span.get_tag("operation_name"), "aws.sns") self.assertEqual( span.service, @@ -1508,8 +1513,8 @@ def test_create_inferred_span_from_sns_event_string_msg_attr(self): self.assertEqual(span.get_tag("subject"), None) self.assertEqual(span.start, 1643638421.637) self.assertEqual(span.span_type, "web") - self.assertEqual(span.get_tag(dt.InferredSpanInfo.TAG_SOURCE), "self") - self.assertEqual(span.get_tag(dt.InferredSpanInfo.SYNCHRONICITY), "async") + self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") + self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "async") def test_create_inferred_span_from_sns_event_b64_msg_attr(self): event_sample_name = "sns-b64-msg-attribute" @@ -1518,7 +1523,7 @@ def test_create_inferred_span_from_sns_event_b64_msg_attr(self): event = json.load(event) ctx = get_mock_context() ctx.aws_request_id = "123" - span = dt.create_inferred_span(event, ctx) + span = create_inferred_span(event, ctx) self.assertEqual(span.get_tag("operation_name"), "aws.sns") self.assertEqual( span.service, @@ -1546,8 +1551,8 @@ def test_create_inferred_span_from_sns_event_b64_msg_attr(self): self.assertEqual(span.get_tag("subject"), None) self.assertEqual(span.start, 1643638421.637) self.assertEqual(span.span_type, "web") - self.assertEqual(span.get_tag(dt.InferredSpanInfo.TAG_SOURCE), "self") - self.assertEqual(span.get_tag(dt.InferredSpanInfo.SYNCHRONICITY), "async") + self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") + self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "async") def test_create_inferred_span_from_kinesis_event(self): event_sample_source = "kinesis" @@ -1556,7 +1561,7 @@ def test_create_inferred_span_from_kinesis_event(self): event = json.load(event) ctx = get_mock_context() ctx.aws_request_id = "123" - span = dt.create_inferred_span(event, ctx) + span = create_inferred_span(event, ctx) self.assertEqual(span.get_tag("operation_name"), "aws.kinesis") self.assertEqual( span.service, @@ -1588,8 +1593,8 @@ def test_create_inferred_span_from_kinesis_event(self): self.assertEqual(span.get_tag("partition_key"), "partitionkey") self.assertEqual(span.start, 1643638425.163) self.assertEqual(span.span_type, "web") - self.assertEqual(span.get_tag(dt.InferredSpanInfo.TAG_SOURCE), "self") - self.assertEqual(span.get_tag(dt.InferredSpanInfo.SYNCHRONICITY), "async") + self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") + self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "async") def test_create_inferred_span_from_dynamodb_event(self): event_sample_source = "dynamodb" @@ -1598,7 +1603,7 @@ def test_create_inferred_span_from_dynamodb_event(self): event = json.load(event) ctx = get_mock_context() ctx.aws_request_id = "123" - span = dt.create_inferred_span(event, ctx) + span = create_inferred_span(event, ctx) self.assertEqual(span.get_tag("operation_name"), "aws.dynamodb") self.assertEqual( span.service, @@ -1627,8 +1632,8 @@ def test_create_inferred_span_from_dynamodb_event(self): self.assertEqual(span.get_tag("size_bytes"), "26") self.assertEqual(span.start, 1428537600.0) self.assertEqual(span.span_type, "web") - self.assertEqual(span.get_tag(dt.InferredSpanInfo.TAG_SOURCE), "self") - self.assertEqual(span.get_tag(dt.InferredSpanInfo.SYNCHRONICITY), "async") + self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") + self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "async") def test_create_inferred_span_from_s3_event(self): event_sample_source = "s3" @@ -1637,7 +1642,7 @@ def test_create_inferred_span_from_s3_event(self): event = json.load(event) ctx = get_mock_context() ctx.aws_request_id = "123" - span = dt.create_inferred_span(event, ctx) + span = create_inferred_span(event, ctx) self.assertEqual(span.get_tag("operation_name"), "aws.s3") self.assertEqual( span.service, @@ -1664,8 +1669,8 @@ def test_create_inferred_span_from_s3_event(self): ) self.assertEqual(span.start, 0.0) self.assertEqual(span.span_type, "web") - self.assertEqual(span.get_tag(dt.InferredSpanInfo.TAG_SOURCE), "self") - self.assertEqual(span.get_tag(dt.InferredSpanInfo.SYNCHRONICITY), "async") + self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") + self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "async") def test_create_inferred_span_from_eventbridge_event(self): event_sample_source = "eventbridge-custom" @@ -1674,7 +1679,7 @@ def test_create_inferred_span_from_eventbridge_event(self): event = json.load(event) ctx = get_mock_context() ctx.aws_request_id = "123" - span = dt.create_inferred_span(event, ctx) + span = create_inferred_span(event, ctx) self.assertEqual(span.get_tag("operation_name"), "aws.eventbridge") self.assertEqual( span.service, @@ -1693,8 +1698,8 @@ def test_create_inferred_span_from_eventbridge_event(self): self.assertEqual(span.get_tag("request_id"), None) self.assertEqual(span.start, 1635989865.0) self.assertEqual(span.span_type, "web") - self.assertEqual(span.get_tag(dt.InferredSpanInfo.TAG_SOURCE), "self") - self.assertEqual(span.get_tag(dt.InferredSpanInfo.SYNCHRONICITY), "async") + self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") + self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "async") def test_extract_context_from_eventbridge_event(self): event_sample_source = "eventbridge-custom" @@ -1702,7 +1707,7 @@ def test_extract_context_from_eventbridge_event(self): with open(test_file, "r") as event: event = json.load(event) ctx = get_mock_context() - trace, parent, sampling = dt.extract_context_from_eventbridge_event(event, ctx) + trace, parent, sampling = extract_context_from_eventbridge_event(event, ctx) self.assertEqual(trace, "12345") self.assertEqual(parent, "67890"), self.assertEqual(sampling, "2") @@ -1713,7 +1718,7 @@ def test_extract_dd_trace_context_for_eventbridge(self): with open(test_file, "r") as event: event = json.load(event) ctx = get_mock_context() - context, source, event_type = dt.extract_dd_trace_context(event, ctx) + context, source, event_type = extract_dd_trace_context(event, ctx) self.assertEqual(context["trace-id"], "12345") self.assertEqual(context["parent-id"], "67890") @@ -1723,7 +1728,7 @@ def test_extract_context_from_sqs_event_with_string_msg_attr(self): with open(test_file, "r") as event: event = json.load(event) ctx = get_mock_context() - context, source, event_type = dt.extract_dd_trace_context(event, ctx) + context, source, event_type = extract_dd_trace_context(event, ctx) self.assertEqual(context["trace-id"], "2684756524522091840") self.assertEqual(context["parent-id"], "7431398482019833808") self.assertEqual(context["sampling-priority"], "1") @@ -1734,7 +1739,7 @@ def test_extract_context_from_sqs_batch_event(self): with open(test_file, "r") as event: event = json.load(event) ctx = get_mock_context() - context, source, event_source = dt.extract_dd_trace_context(event, ctx) + context, source, event_source = extract_dd_trace_context(event, ctx) self.assertEqual(context["trace-id"], "2684756524522091840") self.assertEqual(context["parent-id"], "7431398482019833808") self.assertEqual(context["sampling-priority"], "1") @@ -1745,7 +1750,7 @@ def test_extract_context_from_sns_event_with_string_msg_attr(self): with open(test_file, "r") as event: event = json.load(event) ctx = get_mock_context() - context, source, event_source = dt.extract_dd_trace_context(event, ctx) + context, source, event_source = extract_dd_trace_context(event, ctx) self.assertEqual(context["trace-id"], "4948377316357291421") self.assertEqual(context["parent-id"], "6746998015037429512") self.assertEqual(context["sampling-priority"], "1") @@ -1756,7 +1761,7 @@ def test_extract_context_from_sns_event_with_b64_msg_attr(self): with open(test_file, "r") as event: event = json.load(event) ctx = get_mock_context() - context, source, event_source = dt.extract_dd_trace_context(event, ctx) + context, source, event_source = extract_dd_trace_context(event, ctx) self.assertEqual(context["trace-id"], "4948377316357291421") self.assertEqual(context["parent-id"], "6746998015037429512") self.assertEqual(context["sampling-priority"], "1") @@ -1767,7 +1772,7 @@ def test_extract_context_from_sns_batch_event(self): with open(test_file, "r") as event: event = json.load(event) ctx = get_mock_context() - context, source, event_source = dt.extract_dd_trace_context(event, ctx) + context, source, event_source = extract_dd_trace_context(event, ctx) self.assertEqual(context["trace-id"], "4948377316357291421") self.assertEqual(context["parent-id"], "6746998015037429512") self.assertEqual(context["sampling-priority"], "1") @@ -1778,7 +1783,7 @@ def test_extract_context_from_kinesis_event(self): with open(test_file, "r") as event: event = json.load(event) ctx = get_mock_context() - context, source, event_source = dt.extract_dd_trace_context(event, ctx) + context, source, event_source = extract_dd_trace_context(event, ctx) self.assertEqual(context["trace-id"], "4948377316357291421") self.assertEqual(context["parent-id"], "2876253380018681026") self.assertEqual(context["sampling-priority"], "1") @@ -1789,7 +1794,7 @@ def test_extract_context_from_kinesis_batch_event(self): with open(test_file, "r") as event: event = json.load(event) ctx = get_mock_context() - context, source, event_source = dt.extract_dd_trace_context(event, ctx) + context, source, event_source = extract_dd_trace_context(event, ctx) self.assertEqual(context["trace-id"], "4948377316357291421") self.assertEqual(context["parent-id"], "2876253380018681026") self.assertEqual(context["sampling-priority"], "1") @@ -1801,7 +1806,7 @@ def test_create_inferred_span_from_api_gateway_event_no_apiid(self): event = json.load(event) ctx = get_mock_context() ctx.aws_request_id = "123" - span = dt.create_inferred_span(event, ctx) + span = create_inferred_span(event, ctx) self.assertEqual(span.get_tag("operation_name"), "aws.apigateway.rest") self.assertEqual( span.service, @@ -1823,14 +1828,14 @@ def test_create_inferred_span_from_api_gateway_event_no_apiid(self): self.assertEqual(span.get_tag("stage"), "prod") self.assertEqual(span.start, 1428582896.0) self.assertEqual(span.span_type, "http") - self.assertEqual(span.get_tag(dt.InferredSpanInfo.TAG_SOURCE), "self") - self.assertEqual(span.get_tag(dt.InferredSpanInfo.SYNCHRONICITY), "sync") + self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") + self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "sync") @patch("datadog_lambda.tracing.submit_errors_metric") def test_mark_trace_as_error_for_5xx_responses_getting_400_response_code( self, mock_submit_errors_metric ): - dt.mark_trace_as_error_for_5xx_responses( + mark_trace_as_error_for_5xx_responses( context="fake_context", status_code="400", span="empty_span" ) mock_submit_errors_metric.assert_not_called() @@ -1841,7 +1846,7 @@ def test_mark_trace_as_error_for_5xx_responses_sends_error_metric_and_set_error_ ): mock_span = Mock(ddtrace.span.Span) status_code = "500" - dt.mark_trace_as_error_for_5xx_responses( + mark_trace_as_error_for_5xx_responses( context="fake_context", status_code=status_code, span=mock_span ) mock_submit_errors_metric.assert_called_once() @@ -1849,7 +1854,7 @@ def test_mark_trace_as_error_for_5xx_responses_sends_error_metric_and_set_error_ def test_no_error_with_nonetype_headers(self): lambda_ctx = get_mock_context() - ctx, source, event_type = dt.extract_dd_trace_context( + ctx, source, event_type = extract_dd_trace_context( {"headers": None}, lambda_ctx, ) @@ -1858,11 +1863,11 @@ def test_no_error_with_nonetype_headers(self): class TestStepFunctionsTraceContext(unittest.TestCase): def test_deterministic_m5_hash(self): - result = dt._deterministic_md5_hash("some_testing_random_string") + result = _deterministic_md5_hash("some_testing_random_string") self.assertEqual("2251275791555400689", result) def test_deterministic_m5_hash__result_the_same_as_backend(self): - result = dt._deterministic_md5_hash( + result = _deterministic_md5_hash( "arn:aws:states:sa-east-1:601427271234:express:DatadogStateMachine:acaf1a67-336a-e854-1599-2a627eb2dd8a" ":c8baf081-31f1-464d-971f-70cb17d01111#step-one#2022-12-08T21:08:19.224Z" ) @@ -1870,7 +1875,7 @@ def test_deterministic_m5_hash__result_the_same_as_backend(self): def test_deterministic_m5_hash__always_leading_with_zero(self): for i in range(100): - result = dt._deterministic_md5_hash(str(i)) + result = _deterministic_md5_hash(str(i)) result_in_binary = bin(int(result)) # Leading zeros will be omitted, so only test for full 64 bits present if len(result_in_binary) == 66: # "0b" + 64 bits. From 05111d0965bcf12083ca79480648c0c4cf3b7dbd Mon Sep 17 00:00:00 2001 From: Andrew Rodriguez Date: Wed, 31 May 2023 10:45:01 -0700 Subject: [PATCH 10/10] add bad input tests and refactor tests to use get and set service mapping in test module --- datadog_lambda/tracing.py | 12 +-- tests/test_tracing.py | 164 +++++++++++++++++++++++--------------- 2 files changed, 102 insertions(+), 74 deletions(-) diff --git a/datadog_lambda/tracing.py b/datadog_lambda/tracing.py index 3ec3edbc..2834f977 100644 --- a/datadog_lambda/tracing.py +++ b/datadog_lambda/tracing.py @@ -692,19 +692,11 @@ def create_service_mapping(val): if len(parts) == 2: key = parts[0].strip() value = parts[1].strip() - new_service_mapping[key] = value + if key != value and key and value: + new_service_mapping[key] = value return new_service_mapping -def set_service_mapping(new_service_mapping): - global service_mapping - service_mapping = new_service_mapping - - -def get_service_mapping(): - return service_mapping - - def determine_service_name(service_mapping, specific_key, generic_key, default_value): service_name = service_mapping.get(specific_key) if service_name is None: diff --git a/tests/test_tracing.py b/tests/test_tracing.py index b65b6434..01ef3e20 100644 --- a/tests/test_tracing.py +++ b/tests/test_tracing.py @@ -2,7 +2,6 @@ import json import os import copy -import importlib from unittest.mock import MagicMock, Mock, patch, call @@ -32,9 +31,8 @@ InferredSpanInfo, extract_context_from_eventbridge_event, create_service_mapping, - set_service_mapping, - get_service_mapping, determine_service_name, + service_mapping as global_service_mapping, ) from datadog_lambda.trigger import EventTypes @@ -739,57 +737,90 @@ def _basic_common_checks( class TestServiceMapping(unittest.TestCase): + def setUp(self): + self.service_mapping = {} + + def get_service_mapping(self): + return global_service_mapping + + def set_service_mapping(self, new_service_mapping): + global_service_mapping.clear() + global_service_mapping.update(new_service_mapping) + + def test_create_service_mapping_invalid_input(self): + # Test case where the input is a string without a colon to split on + val = "api1" + self.assertEqual(create_service_mapping(val), {}) + + # Test case where the input is an empty string + val = "" + self.assertEqual(create_service_mapping(val), {}) + + # Test case where the key and value are identical + val = "api1:api1" + self.assertEqual(create_service_mapping(val), {}) + + # Test case where the key or value is missing + val = ":api1" + self.assertEqual(create_service_mapping(val), {}) + val = "api1:" + self.assertEqual(create_service_mapping(val), {}) + def test_create_service_mapping(self): val = "api1:service1,api2:service2" expected_output = {"api1": "service1", "api2": "service2"} self.assertEqual(create_service_mapping(val), expected_output) + def test_get_service_mapping(self): + os.environ["DD_SERVICE_MAPPING"] = "api1:service1,api2:service2" + expected_output = {"api1": "service1", "api2": "service2"} + self.set_service_mapping( + create_service_mapping(os.environ["DD_SERVICE_MAPPING"]) + ) + self.assertEqual(self.get_service_mapping(), expected_output) -def test_get_service_mapping(self): - os.environ["DD_SERVICE_MAPPING"] = "api1:service1,api2:service2" - expected_output = {"api1": "service1", "api2": "service2"} - service_mapping = create_service_mapping(os.environ["DD_SERVICE_MAPPING"]) - self.assertEqual(get_service_mapping(), expected_output) - - -def test_set_service_mapping(self): - new_service_mapping = {"api3": "service3", "api4": "service4"} - set_service_mapping(new_service_mapping) - self.assertEqual(get_service_mapping(), new_service_mapping) - + def test_set_service_mapping(self): + new_service_mapping = {"api3": "service3", "api4": "service4"} + self.set_service_mapping(new_service_mapping) + self.assertEqual(self.get_service_mapping(), new_service_mapping) -def test_determine_service_name(self): - # Prepare the environment - os.environ["DD_SERVICE_MAPPING"] = "api1:service1,api2:service2" - service_mapping = create_service_mapping(os.environ["DD_SERVICE_MAPPING"]) + def test_determine_service_name(self): + # Prepare the environment + os.environ["DD_SERVICE_MAPPING"] = "api1:service1,api2:service2" + self.set_service_mapping( + create_service_mapping(os.environ["DD_SERVICE_MAPPING"]) + ) - # Case where specific key is in the service mapping - specific_key = "api1" - self.assertEqual( - determine_service_name( - get_service_mapping(), specific_key, "lambda_url", "default" - ), - "service1", - ) + # Case where specific key is in the service mapping + specific_key = "api1" + self.assertEqual( + determine_service_name( + self.get_service_mapping(), specific_key, "lambda_url", "default" + ), + "service1", + ) - # Case where specific key is not in the service mapping, but generic key is - specific_key = "api3" - self.assertEqual( - determine_service_name(get_service_mapping(), specific_key, "api2", "default"), - "service2", - ) + # Case where specific key is not in the service mapping, but generic key is + specific_key = "api3" + self.assertEqual( + determine_service_name( + self.get_service_mapping(), specific_key, "api2", "default" + ), + "service2", + ) - # Case where neither specific nor generic keys are in the service mapping - specific_key = "api3" - self.assertEqual( - determine_service_name(get_service_mapping(), specific_key, "api3", "default"), - "default", - ) + # Case where neither specific nor generic keys are in the service mapping + specific_key = "api3" + self.assertEqual( + determine_service_name( + self.get_service_mapping(), specific_key, "api3", "default" + ), + "default", + ) def test_remaps_all_inferred_span_service_names_from_api_gateway_event(self): - service_mapping_str = "lambda_api_gateway:new-name" - new_service_mapping = create_service_mapping(service_mapping_str) - set_service_mapping(new_service_mapping) + new_service_mapping = {"lambda_api_gateway": "new-name"} + self.set_service_mapping(new_service_mapping) event_sample_source = "api-gateway" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -811,10 +842,11 @@ def test_remaps_all_inferred_span_service_names_from_api_gateway_event(self): self.assertEqual(span2.get_tag("operation_name"), "aws.apigateway.rest") self.assertEqual(span2.service, "new-name") - def test_remaps_specific_inferred_span_service_names_from_api_gateway_event(self): - service_mapping_str = "1234567890:new-name" - new_service_mapping = create_service_mapping(service_mapping_str) - set_service_mapping(new_service_mapping) + def test_remaps_specific_inferred_span_service_names_from_api_gateway_event( + self, + ): + new_service_mapping = {"1234567890": "new-name"} + self.set_service_mapping(new_service_mapping) event_sample_source = "api-gateway" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -839,7 +871,7 @@ def test_remaps_specific_inferred_span_service_names_from_api_gateway_event(self def test_remaps_specific_inferred_span_service_names_from_api_gateway_websocket_event( self, ): - set_service_mapping({"p62c47itsb": "new-name"}) + self.set_service_mapping({"p62c47itsb": "new-name"}) event_sample_source = "api-gateway-websocket-default" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -864,7 +896,7 @@ def test_remaps_specific_inferred_span_service_names_from_api_gateway_websocket_ def test_remaps_specific_inferred_span_service_names_from_api_gateway_http_event( self, ): - set_service_mapping({"x02yirxc7a": "new-name"}) + self.set_service_mapping({"x02yirxc7a": "new-name"}) event_sample_source = "http-api" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -887,7 +919,7 @@ def test_remaps_specific_inferred_span_service_names_from_api_gateway_http_event ) def test_remaps_all_inferred_span_service_names_from_lambda_url_event(self): - set_service_mapping({"lambda_url": "new-name"}) + self.set_service_mapping({"lambda_url": "new-name"}) event_sample_source = "lambda-url" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -909,8 +941,10 @@ def test_remaps_all_inferred_span_service_names_from_lambda_url_event(self): self.assertEqual(span2.get_tag("operation_name"), "aws.lambda.url") self.assertEqual(span2.service, "new-name") - def test_remaps_specific_inferred_span_service_names_from_lambda_url_event(self): - set_service_mapping({"a8hyhsshac": "new-name"}) + def test_remaps_specific_inferred_span_service_names_from_lambda_url_event( + self, + ): + self.set_service_mapping({"a8hyhsshac": "new-name"}) event_sample_source = "lambda-url" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -933,7 +967,7 @@ def test_remaps_specific_inferred_span_service_names_from_lambda_url_event(self) ) def test_remaps_all_inferred_span_service_names_from_sqs_event(self): - set_service_mapping({"lambda_sqs": "new-name"}) + self.set_service_mapping({"lambda_sqs": "new-name"}) event_sample_source = "sqs-string-msg-attribute" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -956,7 +990,7 @@ def test_remaps_all_inferred_span_service_names_from_sqs_event(self): self.assertEqual(span2.service, "new-name") def test_remaps_specific_inferred_span_service_names_from_sqs_event(self): - set_service_mapping({"InferredSpansQueueNode": "new-name"}) + self.set_service_mapping({"InferredSpansQueueNode": "new-name"}) event_sample_source = "sqs-string-msg-attribute" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -979,7 +1013,7 @@ def test_remaps_specific_inferred_span_service_names_from_sqs_event(self): self.assertEqual(span2.service, "sqs") def test_remaps_all_inferred_span_service_names_from_sns_event(self): - set_service_mapping({"lambda_sns": "new-name"}) + self.set_service_mapping({"lambda_sns": "new-name"}) event_sample_source = "sns-string-msg-attribute" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -1002,7 +1036,7 @@ def test_remaps_all_inferred_span_service_names_from_sns_event(self): self.assertEqual(span2.service, "new-name") def test_remaps_specific_inferred_span_service_names_from_sns_event(self): - set_service_mapping({"serverlessTracingTopicPy": "new-name"}) + self.set_service_mapping({"serverlessTracingTopicPy": "new-name"}) event_sample_source = "sns-string-msg-attribute" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -1025,7 +1059,7 @@ def test_remaps_specific_inferred_span_service_names_from_sns_event(self): self.assertEqual(span2.service, "sns") def test_remaps_all_inferred_span_service_names_from_kinesis_event(self): - set_service_mapping({"lambda_kinesis": "new-name"}) + self.set_service_mapping({"lambda_kinesis": "new-name"}) event_sample_source = "kinesis" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -1048,7 +1082,7 @@ def test_remaps_all_inferred_span_service_names_from_kinesis_event(self): self.assertEqual(span2.service, "new-name") def test_remaps_specific_inferred_span_service_names_from_kinesis_event(self): - set_service_mapping({"Different_EXAMPLE": "new-name"}) + self.set_service_mapping({"Different_EXAMPLE": "new-name"}) event_sample_source = "kinesis" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -1071,7 +1105,7 @@ def test_remaps_specific_inferred_span_service_names_from_kinesis_event(self): self.assertEqual(span2.service, "kinesis") def test_remaps_all_inferred_span_service_names_from_s3_event(self): - set_service_mapping({"lambda_s3": "new-name"}) + self.set_service_mapping({"lambda_s3": "new-name"}) event_sample_source = "s3" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -1094,7 +1128,7 @@ def test_remaps_all_inferred_span_service_names_from_s3_event(self): self.assertEqual(span2.service, "new-name") def test_remaps_specific_inferred_span_service_names_from_s3_event(self): - set_service_mapping({"example-bucket": "new-name"}) + self.set_service_mapping({"example-bucket": "new-name"}) event_sample_source = "s3" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -1115,7 +1149,7 @@ def test_remaps_specific_inferred_span_service_names_from_s3_event(self): self.assertEqual(span2.service, "s3") def test_remaps_all_inferred_span_service_names_from_dynamodb_event(self): - set_service_mapping({"lambda_dynamodb": "new-name"}) + self.set_service_mapping({"lambda_dynamodb": "new-name"}) event_sample_source = "dynamodb" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -1138,7 +1172,7 @@ def test_remaps_all_inferred_span_service_names_from_dynamodb_event(self): self.assertEqual(span2.service, "new-name") def test_remaps_specific_inferred_span_service_names_from_dynamodb_event(self): - set_service_mapping({"ExampleTableWithStream": "new-name"}) + self.set_service_mapping({"ExampleTableWithStream": "new-name"}) event_sample_source = "dynamodb" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -1161,7 +1195,7 @@ def test_remaps_specific_inferred_span_service_names_from_dynamodb_event(self): self.assertEqual(span2.service, "dynamodb") def test_remaps_all_inferred_span_service_names_from_eventbridge_event(self): - set_service_mapping({"lambda_eventbridge": "new-name"}) + self.set_service_mapping({"lambda_eventbridge": "new-name"}) event_sample_source = "eventbridge-custom" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: @@ -1181,8 +1215,10 @@ def test_remaps_all_inferred_span_service_names_from_eventbridge_event(self): self.assertEqual(span2.get_tag("operation_name"), "aws.eventbridge") self.assertEqual(span2.service, "new-name") - def test_remaps_specific_inferred_span_service_names_from_eventbridge_event(self): - set_service_mapping({"eventbridge.custom.event.sender": "new-name"}) + def test_remaps_specific_inferred_span_service_names_from_eventbridge_event( + self, + ): + self.set_service_mapping({"eventbridge.custom.event.sender": "new-name"}) event_sample_source = "eventbridge-custom" test_file = event_samples + event_sample_source + ".json" with open(test_file, "r") as event: