diff --git a/tests/e2e/conftest.py b/tests/e2e/conftest.py index f59eea9a33b..24d588093f2 100644 --- a/tests/e2e/conftest.py +++ b/tests/e2e/conftest.py @@ -1,11 +1,18 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING, Any + import pytest from tests.e2e.utils.infrastructure import call_once from tests.e2e.utils.lambda_layer.powertools_layer import LocalLambdaPowertoolsLayer +if TYPE_CHECKING: + from collections.abc import Generator + @pytest.fixture(scope="session", autouse=True) -def lambda_layer_build(tmp_path_factory: pytest.TempPathFactory, worker_id: str) -> str: +def lambda_layer_build(tmp_path_factory: pytest.TempPathFactory, worker_id: str) -> Generator[Any, Any, Any]: """Build Lambda Layer once before stacks are created Parameters diff --git a/tests/e2e/data_masking/conftest.py b/tests/e2e/data_masking/conftest.py index f1892d7c0c9..d139c075be6 100644 --- a/tests/e2e/data_masking/conftest.py +++ b/tests/e2e/data_masking/conftest.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pytest from tests.e2e.data_masking.infrastructure import DataMaskingStack diff --git a/tests/e2e/data_masking/handlers/basic_handler.py b/tests/e2e/data_masking/handlers/basic_handler.py index 6f696391822..03d5fe9b400 100644 --- a/tests/e2e/data_masking/handlers/basic_handler.py +++ b/tests/e2e/data_masking/handlers/basic_handler.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from aws_lambda_powertools import Logger from aws_lambda_powertools.utilities.data_masking import DataMasking from aws_lambda_powertools.utilities.data_masking.provider.kms.aws_encryption_sdk import AWSEncryptionSDKProvider @@ -17,7 +19,4 @@ def lambda_handler(event, context): data_masker = DataMasking(provider=AWSEncryptionSDKProvider(keys=[kms_key])) value = [1, 2, "string", 4.5] encrypted_data = data_masker.encrypt(value) - response = {} - response["encrypted_data"] = encrypted_data - - return response + return {"encrypted_data": encrypted_data} diff --git a/tests/e2e/data_masking/infrastructure.py b/tests/e2e/data_masking/infrastructure.py index ee18b272450..90d06bbf9be 100644 --- a/tests/e2e/data_masking/infrastructure.py +++ b/tests/e2e/data_masking/infrastructure.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import aws_cdk.aws_kms as kms from aws_cdk import CfnOutput, Duration from aws_cdk import aws_iam as iam diff --git a/tests/e2e/data_masking/test_e2e_data_masking.py b/tests/e2e/data_masking/test_e2e_data_masking.py index 3ee2400b5cc..2b121b1890b 100644 --- a/tests/e2e/data_masking/test_e2e_data_masking.py +++ b/tests/e2e/data_masking/test_e2e_data_masking.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import json from uuid import uuid4 diff --git a/tests/e2e/event_handler/conftest.py b/tests/e2e/event_handler/conftest.py index 664c870e1de..921f01e46f7 100644 --- a/tests/e2e/event_handler/conftest.py +++ b/tests/e2e/event_handler/conftest.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pytest from tests.e2e.event_handler.infrastructure import EventHandlerStack diff --git a/tests/e2e/event_handler/handlers/alb_handler.py b/tests/e2e/event_handler/handlers/alb_handler.py index ef1af1792ac..beae4f19610 100644 --- a/tests/e2e/event_handler/handlers/alb_handler.py +++ b/tests/e2e/event_handler/handlers/alb_handler.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from aws_lambda_powertools.event_handler import ( ALBResolver, CORSConfig, diff --git a/tests/e2e/event_handler/handlers/alb_handler_with_body_none.py b/tests/e2e/event_handler/handlers/alb_handler_with_body_none.py index ec72bfbd5f7..54789b3ede3 100644 --- a/tests/e2e/event_handler/handlers/alb_handler_with_body_none.py +++ b/tests/e2e/event_handler/handlers/alb_handler_with_body_none.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from aws_lambda_powertools.event_handler import ( ALBResolver, Response, diff --git a/tests/e2e/event_handler/handlers/api_gateway_http_handler.py b/tests/e2e/event_handler/handlers/api_gateway_http_handler.py index 876d78ef67b..10699433d5b 100644 --- a/tests/e2e/event_handler/handlers/api_gateway_http_handler.py +++ b/tests/e2e/event_handler/handlers/api_gateway_http_handler.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from aws_lambda_powertools.event_handler import ( APIGatewayHttpResolver, CORSConfig, diff --git a/tests/e2e/event_handler/handlers/api_gateway_rest_handler.py b/tests/e2e/event_handler/handlers/api_gateway_rest_handler.py index d09bf6b82c9..4ae4dc28a97 100644 --- a/tests/e2e/event_handler/handlers/api_gateway_rest_handler.py +++ b/tests/e2e/event_handler/handlers/api_gateway_rest_handler.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from aws_lambda_powertools.event_handler import ( APIGatewayRestResolver, CORSConfig, diff --git a/tests/e2e/event_handler/handlers/lambda_function_url_handler.py b/tests/e2e/event_handler/handlers/lambda_function_url_handler.py index e47035a971d..61b98256664 100644 --- a/tests/e2e/event_handler/handlers/lambda_function_url_handler.py +++ b/tests/e2e/event_handler/handlers/lambda_function_url_handler.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from aws_lambda_powertools.event_handler import ( CORSConfig, LambdaFunctionUrlResolver, diff --git a/tests/e2e/event_handler/handlers/openapi_handler.py b/tests/e2e/event_handler/handlers/openapi_handler.py index 13cfb69f016..04fcd39efe7 100644 --- a/tests/e2e/event_handler/handlers/openapi_handler.py +++ b/tests/e2e/event_handler/handlers/openapi_handler.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from aws_lambda_powertools.event_handler import ( APIGatewayRestResolver, ) diff --git a/tests/e2e/event_handler/infrastructure.py b/tests/e2e/event_handler/infrastructure.py index 142034e89b2..67d370d2340 100644 --- a/tests/e2e/event_handler/infrastructure.py +++ b/tests/e2e/event_handler/infrastructure.py @@ -1,4 +1,4 @@ -from typing import Dict, List, Optional +from __future__ import annotations from aws_cdk import CfnOutput, Duration from aws_cdk import aws_apigateway as apigwv1 @@ -28,7 +28,7 @@ def create_resources(self): self._create_api_gateway_http(function=functions["ApiGatewayHttpHandler"]) self._create_lambda_function_url(function=functions["LambdaFunctionUrlHandler"]) - def _create_alb(self, function: List[Function]): + def _create_alb(self, function: list[Function]): vpc = ec2.Vpc.from_lookup( self.stack, "VPC", @@ -58,7 +58,7 @@ def _create_alb_listener( name: str, port: int, function: Function, - attributes: Optional[Dict[str, str]] = None, + attributes: dict[str, str] | None = None, ): listener = alb.add_listener(name, port=port, protocol=elbv2.ApplicationProtocol.HTTP) target = listener.add_targets(f"ALB{name}Target", targets=[targets.LambdaTarget(function)]) @@ -82,7 +82,7 @@ def _create_api_gateway_http(self, function: Function): CfnOutput(self.stack, "APIGatewayHTTPUrl", value=(apigw.url or "")) - def _create_api_gateway_rest(self, function: List[Function]): + def _create_api_gateway_rest(self, function: list[Function]): apigw = apigwv1.RestApi( self.stack, "APIGatewayRest", diff --git a/tests/e2e/event_handler/test_cors.py b/tests/e2e/event_handler/test_cors.py index 921a227e944..fa1e6b1514f 100644 --- a/tests/e2e/event_handler/test_cors.py +++ b/tests/e2e/event_handler/test_cors.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pytest from requests import Request diff --git a/tests/e2e/event_handler/test_header_serializer.py b/tests/e2e/event_handler/test_header_serializer.py index 6eb9c6d0fd7..5ced15677cf 100644 --- a/tests/e2e/event_handler/test_header_serializer.py +++ b/tests/e2e/event_handler/test_header_serializer.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from uuid import uuid4 import pytest diff --git a/tests/e2e/event_handler/test_openapi.py b/tests/e2e/event_handler/test_openapi.py index 3a8d6b3c008..3a91f804d31 100644 --- a/tests/e2e/event_handler/test_openapi.py +++ b/tests/e2e/event_handler/test_openapi.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pytest from requests import Request diff --git a/tests/e2e/event_handler/test_paths_ending_with_slash.py b/tests/e2e/event_handler/test_paths_ending_with_slash.py index efbc02cf1ac..7d2ae1192b9 100644 --- a/tests/e2e/event_handler/test_paths_ending_with_slash.py +++ b/tests/e2e/event_handler/test_paths_ending_with_slash.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pytest from requests import HTTPError, Request diff --git a/tests/e2e/event_handler/test_response_code.py b/tests/e2e/event_handler/test_response_code.py index 46bf8bcf183..b226c8d8296 100644 --- a/tests/e2e/event_handler/test_response_code.py +++ b/tests/e2e/event_handler/test_response_code.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pytest from requests import Request diff --git a/tests/e2e/event_handler_appsync/conftest.py b/tests/e2e/event_handler_appsync/conftest.py index 1f6d8c406de..7b42e529d23 100644 --- a/tests/e2e/event_handler_appsync/conftest.py +++ b/tests/e2e/event_handler_appsync/conftest.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pytest from tests.e2e.event_handler_appsync.infrastructure import EventHandlerAppSyncStack diff --git a/tests/e2e/event_handler_appsync/handlers/appsync_resolver_handler.py b/tests/e2e/event_handler_appsync/handlers/appsync_resolver_handler.py index 594290f478d..71e5c887233 100644 --- a/tests/e2e/event_handler_appsync/handlers/appsync_resolver_handler.py +++ b/tests/e2e/event_handler_appsync/handlers/appsync_resolver_handler.py @@ -1,10 +1,14 @@ -from typing import List, Optional +from __future__ import annotations + +from typing import TYPE_CHECKING from pydantic import BaseModel from aws_lambda_powertools.event_handler import AppSyncResolver -from aws_lambda_powertools.utilities.data_classes import AppSyncResolverEvent -from aws_lambda_powertools.utilities.typing import LambdaContext + +if TYPE_CHECKING: + from aws_lambda_powertools.utilities.data_classes import AppSyncResolverEvent + from aws_lambda_powertools.utilities.typing import LambdaContext app = AppSyncResolver() @@ -84,29 +88,29 @@ def get_post(post_id: str = "") -> dict: @app.resolver(type_name="Query", field_name="allPosts") -def all_posts() -> List[dict]: +def all_posts() -> list[dict]: return list(posts.values()) # PROCESSING BATCH WITHOUT AGGREGATION @app.batch_resolver(type_name="Post", field_name="relatedPosts", aggregate=False) -def related_posts(event: AppSyncResolverEvent) -> Optional[list]: +def related_posts(event: AppSyncResolverEvent) -> list | None: return posts_related[event.source["post_id"]] if event.source else None @app.async_batch_resolver(type_name="Post", field_name="relatedPostsAsync", aggregate=False) -async def related_posts_async(event: AppSyncResolverEvent) -> Optional[list]: +async def related_posts_async(event: AppSyncResolverEvent) -> list | None: return posts_related[event.source["post_id"]] if event.source else None # PROCESSING BATCH WITH AGGREGATION @app.batch_resolver(type_name="Post", field_name="relatedPostsAggregate") -def related_posts_aggregate(event: List[AppSyncResolverEvent]) -> Optional[list]: +def related_posts_aggregate(event: list[AppSyncResolverEvent]) -> list | None: return [posts_related[record.source.get("post_id")] for record in event] @app.async_batch_resolver(type_name="Post", field_name="relatedPostsAsyncAggregate") -async def related_posts_async_aggregate(event: List[AppSyncResolverEvent]) -> Optional[list]: +async def related_posts_async_aggregate(event: list[AppSyncResolverEvent]) -> list | None: return [posts_related[record.source.get("post_id")] for record in event] diff --git a/tests/e2e/event_handler_appsync/infrastructure.py b/tests/e2e/event_handler_appsync/infrastructure.py index 1a07270572a..b84d460d6a7 100644 --- a/tests/e2e/event_handler_appsync/infrastructure.py +++ b/tests/e2e/event_handler_appsync/infrastructure.py @@ -1,12 +1,17 @@ +from __future__ import annotations + from pathlib import Path +from typing import TYPE_CHECKING from aws_cdk import CfnOutput, Duration, Expiration from aws_cdk import aws_appsync_alpha as appsync -from aws_cdk.aws_lambda import Function from tests.e2e.utils.data_builder import build_random_value from tests.e2e.utils.infrastructure import BaseInfrastructure +if TYPE_CHECKING: + from aws_cdk.aws_lambda import Function + class EventHandlerAppSyncStack(BaseInfrastructure): def create_resources(self): diff --git a/tests/e2e/event_handler_appsync/test_appsync_resolvers.py b/tests/e2e/event_handler_appsync/test_appsync_resolvers.py index 35549a1fdef..b0d90b0d63b 100644 --- a/tests/e2e/event_handler_appsync/test_appsync_resolvers.py +++ b/tests/e2e/event_handler_appsync/test_appsync_resolvers.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import json import pytest diff --git a/tests/e2e/idempotency/conftest.py b/tests/e2e/idempotency/conftest.py index 61578d904a6..c23f33958a7 100644 --- a/tests/e2e/idempotency/conftest.py +++ b/tests/e2e/idempotency/conftest.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pytest from tests.e2e.idempotency.infrastructure import IdempotencyDynamoDBStack diff --git a/tests/e2e/idempotency/handlers/function_thread_safety_handler.py b/tests/e2e/idempotency/handlers/function_thread_safety_handler.py index a4644aa61c3..23078adceec 100644 --- a/tests/e2e/idempotency/handlers/function_thread_safety_handler.py +++ b/tests/e2e/idempotency/handlers/function_thread_safety_handler.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import os import time from concurrent.futures import ThreadPoolExecutor, as_completed diff --git a/tests/e2e/idempotency/handlers/optional_idempotency_key_handler.py b/tests/e2e/idempotency/handlers/optional_idempotency_key_handler.py index f1b7052041f..fcfada152c4 100644 --- a/tests/e2e/idempotency/handlers/optional_idempotency_key_handler.py +++ b/tests/e2e/idempotency/handlers/optional_idempotency_key_handler.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import os import uuid diff --git a/tests/e2e/idempotency/handlers/parallel_execution_handler.py b/tests/e2e/idempotency/handlers/parallel_execution_handler.py index cd66be0cd1d..fa63ad04ec3 100644 --- a/tests/e2e/idempotency/handlers/parallel_execution_handler.py +++ b/tests/e2e/idempotency/handlers/parallel_execution_handler.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import os import time diff --git a/tests/e2e/idempotency/handlers/payload_tampering_validation_handler.py b/tests/e2e/idempotency/handlers/payload_tampering_validation_handler.py index dacb6ce63e0..fdb50566900 100644 --- a/tests/e2e/idempotency/handlers/payload_tampering_validation_handler.py +++ b/tests/e2e/idempotency/handlers/payload_tampering_validation_handler.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import os import uuid diff --git a/tests/e2e/idempotency/handlers/response_hook.py b/tests/e2e/idempotency/handlers/response_hook.py index b56d09f25b9..843d45595cf 100644 --- a/tests/e2e/idempotency/handlers/response_hook.py +++ b/tests/e2e/idempotency/handlers/response_hook.py @@ -1,13 +1,18 @@ +from __future__ import annotations + import os +from typing import TYPE_CHECKING from aws_lambda_powertools.utilities.idempotency import ( DynamoDBPersistenceLayer, IdempotencyConfig, idempotent, ) -from aws_lambda_powertools.utilities.idempotency.persistence.datarecord import ( - DataRecord, -) + +if TYPE_CHECKING: + from aws_lambda_powertools.utilities.idempotency.persistence.datarecord import ( + DataRecord, + ) TABLE_NAME = os.getenv("IdempotencyTable", "") persistence_layer = DynamoDBPersistenceLayer(table_name=TABLE_NAME) diff --git a/tests/e2e/idempotency/handlers/ttl_cache_expiration_handler.py b/tests/e2e/idempotency/handlers/ttl_cache_expiration_handler.py index a9bf4fb2b64..ad94e6f7212 100644 --- a/tests/e2e/idempotency/handlers/ttl_cache_expiration_handler.py +++ b/tests/e2e/idempotency/handlers/ttl_cache_expiration_handler.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import os import time diff --git a/tests/e2e/idempotency/handlers/ttl_cache_timeout_handler.py b/tests/e2e/idempotency/handlers/ttl_cache_timeout_handler.py index ad1a51b495d..e93e0643f0a 100644 --- a/tests/e2e/idempotency/handlers/ttl_cache_timeout_handler.py +++ b/tests/e2e/idempotency/handlers/ttl_cache_timeout_handler.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import os import time diff --git a/tests/e2e/idempotency/infrastructure.py b/tests/e2e/idempotency/infrastructure.py index 6ca14d576ef..2696025b57a 100644 --- a/tests/e2e/idempotency/infrastructure.py +++ b/tests/e2e/idempotency/infrastructure.py @@ -1,6 +1,12 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING + from aws_cdk import CfnOutput, Duration, RemovalPolicy from aws_cdk import aws_dynamodb as dynamodb -from aws_cdk.aws_dynamodb import Table + +if TYPE_CHECKING: + from aws_cdk.aws_dynamodb import Table from tests.e2e.utils.infrastructure import BaseInfrastructure diff --git a/tests/e2e/idempotency/test_idempotency_dynamodb.py b/tests/e2e/idempotency/test_idempotency_dynamodb.py index 75d774e702e..0123683f877 100644 --- a/tests/e2e/idempotency/test_idempotency_dynamodb.py +++ b/tests/e2e/idempotency/test_idempotency_dynamodb.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import json from copy import deepcopy from time import sleep diff --git a/tests/e2e/logger/conftest.py b/tests/e2e/logger/conftest.py index ad336931a93..a6e6ace94e1 100644 --- a/tests/e2e/logger/conftest.py +++ b/tests/e2e/logger/conftest.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pytest from tests.e2e.logger.infrastructure import LoggerStack diff --git a/tests/e2e/logger/handlers/basic_handler.py b/tests/e2e/logger/handlers/basic_handler.py index 0f0dd46b4aa..20471dd80b4 100644 --- a/tests/e2e/logger/handlers/basic_handler.py +++ b/tests/e2e/logger/handlers/basic_handler.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from aws_lambda_powertools import Logger logger = Logger() diff --git a/tests/e2e/logger/handlers/buffer_logs_with_flush.py b/tests/e2e/logger/handlers/buffer_logs_with_flush.py index bcf70db3291..125bb352e75 100644 --- a/tests/e2e/logger/handlers/buffer_logs_with_flush.py +++ b/tests/e2e/logger/handlers/buffer_logs_with_flush.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from aws_lambda_powertools import Logger from aws_lambda_powertools.logging.buffer import LoggerBufferConfig diff --git a/tests/e2e/logger/handlers/buffer_logs_without_flush.py b/tests/e2e/logger/handlers/buffer_logs_without_flush.py index ef606c0c474..640a987bc82 100644 --- a/tests/e2e/logger/handlers/buffer_logs_without_flush.py +++ b/tests/e2e/logger/handlers/buffer_logs_without_flush.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from aws_lambda_powertools import Logger from aws_lambda_powertools.logging.buffer import LoggerBufferConfig diff --git a/tests/e2e/logger/handlers/multiple_logger_instances.py b/tests/e2e/logger/handlers/multiple_logger_instances.py index 07feabde07f..8e9602a3194 100644 --- a/tests/e2e/logger/handlers/multiple_logger_instances.py +++ b/tests/e2e/logger/handlers/multiple_logger_instances.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from aws_lambda_powertools import Logger # Instance 1 diff --git a/tests/e2e/logger/handlers/tz_handler.py b/tests/e2e/logger/handlers/tz_handler.py index 06f6cfbf846..12add5ea6b4 100644 --- a/tests/e2e/logger/handlers/tz_handler.py +++ b/tests/e2e/logger/handlers/tz_handler.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import os import time diff --git a/tests/e2e/logger/infrastructure.py b/tests/e2e/logger/infrastructure.py index 242b3c10892..e12d695107b 100644 --- a/tests/e2e/logger/infrastructure.py +++ b/tests/e2e/logger/infrastructure.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from tests.e2e.utils.infrastructure import BaseInfrastructure diff --git a/tests/e2e/logger/test_logger.py b/tests/e2e/logger/test_logger.py index 94fa40026b5..dddef82eb25 100644 --- a/tests/e2e/logger/test_logger.py +++ b/tests/e2e/logger/test_logger.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import json import os import time diff --git a/tests/e2e/metrics/conftest.py b/tests/e2e/metrics/conftest.py index 197aaff847f..fe51288642c 100644 --- a/tests/e2e/metrics/conftest.py +++ b/tests/e2e/metrics/conftest.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pytest from tests.e2e.metrics.infrastructure import MetricsStack diff --git a/tests/e2e/metrics/handlers/basic_handler.py b/tests/e2e/metrics/handlers/basic_handler.py index ef5e079e604..178f49454e7 100644 --- a/tests/e2e/metrics/handlers/basic_handler.py +++ b/tests/e2e/metrics/handlers/basic_handler.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from aws_lambda_powertools import Metrics my_metrics = Metrics() diff --git a/tests/e2e/metrics/handlers/cold_start.py b/tests/e2e/metrics/handlers/cold_start.py index 20f2ad16f85..63c81b49fe9 100644 --- a/tests/e2e/metrics/handlers/cold_start.py +++ b/tests/e2e/metrics/handlers/cold_start.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from aws_lambda_powertools import Metrics my_metrics = Metrics() diff --git a/tests/e2e/metrics/infrastructure.py b/tests/e2e/metrics/infrastructure.py index 7cc1eb8c498..2441e220ff1 100644 --- a/tests/e2e/metrics/infrastructure.py +++ b/tests/e2e/metrics/infrastructure.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from tests.e2e.utils.infrastructure import BaseInfrastructure diff --git a/tests/e2e/metrics/test_metrics.py b/tests/e2e/metrics/test_metrics.py index 4285d011524..9dded91fafe 100644 --- a/tests/e2e/metrics/test_metrics.py +++ b/tests/e2e/metrics/test_metrics.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import json import pytest diff --git a/tests/e2e/parameters/conftest.py b/tests/e2e/parameters/conftest.py index 99146607384..7657287c9e9 100644 --- a/tests/e2e/parameters/conftest.py +++ b/tests/e2e/parameters/conftest.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pytest from tests.e2e.parameters.infrastructure import ParametersStack diff --git a/tests/e2e/parameters/infrastructure.py b/tests/e2e/parameters/infrastructure.py index 810e0f101d4..f076a2ee702 100644 --- a/tests/e2e/parameters/infrastructure.py +++ b/tests/e2e/parameters/infrastructure.py @@ -1,15 +1,19 @@ +from __future__ import annotations + import json -from typing import List +from typing import TYPE_CHECKING from aws_cdk import CfnOutput, Duration from aws_cdk import aws_appconfig as appconfig from aws_cdk import aws_iam as iam from aws_cdk import aws_ssm as ssm -from aws_cdk.aws_lambda import Function from tests.e2e.utils.data_builder import build_random_value, build_service_name from tests.e2e.utils.infrastructure import BaseInfrastructure +if TYPE_CHECKING: + from aws_cdk.aws_lambda import Function + class ParametersStack(BaseInfrastructure): def create_resources(self): @@ -125,8 +129,8 @@ def _create_app_config_freeform( ), ) - def _create_ssm_parameters(self) -> List[str]: - parameters: List[str] = [] + def _create_ssm_parameters(self) -> list[str]: + parameters: list[str] = [] for _ in range(10): param = f"/powertools/e2e/parameters/{build_random_value()}" diff --git a/tests/e2e/parameters/test_appconfig.py b/tests/e2e/parameters/test_appconfig.py index 28f50a653f4..96f821a743a 100644 --- a/tests/e2e/parameters/test_appconfig.py +++ b/tests/e2e/parameters/test_appconfig.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import json import pytest diff --git a/tests/e2e/parameters/test_ssm.py b/tests/e2e/parameters/test_ssm.py index 239813fab51..11e88028157 100644 --- a/tests/e2e/parameters/test_ssm.py +++ b/tests/e2e/parameters/test_ssm.py @@ -1,5 +1,7 @@ +from __future__ import annotations + import json -from typing import Any, Dict, List +from typing import Any import pytest @@ -12,7 +14,7 @@ def ssm_get_parameters_by_name_fn_arn(infrastructure: dict) -> str: @pytest.fixture -def parameters_list(infrastructure: dict) -> List[str]: +def parameters_list(infrastructure: dict) -> list[str]: param_list = infrastructure.get("ParametersNameList", "[]") return json.loads(param_list) @@ -24,7 +26,7 @@ def test_get_parameters_by_name( ): # GIVEN/WHEN function_response, _ = data_fetcher.get_lambda_response(lambda_arn=ssm_get_parameters_by_name_fn_arn) - parameter_values: Dict[str, Any] = json.loads(function_response["Payload"].read().decode("utf-8")) + parameter_values: dict[str, Any] = json.loads(function_response["Payload"].read().decode("utf-8")) # THEN for param in parameters_list: diff --git a/tests/e2e/parser/conftest.py b/tests/e2e/parser/conftest.py index d7ef0aa0176..6cba318fa21 100644 --- a/tests/e2e/parser/conftest.py +++ b/tests/e2e/parser/conftest.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pytest from tests.e2e.parser.infrastructure import ParserStack diff --git a/tests/e2e/parser/handlers/handler_with_basic_model.py b/tests/e2e/parser/handlers/handler_with_basic_model.py index 7b0d89dda53..c35946ee820 100644 --- a/tests/e2e/parser/handlers/handler_with_basic_model.py +++ b/tests/e2e/parser/handlers/handler_with_basic_model.py @@ -1,7 +1,13 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING + from pydantic import BaseModel from aws_lambda_powertools.utilities.parser import event_parser -from aws_lambda_powertools.utilities.typing import LambdaContext + +if TYPE_CHECKING: + from aws_lambda_powertools.utilities.typing import LambdaContext class BasicModel(BaseModel): @@ -9,6 +15,6 @@ class BasicModel(BaseModel): version: str -@event_parser +@event_parser(model=BasicModel) def lambda_handler(event: BasicModel, context: LambdaContext): return {"product": event.product} diff --git a/tests/e2e/parser/handlers/handler_with_dataclass.py b/tests/e2e/parser/handlers/handler_with_dataclass.py index 7f465fe79ec..b9eed24a163 100644 --- a/tests/e2e/parser/handlers/handler_with_dataclass.py +++ b/tests/e2e/parser/handlers/handler_with_dataclass.py @@ -1,7 +1,12 @@ +from __future__ import annotations + from dataclasses import dataclass +from typing import TYPE_CHECKING from aws_lambda_powertools.utilities.parser import event_parser -from aws_lambda_powertools.utilities.typing import LambdaContext + +if TYPE_CHECKING: + from aws_lambda_powertools.utilities.typing import LambdaContext @dataclass @@ -10,6 +15,6 @@ class BasicDataclass: version: str -@event_parser +@event_parser(model=BasicDataclass) def lambda_handler(event: BasicDataclass, context: LambdaContext): return {"product": event.product} diff --git a/tests/e2e/parser/handlers/handler_with_model_type_class.py b/tests/e2e/parser/handlers/handler_with_model_type_class.py index 7e635dee13a..dfa81d9c137 100644 --- a/tests/e2e/parser/handlers/handler_with_model_type_class.py +++ b/tests/e2e/parser/handlers/handler_with_model_type_class.py @@ -1,10 +1,14 @@ +from __future__ import annotations + import json -from typing import Any, Dict, Type, Union +from typing import TYPE_CHECKING, Any, Dict, Type, Union from pydantic import BaseModel from aws_lambda_powertools.utilities.parser import parse -from aws_lambda_powertools.utilities.typing import LambdaContext + +if TYPE_CHECKING: + from aws_lambda_powertools.utilities.typing import LambdaContext AnyInheritedModel = Union[Type[BaseModel], BaseModel] RawDictOrModel = Union[Dict[str, Any], AnyInheritedModel] diff --git a/tests/e2e/parser/handlers/handler_with_union_tag.py b/tests/e2e/parser/handlers/handler_with_union_tag.py index e2013251d8f..af43f2fef42 100644 --- a/tests/e2e/parser/handlers/handler_with_union_tag.py +++ b/tests/e2e/parser/handlers/handler_with_union_tag.py @@ -1,10 +1,14 @@ -from typing import Literal, Union +from __future__ import annotations + +from typing import TYPE_CHECKING, Literal, Union from pydantic import BaseModel, Field from typing_extensions import Annotated from aws_lambda_powertools.utilities.parser import event_parser -from aws_lambda_powertools.utilities.typing import LambdaContext + +if TYPE_CHECKING: + from aws_lambda_powertools.utilities.typing import LambdaContext class SuccessCallback(BaseModel): @@ -26,6 +30,6 @@ class PartialFailureCallback(BaseModel): OrderCallback = Annotated[Union[SuccessCallback, ErrorCallback, PartialFailureCallback], Field(discriminator="status")] -@event_parser +@event_parser(model=OrderCallback) def lambda_handler(event: OrderCallback, context: LambdaContext): return {"error_msg": event.error_msg} diff --git a/tests/e2e/parser/infrastructure.py b/tests/e2e/parser/infrastructure.py index 5d66905e7c7..5bc324f98bb 100644 --- a/tests/e2e/parser/infrastructure.py +++ b/tests/e2e/parser/infrastructure.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from tests.e2e.utils.infrastructure import BaseInfrastructure diff --git a/tests/e2e/parser/test_parser.py b/tests/e2e/parser/test_parser.py index aa52889aeab..fe1f6123b03 100644 --- a/tests/e2e/parser/test_parser.py +++ b/tests/e2e/parser/test_parser.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import json import pytest diff --git a/tests/e2e/streaming/conftest.py b/tests/e2e/streaming/conftest.py index 94f7f212af0..35d6ad0d6b8 100644 --- a/tests/e2e/streaming/conftest.py +++ b/tests/e2e/streaming/conftest.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pytest from tests.e2e.streaming.infrastructure import StreamingStack diff --git a/tests/e2e/streaming/handlers/s3_object_handler.py b/tests/e2e/streaming/handlers/s3_object_handler.py index 3c47f4ab3b7..42781db0d7e 100644 --- a/tests/e2e/streaming/handlers/s3_object_handler.py +++ b/tests/e2e/streaming/handlers/s3_object_handler.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import zipfile import botocore.exceptions diff --git a/tests/e2e/streaming/infrastructure.py b/tests/e2e/streaming/infrastructure.py index 31152c69535..927a92973c3 100644 --- a/tests/e2e/streaming/infrastructure.py +++ b/tests/e2e/streaming/infrastructure.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from pathlib import Path from aws_cdk import CfnOutput, Duration, RemovalPolicy diff --git a/tests/e2e/streaming/test_s3_object.py b/tests/e2e/streaming/test_s3_object.py index 4a16c58b2b6..3ea50105a2b 100644 --- a/tests/e2e/streaming/test_s3_object.py +++ b/tests/e2e/streaming/test_s3_object.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import json import boto3 diff --git a/tests/e2e/tracer/conftest.py b/tests/e2e/tracer/conftest.py index d3728ab91ba..9381ccff35f 100644 --- a/tests/e2e/tracer/conftest.py +++ b/tests/e2e/tracer/conftest.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import pytest from tests.e2e.tracer.infrastructure import TracerStack diff --git a/tests/e2e/tracer/handlers/async_capture.py b/tests/e2e/tracer/handlers/async_capture.py index 814e0b92e02..4233eb10d74 100644 --- a/tests/e2e/tracer/handlers/async_capture.py +++ b/tests/e2e/tracer/handlers/async_capture.py @@ -1,8 +1,13 @@ +from __future__ import annotations + import asyncio +from typing import TYPE_CHECKING from uuid import uuid4 from aws_lambda_powertools import Tracer -from aws_lambda_powertools.utilities.typing import LambdaContext + +if TYPE_CHECKING: + from aws_lambda_powertools.utilities.typing import LambdaContext tracer = Tracer() diff --git a/tests/e2e/tracer/handlers/basic_handler.py b/tests/e2e/tracer/handlers/basic_handler.py index 89a6b062423..85aa2a58460 100644 --- a/tests/e2e/tracer/handlers/basic_handler.py +++ b/tests/e2e/tracer/handlers/basic_handler.py @@ -1,7 +1,12 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING from uuid import uuid4 from aws_lambda_powertools import Tracer -from aws_lambda_powertools.utilities.typing import LambdaContext + +if TYPE_CHECKING: + from aws_lambda_powertools.utilities.typing import LambdaContext tracer = Tracer() diff --git a/tests/e2e/tracer/handlers/same_function_name.py b/tests/e2e/tracer/handlers/same_function_name.py index 240e3329bc8..6f37af9eacd 100644 --- a/tests/e2e/tracer/handlers/same_function_name.py +++ b/tests/e2e/tracer/handlers/same_function_name.py @@ -1,8 +1,13 @@ +from __future__ import annotations + from abc import ABC, abstractmethod +from typing import TYPE_CHECKING from uuid import uuid4 from aws_lambda_powertools import Tracer -from aws_lambda_powertools.utilities.typing import LambdaContext + +if TYPE_CHECKING: + from aws_lambda_powertools.utilities.typing import LambdaContext tracer = Tracer() diff --git a/tests/e2e/tracer/infrastructure.py b/tests/e2e/tracer/infrastructure.py index 8562359acf0..218481c4bc3 100644 --- a/tests/e2e/tracer/infrastructure.py +++ b/tests/e2e/tracer/infrastructure.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from tests.e2e.utils.infrastructure import BaseInfrastructure diff --git a/tests/e2e/tracer/test_tracer.py b/tests/e2e/tracer/test_tracer.py index 5dfe68ee08c..07b7cacf6d2 100644 --- a/tests/e2e/tracer/test_tracer.py +++ b/tests/e2e/tracer/test_tracer.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import json import pytest diff --git a/tests/e2e/utils/auth.py b/tests/e2e/utils/auth.py index 124a2e9a13b..12a291b98d2 100644 --- a/tests/e2e/utils/auth.py +++ b/tests/e2e/utils/auth.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from urllib.parse import urlparse import boto3 diff --git a/tests/e2e/utils/base.py b/tests/e2e/utils/base.py index 2a6e6032e52..f9789a4c78b 100644 --- a/tests/e2e/utils/base.py +++ b/tests/e2e/utils/base.py @@ -1,14 +1,15 @@ +from __future__ import annotations + from abc import ABC, abstractmethod -from typing import Dict, Optional class InfrastructureProvider(ABC): @abstractmethod - def create_lambda_functions(self, function_props: Optional[Dict] = None) -> Dict: + def create_lambda_functions(self, function_props: dict | None = None) -> dict: pass @abstractmethod - def deploy(self) -> Dict[str, str]: + def deploy(self) -> dict[str, str]: pass @abstractmethod diff --git a/tests/e2e/utils/constants.py b/tests/e2e/utils/constants.py index 445c9f00113..9978ca2413f 100644 --- a/tests/e2e/utils/constants.py +++ b/tests/e2e/utils/constants.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import sys from aws_lambda_powertools import PACKAGE_PATH diff --git a/tests/e2e/utils/data_builder/__init__.py b/tests/e2e/utils/data_builder/__init__.py index 72c216faa76..3ef1ce262db 100644 --- a/tests/e2e/utils/data_builder/__init__.py +++ b/tests/e2e/utils/data_builder/__init__.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from tests.e2e.utils.data_builder.common import build_random_value, build_service_name from tests.e2e.utils.data_builder.metrics import ( build_add_dimensions_input, diff --git a/tests/e2e/utils/data_builder/common.py b/tests/e2e/utils/data_builder/common.py index f28778ffed3..18c4e7707c5 100644 --- a/tests/e2e/utils/data_builder/common.py +++ b/tests/e2e/utils/data_builder/common.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import secrets diff --git a/tests/e2e/utils/data_builder/metrics.py b/tests/e2e/utils/data_builder/metrics.py index 55d728c3b31..7eaecd8dbfd 100644 --- a/tests/e2e/utils/data_builder/metrics.py +++ b/tests/e2e/utils/data_builder/metrics.py @@ -1,18 +1,21 @@ -from typing import Dict, List, Optional +from __future__ import annotations -from mypy_boto3_cloudwatch.type_defs import DimensionTypeDef, MetricDataQueryTypeDef +from typing import TYPE_CHECKING from aws_lambda_powertools.metrics import MetricUnit from tests.e2e.utils.data_builder.common import build_random_value +if TYPE_CHECKING: + from mypy_boto3_cloudwatch.type_defs import DimensionTypeDef, MetricDataQueryTypeDef + def build_metric_query_data( namespace: str, metric_name: str, period: int = 60, stat: str = "Sum", - dimensions: Optional[List[DimensionTypeDef]] = None, -) -> List[MetricDataQueryTypeDef]: + dimensions: list[DimensionTypeDef] | None = None, +) -> list[MetricDataQueryTypeDef]: """Create input for CloudWatch GetMetricData API call Parameters @@ -34,7 +37,7 @@ def build_metric_query_data( _description_ """ dimensions = dimensions or [] - data_query: List[MetricDataQueryTypeDef] = [ + data_query: list[MetricDataQueryTypeDef] = [ { "Id": metric_name.lower(), "MetricStat": { @@ -52,7 +55,7 @@ def build_metric_query_data( return data_query -def build_add_metric_input(metric_name: str, value: float, unit: str = MetricUnit.Count.value) -> Dict: +def build_add_metric_input(metric_name: str, value: float, unit: str = MetricUnit.Count.value) -> dict: """Create a metric input to be used with Metrics.add_metric() Parameters @@ -77,7 +80,7 @@ def build_multiple_add_metric_input( value: float, unit: str = MetricUnit.Count.value, quantity: int = 1, -) -> List[Dict]: +) -> list[dict]: """Create list of metrics input to be used with Metrics.add_metric() Parameters @@ -99,7 +102,7 @@ def build_multiple_add_metric_input( return [{"name": metric_name, "unit": unit, "value": value} for _ in range(quantity)] -def build_add_dimensions_input(**dimensions) -> List[DimensionTypeDef]: +def build_add_dimensions_input(**dimensions) -> list[DimensionTypeDef]: """Create dimensions input to be used with either get_metrics or Metrics.add_dimension() Parameters diff --git a/tests/e2e/utils/data_builder/traces.py b/tests/e2e/utils/data_builder/traces.py index e6356582a30..e123640292e 100644 --- a/tests/e2e/utils/data_builder/traces.py +++ b/tests/e2e/utils/data_builder/traces.py @@ -1,11 +1,13 @@ -from typing import Any, Dict, List, Optional +from __future__ import annotations + +from typing import Any def build_trace_default_query(function_name: str) -> str: return f'service(id(name: "{function_name}"))' -def build_put_annotations_input(**annotations: str) -> List[Dict]: +def build_put_annotations_input(**annotations: str) -> list[dict]: """Create trace annotations input to be used with Tracer.put_annotation() Parameters @@ -21,7 +23,7 @@ def build_put_annotations_input(**annotations: str) -> List[Dict]: return [{"key": key, "value": value} for key, value in annotations.items()] -def build_put_metadata_input(namespace: Optional[str] = None, **metadata: Any) -> List[Dict]: +def build_put_metadata_input(namespace: str | None = None, **metadata: Any) -> list[dict]: """Create trace metadata input to be used with Tracer.put_metadata() All metadata will be under `test` namespace diff --git a/tests/e2e/utils/data_fetcher/__init__.py b/tests/e2e/utils/data_fetcher/__init__.py index fdd1de5c515..66e89635bbf 100644 --- a/tests/e2e/utils/data_fetcher/__init__.py +++ b/tests/e2e/utils/data_fetcher/__init__.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from tests.e2e.utils.data_fetcher.common import get_http_response, get_lambda_response from tests.e2e.utils.data_fetcher.idempotency import get_ddb_idempotency_record from tests.e2e.utils.data_fetcher.logs import get_logs diff --git a/tests/e2e/utils/data_fetcher/idempotency.py b/tests/e2e/utils/data_fetcher/idempotency.py index 109e6735d3b..776c68f9cf8 100644 --- a/tests/e2e/utils/data_fetcher/idempotency.py +++ b/tests/e2e/utils/data_fetcher/idempotency.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import boto3 from retry import retry diff --git a/tests/e2e/utils/data_fetcher/metrics.py b/tests/e2e/utils/data_fetcher/metrics.py index 361e7bdaf5d..bf864a35497 100644 --- a/tests/e2e/utils/data_fetcher/metrics.py +++ b/tests/e2e/utils/data_fetcher/metrics.py @@ -1,25 +1,29 @@ +from __future__ import annotations + from datetime import datetime, timedelta -from typing import List, Optional +from typing import TYPE_CHECKING import boto3 -from mypy_boto3_cloudwatch.client import CloudWatchClient -from mypy_boto3_cloudwatch.type_defs import DimensionTypeDef from retry import retry from tests.e2e.utils.data_builder import build_metric_query_data +if TYPE_CHECKING: + from mypy_boto3_cloudwatch.client import CloudWatchClient + from mypy_boto3_cloudwatch.type_defs import DimensionTypeDef + @retry(ValueError, delay=2, jitter=1.5, tries=10) def get_metrics( namespace: str, start_date: datetime, metric_name: str, - dimensions: Optional[List[DimensionTypeDef]] = None, - cw_client: Optional[CloudWatchClient] = None, - end_date: Optional[datetime] = None, + dimensions: list[DimensionTypeDef] | None = None, + cw_client: CloudWatchClient | None = None, + end_date: datetime | None = None, period: int = 60, stat: str = "Sum", -) -> List[float]: +) -> list[float]: """Fetch CloudWatch Metrics It takes into account eventual consistency with up to 10 retries and 1.5s jitter. diff --git a/tests/e2e/utils/infrastructure.py b/tests/e2e/utils/infrastructure.py index 85bfd9fd41c..bc804f5f499 100644 --- a/tests/e2e/utils/infrastructure.py +++ b/tests/e2e/utils/infrastructure.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import json import logging import os @@ -5,11 +7,10 @@ import sys import textwrap from pathlib import Path -from typing import Callable, Dict, Generator, Optional +from typing import TYPE_CHECKING from uuid import uuid4 import boto3 -import pytest from aws_cdk import App, CfnOutput, Environment, RemovalPolicy, Stack, aws_logs from aws_cdk.aws_lambda import ( Architecture, @@ -29,6 +30,12 @@ ) from tests.e2e.utils.lambda_layer.powertools_layer import LocalLambdaPowertoolsLayer +if TYPE_CHECKING: + from collections.abc import Callable, Generator + + import pytest + + logger = logging.getLogger(__name__) @@ -39,7 +46,7 @@ def __init__(self) -> None: self.feature_path = Path(sys.modules[self.__class__.__module__].__file__).parent # absolute path to feature self.feature_name = self.feature_path.parts[-1].replace("_", "-") # logger, tracer, event-handler, etc. self.stack_name = f"test{PYTHON_RUNTIME_VERSION}-{self.feature_name}-{self.RANDOM_STACK_VALUE}" - self.stack_outputs: Dict[str, str] = {} + self.stack_outputs: dict[str, str] = {} # NOTE: CDK stack account and region are tokens, we need to resolve earlier self.session = boto3.session.Session() @@ -65,9 +72,9 @@ def __init__(self) -> None: def create_lambda_functions( self, - function_props: Optional[Dict] = None, + function_props: dict | None = None, architecture: Architecture = Architecture.X86_64, - ) -> Dict[str, Function]: + ) -> dict[str, Function]: """Create Lambda functions available under handlers_dir It creates CloudFormation Outputs for every function found in PascalCase. For example, @@ -130,7 +137,7 @@ def create_lambda_functions( logger.debug(f"Creating functions for handlers: {handlers}") function_settings_override = function_props or {} - output: Dict[str, Function] = {} + output: dict[str, Function] = {} for fn in handlers: fn_name = fn.stem @@ -164,7 +171,7 @@ def create_lambda_functions( return output - def deploy(self) -> Dict[str, str]: + def deploy(self) -> dict[str, str]: """Synthesize and deploy a CDK app, and return its stack outputs NOTE: It auto-generates a temporary CDK app to benefit from CDK CLI lookup features @@ -191,7 +198,7 @@ def delete(self) -> None: logger.debug(f"Deleting stack: {self.stack_name}") self.cfn.delete_stack(StackName=self.stack_name) - def _sync_stack_name(self, stack_output: Dict): + def _sync_stack_name(self, stack_output: dict): """Synchronize initial stack name with CDK final stack name When using `cdk synth` with context methods (`from_lookup`), @@ -207,7 +214,7 @@ def _sync_stack_name(self, stack_output: Dict): def _read_stack_output(self): content = Path(self._stack_outputs_file).read_text() - outputs: Dict = json.loads(content) + outputs: dict = json.loads(content) self._sync_stack_name(stack_output=outputs) # discard stack_name and get outputs as dict @@ -308,7 +315,7 @@ def call_once( task: Callable, tmp_path_factory: pytest.TempPathFactory, worker_id: str, - callback: Optional[Callable] = None, + callback: Callable | None = None, ) -> Generator[object, None, None]: """Call function and serialize results once whether CPU parallelization is enabled or not @@ -345,7 +352,7 @@ def call_once( if cache.is_file(): callable_result = json.loads(cache.read_text()) else: - callable_result: Dict = task() + callable_result: dict = task() cache.write_text(json.dumps(callable_result)) yield callable_result finally: diff --git a/tests/e2e/utils/lambda_layer/base.py b/tests/e2e/utils/lambda_layer/base.py index e38e936eefc..3a03d3bf095 100644 --- a/tests/e2e/utils/lambda_layer/base.py +++ b/tests/e2e/utils/lambda_layer/base.py @@ -1,5 +1,10 @@ +from __future__ import annotations + from abc import ABC, abstractmethod -from pathlib import Path +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from pathlib import Path class BaseLocalLambdaLayer(ABC): diff --git a/tests/e2e/utils/lambda_layer/powertools_layer.py b/tests/e2e/utils/lambda_layer/powertools_layer.py index 2ebf9dc7e3c..4fadd94ea74 100644 --- a/tests/e2e/utils/lambda_layer/powertools_layer.py +++ b/tests/e2e/utils/lambda_layer/powertools_layer.py @@ -1,6 +1,7 @@ +from __future__ import annotations + import subprocess -from pathlib import Path -from typing import List +from typing import TYPE_CHECKING from aws_cdk.aws_lambda import Architecture from dirhash import dirhash @@ -9,6 +10,9 @@ from tests.e2e.utils.constants import CDK_OUT_PATH, SOURCE_CODE_ROOT_PATH from tests.e2e.utils.lambda_layer.base import BaseLocalLambdaLayer +if TYPE_CHECKING: + from pathlib import Path + class LocalLambdaPowertoolsLayer(BaseLocalLambdaLayer): IGNORE_EXTENSIONS = ["pyc"] @@ -79,5 +83,5 @@ def _resolve_platform(self, architecture: Architecture) -> str: return self._build_platform_args(platforms) - def _build_platform_args(self, platforms: List[str]): + def _build_platform_args(self, platforms: list[str]): return " ".join([f"--platform {platform}" for platform in platforms])