From 1499954745774fc8d0851dae5467edf6f46c58d7 Mon Sep 17 00:00:00 2001 From: Leandro Damascena Date: Wed, 16 Apr 2025 08:59:01 +0100 Subject: [PATCH 1/2] Using generics types + enabling ruff --- ruff.toml | 2 +- tests/e2e/utils/data_fetcher/traces.py | 10 ++++++---- .../required_dependencies/test_utilities_batch.py | 7 ++++--- .../_pydantic/test_openapi_with_pep563.py | 2 +- .../logger/required_dependencies/test_logger.py | 6 ++++-- .../test_metrics_cloudwatch_emf.py | 10 ++++++---- .../required_dependencies/test_metrics_provider.py | 6 ++++-- .../required_dependencies/test_sqs_event.py | 5 ++++- tests/unit/test_tracing.py | 6 ++++-- 9 files changed, 34 insertions(+), 20 deletions(-) diff --git a/ruff.toml b/ruff.toml index 2af94434185..e3a9584f4d3 100644 --- a/ruff.toml +++ b/ruff.toml @@ -98,5 +98,5 @@ runtime-evaluated-base-classes = ["pydantic.BaseModel"] # Maintenance: we're keeping EphemeralMetrics code in case of Hyrum's law so we can quickly revert it "aws_lambda_powertools/metrics/metrics.py" = ["ERA001"] "examples/*" = ["FA100", "TCH"] -"tests/*" = ["FA100", "TCH"] +"tests/*" = ["FA100"] "aws_lambda_powertools/utilities/parser/models/*" = ["FA100"] diff --git a/tests/e2e/utils/data_fetcher/traces.py b/tests/e2e/utils/data_fetcher/traces.py index d4c4dd29868..f8b364fc97c 100644 --- a/tests/e2e/utils/data_fetcher/traces.py +++ b/tests/e2e/utils/data_fetcher/traces.py @@ -1,17 +1,19 @@ import json from datetime import datetime, timedelta -from typing import Any, Dict, Generator, List, Optional +from typing import TYPE_CHECKING, Any, Dict, Generator, List, Optional import boto3 from botocore.paginate import PageIterator from mypy_boto3_xray.client import XRayClient -from mypy_boto3_xray.type_defs import TraceSummaryTypeDef from pydantic import BaseModel from retry import retry +if TYPE_CHECKING: + from mypy_boto3_xray.type_defs import TraceSummaryTypeDef + class TraceSubsegment(BaseModel): - id: str # noqa: A003 VNE003 # id is a field we can't change + id: str # noqa: A003 # id is a field we can't change name: str start_time: float end_time: float @@ -22,7 +24,7 @@ class TraceSubsegment(BaseModel): class TraceDocument(BaseModel): - id: str # noqa: A003 VNE003 # id is a field we can't change + id: str # noqa: A003 # id is a field we can't change name: str start_time: float end_time: float diff --git a/tests/functional/batch/required_dependencies/test_utilities_batch.py b/tests/functional/batch/required_dependencies/test_utilities_batch.py index 2a31c13946d..0dfee8e6e0a 100644 --- a/tests/functional/batch/required_dependencies/test_utilities_batch.py +++ b/tests/functional/batch/required_dependencies/test_utilities_batch.py @@ -18,9 +18,6 @@ process_partial_response, ) from aws_lambda_powertools.utilities.batch.exceptions import BatchProcessingError, UnexpectedBatchTypeError -from aws_lambda_powertools.utilities.data_classes.dynamo_db_stream_event import ( - DynamoDBRecord, -) from aws_lambda_powertools.utilities.data_classes.kinesis_stream_event import ( KinesisStreamRecord, ) @@ -31,6 +28,10 @@ if TYPE_CHECKING: from collections.abc import Awaitable, Callable + from aws_lambda_powertools.utilities.data_classes.dynamo_db_stream_event import ( + DynamoDBRecord, + ) + @pytest.fixture(scope="module") def sqs_event_fifo_factory() -> Callable: diff --git a/tests/functional/event_handler/_pydantic/test_openapi_with_pep563.py b/tests/functional/event_handler/_pydantic/test_openapi_with_pep563.py index 1855aef45e2..0f5fa517f0e 100644 --- a/tests/functional/event_handler/_pydantic/test_openapi_with_pep563.py +++ b/tests/functional/event_handler/_pydantic/test_openapi_with_pep563.py @@ -1,7 +1,7 @@ from __future__ import annotations from pydantic import BaseModel, Field -from typing_extensions import Annotated +from typing_extensions import Annotated # noqa: TC002 from aws_lambda_powertools.event_handler.api_gateway import APIGatewayRestResolver from aws_lambda_powertools.event_handler.openapi.models import ( diff --git a/tests/functional/logger/required_dependencies/test_logger.py b/tests/functional/logger/required_dependencies/test_logger.py index 56ec7b352cd..ec6bd4d016b 100644 --- a/tests/functional/logger/required_dependencies/test_logger.py +++ b/tests/functional/logger/required_dependencies/test_logger.py @@ -11,9 +11,8 @@ import string import sys from collections import namedtuple -from collections.abc import Callable, Iterable from datetime import datetime, timezone -from typing import Any +from typing import TYPE_CHECKING, Any import pytest @@ -27,6 +26,9 @@ from aws_lambda_powertools.shared import constants from aws_lambda_powertools.utilities.data_classes import S3Event, event_source +if TYPE_CHECKING: + from collections.abc import Callable, Iterable + @pytest.fixture def stdout(): diff --git a/tests/functional/metrics/required_dependencies/test_metrics_cloudwatch_emf.py b/tests/functional/metrics/required_dependencies/test_metrics_cloudwatch_emf.py index 46463c66307..2e8a866ac10 100644 --- a/tests/functional/metrics/required_dependencies/test_metrics_cloudwatch_emf.py +++ b/tests/functional/metrics/required_dependencies/test_metrics_cloudwatch_emf.py @@ -4,7 +4,7 @@ import json import warnings from collections import namedtuple -from typing import Any +from typing import TYPE_CHECKING, Any import pytest @@ -25,9 +25,11 @@ from aws_lambda_powertools.metrics.provider.cloudwatch_emf.constants import ( MAX_DIMENSIONS, ) -from aws_lambda_powertools.metrics.provider.cloudwatch_emf.types import ( - CloudWatchEMFOutput, -) + +if TYPE_CHECKING: + from aws_lambda_powertools.metrics.provider.cloudwatch_emf.types import ( + CloudWatchEMFOutput, + ) def serialize_metrics( diff --git a/tests/functional/metrics/required_dependencies/test_metrics_provider.py b/tests/functional/metrics/required_dependencies/test_metrics_provider.py index 73e7ded7253..274d9a7c276 100644 --- a/tests/functional/metrics/required_dependencies/test_metrics_provider.py +++ b/tests/functional/metrics/required_dependencies/test_metrics_provider.py @@ -1,14 +1,16 @@ from __future__ import annotations import json -from typing import Any +from typing import TYPE_CHECKING, Any from aws_lambda_powertools.metrics import ( SchemaValidationError, ) from aws_lambda_powertools.metrics.metrics import Metrics from aws_lambda_powertools.metrics.provider import BaseProvider -from aws_lambda_powertools.utilities.typing import LambdaContext + +if TYPE_CHECKING: + from aws_lambda_powertools.utilities.typing import LambdaContext def capture_metrics_output(capsys): diff --git a/tests/unit/data_classes/required_dependencies/test_sqs_event.py b/tests/unit/data_classes/required_dependencies/test_sqs_event.py index 0cd18bd8a90..ea6e105b64f 100644 --- a/tests/unit/data_classes/required_dependencies/test_sqs_event.py +++ b/tests/unit/data_classes/required_dependencies/test_sqs_event.py @@ -1,10 +1,13 @@ import json +from typing import TYPE_CHECKING from aws_lambda_powertools.utilities.data_classes import S3Event, SQSEvent -from aws_lambda_powertools.utilities.data_classes.sns_event import SNSMessage from aws_lambda_powertools.utilities.data_classes.sqs_event import SQSMessageAttributes from tests.functional.utils import load_event +if TYPE_CHECKING: + from aws_lambda_powertools.utilities.data_classes.sns_event import SNSMessage + def test_seq_trigger_event(): raw_event = load_event("sqsEvent.json") diff --git a/tests/unit/test_tracing.py b/tests/unit/test_tracing.py index beb0f36c0ea..359adb4adff 100644 --- a/tests/unit/test_tracing.py +++ b/tests/unit/test_tracing.py @@ -1,14 +1,16 @@ from __future__ import annotations import contextlib -from typing import NamedTuple +from typing import TYPE_CHECKING, NamedTuple from unittest import mock -from unittest.mock import MagicMock import pytest from aws_lambda_powertools import Tracer +if TYPE_CHECKING: + from unittest.mock import MagicMock + # Maintenance: This should move to Functional tests and use Fake over mocks. MODULE_PREFIX = "tests.unit.test_tracing" From ae61c6dc135cba3a4c1bffbdb11a84f6f0addfc9 Mon Sep 17 00:00:00 2001 From: Leandro Damascena Date: Wed, 16 Apr 2025 16:53:54 +0100 Subject: [PATCH 2/2] Using generics types + enabling ruff --- .../feature_flags/_boto3/test_time_based_actions.py | 6 ++++-- .../data_classes/_boto3/test_code_pipeline_job_event.py | 5 ++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/tests/functional/feature_flags/_boto3/test_time_based_actions.py b/tests/functional/feature_flags/_boto3/test_time_based_actions.py index 0e84c6ffc3f..640434f1f46 100644 --- a/tests/functional/feature_flags/_boto3/test_time_based_actions.py +++ b/tests/functional/feature_flags/_boto3/test_time_based_actions.py @@ -1,7 +1,7 @@ from __future__ import annotations import datetime -from typing import Any +from typing import TYPE_CHECKING, Any from botocore.config import Config from dateutil.tz import gettz @@ -20,7 +20,9 @@ TimeKeys, TimeValues, ) -from aws_lambda_powertools.utilities.feature_flags.types import JSONType + +if TYPE_CHECKING: + from aws_lambda_powertools.utilities.feature_flags.types import JSONType def evaluate_mocked_schema( diff --git a/tests/unit/data_classes/_boto3/test_code_pipeline_job_event.py b/tests/unit/data_classes/_boto3/test_code_pipeline_job_event.py index 9443109d6b8..bff9ac254fc 100644 --- a/tests/unit/data_classes/_boto3/test_code_pipeline_job_event.py +++ b/tests/unit/data_classes/_boto3/test_code_pipeline_job_event.py @@ -3,10 +3,10 @@ import json import zipfile from io import StringIO +from typing import TYPE_CHECKING import pytest from botocore.response import StreamingBody -from pytest_mock import MockerFixture from aws_lambda_powertools.utilities.data_classes import CodePipelineJobEvent from aws_lambda_powertools.utilities.data_classes.code_pipeline_job_event import ( @@ -14,6 +14,9 @@ ) from tests.functional.utils import load_event +if TYPE_CHECKING: + from pytest_mock import MockerFixture + def test_code_pipeline_event(): raw_event = load_event("codePipelineEvent.json")