From 26cde3e3f03e6e96dfe1bf1edcf2af5782f30d05 Mon Sep 17 00:00:00 2001 From: Ran Isenberg Date: Wed, 7 Jun 2023 21:18:33 +0300 Subject: [PATCH 1/5] feature: idempotency --- cdk/my_service/api_construct.py | 19 +++++++++++++--- cdk/my_service/api_db_construct.py | 15 +++++++++++++ cdk/my_service/constants.py | 1 + .../input_validation/my_handler.py | 2 +- .../best_practices/input_validation/schema.py | 0 service/handlers/create_order.py | 12 +++++----- service/handlers/utils/idempotency.py | 8 +++++++ service/logic/handle_create_request.py | 12 ++++++---- service/schemas/input.py | 8 +++++++ tests/e2e/test_create_order.py | 8 +++---- tests/integration/test_create_order.py | 22 ++++++++++++++----- tests/unit/test_create_order_input.py | 12 +++++----- tests/utils.py | 8 +++++++ 13 files changed, 98 insertions(+), 29 deletions(-) rename service/handlers/schemas/input.py => docs/examples/best_practices/input_validation/schema.py (100%) create mode 100644 service/handlers/utils/idempotency.py create mode 100644 service/schemas/input.py diff --git a/cdk/my_service/api_construct.py b/cdk/my_service/api_construct.py index f3c73c8c..be7e5904 100644 --- a/cdk/my_service/api_construct.py +++ b/cdk/my_service/api_construct.py @@ -16,7 +16,7 @@ def __init__(self, scope: Construct, id_: str, appconfig_app_name: str) -> None: super().__init__(scope, id_) self.id_ = id_ self.api_db = ApiDbConstruct(self, f'{id_}db') - self.lambda_role = self._build_lambda_role(self.api_db.db) + self.lambda_role = self._build_lambda_role(self.api_db.db, self.api_db.idempotency_db) self.common_layer = self._build_common_layer() self.rest_api = self._build_api_gw() api_resource: aws_apigateway.Resource = self.rest_api.root.add_resource('api').add_resource(constants.GW_RESOURCE) @@ -35,7 +35,7 @@ def _build_api_gw(self) -> aws_apigateway.RestApi: CfnOutput(self, id=constants.APIGATEWAY, value=rest_api.url).override_logical_id(constants.APIGATEWAY) return rest_api - def _build_lambda_role(self, db: dynamodb.Table) -> iam.Role: + def _build_lambda_role(self, db: dynamodb.Table, idempotency_table: dynamodb.Table) -> iam.Role: return iam.Role( self, constants.SERVICE_ROLE_ARN, @@ -51,7 +51,19 @@ def _build_lambda_role(self, db: dynamodb.Table) -> iam.Role: ]), 'dynamodb_db': iam.PolicyDocument(statements=[ - iam.PolicyStatement(actions=['dynamodb:PutItem', 'dynamodb:GetItem'], resources=[db.table_arn], effect=iam.Effect.ALLOW) + iam.PolicyStatement( + actions=['dynamodb:PutItem', 'dynamodb:GetItem'], + resources=[db.table_arn], + effect=iam.Effect.ALLOW, + ) + ]), + 'idempotency_table': + iam.PolicyDocument(statements=[ + iam.PolicyStatement( + actions=['dynamodb:PutItem', 'dynamodb:GetItem', 'dynamodb:UpdateItem', 'dynamodb:DeleteItem'], + resources=[idempotency_table.table_arn], + effect=iam.Effect.ALLOW, + ) ]), }, managed_policies=[ @@ -85,6 +97,7 @@ def _add_post_lambda_integration(self, api_name: aws_apigateway.Resource, role: 'REST_API': 'https://www.ranthebuilder.cloud/api', # for env vars example 'ROLE_ARN': 'arn:partition:service:region:account-id:resource-type:resource-id', # for env vars example 'TABLE_NAME': db.table_name, + 'POWERTOOLS_IDEMPOTENCY_DISABLED': 'False', }, tracing=_lambda.Tracing.ACTIVE, retry_attempts=0, diff --git a/cdk/my_service/api_db_construct.py b/cdk/my_service/api_db_construct.py index 757a8a9a..9381484a 100644 --- a/cdk/my_service/api_db_construct.py +++ b/cdk/my_service/api_db_construct.py @@ -11,6 +11,21 @@ def __init__(self, scope: Construct, id_: str) -> None: super().__init__(scope, id_) self.db: dynamodb.Table = self._build_db(id_) + self.idempotency_db: dynamodb.Table = self._build_idempotency_table() + + def _build_idempotency_table(self) -> dynamodb.Table: + table_id = constants.IDEMPOTENCY_TABLE_NAME + table = dynamodb.Table( + self, + table_id, + table_name=table_id, + partition_key=dynamodb.Attribute(name='id', type=dynamodb.AttributeType.STRING), + billing_mode=dynamodb.BillingMode.PAY_PER_REQUEST, + removal_policy=RemovalPolicy.DESTROY, + time_to_live_attribute='expiration', + point_in_time_recovery=True, + ) + return table def _build_db(self, id_prefix: str) -> dynamodb.Table: table_id = f'{id_prefix}{constants.TABLE_NAME}' diff --git a/cdk/my_service/constants.py b/cdk/my_service/constants.py index db30365f..d3a22b1a 100644 --- a/cdk/my_service/constants.py +++ b/cdk/my_service/constants.py @@ -3,6 +3,7 @@ SERVICE_ROLE = 'ServiceRole' CREATE_LAMBDA = 'CreateOrder' TABLE_NAME = 'orders' +IDEMPOTENCY_TABLE_NAME = 'IdempotencyTable' TABLE_NAME_OUTPUT = 'DbOutput' APIGATEWAY = 'Apigateway' GW_RESOURCE = 'orders' diff --git a/docs/examples/best_practices/input_validation/my_handler.py b/docs/examples/best_practices/input_validation/my_handler.py index 8f608cb5..9c6cb35a 100644 --- a/docs/examples/best_practices/input_validation/my_handler.py +++ b/docs/examples/best_practices/input_validation/my_handler.py @@ -5,7 +5,7 @@ from aws_lambda_powertools.utilities.parser.envelopes import ApiGatewayEnvelope from aws_lambda_powertools.utilities.typing import LambdaContext -from service.handlers.schemas.input import Input +from .schema import Input def my_handler(event: Dict[str, Any], context: LambdaContext): diff --git a/service/handlers/schemas/input.py b/docs/examples/best_practices/input_validation/schema.py similarity index 100% rename from service/handlers/schemas/input.py rename to docs/examples/best_practices/input_validation/schema.py diff --git a/service/handlers/create_order.py b/service/handlers/create_order.py index 0841636a..99a31db3 100644 --- a/service/handlers/create_order.py +++ b/service/handlers/create_order.py @@ -3,24 +3,27 @@ from aws_lambda_powertools.metrics import MetricUnit from aws_lambda_powertools.utilities.feature_flags.exceptions import ConfigurationStoreError, SchemaValidationError +from aws_lambda_powertools.utilities.idempotency import idempotent from aws_lambda_powertools.utilities.parser import ValidationError, parse from aws_lambda_powertools.utilities.parser.envelopes import ApiGatewayEnvelope from aws_lambda_powertools.utilities.typing import LambdaContext from service.handlers.schemas.dynamic_configuration import MyConfiguration from service.handlers.schemas.env_vars import MyHandlerEnvVars -from service.handlers.schemas.input import Input from service.handlers.utils.dynamic_configuration import parse_configuration from service.handlers.utils.env_vars_parser import get_environment_variables, init_environment_variables from service.handlers.utils.http_responses import build_response +from service.handlers.utils.idempotency import IDEMPOTENCY_CONFIG, IDEMPOTENCY_LAYER from service.handlers.utils.observability import logger, metrics, tracer from service.logic.handle_create_request import handle_create_request from service.schemas.exceptions import InternalServerException +from service.schemas.input import CreateOrderRequest from service.schemas.output import CreateOrderOutput @init_environment_variables(model=MyHandlerEnvVars) @metrics.log_metrics +@idempotent(persistence_store=IDEMPOTENCY_LAYER, config=IDEMPOTENCY_CONFIG) @tracer.capture_lambda_handler(capture_response=False) def create_order(event: Dict[str, Any], context: LambdaContext) -> Dict[str, Any]: logger.set_correlation_id(context.aws_request_id) @@ -37,8 +40,8 @@ def create_order(event: Dict[str, Any], context: LambdaContext) -> Dict[str, Any try: # we want to extract and parse the HTTP body from the api gw envelope - input: Input = parse(event=event, model=Input, envelope=ApiGatewayEnvelope) - logger.info('got create order request', extra={'order_item_count': input.order_item_count}) + create_input: CreateOrderRequest = parse(event=event, model=CreateOrderRequest, envelope=ApiGatewayEnvelope) + logger.info('got create order request', extra={'order_item_count': create_input.order_item_count}) except (ValidationError, TypeError) as exc: logger.error('event failed input validation', extra={'error': str(exc)}) return build_response(http_status=HTTPStatus.BAD_REQUEST, body={}) @@ -46,8 +49,7 @@ def create_order(event: Dict[str, Any], context: LambdaContext) -> Dict[str, Any metrics.add_metric(name='ValidCreateOrderEvents', unit=MetricUnit.Count, value=1) try: response: CreateOrderOutput = handle_create_request( - customer_name=input.customer_name, - order_item_count=input.order_item_count, + order_request=create_input, table_name=env_vars.TABLE_NAME, ) except InternalServerException: # pragma: no cover diff --git a/service/handlers/utils/idempotency.py b/service/handlers/utils/idempotency.py new file mode 100644 index 00000000..dbf81539 --- /dev/null +++ b/service/handlers/utils/idempotency.py @@ -0,0 +1,8 @@ +from aws_lambda_powertools.utilities.idempotency import DynamoDBPersistenceLayer, IdempotencyConfig + +IDEMPOTENCY_LAYER = DynamoDBPersistenceLayer(table_name='IdempotencyTable') +IDEMPOTENCY_CONFIG = IdempotencyConfig( + use_local_cache=True, + expires_after_seconds=5 * 60, # 5 minutes + event_key_jmespath='powertools_json(body).[customer_name, order_item_count]', +) diff --git a/service/logic/handle_create_request.py b/service/logic/handle_create_request.py index 8d226518..57d83ca7 100644 --- a/service/logic/handle_create_request.py +++ b/service/logic/handle_create_request.py @@ -4,12 +4,16 @@ from service.handlers.schemas.dynamic_configuration import FeatureFlagsNames from service.handlers.utils.dynamic_configuration import get_dynamic_configuration_store from service.handlers.utils.observability import logger, tracer +from service.schemas.input import CreateOrderRequest from service.schemas.output import CreateOrderOutput @tracer.capture_method(capture_response=False) -def handle_create_request(customer_name: str, order_item_count: int, table_name: str) -> CreateOrderOutput: - logger.info('starting to handle create request', extra={'order_item_count': order_item_count, 'customer_name': customer_name}) +def handle_create_request(order_request: CreateOrderRequest, table_name: str) -> CreateOrderOutput: + logger.info('starting to handle create request', extra={ + 'order_item_count': order_request.order_item_count, + 'customer_name': order_request.customer_name + }) # feature flags example config_store = get_dynamic_configuration_store() @@ -21,11 +25,11 @@ def handle_create_request(customer_name: str, order_item_count: int, table_name: logger.debug('campaign feature flag value', extra={'campaign': campaign}) premium = config_store.evaluate( name=FeatureFlagsNames.PREMIUM.value, - context={'customer_name': customer_name}, + context={'customer_name': order_request.customer_name}, default=False, ) logger.debug('premium feature flag value', extra={'premium': premium}) dal_handler: DalHandler = get_dal_handler(table_name) - order: OrderEntry = dal_handler.create_order_in_db(customer_name, order_item_count) + order: OrderEntry = dal_handler.create_order_in_db(order_request.customer_name, order_request.order_item_count) # convert from db entry to output, they won't always be the same return CreateOrderOutput(customer_name=order.customer_name, order_item_count=order.order_item_count, order_id=order.order_id) diff --git a/service/schemas/input.py b/service/schemas/input.py new file mode 100644 index 00000000..38ae915c --- /dev/null +++ b/service/schemas/input.py @@ -0,0 +1,8 @@ +from typing import Annotated + +from pydantic import BaseModel, Field, PositiveInt + + +class CreateOrderRequest(BaseModel): + customer_name: Annotated[str, Field(min_length=1, max_length=20)] + order_item_count: PositiveInt diff --git a/tests/e2e/test_create_order.py b/tests/e2e/test_create_order.py index f177645d..3e4bfd4c 100644 --- a/tests/e2e/test_create_order.py +++ b/tests/e2e/test_create_order.py @@ -5,8 +5,8 @@ import requests from cdk.my_service.constants import APIGATEWAY, GW_RESOURCE -from service.handlers.schemas.input import Input -from tests.utils import get_stack_output +from service.schemas.input import CreateOrderRequest +from tests.utils import generate_random_string, get_stack_output @pytest.fixture(scope='module', autouse=True) @@ -15,8 +15,8 @@ def api_gw_url(): def test_handler_200_ok(api_gw_url): - customer_name = 'RanTheBuilder' - body = Input(customer_name=customer_name, order_item_count=5) + customer_name = f'{generate_random_string()}-RanTheBuilder' + body = CreateOrderRequest(customer_name=customer_name, order_item_count=5) response = requests.post(api_gw_url, data=body.json()) assert response.status_code == HTTPStatus.OK body_dict = json.loads(response.text) diff --git a/tests/integration/test_create_order.py b/tests/integration/test_create_order.py index f73d2fe5..c4153c8b 100644 --- a/tests/integration/test_create_order.py +++ b/tests/integration/test_create_order.py @@ -8,8 +8,8 @@ from service.dal.dynamo_dal_handler import DynamoDalHandler from service.handlers.create_order import create_order -from service.handlers.schemas.input import Input -from tests.utils import generate_api_gw_event, generate_context +from service.schemas.input import CreateOrderRequest +from tests.utils import generate_api_gw_event, generate_context, generate_random_string MOCKED_SCHEMA = { 'features': { @@ -47,9 +47,9 @@ def mock_exception_dynamic_configuration(mocker) -> None: def test_handler_200_ok(mocker, table_name: str): mock_dynamic_configuration(mocker, MOCKED_SCHEMA) - customer_name = 'RanTheBuilder' + customer_name = f'{generate_random_string()}-RanTheBuilder' order_item_count = 5 - body = Input(customer_name=customer_name, order_item_count=order_item_count) + body = CreateOrderRequest(customer_name=customer_name, order_item_count=order_item_count) response = create_order(generate_api_gw_event(body.dict()), generate_context()) # assert response assert response['statusCode'] == HTTPStatus.OK @@ -64,6 +64,13 @@ def test_handler_200_ok(mocker, table_name: str): assert response['Item']['customer_name'] == customer_name assert response['Item']['order_item_count'] == order_item_count + # check idempotency, send same request + original_order_id = body_dict['order_id'] + response = create_order(generate_api_gw_event(body.dict()), generate_context()) + assert response['statusCode'] == HTTPStatus.OK + body_dict = json.loads(response['body']) + assert body_dict['order_id'] == original_order_id + def test_internal_server_error(): db_handler: DynamoDalHandler = DynamoDalHandler('table') @@ -71,7 +78,7 @@ def test_internal_server_error(): stubber = Stubber(table.meta.client) stubber.add_client_error(method='put_item', service_error_code='ValidationException') stubber.activate() - body = Input(customer_name='RanTheBuilder', order_item_count=5) + body = CreateOrderRequest(customer_name='RanTheBuilder', order_item_count=5) response = create_order(generate_api_gw_event(body.dict()), generate_context()) assert response['statusCode'] == HTTPStatus.INTERNAL_SERVER_ERROR @@ -86,7 +93,10 @@ def test_handler_bad_request(mocker): def test_handler_failed_appconfig_fetch(mocker): mock_exception_dynamic_configuration(mocker) - response = create_order(generate_api_gw_event({'order_item_count': 5}), generate_context()) + customer_name = f'{generate_random_string()}-RanTheBuilder' + order_item_count = 5 + body = CreateOrderRequest(customer_name=customer_name, order_item_count=order_item_count) + response = create_order(generate_api_gw_event(body.dict()), generate_context()) assert response['statusCode'] == HTTPStatus.INTERNAL_SERVER_ERROR body_dict = json.loads(response['body']) assert body_dict == {} diff --git a/tests/unit/test_create_order_input.py b/tests/unit/test_create_order_input.py index 0d1c632d..ff29a87f 100644 --- a/tests/unit/test_create_order_input.py +++ b/tests/unit/test_create_order_input.py @@ -1,29 +1,29 @@ import pytest from aws_lambda_powertools.utilities.parser import ValidationError -from service.handlers.schemas.input import Input +from service.schemas.input import CreateOrderRequest def test_invalid_name(): with pytest.raises(ValidationError): - Input(customer_name='', order_item_count=4) + CreateOrderRequest(customer_name='', order_item_count=4) def test_invalid_name_too_long(): with pytest.raises(ValidationError): - Input(customer_name='1234567890112123423232323232323', order_item_count=4) + CreateOrderRequest(customer_name='1234567890112123423232323232323', order_item_count=4) def test_missing_mandatory_fields(): with pytest.raises(ValidationError): - Input(customer_name='a') + CreateOrderRequest(customer_name='a') def test_invalid_order_number(): with pytest.raises(ValidationError): - Input(customer_name='a', order_item_count=-1) + CreateOrderRequest(customer_name='a', order_item_count=-1) def test_invalid_order_number_type(): with pytest.raises(ValidationError): - Input(customer_name='a', order_item_count='a') + CreateOrderRequest(customer_name='a', order_item_count='a') diff --git a/tests/utils.py b/tests/utils.py index 084c49ba..d6d2ec5c 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -1,4 +1,6 @@ import json +import random +import string from typing import Any, Dict, Optional import boto3 @@ -7,6 +9,12 @@ from cdk.my_service.service_stack import get_stack_name +def generate_random_string(length: int = 3): + letters = string.ascii_letters + random_string = ''.join(random.choice(letters) for _ in range(length)) + return random_string + + def generate_context() -> LambdaContext: context = LambdaContext() context._aws_request_id = '888888' From 95ef2dd5d5c33e5b782e22e0004e8506a7ef85ef Mon Sep 17 00:00:00 2001 From: Ran Isenberg Date: Wed, 7 Jun 2023 21:53:20 +0300 Subject: [PATCH 2/5] fix --- poetry.lock | 422 +++++++++++++++---------------- tests/infrastructure/test_cdk.py | 2 +- 2 files changed, 212 insertions(+), 212 deletions(-) diff --git a/poetry.lock b/poetry.lock index d077c58e..720fce67 100644 --- a/poetry.lock +++ b/poetry.lock @@ -20,13 +20,13 @@ tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pyte [[package]] name = "aws-cdk-asset-awscli-v1" -version = "2.2.185" +version = "2.2.186" description = "A library that contains the AWS CLI for use in Lambda Layers" optional = false python-versions = "~=3.7" files = [ - {file = "aws-cdk.asset-awscli-v1-2.2.185.tar.gz", hash = "sha256:b34e06eb71a5fdfd2eed9b7d7d83367521270f8578f7b5347d224ae2a18fcf95"}, - {file = "aws_cdk.asset_awscli_v1-2.2.185-py3-none-any.whl", hash = "sha256:2a8bec971f4b79f4582d6eba6c36a7531f039374e99949ae99586668ee97591f"}, + {file = "aws-cdk.asset-awscli-v1-2.2.186.tar.gz", hash = "sha256:36cfecbace5770f1b7cf35b8c8007939d10b7d7065538f937f30c4d46e978e91"}, + {file = "aws_cdk.asset_awscli_v1-2.2.186-py3-none-any.whl", hash = "sha256:1a19e2bce822675996a4ee9a469f27a8e5d78b6f3c85070826617aece52f8c06"}, ] [package.dependencies] @@ -52,13 +52,13 @@ typeguard = ">=2.13.3,<2.14.0" [[package]] name = "aws-cdk-asset-node-proxy-agent-v5" -version = "2.0.155" +version = "2.0.157" description = "@aws-cdk/asset-node-proxy-agent-v5" optional = false python-versions = "~=3.7" files = [ - {file = "aws-cdk.asset-node-proxy-agent-v5-2.0.155.tar.gz", hash = "sha256:291ade1af13f5419eb528412577d3ce1456eb34ee33e734d65520d6701e60dc3"}, - {file = "aws_cdk.asset_node_proxy_agent_v5-2.0.155-py3-none-any.whl", hash = "sha256:a2a8d9a05a4710824b19be310874f495833bdfb8a3c88261e19f60c740c030b4"}, + {file = "aws-cdk.asset-node-proxy-agent-v5-2.0.157.tar.gz", hash = "sha256:3a21a6f2fa065f9cf2893df21a42884fe23424c7f93baa2817fa34a7b4fbea1f"}, + {file = "aws_cdk.asset_node_proxy_agent_v5-2.0.157-py3-none-any.whl", hash = "sha256:c1ec19d2e271e40839d13e4e5b0db525566d92ce845b3d8fe83890285d2d2299"}, ] [package.dependencies] @@ -68,17 +68,17 @@ typeguard = ">=2.13.3,<2.14.0" [[package]] name = "aws-cdk-aws-lambda-python-alpha" -version = "2.82.0a0" +version = "2.83.0a0" description = "The CDK Construct Library for AWS Lambda in Python" optional = false python-versions = "~=3.7" files = [ - {file = "aws-cdk.aws-lambda-python-alpha-2.82.0a0.tar.gz", hash = "sha256:afd4d3c6627f1ec5f33e1b9ee29899ed1730ac81cb6f57058cfb901682f9e01f"}, - {file = "aws_cdk.aws_lambda_python_alpha-2.82.0a0-py3-none-any.whl", hash = "sha256:43560944b85a10380b9df7ea2c16eb4f5495dd127955dc57fc7766ddb1bb4b1e"}, + {file = "aws-cdk.aws-lambda-python-alpha-2.83.0a0.tar.gz", hash = "sha256:c82c3f978566fb72470a1186ecc41b11eb13582ee39bf213313455ec1d6fc0d2"}, + {file = "aws_cdk.aws_lambda_python_alpha-2.83.0a0-py3-none-any.whl", hash = "sha256:d0b83b038f833a5896a2f77f79999694fb0efc514c7e2e15d7e9c74e23243346"}, ] [package.dependencies] -aws-cdk-lib = "2.82.0" +aws-cdk-lib = "2.83.0" constructs = ">=10.0.0,<11.0.0" jsii = ">=1.82.0,<2.0.0" publication = ">=0.0.3" @@ -86,13 +86,13 @@ typeguard = ">=2.13.3,<2.14.0" [[package]] name = "aws-cdk-lib" -version = "2.82.0" +version = "2.83.0" description = "Version 2 of the AWS Cloud Development Kit library" optional = false python-versions = "~=3.7" files = [ - {file = "aws-cdk-lib-2.82.0.tar.gz", hash = "sha256:4fa70275fd4992664057810a7efff93870f82e54256ecd929d12981f538c1eef"}, - {file = "aws_cdk_lib-2.82.0-py3-none-any.whl", hash = "sha256:7daae4bf63a12060088e6b408e16bfc046755186dc4c55883ccbaeecbf503163"}, + {file = "aws-cdk-lib-2.83.0.tar.gz", hash = "sha256:014fd6fec8c60e0b1009bd871d39339b55deed93912491bbfdd5f728a93759c6"}, + {file = "aws_cdk_lib-2.83.0-py3-none-any.whl", hash = "sha256:1dedbbbfbb22a3282a32eb53385541a526b9e6cafd120615399c06a6d9291e28"}, ] [package.dependencies] @@ -106,20 +106,20 @@ typeguard = ">=2.13.3,<2.14.0" [[package]] name = "aws-lambda-powertools" -version = "2.15.0" -description = "AWS Lambda Powertools is a developer toolkit to implement Serverless best practices and increase developer velocity." +version = "2.16.2" +description = "Powertools for AWS Lambda (Python) is a developer toolkit to implement Serverless best practices and increase developer velocity." optional = false python-versions = ">=3.7.4,<4.0.0" files = [ - {file = "aws_lambda_powertools-2.15.0-py3-none-any.whl", hash = "sha256:e1e5a74c2e1894ae699e917e2078a9c12f5a38286a04df2d100cc762daff3300"}, - {file = "aws_lambda_powertools-2.15.0.tar.gz", hash = "sha256:6c63a3e1754a040534a359c985e6c24b1f96f8af42fe5fe46a96cf16a8ec096a"}, + {file = "aws_lambda_powertools-2.16.2-py3-none-any.whl", hash = "sha256:f77c14b60a6f36e0466ba462b331f0c6187a05dd5b2946bdeed9827597e27be6"}, + {file = "aws_lambda_powertools-2.16.2.tar.gz", hash = "sha256:43600c56fb268172ade9ea1e3fb8e66070f1c5345af7737e4b1915d14c9f89dd"}, ] [package.dependencies] aws-xray-sdk = {version = ">=2.8.0,<3.0.0", optional = true, markers = "extra == \"tracer\" or extra == \"all\""} fastjsonschema = {version = ">=2.14.5,<3.0.0", optional = true, markers = "extra == \"validation\" or extra == \"all\""} pydantic = {version = ">=1.8.2,<2.0.0", optional = true, markers = "extra == \"parser\" or extra == \"all\""} -typing-extensions = ">=4.4.0,<5.0.0" +typing-extensions = ">=4.6.2,<5.0.0" [package.extras] all = ["aws-xray-sdk (>=2.8.0,<3.0.0)", "fastjsonschema (>=2.14.5,<3.0.0)", "pydantic (>=1.8.2,<2.0.0)"] @@ -145,17 +145,17 @@ wrapt = "*" [[package]] name = "boto3" -version = "1.26.145" +version = "1.26.148" description = "The AWS SDK for Python" optional = false python-versions = ">= 3.7" files = [ - {file = "boto3-1.26.145-py3-none-any.whl", hash = "sha256:77e8fa7c257f9ed8bfe0c3ffc2ccc47b1cfa27058f99415b6003699d1202e0c0"}, - {file = "boto3-1.26.145.tar.gz", hash = "sha256:30f8ab1cf89d5864a80ba2d5eb5316dbd2a63c9469877e0cffb522630438aa85"}, + {file = "boto3-1.26.148-py3-none-any.whl", hash = "sha256:53328b99847e65ca60dbbd5a86550101ecf903dff36724b6a4e74876dd973bdf"}, + {file = "boto3-1.26.148.tar.gz", hash = "sha256:ed90522019c97db32ce1bfd1076864c57c3b65af40abc2349b2391bbac7e4865"}, ] [package.dependencies] -botocore = ">=1.29.145,<1.30.0" +botocore = ">=1.29.148,<1.30.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.6.0,<0.7.0" @@ -164,13 +164,13 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.29.145" +version = "1.29.148" description = "Low-level, data-driven core of boto 3." optional = false python-versions = ">= 3.7" files = [ - {file = "botocore-1.29.145-py3-none-any.whl", hash = "sha256:264a3f19ed280d80711b7e278be09acff7ed379a96432fdf179b4e6e3a687e6a"}, - {file = "botocore-1.29.145.tar.gz", hash = "sha256:65e2a2b1cc70583225f87d6d63736215f93c6234721967bdab872270ba7a1f45"}, + {file = "botocore-1.29.148-py3-none-any.whl", hash = "sha256:71c512fbd42e0ef171388b53bf82f9cb9e66283467156917b69717daeb05eba6"}, + {file = "botocore-1.29.148.tar.gz", hash = "sha256:36bccc4e094faf1bfbda2241eb1c71e72a63f3c12b2adfc4c3cbd02349bc416b"}, ] [package.dependencies] @@ -209,13 +209,13 @@ exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} [[package]] name = "cdk-nag" -version = "2.27.25" +version = "2.27.30" description = "Check CDK v2 applications for best practices using a combination on available rule packs." optional = false python-versions = "~=3.7" files = [ - {file = "cdk-nag-2.27.25.tar.gz", hash = "sha256:4221d5ac6e9a441fb25ec623c4dd7e928a61680abf88404b97c8aa847b0804c2"}, - {file = "cdk_nag-2.27.25-py3-none-any.whl", hash = "sha256:8060522fa0f6f226f247b332fb0a20c772321cbc5f83027f3f94807362548af6"}, + {file = "cdk-nag-2.27.30.tar.gz", hash = "sha256:3a178840d098e3c233165ce61f016f836cf9d628478cb4944b4ad6d55bb02502"}, + {file = "cdk_nag-2.27.30-py3-none-any.whl", hash = "sha256:9b04a7476bf33c341a8be176a5fac97d357060cea5bf108c53a82d3415a03aae"}, ] [package.dependencies] @@ -358,13 +358,13 @@ files = [ [[package]] name = "constructs" -version = "10.2.40" +version = "10.2.45" description = "A programming model for software-defined state" optional = false python-versions = "~=3.7" files = [ - {file = "constructs-10.2.40-py3-none-any.whl", hash = "sha256:9cf37f50b79fefc3d1d0cd71102b7baf084e9bfbf15a0dce7864809e6675db07"}, - {file = "constructs-10.2.40.tar.gz", hash = "sha256:4fc53214b6dc99285848be24350dda17d053abd66e6c4ef09a46b437208b7f2a"}, + {file = "constructs-10.2.45-py3-none-any.whl", hash = "sha256:a70c96d7a64a7c61fa19d760dde7eea5ff1eb1897d9a4229542b2941c6f68a3b"}, + {file = "constructs-10.2.45.tar.gz", hash = "sha256:88bdf7172962f57990eea0978e70ac0c39fe32060885638a782d00c71a8327a1"}, ] [package.dependencies] @@ -705,13 +705,13 @@ files = [ [[package]] name = "jsii" -version = "1.82.0" +version = "1.83.0" description = "Python client for jsii runtime" optional = false python-versions = "~=3.7" files = [ - {file = "jsii-1.82.0-py3-none-any.whl", hash = "sha256:69231656bec928fbabadac096c88a4a6c9e2cc0d6e6e4ddb5d0ccaf84ade5bd2"}, - {file = "jsii-1.82.0.tar.gz", hash = "sha256:7876ed3ab13bb56a463ac3e38e6ece427628a894a600fd5ad87a6e1da5af98ba"}, + {file = "jsii-1.83.0-py3-none-any.whl", hash = "sha256:7c9790843d09ef92d8fec7955ff37419435127bc42a72cd83745ebaab8545f03"}, + {file = "jsii-1.83.0.tar.gz", hash = "sha256:ed5af7f656bfe652543668e2fb8667c527391b09d02a0fec1deca1e1aa0118ad"}, ] [package.dependencies] @@ -756,61 +756,61 @@ testing = ["coverage", "pyyaml"] [[package]] name = "markupsafe" -version = "2.1.2" +version = "2.1.3" description = "Safely add untrusted strings to HTML/XML markup." optional = false python-versions = ">=3.7" files = [ - {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-win32.whl", hash = "sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-win32.whl", hash = "sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-win32.whl", hash = "sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-win32.whl", hash = "sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-win32.whl", hash = "sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed"}, - {file = "MarkupSafe-2.1.2.tar.gz", hash = "sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win32.whl", hash = "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win32.whl", hash = "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win32.whl", hash = "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win32.whl", hash = "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"}, + {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"}, ] [[package]] @@ -1086,47 +1086,47 @@ files = [ [[package]] name = "pydantic" -version = "1.10.8" +version = "1.10.9" description = "Data validation and settings management using python type hints" optional = false python-versions = ">=3.7" files = [ - {file = "pydantic-1.10.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1243d28e9b05003a89d72e7915fdb26ffd1d39bdd39b00b7dbe4afae4b557f9d"}, - {file = "pydantic-1.10.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c0ab53b609c11dfc0c060d94335993cc2b95b2150e25583bec37a49b2d6c6c3f"}, - {file = "pydantic-1.10.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9613fadad06b4f3bc5db2653ce2f22e0de84a7c6c293909b48f6ed37b83c61f"}, - {file = "pydantic-1.10.8-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:df7800cb1984d8f6e249351139667a8c50a379009271ee6236138a22a0c0f319"}, - {file = "pydantic-1.10.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0c6fafa0965b539d7aab0a673a046466d23b86e4b0e8019d25fd53f4df62c277"}, - {file = "pydantic-1.10.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e82d4566fcd527eae8b244fa952d99f2ca3172b7e97add0b43e2d97ee77f81ab"}, - {file = "pydantic-1.10.8-cp310-cp310-win_amd64.whl", hash = "sha256:ab523c31e22943713d80d8d342d23b6f6ac4b792a1e54064a8d0cf78fd64e800"}, - {file = "pydantic-1.10.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:666bdf6066bf6dbc107b30d034615d2627e2121506c555f73f90b54a463d1f33"}, - {file = "pydantic-1.10.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:35db5301b82e8661fa9c505c800d0990bc14e9f36f98932bb1d248c0ac5cada5"}, - {file = "pydantic-1.10.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f90c1e29f447557e9e26afb1c4dbf8768a10cc676e3781b6a577841ade126b85"}, - {file = "pydantic-1.10.8-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93e766b4a8226e0708ef243e843105bf124e21331694367f95f4e3b4a92bbb3f"}, - {file = "pydantic-1.10.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:88f195f582851e8db960b4a94c3e3ad25692c1c1539e2552f3df7a9e972ef60e"}, - {file = "pydantic-1.10.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:34d327c81e68a1ecb52fe9c8d50c8a9b3e90d3c8ad991bfc8f953fb477d42fb4"}, - {file = "pydantic-1.10.8-cp311-cp311-win_amd64.whl", hash = "sha256:d532bf00f381bd6bc62cabc7d1372096b75a33bc197a312b03f5838b4fb84edd"}, - {file = "pydantic-1.10.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7d5b8641c24886d764a74ec541d2fc2c7fb19f6da2a4001e6d580ba4a38f7878"}, - {file = "pydantic-1.10.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b1f6cb446470b7ddf86c2e57cd119a24959af2b01e552f60705910663af09a4"}, - {file = "pydantic-1.10.8-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c33b60054b2136aef8cf190cd4c52a3daa20b2263917c49adad20eaf381e823b"}, - {file = "pydantic-1.10.8-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1952526ba40b220b912cdc43c1c32bcf4a58e3f192fa313ee665916b26befb68"}, - {file = "pydantic-1.10.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:bb14388ec45a7a0dc429e87def6396f9e73c8c77818c927b6a60706603d5f2ea"}, - {file = "pydantic-1.10.8-cp37-cp37m-win_amd64.whl", hash = "sha256:16f8c3e33af1e9bb16c7a91fc7d5fa9fe27298e9f299cff6cb744d89d573d62c"}, - {file = "pydantic-1.10.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1ced8375969673929809d7f36ad322934c35de4af3b5e5b09ec967c21f9f7887"}, - {file = "pydantic-1.10.8-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:93e6bcfccbd831894a6a434b0aeb1947f9e70b7468f274154d03d71fabb1d7c6"}, - {file = "pydantic-1.10.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:191ba419b605f897ede9892f6c56fb182f40a15d309ef0142212200a10af4c18"}, - {file = "pydantic-1.10.8-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:052d8654cb65174d6f9490cc9b9a200083a82cf5c3c5d3985db765757eb3b375"}, - {file = "pydantic-1.10.8-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ceb6a23bf1ba4b837d0cfe378329ad3f351b5897c8d4914ce95b85fba96da5a1"}, - {file = "pydantic-1.10.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6f2e754d5566f050954727c77f094e01793bcb5725b663bf628fa6743a5a9108"}, - {file = "pydantic-1.10.8-cp38-cp38-win_amd64.whl", hash = "sha256:6a82d6cda82258efca32b40040228ecf43a548671cb174a1e81477195ed3ed56"}, - {file = "pydantic-1.10.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3e59417ba8a17265e632af99cc5f35ec309de5980c440c255ab1ca3ae96a3e0e"}, - {file = "pydantic-1.10.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:84d80219c3f8d4cad44575e18404099c76851bc924ce5ab1c4c8bb5e2a2227d0"}, - {file = "pydantic-1.10.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e4148e635994d57d834be1182a44bdb07dd867fa3c2d1b37002000646cc5459"}, - {file = "pydantic-1.10.8-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12f7b0bf8553e310e530e9f3a2f5734c68699f42218bf3568ef49cd9b0e44df4"}, - {file = "pydantic-1.10.8-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:42aa0c4b5c3025483240a25b09f3c09a189481ddda2ea3a831a9d25f444e03c1"}, - {file = "pydantic-1.10.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:17aef11cc1b997f9d574b91909fed40761e13fac438d72b81f902226a69dac01"}, - {file = "pydantic-1.10.8-cp39-cp39-win_amd64.whl", hash = "sha256:66a703d1983c675a6e0fed8953b0971c44dba48a929a2000a493c3772eb61a5a"}, - {file = "pydantic-1.10.8-py3-none-any.whl", hash = "sha256:7456eb22ed9aaa24ff3e7b4757da20d9e5ce2a81018c1b3ebd81a0b88a18f3b2"}, - {file = "pydantic-1.10.8.tar.gz", hash = "sha256:1410275520dfa70effadf4c21811d755e7ef9bb1f1d077a21958153a92c8d9ca"}, + {file = "pydantic-1.10.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e692dec4a40bfb40ca530e07805b1208c1de071a18d26af4a2a0d79015b352ca"}, + {file = "pydantic-1.10.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3c52eb595db83e189419bf337b59154bdcca642ee4b2a09e5d7797e41ace783f"}, + {file = "pydantic-1.10.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:939328fd539b8d0edf244327398a667b6b140afd3bf7e347cf9813c736211896"}, + {file = "pydantic-1.10.9-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b48d3d634bca23b172f47f2335c617d3fcb4b3ba18481c96b7943a4c634f5c8d"}, + {file = "pydantic-1.10.9-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:f0b7628fb8efe60fe66fd4adadd7ad2304014770cdc1f4934db41fe46cc8825f"}, + {file = "pydantic-1.10.9-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e1aa5c2410769ca28aa9a7841b80d9d9a1c5f223928ca8bec7e7c9a34d26b1d4"}, + {file = "pydantic-1.10.9-cp310-cp310-win_amd64.whl", hash = "sha256:eec39224b2b2e861259d6f3c8b6290d4e0fbdce147adb797484a42278a1a486f"}, + {file = "pydantic-1.10.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d111a21bbbfd85c17248130deac02bbd9b5e20b303338e0dbe0faa78330e37e0"}, + {file = "pydantic-1.10.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2e9aec8627a1a6823fc62fb96480abe3eb10168fd0d859ee3d3b395105ae19a7"}, + {file = "pydantic-1.10.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07293ab08e7b4d3c9d7de4949a0ea571f11e4557d19ea24dd3ae0c524c0c334d"}, + {file = "pydantic-1.10.9-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ee829b86ce984261d99ff2fd6e88f2230068d96c2a582f29583ed602ef3fc2c"}, + {file = "pydantic-1.10.9-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4b466a23009ff5cdd7076eb56aca537c745ca491293cc38e72bf1e0e00de5b91"}, + {file = "pydantic-1.10.9-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7847ca62e581e6088d9000f3c497267868ca2fa89432714e21a4fb33a04d52e8"}, + {file = "pydantic-1.10.9-cp311-cp311-win_amd64.whl", hash = "sha256:7845b31959468bc5b78d7b95ec52fe5be32b55d0d09983a877cca6aedc51068f"}, + {file = "pydantic-1.10.9-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:517a681919bf880ce1dac7e5bc0c3af1e58ba118fd774da2ffcd93c5f96eaece"}, + {file = "pydantic-1.10.9-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67195274fd27780f15c4c372f4ba9a5c02dad6d50647b917b6a92bf00b3d301a"}, + {file = "pydantic-1.10.9-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2196c06484da2b3fded1ab6dbe182bdabeb09f6318b7fdc412609ee2b564c49a"}, + {file = "pydantic-1.10.9-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:6257bb45ad78abacda13f15bde5886efd6bf549dd71085e64b8dcf9919c38b60"}, + {file = "pydantic-1.10.9-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3283b574b01e8dbc982080d8287c968489d25329a463b29a90d4157de4f2baaf"}, + {file = "pydantic-1.10.9-cp37-cp37m-win_amd64.whl", hash = "sha256:5f8bbaf4013b9a50e8100333cc4e3fa2f81214033e05ac5aa44fa24a98670a29"}, + {file = "pydantic-1.10.9-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b9cd67fb763248cbe38f0593cd8611bfe4b8ad82acb3bdf2b0898c23415a1f82"}, + {file = "pydantic-1.10.9-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f50e1764ce9353be67267e7fd0da08349397c7db17a562ad036aa7c8f4adfdb6"}, + {file = "pydantic-1.10.9-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:73ef93e5e1d3c8e83f1ff2e7fdd026d9e063c7e089394869a6e2985696693766"}, + {file = "pydantic-1.10.9-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:128d9453d92e6e81e881dd7e2484e08d8b164da5507f62d06ceecf84bf2e21d3"}, + {file = "pydantic-1.10.9-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ad428e92ab68798d9326bb3e5515bc927444a3d71a93b4a2ca02a8a5d795c572"}, + {file = "pydantic-1.10.9-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fab81a92f42d6d525dd47ced310b0c3e10c416bbfae5d59523e63ea22f82b31e"}, + {file = "pydantic-1.10.9-cp38-cp38-win_amd64.whl", hash = "sha256:963671eda0b6ba6926d8fc759e3e10335e1dc1b71ff2a43ed2efd6996634dafb"}, + {file = "pydantic-1.10.9-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:970b1bdc6243ef663ba5c7e36ac9ab1f2bfecb8ad297c9824b542d41a750b298"}, + {file = "pydantic-1.10.9-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7e1d5290044f620f80cf1c969c542a5468f3656de47b41aa78100c5baa2b8276"}, + {file = "pydantic-1.10.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:83fcff3c7df7adff880622a98022626f4f6dbce6639a88a15a3ce0f96466cb60"}, + {file = "pydantic-1.10.9-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0da48717dc9495d3a8f215e0d012599db6b8092db02acac5e0d58a65248ec5bc"}, + {file = "pydantic-1.10.9-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:0a2aabdc73c2a5960e87c3ffebca6ccde88665616d1fd6d3db3178ef427b267a"}, + {file = "pydantic-1.10.9-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9863b9420d99dfa9c064042304868e8ba08e89081428a1c471858aa2af6f57c4"}, + {file = "pydantic-1.10.9-cp39-cp39-win_amd64.whl", hash = "sha256:e7c9900b43ac14110efa977be3da28931ffc74c27e96ee89fbcaaf0b0fe338e1"}, + {file = "pydantic-1.10.9-py3-none-any.whl", hash = "sha256:6cafde02f6699ce4ff643417d1a9223716ec25e228ddc3b436fe7e2d25a1f305"}, + {file = "pydantic-1.10.9.tar.gz", hash = "sha256:95c70da2cd3b6ddf3b9645ecaa8d98f3d80c606624b6d245558d202cd23ea3be"}, ] [package.dependencies] @@ -1375,99 +1375,99 @@ mando = ">=0.6,<0.7" [[package]] name = "regex" -version = "2023.5.5" +version = "2023.6.3" description = "Alternative regular expression module, to replace re." optional = false python-versions = ">=3.6" files = [ - {file = "regex-2023.5.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:48c9ec56579d4ba1c88f42302194b8ae2350265cb60c64b7b9a88dcb7fbde309"}, - {file = "regex-2023.5.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02f4541550459c08fdd6f97aa4e24c6f1932eec780d58a2faa2068253df7d6ff"}, - {file = "regex-2023.5.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:53e22e4460f0245b468ee645156a4f84d0fc35a12d9ba79bd7d79bdcd2f9629d"}, - {file = "regex-2023.5.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b870b6f632fc74941cadc2a0f3064ed8409e6f8ee226cdfd2a85ae50473aa94"}, - {file = "regex-2023.5.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:171c52e320fe29260da550d81c6b99f6f8402450dc7777ef5ced2e848f3b6f8f"}, - {file = "regex-2023.5.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aad5524c2aedaf9aa14ef1bc9327f8abd915699dea457d339bebbe2f0d218f86"}, - {file = "regex-2023.5.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5a0f874ee8c0bc820e649c900243c6d1e6dc435b81da1492046716f14f1a2a96"}, - {file = "regex-2023.5.5-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e645c757183ee0e13f0bbe56508598e2d9cd42b8abc6c0599d53b0d0b8dd1479"}, - {file = "regex-2023.5.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a4c5da39bca4f7979eefcbb36efea04471cd68db2d38fcbb4ee2c6d440699833"}, - {file = "regex-2023.5.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5e3f4468b8c6fd2fd33c218bbd0a1559e6a6fcf185af8bb0cc43f3b5bfb7d636"}, - {file = "regex-2023.5.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:59e4b729eae1a0919f9e4c0fc635fbcc9db59c74ad98d684f4877be3d2607dd6"}, - {file = "regex-2023.5.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ba73a14e9c8f9ac409863543cde3290dba39098fc261f717dc337ea72d3ebad2"}, - {file = "regex-2023.5.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0bbd5dcb19603ab8d2781fac60114fb89aee8494f4505ae7ad141a3314abb1f9"}, - {file = "regex-2023.5.5-cp310-cp310-win32.whl", hash = "sha256:40005cbd383438aecf715a7b47fe1e3dcbc889a36461ed416bdec07e0ef1db66"}, - {file = "regex-2023.5.5-cp310-cp310-win_amd64.whl", hash = "sha256:59597cd6315d3439ed4b074febe84a439c33928dd34396941b4d377692eca810"}, - {file = "regex-2023.5.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8f08276466fedb9e36e5193a96cb944928301152879ec20c2d723d1031cd4ddd"}, - {file = "regex-2023.5.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cd46f30e758629c3ee91713529cfbe107ac50d27110fdcc326a42ce2acf4dafc"}, - {file = "regex-2023.5.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2910502f718828cecc8beff004917dcf577fc5f8f5dd40ffb1ea7612124547b"}, - {file = "regex-2023.5.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:445d6f4fc3bd9fc2bf0416164454f90acab8858cd5a041403d7a11e3356980e8"}, - {file = "regex-2023.5.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18196c16a584619c7c1d843497c069955d7629ad4a3fdee240eb347f4a2c9dbe"}, - {file = "regex-2023.5.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33d430a23b661629661f1fe8395be2004006bc792bb9fc7c53911d661b69dd7e"}, - {file = "regex-2023.5.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:72a28979cc667e5f82ef433db009184e7ac277844eea0f7f4d254b789517941d"}, - {file = "regex-2023.5.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f764e4dfafa288e2eba21231f455d209f4709436baeebb05bdecfb5d8ddc3d35"}, - {file = "regex-2023.5.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:23d86ad2121b3c4fc78c58f95e19173790e22ac05996df69b84e12da5816cb17"}, - {file = "regex-2023.5.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:690a17db524ee6ac4a27efc5406530dd90e7a7a69d8360235323d0e5dafb8f5b"}, - {file = "regex-2023.5.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:1ecf3dcff71f0c0fe3e555201cbe749fa66aae8d18f80d2cc4de8e66df37390a"}, - {file = "regex-2023.5.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:811040d7f3dd9c55eb0d8b00b5dcb7fd9ae1761c454f444fd9f37fe5ec57143a"}, - {file = "regex-2023.5.5-cp311-cp311-win32.whl", hash = "sha256:c8c143a65ce3ca42e54d8e6fcaf465b6b672ed1c6c90022794a802fb93105d22"}, - {file = "regex-2023.5.5-cp311-cp311-win_amd64.whl", hash = "sha256:586a011f77f8a2da4b888774174cd266e69e917a67ba072c7fc0e91878178a80"}, - {file = "regex-2023.5.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b6365703e8cf1644b82104cdd05270d1a9f043119a168d66c55684b1b557d008"}, - {file = "regex-2023.5.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a56c18f21ac98209da9c54ae3ebb3b6f6e772038681d6cb43b8d53da3b09ee81"}, - {file = "regex-2023.5.5-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8b942d8b3ce765dbc3b1dad0a944712a89b5de290ce8f72681e22b3c55f3cc8"}, - {file = "regex-2023.5.5-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:844671c9c1150fcdac46d43198364034b961bd520f2c4fdaabfc7c7d7138a2dd"}, - {file = "regex-2023.5.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2ce65bdeaf0a386bb3b533a28de3994e8e13b464ac15e1e67e4603dd88787fa"}, - {file = "regex-2023.5.5-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fee0016cc35a8a91e8cc9312ab26a6fe638d484131a7afa79e1ce6165328a135"}, - {file = "regex-2023.5.5-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:18f05d14f14a812fe9723f13afafefe6b74ca042d99f8884e62dbd34dcccf3e2"}, - {file = "regex-2023.5.5-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:941b3f1b2392f0bcd6abf1bc7a322787d6db4e7457be6d1ffd3a693426a755f2"}, - {file = "regex-2023.5.5-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:921473a93bcea4d00295799ab929522fc650e85c6b9f27ae1e6bb32a790ea7d3"}, - {file = "regex-2023.5.5-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:e2205a81f815b5bb17e46e74cc946c575b484e5f0acfcb805fb252d67e22938d"}, - {file = "regex-2023.5.5-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:385992d5ecf1a93cb85adff2f73e0402dd9ac29b71b7006d342cc920816e6f32"}, - {file = "regex-2023.5.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:890a09cb0a62198bff92eda98b2b507305dd3abf974778bae3287f98b48907d3"}, - {file = "regex-2023.5.5-cp36-cp36m-win32.whl", hash = "sha256:821a88b878b6589c5068f4cc2cfeb2c64e343a196bc9d7ac68ea8c2a776acd46"}, - {file = "regex-2023.5.5-cp36-cp36m-win_amd64.whl", hash = "sha256:7918a1b83dd70dc04ab5ed24c78ae833ae8ea228cef84e08597c408286edc926"}, - {file = "regex-2023.5.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:338994d3d4ca4cf12f09822e025731a5bdd3a37aaa571fa52659e85ca793fb67"}, - {file = "regex-2023.5.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a69cf0c00c4d4a929c6c7717fd918414cab0d6132a49a6d8fc3ded1988ed2ea"}, - {file = "regex-2023.5.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8f5e06df94fff8c4c85f98c6487f6636848e1dc85ce17ab7d1931df4a081f657"}, - {file = "regex-2023.5.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8906669b03c63266b6a7693d1f487b02647beb12adea20f8840c1a087e2dfb5"}, - {file = "regex-2023.5.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fda3e50abad8d0f48df621cf75adc73c63f7243cbe0e3b2171392b445401550"}, - {file = "regex-2023.5.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ac2b7d341dc1bd102be849d6dd33b09701223a851105b2754339e390be0627a"}, - {file = "regex-2023.5.5-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fb2b495dd94b02de8215625948132cc2ea360ae84fe6634cd19b6567709c8ae2"}, - {file = "regex-2023.5.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:aa7d032c1d84726aa9edeb6accf079b4caa87151ca9fabacef31fa028186c66d"}, - {file = "regex-2023.5.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3d45864693351c15531f7e76f545ec35000d50848daa833cead96edae1665559"}, - {file = "regex-2023.5.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:21e90a288e6ba4bf44c25c6a946cb9b0f00b73044d74308b5e0afd190338297c"}, - {file = "regex-2023.5.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:10250a093741ec7bf74bcd2039e697f519b028518f605ff2aa7ac1e9c9f97423"}, - {file = "regex-2023.5.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:6b8d0c153f07a953636b9cdb3011b733cadd4178123ef728ccc4d5969e67f3c2"}, - {file = "regex-2023.5.5-cp37-cp37m-win32.whl", hash = "sha256:10374c84ee58c44575b667310d5bbfa89fb2e64e52349720a0182c0017512f6c"}, - {file = "regex-2023.5.5-cp37-cp37m-win_amd64.whl", hash = "sha256:9b320677521aabf666cdd6e99baee4fb5ac3996349c3b7f8e7c4eee1c00dfe3a"}, - {file = "regex-2023.5.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:afb1c70ec1e594a547f38ad6bf5e3d60304ce7539e677c1429eebab115bce56e"}, - {file = "regex-2023.5.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cf123225945aa58b3057d0fba67e8061c62d14cc8a4202630f8057df70189051"}, - {file = "regex-2023.5.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a99757ad7fe5c8a2bb44829fc57ced11253e10f462233c1255fe03888e06bc19"}, - {file = "regex-2023.5.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a623564d810e7a953ff1357f7799c14bc9beeab699aacc8b7ab7822da1e952b8"}, - {file = "regex-2023.5.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ced02e3bd55e16e89c08bbc8128cff0884d96e7f7a5633d3dc366b6d95fcd1d6"}, - {file = "regex-2023.5.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1cbe6b5be3b9b698d8cc4ee4dee7e017ad655e83361cd0ea8e653d65e469468"}, - {file = "regex-2023.5.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a6e4b0e0531223f53bad07ddf733af490ba2b8367f62342b92b39b29f72735a"}, - {file = "regex-2023.5.5-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2e9c4f778514a560a9c9aa8e5538bee759b55f6c1dcd35613ad72523fd9175b8"}, - {file = "regex-2023.5.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:256f7f4c6ba145f62f7a441a003c94b8b1af78cee2cccacfc1e835f93bc09426"}, - {file = "regex-2023.5.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:bd7b68fd2e79d59d86dcbc1ccd6e2ca09c505343445daaa4e07f43c8a9cc34da"}, - {file = "regex-2023.5.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4a5059bd585e9e9504ef9c07e4bc15b0a621ba20504388875d66b8b30a5c4d18"}, - {file = "regex-2023.5.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:6893544e06bae009916a5658ce7207e26ed17385149f35a3125f5259951f1bbe"}, - {file = "regex-2023.5.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c64d5abe91a3dfe5ff250c6bb267ef00dbc01501518225b45a5f9def458f31fb"}, - {file = "regex-2023.5.5-cp38-cp38-win32.whl", hash = "sha256:7923470d6056a9590247ff729c05e8e0f06bbd4efa6569c916943cb2d9b68b91"}, - {file = "regex-2023.5.5-cp38-cp38-win_amd64.whl", hash = "sha256:4035d6945cb961c90c3e1c1ca2feb526175bcfed44dfb1cc77db4fdced060d3e"}, - {file = "regex-2023.5.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:50fd2d9b36938d4dcecbd684777dd12a407add4f9f934f235c66372e630772b0"}, - {file = "regex-2023.5.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d19e57f888b00cd04fc38f5e18d0efbd91ccba2d45039453ab2236e6eec48d4d"}, - {file = "regex-2023.5.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd966475e963122ee0a7118ec9024388c602d12ac72860f6eea119a3928be053"}, - {file = "regex-2023.5.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db09e6c18977a33fea26fe67b7a842f706c67cf8bda1450974d0ae0dd63570df"}, - {file = "regex-2023.5.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6164d4e2a82f9ebd7752a06bd6c504791bedc6418c0196cd0a23afb7f3e12b2d"}, - {file = "regex-2023.5.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84397d3f750d153ebd7f958efaa92b45fea170200e2df5e0e1fd4d85b7e3f58a"}, - {file = "regex-2023.5.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9c3efee9bb53cbe7b285760c81f28ac80dc15fa48b5fe7e58b52752e642553f1"}, - {file = "regex-2023.5.5-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:144b5b017646b5a9392a5554a1e5db0000ae637be4971c9747566775fc96e1b2"}, - {file = "regex-2023.5.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:1189fbbb21e2c117fda5303653b61905aeeeea23de4a94d400b0487eb16d2d60"}, - {file = "regex-2023.5.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f83fe9e10f9d0b6cf580564d4d23845b9d692e4c91bd8be57733958e4c602956"}, - {file = "regex-2023.5.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:72aa4746993a28c841e05889f3f1b1e5d14df8d3daa157d6001a34c98102b393"}, - {file = "regex-2023.5.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:de2f780c3242ea114dd01f84848655356af4dd561501896c751d7b885ea6d3a1"}, - {file = "regex-2023.5.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:290fd35219486dfbc00b0de72f455ecdd63e59b528991a6aec9fdfc0ce85672e"}, - {file = "regex-2023.5.5-cp39-cp39-win32.whl", hash = "sha256:732176f5427e72fa2325b05c58ad0b45af341c459910d766f814b0584ac1f9ac"}, - {file = "regex-2023.5.5-cp39-cp39-win_amd64.whl", hash = "sha256:1307aa4daa1cbb23823d8238e1f61292fd07e4e5d8d38a6efff00b67a7cdb764"}, - {file = "regex-2023.5.5.tar.gz", hash = "sha256:7d76a8a1fc9da08296462a18f16620ba73bcbf5909e42383b253ef34d9d5141e"}, + {file = "regex-2023.6.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:824bf3ac11001849aec3fa1d69abcb67aac3e150a933963fb12bda5151fe1bfd"}, + {file = "regex-2023.6.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:05ed27acdf4465c95826962528f9e8d41dbf9b1aa8531a387dee6ed215a3e9ef"}, + {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b49c764f88a79160fa64f9a7b425620e87c9f46095ef9c9920542ab2495c8bc"}, + {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8e3f1316c2293e5469f8f09dc2d76efb6c3982d3da91ba95061a7e69489a14ef"}, + {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:43e1dd9d12df9004246bacb79a0e5886b3b6071b32e41f83b0acbf293f820ee8"}, + {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4959e8bcbfda5146477d21c3a8ad81b185cd252f3d0d6e4724a5ef11c012fb06"}, + {file = "regex-2023.6.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:af4dd387354dc83a3bff67127a124c21116feb0d2ef536805c454721c5d7993d"}, + {file = "regex-2023.6.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2239d95d8e243658b8dbb36b12bd10c33ad6e6933a54d36ff053713f129aa536"}, + {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:890e5a11c97cf0d0c550eb661b937a1e45431ffa79803b942a057c4fb12a2da2"}, + {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a8105e9af3b029f243ab11ad47c19b566482c150c754e4c717900a798806b222"}, + {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:25be746a8ec7bc7b082783216de8e9473803706723b3f6bef34b3d0ed03d57e2"}, + {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:3676f1dd082be28b1266c93f618ee07741b704ab7b68501a173ce7d8d0d0ca18"}, + {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:10cb847aeb1728412c666ab2e2000ba6f174f25b2bdc7292e7dd71b16db07568"}, + {file = "regex-2023.6.3-cp310-cp310-win32.whl", hash = "sha256:dbbbfce33cd98f97f6bffb17801b0576e653f4fdb1d399b2ea89638bc8d08ae1"}, + {file = "regex-2023.6.3-cp310-cp310-win_amd64.whl", hash = "sha256:c5f8037000eb21e4823aa485149f2299eb589f8d1fe4b448036d230c3f4e68e0"}, + {file = "regex-2023.6.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c123f662be8ec5ab4ea72ea300359023a5d1df095b7ead76fedcd8babbedf969"}, + {file = "regex-2023.6.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9edcbad1f8a407e450fbac88d89e04e0b99a08473f666a3f3de0fd292badb6aa"}, + {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcba6dae7de533c876255317c11f3abe4907ba7d9aa15d13e3d9710d4315ec0e"}, + {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:29cdd471ebf9e0f2fb3cac165efedc3c58db841d83a518b082077e612d3ee5df"}, + {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:12b74fbbf6cbbf9dbce20eb9b5879469e97aeeaa874145517563cca4029db65c"}, + {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c29ca1bd61b16b67be247be87390ef1d1ef702800f91fbd1991f5c4421ebae8"}, + {file = "regex-2023.6.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d77f09bc4b55d4bf7cc5eba785d87001d6757b7c9eec237fe2af57aba1a071d9"}, + {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ea353ecb6ab5f7e7d2f4372b1e779796ebd7b37352d290096978fea83c4dba0c"}, + {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:10590510780b7541969287512d1b43f19f965c2ece6c9b1c00fc367b29d8dce7"}, + {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e2fbd6236aae3b7f9d514312cdb58e6494ee1c76a9948adde6eba33eb1c4264f"}, + {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:6b2675068c8b56f6bfd5a2bda55b8accbb96c02fd563704732fd1c95e2083461"}, + {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:74419d2b50ecb98360cfaa2974da8689cb3b45b9deff0dcf489c0d333bcc1477"}, + {file = "regex-2023.6.3-cp311-cp311-win32.whl", hash = "sha256:fb5ec16523dc573a4b277663a2b5a364e2099902d3944c9419a40ebd56a118f9"}, + {file = "regex-2023.6.3-cp311-cp311-win_amd64.whl", hash = "sha256:09e4a1a6acc39294a36b7338819b10baceb227f7f7dbbea0506d419b5a1dd8af"}, + {file = "regex-2023.6.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:0654bca0cdf28a5956c83839162692725159f4cda8d63e0911a2c0dc76166525"}, + {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:463b6a3ceb5ca952e66550a4532cef94c9a0c80dc156c4cc343041951aec1697"}, + {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:87b2a5bb5e78ee0ad1de71c664d6eb536dc3947a46a69182a90f4410f5e3f7dd"}, + {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6343c6928282c1f6a9db41f5fd551662310e8774c0e5ebccb767002fcf663ca9"}, + {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6192d5af2ccd2a38877bfef086d35e6659566a335b1492786ff254c168b1693"}, + {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:74390d18c75054947e4194019077e243c06fbb62e541d8817a0fa822ea310c14"}, + {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:742e19a90d9bb2f4a6cf2862b8b06dea5e09b96c9f2df1779e53432d7275331f"}, + {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8abbc5d54ea0ee80e37fef009e3cec5dafd722ed3c829126253d3e22f3846f1e"}, + {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:c2b867c17a7a7ae44c43ebbeb1b5ff406b3e8d5b3e14662683e5e66e6cc868d3"}, + {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:d831c2f8ff278179705ca59f7e8524069c1a989e716a1874d6d1aab6119d91d1"}, + {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:ee2d1a9a253b1729bb2de27d41f696ae893507c7db224436abe83ee25356f5c1"}, + {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:61474f0b41fe1a80e8dfa70f70ea1e047387b7cd01c85ec88fa44f5d7561d787"}, + {file = "regex-2023.6.3-cp36-cp36m-win32.whl", hash = "sha256:0b71e63226e393b534105fcbdd8740410dc6b0854c2bfa39bbda6b0d40e59a54"}, + {file = "regex-2023.6.3-cp36-cp36m-win_amd64.whl", hash = "sha256:bbb02fd4462f37060122e5acacec78e49c0fbb303c30dd49c7f493cf21fc5b27"}, + {file = "regex-2023.6.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b862c2b9d5ae38a68b92e215b93f98d4c5e9454fa36aae4450f61dd33ff48487"}, + {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:976d7a304b59ede34ca2921305b57356694f9e6879db323fd90a80f865d355a3"}, + {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:83320a09188e0e6c39088355d423aa9d056ad57a0b6c6381b300ec1a04ec3d16"}, + {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9427a399501818a7564f8c90eced1e9e20709ece36be701f394ada99890ea4b3"}, + {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7178bbc1b2ec40eaca599d13c092079bf529679bf0371c602edaa555e10b41c3"}, + {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:837328d14cde912af625d5f303ec29f7e28cdab588674897baafaf505341f2fc"}, + {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2d44dc13229905ae96dd2ae2dd7cebf824ee92bc52e8cf03dcead37d926da019"}, + {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d54af539295392611e7efbe94e827311eb8b29668e2b3f4cadcfe6f46df9c777"}, + {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7117d10690c38a622e54c432dfbbd3cbd92f09401d622902c32f6d377e2300ee"}, + {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bb60b503ec8a6e4e3e03a681072fa3a5adcbfa5479fa2d898ae2b4a8e24c4591"}, + {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:65ba8603753cec91c71de423a943ba506363b0e5c3fdb913ef8f9caa14b2c7e0"}, + {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:271f0bdba3c70b58e6f500b205d10a36fb4b58bd06ac61381b68de66442efddb"}, + {file = "regex-2023.6.3-cp37-cp37m-win32.whl", hash = "sha256:9beb322958aaca059f34975b0df135181f2e5d7a13b84d3e0e45434749cb20f7"}, + {file = "regex-2023.6.3-cp37-cp37m-win_amd64.whl", hash = "sha256:fea75c3710d4f31389eed3c02f62d0b66a9da282521075061ce875eb5300cf23"}, + {file = "regex-2023.6.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8f56fcb7ff7bf7404becdfc60b1e81a6d0561807051fd2f1860b0d0348156a07"}, + {file = "regex-2023.6.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d2da3abc88711bce7557412310dfa50327d5769a31d1c894b58eb256459dc289"}, + {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a99b50300df5add73d307cf66abea093304a07eb017bce94f01e795090dea87c"}, + {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5708089ed5b40a7b2dc561e0c8baa9535b77771b64a8330b684823cfd5116036"}, + {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:687ea9d78a4b1cf82f8479cab23678aff723108df3edeac098e5b2498879f4a7"}, + {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d3850beab9f527f06ccc94b446c864059c57651b3f911fddb8d9d3ec1d1b25d"}, + {file = "regex-2023.6.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e8915cc96abeb8983cea1df3c939e3c6e1ac778340c17732eb63bb96247b91d2"}, + {file = "regex-2023.6.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:841d6e0e5663d4c7b4c8099c9997be748677d46cbf43f9f471150e560791f7ff"}, + {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9edce5281f965cf135e19840f4d93d55b3835122aa76ccacfd389e880ba4cf82"}, + {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b956231ebdc45f5b7a2e1f90f66a12be9610ce775fe1b1d50414aac1e9206c06"}, + {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:36efeba71c6539d23c4643be88295ce8c82c88bbd7c65e8a24081d2ca123da3f"}, + {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:cf67ca618b4fd34aee78740bea954d7c69fdda419eb208c2c0c7060bb822d747"}, + {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b4598b1897837067a57b08147a68ac026c1e73b31ef6e36deeeb1fa60b2933c9"}, + {file = "regex-2023.6.3-cp38-cp38-win32.whl", hash = "sha256:f415f802fbcafed5dcc694c13b1292f07fe0befdb94aa8a52905bd115ff41e88"}, + {file = "regex-2023.6.3-cp38-cp38-win_amd64.whl", hash = "sha256:d4f03bb71d482f979bda92e1427f3ec9b220e62a7dd337af0aa6b47bf4498f72"}, + {file = "regex-2023.6.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ccf91346b7bd20c790310c4147eee6ed495a54ddb6737162a36ce9dbef3e4751"}, + {file = "regex-2023.6.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b28f5024a3a041009eb4c333863d7894d191215b39576535c6734cd88b0fcb68"}, + {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0bb18053dfcfed432cc3ac632b5e5e5c5b7e55fb3f8090e867bfd9b054dbcbf"}, + {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a5bfb3004f2144a084a16ce19ca56b8ac46e6fd0651f54269fc9e230edb5e4a"}, + {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c6b48d0fa50d8f4df3daf451be7f9689c2bde1a52b1225c5926e3f54b6a9ed1"}, + {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:051da80e6eeb6e239e394ae60704d2b566aa6a7aed6f2890a7967307267a5dc6"}, + {file = "regex-2023.6.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4c3b7fa4cdaa69268748665a1a6ff70c014d39bb69c50fda64b396c9116cf77"}, + {file = "regex-2023.6.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:457b6cce21bee41ac292d6753d5e94dcbc5c9e3e3a834da285b0bde7aa4a11e9"}, + {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:aad51907d74fc183033ad796dd4c2e080d1adcc4fd3c0fd4fd499f30c03011cd"}, + {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:0385e73da22363778ef2324950e08b689abdf0b108a7d8decb403ad7f5191938"}, + {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c6a57b742133830eec44d9b2290daf5cbe0a2f1d6acee1b3c7b1c7b2f3606df7"}, + {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:3e5219bf9e75993d73ab3d25985c857c77e614525fac9ae02b1bebd92f7cecac"}, + {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e5087a3c59eef624a4591ef9eaa6e9a8d8a94c779dade95d27c0bc24650261cd"}, + {file = "regex-2023.6.3-cp39-cp39-win32.whl", hash = "sha256:20326216cc2afe69b6e98528160b225d72f85ab080cbdf0b11528cbbaba2248f"}, + {file = "regex-2023.6.3-cp39-cp39-win_amd64.whl", hash = "sha256:bdff5eab10e59cf26bc479f565e25ed71a7d041d1ded04ccf9aee1d9f208487a"}, + {file = "regex-2023.6.3.tar.gz", hash = "sha256:72d1a25bf36d2050ceb35b517afe13864865268dfb45910e2e17a84be6cbfeb0"}, ] [[package]] diff --git a/tests/infrastructure/test_cdk.py b/tests/infrastructure/test_cdk.py index d2242c89..b1c5ef9b 100644 --- a/tests/infrastructure/test_cdk.py +++ b/tests/infrastructure/test_cdk.py @@ -14,4 +14,4 @@ def test_synthesizes_properly(): # verify that we have one API GW, that is it not deleted by mistake template.resource_count_is('AWS::ApiGateway::RestApi', 1) - template.resource_count_is('AWS::DynamoDB::Table', 1) + template.resource_count_is('AWS::DynamoDB::Table', 2) # main db and one for idempotency From 9f335cd9b1abe193166c49628f18f17de3c02b4c Mon Sep 17 00:00:00 2001 From: Ran Isenberg Date: Sat, 10 Jun 2023 22:36:08 +0300 Subject: [PATCH 3/5] fix unique table name --- cdk/my_service/api_construct.py | 5 +- cdk/my_service/api_db_construct.py | 6 ++- cdk/my_service/constants.py | 1 + poetry.lock | 72 +++++++++++++-------------- service/handlers/schemas/env_vars.py | 4 ++ service/handlers/utils/idempotency.py | 6 ++- tests/integration/conftest.py | 11 +++- 7 files changed, 62 insertions(+), 43 deletions(-) diff --git a/cdk/my_service/api_construct.py b/cdk/my_service/api_construct.py index be7e5904..02f2b889 100644 --- a/cdk/my_service/api_construct.py +++ b/cdk/my_service/api_construct.py @@ -80,7 +80,8 @@ def _build_common_layer(self) -> PythonLayerVersion: removal_policy=RemovalPolicy.DESTROY, ) - def _add_post_lambda_integration(self, api_name: aws_apigateway.Resource, role: iam.Role, db: dynamodb.Table, appconfig_app_name: str): + def _add_post_lambda_integration(self, api_name: aws_apigateway.Resource, role: iam.Role, db: dynamodb.Table, appconfig_app_name: str, + idempotency_table: dynamodb.Table): lambda_function = _lambda.Function( self, constants.CREATE_LAMBDA, @@ -97,7 +98,7 @@ def _add_post_lambda_integration(self, api_name: aws_apigateway.Resource, role: 'REST_API': 'https://www.ranthebuilder.cloud/api', # for env vars example 'ROLE_ARN': 'arn:partition:service:region:account-id:resource-type:resource-id', # for env vars example 'TABLE_NAME': db.table_name, - 'POWERTOOLS_IDEMPOTENCY_DISABLED': 'False', + 'IDEMPOTENCY_TABLE_NAME': idempotency_table.table_name, }, tracing=_lambda.Tracing.ACTIVE, retry_attempts=0, diff --git a/cdk/my_service/api_db_construct.py b/cdk/my_service/api_db_construct.py index 9381484a..2035ecef 100644 --- a/cdk/my_service/api_db_construct.py +++ b/cdk/my_service/api_db_construct.py @@ -13,8 +13,8 @@ def __init__(self, scope: Construct, id_: str) -> None: self.db: dynamodb.Table = self._build_db(id_) self.idempotency_db: dynamodb.Table = self._build_idempotency_table() - def _build_idempotency_table(self) -> dynamodb.Table: - table_id = constants.IDEMPOTENCY_TABLE_NAME + def _build_idempotency_table(self, id_: str) -> dynamodb.Table: + table_id = f'{id_}{constants.IDEMPOTENCY_TABLE_NAME}' table = dynamodb.Table( self, table_id, @@ -25,6 +25,8 @@ def _build_idempotency_table(self) -> dynamodb.Table: time_to_live_attribute='expiration', point_in_time_recovery=True, ) + CfnOutput(self, id=constants.IDEMPOTENCY_TABLE_NAME_OUTPUT, + value=table.table_name).override_logical_id(constants.IDEMPOTENCY_TABLE_NAME_OUTPUT) return table def _build_db(self, id_prefix: str) -> dynamodb.Table: diff --git a/cdk/my_service/constants.py b/cdk/my_service/constants.py index d3a22b1a..1c5078e3 100644 --- a/cdk/my_service/constants.py +++ b/cdk/my_service/constants.py @@ -5,6 +5,7 @@ TABLE_NAME = 'orders' IDEMPOTENCY_TABLE_NAME = 'IdempotencyTable' TABLE_NAME_OUTPUT = 'DbOutput' +IDEMPOTENCY_TABLE_NAME_OUTPUT = 'IdempotencyDbOutput' APIGATEWAY = 'Apigateway' GW_RESOURCE = 'orders' LAMBDA_LAYER_NAME = 'common' diff --git a/poetry.lock b/poetry.lock index 720fce67..cbe8ebff 100644 --- a/poetry.lock +++ b/poetry.lock @@ -52,33 +52,33 @@ typeguard = ">=2.13.3,<2.14.0" [[package]] name = "aws-cdk-asset-node-proxy-agent-v5" -version = "2.0.157" +version = "2.0.160" description = "@aws-cdk/asset-node-proxy-agent-v5" optional = false python-versions = "~=3.7" files = [ - {file = "aws-cdk.asset-node-proxy-agent-v5-2.0.157.tar.gz", hash = "sha256:3a21a6f2fa065f9cf2893df21a42884fe23424c7f93baa2817fa34a7b4fbea1f"}, - {file = "aws_cdk.asset_node_proxy_agent_v5-2.0.157-py3-none-any.whl", hash = "sha256:c1ec19d2e271e40839d13e4e5b0db525566d92ce845b3d8fe83890285d2d2299"}, + {file = "aws-cdk.asset-node-proxy-agent-v5-2.0.160.tar.gz", hash = "sha256:7a7f7280b0ddbbfff7c6ae6ce83ae0cd910307bf12af0870f93f1a21f4dc7f36"}, + {file = "aws_cdk.asset_node_proxy_agent_v5-2.0.160-py3-none-any.whl", hash = "sha256:0cd26b656b999cd36bf16abe0afde1852d7f1d47d1390dae3273cfb728faf680"}, ] [package.dependencies] -jsii = ">=1.82.0,<2.0.0" +jsii = ">=1.83.0,<2.0.0" publication = ">=0.0.3" typeguard = ">=2.13.3,<2.14.0" [[package]] name = "aws-cdk-aws-lambda-python-alpha" -version = "2.83.0a0" +version = "2.83.1a0" description = "The CDK Construct Library for AWS Lambda in Python" optional = false python-versions = "~=3.7" files = [ - {file = "aws-cdk.aws-lambda-python-alpha-2.83.0a0.tar.gz", hash = "sha256:c82c3f978566fb72470a1186ecc41b11eb13582ee39bf213313455ec1d6fc0d2"}, - {file = "aws_cdk.aws_lambda_python_alpha-2.83.0a0-py3-none-any.whl", hash = "sha256:d0b83b038f833a5896a2f77f79999694fb0efc514c7e2e15d7e9c74e23243346"}, + {file = "aws-cdk.aws-lambda-python-alpha-2.83.1a0.tar.gz", hash = "sha256:0ba2c28f52de7cf0550199cb40c6425725ee075ec979ff28cff16fcc8e97235c"}, + {file = "aws_cdk.aws_lambda_python_alpha-2.83.1a0-py3-none-any.whl", hash = "sha256:c6ddc4dd8cdb2ff0927293ecdf47904d861edd0581469474e909c1e97e383395"}, ] [package.dependencies] -aws-cdk-lib = "2.83.0" +aws-cdk-lib = "2.83.1" constructs = ">=10.0.0,<11.0.0" jsii = ">=1.82.0,<2.0.0" publication = ">=0.0.3" @@ -86,13 +86,13 @@ typeguard = ">=2.13.3,<2.14.0" [[package]] name = "aws-cdk-lib" -version = "2.83.0" +version = "2.83.1" description = "Version 2 of the AWS Cloud Development Kit library" optional = false python-versions = "~=3.7" files = [ - {file = "aws-cdk-lib-2.83.0.tar.gz", hash = "sha256:014fd6fec8c60e0b1009bd871d39339b55deed93912491bbfdd5f728a93759c6"}, - {file = "aws_cdk_lib-2.83.0-py3-none-any.whl", hash = "sha256:1dedbbbfbb22a3282a32eb53385541a526b9e6cafd120615399c06a6d9291e28"}, + {file = "aws-cdk-lib-2.83.1.tar.gz", hash = "sha256:467913a438d866e32f799f9853c05e693baa757b64bf1905d43a9e8e2d68a288"}, + {file = "aws_cdk_lib-2.83.1-py3-none-any.whl", hash = "sha256:e1d285a4efb9f8dc33f85b31ebd6e3c13aa08b02a59cdf8b189ecabcce630caf"}, ] [package.dependencies] @@ -145,17 +145,17 @@ wrapt = "*" [[package]] name = "boto3" -version = "1.26.148" +version = "1.26.151" description = "The AWS SDK for Python" optional = false python-versions = ">= 3.7" files = [ - {file = "boto3-1.26.148-py3-none-any.whl", hash = "sha256:53328b99847e65ca60dbbd5a86550101ecf903dff36724b6a4e74876dd973bdf"}, - {file = "boto3-1.26.148.tar.gz", hash = "sha256:ed90522019c97db32ce1bfd1076864c57c3b65af40abc2349b2391bbac7e4865"}, + {file = "boto3-1.26.151-py3-none-any.whl", hash = "sha256:20b88a8145845e4923d438f5f89fdbdac5bae4011e706cd0974ac69c41f258b4"}, + {file = "boto3-1.26.151.tar.gz", hash = "sha256:81bff32c96a6b4b203beb63826214d8cf24ca1a86e81d43bbb688a21c5d79e2a"}, ] [package.dependencies] -botocore = ">=1.29.148,<1.30.0" +botocore = ">=1.29.151,<1.30.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.6.0,<0.7.0" @@ -164,13 +164,13 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.29.148" +version = "1.29.151" description = "Low-level, data-driven core of boto 3." optional = false python-versions = ">= 3.7" files = [ - {file = "botocore-1.29.148-py3-none-any.whl", hash = "sha256:71c512fbd42e0ef171388b53bf82f9cb9e66283467156917b69717daeb05eba6"}, - {file = "botocore-1.29.148.tar.gz", hash = "sha256:36bccc4e094faf1bfbda2241eb1c71e72a63f3c12b2adfc4c3cbd02349bc416b"}, + {file = "botocore-1.29.151-py3-none-any.whl", hash = "sha256:0790bf5d25ad6f2db3450797251a78fbcb7b72cdeeb2fd0b82c2668a41d9f41c"}, + {file = "botocore-1.29.151.tar.gz", hash = "sha256:fdaaa34ea5f09666f17d24d2f4179f7ec81dd6f831ef6b785d4552f919291cab"}, ] [package.dependencies] @@ -209,19 +209,19 @@ exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} [[package]] name = "cdk-nag" -version = "2.27.30" +version = "2.27.33" description = "Check CDK v2 applications for best practices using a combination on available rule packs." optional = false python-versions = "~=3.7" files = [ - {file = "cdk-nag-2.27.30.tar.gz", hash = "sha256:3a178840d098e3c233165ce61f016f836cf9d628478cb4944b4ad6d55bb02502"}, - {file = "cdk_nag-2.27.30-py3-none-any.whl", hash = "sha256:9b04a7476bf33c341a8be176a5fac97d357060cea5bf108c53a82d3415a03aae"}, + {file = "cdk-nag-2.27.33.tar.gz", hash = "sha256:cf023e69dfd827e0bbcedc06934a6bcfffcd3b5c997e67efa366ff4920a59829"}, + {file = "cdk_nag-2.27.33-py3-none-any.whl", hash = "sha256:2304e00788cfdbc8f0d34be8f6102c3bd99754eadf3f9d4a048eb4dee1b283d9"}, ] [package.dependencies] aws-cdk-lib = ">=2.78.0,<3.0.0" constructs = ">=10.0.5,<11.0.0" -jsii = ">=1.82.0,<2.0.0" +jsii = ">=1.83.0,<2.0.0" publication = ">=0.0.3" typeguard = ">=2.13.3,<2.14.0" @@ -358,17 +358,17 @@ files = [ [[package]] name = "constructs" -version = "10.2.45" +version = "10.2.48" description = "A programming model for software-defined state" optional = false python-versions = "~=3.7" files = [ - {file = "constructs-10.2.45-py3-none-any.whl", hash = "sha256:a70c96d7a64a7c61fa19d760dde7eea5ff1eb1897d9a4229542b2941c6f68a3b"}, - {file = "constructs-10.2.45.tar.gz", hash = "sha256:88bdf7172962f57990eea0978e70ac0c39fe32060885638a782d00c71a8327a1"}, + {file = "constructs-10.2.48-py3-none-any.whl", hash = "sha256:dbea53ffcc7159378727b791716e2f44bd67b647b5bf106d56a5beb60374811a"}, + {file = "constructs-10.2.48.tar.gz", hash = "sha256:f47f5f21083a823b304a8bd77fabc48c9c01c0db416e4ef369019d96fcfa7e2e"}, ] [package.dependencies] -jsii = ">=1.82.0,<2.0.0" +jsii = ">=1.83.0,<2.0.0" publication = ">=0.0.3" typeguard = ">=2.13.3,<2.14.0" @@ -523,18 +523,18 @@ devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benc [[package]] name = "filelock" -version = "3.12.0" +version = "3.12.1" description = "A platform independent file lock." optional = false python-versions = ">=3.7" files = [ - {file = "filelock-3.12.0-py3-none-any.whl", hash = "sha256:ad98852315c2ab702aeb628412cbf7e95b7ce8c3bf9565670b4eaecf1db370a9"}, - {file = "filelock-3.12.0.tar.gz", hash = "sha256:fc03ae43288c013d2ea83c8597001b1129db351aad9c57fe2409327916b8e718"}, + {file = "filelock-3.12.1-py3-none-any.whl", hash = "sha256:42f1e4ff2b497311213d61ad7aac5fed9050608e5309573f101eefa94143134a"}, + {file = "filelock-3.12.1.tar.gz", hash = "sha256:82b1f7da46f0ae42abf1bc78e548667f484ac59d2bcec38c713cee7e2eb51e83"}, ] [package.extras] -docs = ["furo (>=2023.3.27)", "sphinx (>=6.1.3)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.2.3)", "diff-cover (>=7.5)", "pytest (>=7.3.1)", "pytest-cov (>=4)", "pytest-mock (>=3.10)", "pytest-timeout (>=2.1)"] +docs = ["furo (>=2023.5.20)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)", "pytest-timeout (>=2.1)"] [[package]] name = "flake8" @@ -1005,18 +1005,18 @@ files = [ [[package]] name = "platformdirs" -version = "3.5.1" +version = "3.5.3" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." optional = false python-versions = ">=3.7" files = [ - {file = "platformdirs-3.5.1-py3-none-any.whl", hash = "sha256:e2378146f1964972c03c085bb5662ae80b2b8c06226c54b2ff4aa9483e8a13a5"}, - {file = "platformdirs-3.5.1.tar.gz", hash = "sha256:412dae91f52a6f84830f39a8078cecd0e866cb72294a5c66808e74d5e88d251f"}, + {file = "platformdirs-3.5.3-py3-none-any.whl", hash = "sha256:0ade98a4895e87dc51d47151f7d2ec290365a585151d97b4d8d6312ed6132fed"}, + {file = "platformdirs-3.5.3.tar.gz", hash = "sha256:e48fabd87db8f3a7df7150a4a5ea22c546ee8bc39bc2473244730d4b56d2cc4e"}, ] [package.extras] -docs = ["furo (>=2023.3.27)", "proselint (>=0.13)", "sphinx (>=6.2.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] +docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)"] [[package]] name = "pluggy" diff --git a/service/handlers/schemas/env_vars.py b/service/handlers/schemas/env_vars.py index 4e83103e..b2d5681e 100644 --- a/service/handlers/schemas/env_vars.py +++ b/service/handlers/schemas/env_vars.py @@ -8,6 +8,10 @@ class Observability(BaseModel): LOG_LEVEL: Literal['DEBUG', 'INFO', 'ERROR', 'CRITICAL', 'WARNING', 'EXCEPTION'] +class Idempotency(BaseModel): + IDEMPOTENCY_TABLE_NAME: Annotated[str, Field(min_length=1)] + + class DynamicConfiguration(BaseModel): CONFIGURATION_APP: Annotated[str, Field(min_length=1)] CONFIGURATION_ENV: Annotated[str, Field(min_length=1)] diff --git a/service/handlers/utils/idempotency.py b/service/handlers/utils/idempotency.py index dbf81539..4b0c8ba0 100644 --- a/service/handlers/utils/idempotency.py +++ b/service/handlers/utils/idempotency.py @@ -1,8 +1,10 @@ from aws_lambda_powertools.utilities.idempotency import DynamoDBPersistenceLayer, IdempotencyConfig -IDEMPOTENCY_LAYER = DynamoDBPersistenceLayer(table_name='IdempotencyTable') +from service.handlers.schemas.env_vars import Idempotency +from service.handlers.utils.env_vars_parser import get_environment_variables + +IDEMPOTENCY_LAYER = DynamoDBPersistenceLayer(table_name=get_environment_variables(model=Idempotency).IDEMPOTENCY_TABLE_NAME) IDEMPOTENCY_CONFIG = IdempotencyConfig( - use_local_cache=True, expires_after_seconds=5 * 60, # 5 minutes event_key_jmespath='powertools_json(body).[customer_name, order_item_count]', ) diff --git a/tests/integration/conftest.py b/tests/integration/conftest.py index ac0042a5..252a68a8 100644 --- a/tests/integration/conftest.py +++ b/tests/integration/conftest.py @@ -2,7 +2,15 @@ import pytest -from cdk.my_service.constants import CONFIGURATION_NAME, ENVIRONMENT, POWER_TOOLS_LOG_LEVEL, POWERTOOLS_SERVICE_NAME, SERVICE_NAME, TABLE_NAME_OUTPUT +from cdk.my_service.constants import ( + CONFIGURATION_NAME, + ENVIRONMENT, + IDEMPOTENCY_TABLE_NAME_OUTPUT, + POWER_TOOLS_LOG_LEVEL, + POWERTOOLS_SERVICE_NAME, + SERVICE_NAME, + TABLE_NAME_OUTPUT, +) from tests.utils import get_stack_output @@ -18,6 +26,7 @@ def init(): os.environ['CONFIGURATION_MAX_AGE_MINUTES'] = '5' os.environ['AWS_DEFAULT_REGION'] = 'us-east-1' # used for appconfig mocked boto calls os.environ['TABLE_NAME'] = get_stack_output(TABLE_NAME_OUTPUT) + os.environ['IDEMPOTENCY_TABLE_NAME'] = get_stack_output(IDEMPOTENCY_TABLE_NAME_OUTPUT) @pytest.fixture(scope='module', autouse=True) From e5691dbfa7ca6c365154b23ec1ac08d82299c9ed Mon Sep 17 00:00:00 2001 From: Ran Isenberg Date: Sun, 11 Jun 2023 08:54:06 +0300 Subject: [PATCH 4/5] fix stuff --- cdk/my_service/api_construct.py | 2 +- cdk/my_service/api_db_construct.py | 2 +- docs/index.md | 1 + mkdocs.yml | 1 + tests/e2e/test_create_order.py | 7 +++++++ tests/integration/test_create_order.py | 24 ++++++++++++------------ 6 files changed, 23 insertions(+), 14 deletions(-) diff --git a/cdk/my_service/api_construct.py b/cdk/my_service/api_construct.py index 02f2b889..b562c724 100644 --- a/cdk/my_service/api_construct.py +++ b/cdk/my_service/api_construct.py @@ -20,7 +20,7 @@ def __init__(self, scope: Construct, id_: str, appconfig_app_name: str) -> None: self.common_layer = self._build_common_layer() self.rest_api = self._build_api_gw() api_resource: aws_apigateway.Resource = self.rest_api.root.add_resource('api').add_resource(constants.GW_RESOURCE) - self._add_post_lambda_integration(api_resource, self.lambda_role, self.api_db.db, appconfig_app_name) + self._add_post_lambda_integration(api_resource, self.lambda_role, self.api_db.db, appconfig_app_name, self.api_db.idempotency_db) def _build_api_gw(self) -> aws_apigateway.RestApi: rest_api: aws_apigateway.RestApi = aws_apigateway.RestApi( diff --git a/cdk/my_service/api_db_construct.py b/cdk/my_service/api_db_construct.py index 2035ecef..c09dfb42 100644 --- a/cdk/my_service/api_db_construct.py +++ b/cdk/my_service/api_db_construct.py @@ -11,7 +11,7 @@ def __init__(self, scope: Construct, id_: str) -> None: super().__init__(scope, id_) self.db: dynamodb.Table = self._build_db(id_) - self.idempotency_db: dynamodb.Table = self._build_idempotency_table() + self.idempotency_db: dynamodb.Table = self._build_idempotency_table(id_) def _build_idempotency_table(self, id_: str) -> dynamodb.Table: table_id = f'{id_}{constants.IDEMPOTENCY_TABLE_NAME}' diff --git a/docs/index.md b/docs/index.md index 387a0b5e..af426b25 100644 --- a/docs/index.md +++ b/docs/index.md @@ -37,6 +37,7 @@ This project aims to reduce cognitive load and answer these questions for you by - AWS Lambda handler uses [AWS Lambda Powertools](https://awslabs.github.io/aws-lambda-powertools-python/){:target="_blank" rel="noopener"}. - AWS Lambda handler 3 layer architecture: handler layer, logic layer and data access layer - Features flags and configuration based on AWS AppConfig +- Idempotent API - Unit, infrastructure, security, integration and E2E tests. The GitHub template project can be found at [https://github.com/ran-isenberg/aws-lambda-handler-cookbook](https://github.com/ran-isenberg/aws-lambda-handler-cookbook){:target="_blank" rel="noopener"}. diff --git a/mkdocs.yml b/mkdocs.yml index 24da3ff0..efd903eb 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -16,6 +16,7 @@ nav: - best_practices/environment_variables.md - best_practices/input_validation.md - best_practices/dynamic_configuration.md + - Idempotency: https://awslabs.github.io/aws-lambda-powertools-python/2.16.2/utilities/idempotency/" target="_blank" - CDK Best practices: https://www.ranthebuilder.cloud/post/aws-cdk-best-practices-from-the-trenches" target="_blank" - Testing Best practices: https://www.ranthebuilder.cloud/post/guide-to-serverless-lambda-testing-best-practices-part-1" target="_blank" diff --git a/tests/e2e/test_create_order.py b/tests/e2e/test_create_order.py index 3e4bfd4c..dfc31ebe 100644 --- a/tests/e2e/test_create_order.py +++ b/tests/e2e/test_create_order.py @@ -24,6 +24,13 @@ def test_handler_200_ok(api_gw_url): assert body_dict['customer_name'] == customer_name assert body_dict['order_item_count'] == 5 + # check idempotency, send same request + original_order_id = body_dict['order_id'] + response = requests.post(api_gw_url, data=body.json()) + assert response.status_code == HTTPStatus.OK + body_dict = json.loads(response.text) + assert body_dict['order_id'] == original_order_id + def test_handler_bad_request(api_gw_url): body_str = json.dumps({'order_item_count': 5}) diff --git a/tests/integration/test_create_order.py b/tests/integration/test_create_order.py index c4153c8b..1616ec1d 100644 --- a/tests/integration/test_create_order.py +++ b/tests/integration/test_create_order.py @@ -7,7 +7,6 @@ from botocore.stub import Stubber from service.dal.dynamo_dal_handler import DynamoDalHandler -from service.handlers.create_order import create_order from service.schemas.input import CreateOrderRequest from tests.utils import generate_api_gw_event, generate_context, generate_random_string @@ -45,12 +44,20 @@ def mock_exception_dynamic_configuration(mocker) -> None: mocker.patch('aws_lambda_powertools.utilities.parameters.AppConfigProvider.get', side_effect=SchemaValidationError('error')) +def call_create_order(body: Dict[str, Any]) -> Dict[str, Any]: + # important is done here since idempotency decorator requires an env. variable during import time + # conf.test sets that env. variable (table name) but it runs after imports + # this way, idempotency import runs after conftest sets the values already + from service.handlers.create_order import create_order + return create_order(body, generate_context()) + + def test_handler_200_ok(mocker, table_name: str): mock_dynamic_configuration(mocker, MOCKED_SCHEMA) customer_name = f'{generate_random_string()}-RanTheBuilder' order_item_count = 5 body = CreateOrderRequest(customer_name=customer_name, order_item_count=order_item_count) - response = create_order(generate_api_gw_event(body.dict()), generate_context()) + response = call_create_order(generate_api_gw_event(body.dict())) # assert response assert response['statusCode'] == HTTPStatus.OK body_dict = json.loads(response['body']) @@ -64,13 +71,6 @@ def test_handler_200_ok(mocker, table_name: str): assert response['Item']['customer_name'] == customer_name assert response['Item']['order_item_count'] == order_item_count - # check idempotency, send same request - original_order_id = body_dict['order_id'] - response = create_order(generate_api_gw_event(body.dict()), generate_context()) - assert response['statusCode'] == HTTPStatus.OK - body_dict = json.loads(response['body']) - assert body_dict['order_id'] == original_order_id - def test_internal_server_error(): db_handler: DynamoDalHandler = DynamoDalHandler('table') @@ -79,13 +79,13 @@ def test_internal_server_error(): stubber.add_client_error(method='put_item', service_error_code='ValidationException') stubber.activate() body = CreateOrderRequest(customer_name='RanTheBuilder', order_item_count=5) - response = create_order(generate_api_gw_event(body.dict()), generate_context()) + response = call_create_order(generate_api_gw_event(body.dict())) assert response['statusCode'] == HTTPStatus.INTERNAL_SERVER_ERROR def test_handler_bad_request(mocker): mock_dynamic_configuration(mocker, MOCKED_SCHEMA) - response = create_order(generate_api_gw_event({'order_item_count': 5}), generate_context()) + response = call_create_order(generate_api_gw_event({'order_item_count': 5})) assert response['statusCode'] == HTTPStatus.BAD_REQUEST body_dict = json.loads(response['body']) assert body_dict == {} @@ -96,7 +96,7 @@ def test_handler_failed_appconfig_fetch(mocker): customer_name = f'{generate_random_string()}-RanTheBuilder' order_item_count = 5 body = CreateOrderRequest(customer_name=customer_name, order_item_count=order_item_count) - response = create_order(generate_api_gw_event(body.dict()), generate_context()) + response = call_create_order(generate_api_gw_event(body.dict())) assert response['statusCode'] == HTTPStatus.INTERNAL_SERVER_ERROR body_dict = json.loads(response['body']) assert body_dict == {} From 8de85bdbffacc95bb478f09d2c5dd9649c00b4a9 Mon Sep 17 00:00:00 2001 From: Ran Isenberg Date: Sun, 11 Jun 2023 10:20:31 +0300 Subject: [PATCH 5/5] update docs --- docs/cdk.md | 9 +++++---- docs/media/design.png | Bin 105231 -> 69079 bytes 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/cdk.md b/docs/cdk.md index c2ed945a..be1ea8f6 100644 --- a/docs/cdk.md +++ b/docs/cdk.md @@ -44,16 +44,17 @@ All ASW Lambda function configurations are saved as constants at the `cdk.my_ser - **Lambda Function** - The Lambda handler function itself. Handler code is taken from the service `folder`. - **Lambda Role** - The role of the Lambda function. - **API GW with Lambda Integration** - API GW with a Lambda integration POST /api/orders that triggers the Lambda function. - - **AWS DynamoDB table** - stores request data. Created in its own construct: api_db_construct.py + - **AWS DynamoDB table** - stores request data. Created in the `api_db_construct.py` construct. + - **AWS DynamoDB table** - stores idempotency data. Created in the `api_db_construct.py` construct. - Construct: **cdk.my_service.configuration.configuration_construct.py** which includes: - - AWS AppConfig configuration with an environment, application, configuration and deployment strategy. You can read more about it [here.](best_practices/dynamic_configuration.md) + - AWS AppConfig configuration with an environment, application, configuration and deployment strategy. You can read more about it [here](best_practices/dynamic_configuration.md). ### **Infrastructure CDK & Security Tests** Under tests there is an `infrastructure` folder for CDK infrastructure tests. -The first test, 'test_cdk' uses CDK's testing framework which asserts that required resources exists so the application will not break anything upon deployment. +The first test, `test_cdk` uses CDK's testing framework which asserts that required resources exists so the application will not break anything upon deployment. -The security tests are based on 'cdk_nag'. It checks your cloudformation output for security best practices. It can be found in the 'service_stack.py' as part of the stack definition. It will fail the deployment when there is a security issue. +The security tests are based on `cdk_nag`. It checks your cloudformation output for security best practices. It can be found in the `service_stack.py` as part of the stack definition. It will fail the deployment when there is a security issue. For more information click [here](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/check-aws-cdk-applications-or-cloudformation-templates-for-best-practices-by-using-cdk-nag-rule-packs.html){:target="_blank" rel="noopener"}. diff --git a/docs/media/design.png b/docs/media/design.png index 5a531030b9b2db01ecc699d5121be9ab9b9c23c7..d531700e32469c866acfcd9437f67e63f1c9279e 100644 GIT binary patch literal 69079 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

BgT}@hUvw$DSZe19Z%NKYM-wPs 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≺W_2O9 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 literal 105231 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