Skip to content

refactor(event_source): use standard collections for types #6479

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Apr 16, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
from __future__ import annotations

from functools import cached_property
from typing import Any, Iterator
from typing import TYPE_CHECKING, Any

from aws_lambda_powertools.utilities.data_classes.common import DictWrapper
from aws_lambda_powertools.utilities.data_classes.shared_functions import base64_decode

if TYPE_CHECKING:
from collections.abc import Iterator


class ActiveMQMessage(DictWrapper):
@property
Expand Down
5 changes: 4 additions & 1 deletion aws_lambda_powertools/utilities/data_classes/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,17 @@
import base64
import json
import warnings
from collections.abc import Mapping
from functools import cached_property
from typing import TYPE_CHECKING, Any, Callable, Iterator, Mapping, overload
from typing import TYPE_CHECKING, Any, overload

from typing_extensions import deprecated

from aws_lambda_powertools.warnings import PowertoolsDeprecationWarning

if TYPE_CHECKING:
from collections.abc import Callable, Iterator

from aws_lambda_powertools.shared.headers_serializer import BaseHeadersSerializer

from aws_lambda_powertools.utilities.data_classes.shared_functions import (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,14 @@

from enum import Enum
from functools import cached_property
from typing import Any, Iterator
from typing import TYPE_CHECKING, Any

from aws_lambda_powertools.shared.dynamodb_deserializer import TypeDeserializer
from aws_lambda_powertools.utilities.data_classes.common import DictWrapper

if TYPE_CHECKING:
from collections.abc import Iterator


class StreamViewType(Enum):
"""The type of data from the modified DynamoDB item that was captured in this stream record"""
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
from __future__ import annotations

from typing import TYPE_CHECKING, Any, Callable
from typing import TYPE_CHECKING, Any

from aws_lambda_powertools.middleware_factory import lambda_handler_decorator

if TYPE_CHECKING:
from collections.abc import Callable

from aws_lambda_powertools.utilities.data_classes.common import DictWrapper
from aws_lambda_powertools.utilities.typing import LambdaContext

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,13 @@

import base64
from functools import cached_property
from typing import Any, Iterator
from typing import TYPE_CHECKING, Any

from aws_lambda_powertools.utilities.data_classes.common import CaseInsensitiveDict, DictWrapper

if TYPE_CHECKING:
from collections.abc import Iterator


class KafkaEventRecord(DictWrapper):
@property
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,13 @@
import warnings
from dataclasses import dataclass, field
from functools import cached_property
from typing import TYPE_CHECKING, Any, Callable, ClassVar, Iterator
from typing import TYPE_CHECKING, Any, ClassVar

from aws_lambda_powertools.utilities.data_classes.common import DictWrapper

if TYPE_CHECKING:
from collections.abc import Callable, Iterator

from typing_extensions import Literal


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,16 @@
import base64
import json
import zlib
from typing import Iterator
from typing import TYPE_CHECKING

from aws_lambda_powertools.utilities.data_classes.cloud_watch_logs_event import (
CloudWatchLogsDecodedData,
)
from aws_lambda_powertools.utilities.data_classes.common import DictWrapper

if TYPE_CHECKING:
from collections.abc import Iterator


class KinesisStreamRecordPayload(DictWrapper):
@property
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import warnings
from dataclasses import dataclass, field
from typing import Any, Iterator, Literal
from typing import TYPE_CHECKING, Any, Literal
from urllib.parse import unquote_plus

from aws_lambda_powertools.utilities.data_classes.common import DictWrapper
Expand All @@ -11,6 +11,9 @@
VALID_RESULT_CODES: tuple[str, str, str] = ("Succeeded", "TemporaryFailure", "PermanentFailure")
RESULT_CODE_TYPE = Literal["Succeeded", "TemporaryFailure", "PermanentFailure"]

if TYPE_CHECKING:
from collections.abc import Iterator


@dataclass(repr=False, order=False)
class S3BatchOperationResponseRecord:
Expand Down
5 changes: 4 additions & 1 deletion aws_lambda_powertools/utilities/data_classes/s3_event.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
from __future__ import annotations

from typing import Iterator
from typing import TYPE_CHECKING
from urllib.parse import unquote_plus

from aws_lambda_powertools.utilities.data_classes.common import DictWrapper
from aws_lambda_powertools.utilities.data_classes.event_bridge_event import (
EventBridgeEvent,
)

if TYPE_CHECKING:
from collections.abc import Iterator


class S3Identity(DictWrapper):
@property
Expand Down
5 changes: 4 additions & 1 deletion aws_lambda_powertools/utilities/data_classes/ses_event.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
from __future__ import annotations

from typing import Iterator
from typing import TYPE_CHECKING

from aws_lambda_powertools.utilities.data_classes.common import DictWrapper

if TYPE_CHECKING:
from collections.abc import Iterator


class SESMailHeader(DictWrapper):
@property
Expand Down
5 changes: 4 additions & 1 deletion aws_lambda_powertools/utilities/data_classes/sns_event.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
from __future__ import annotations

from typing import Iterator
from typing import TYPE_CHECKING

from aws_lambda_powertools.utilities.data_classes.common import DictWrapper

if TYPE_CHECKING:
from collections.abc import Iterator


class SNSMessageAttribute(DictWrapper):
@property
Expand Down
7 changes: 5 additions & 2 deletions aws_lambda_powertools/utilities/data_classes/sqs_event.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
from __future__ import annotations

from functools import cached_property
from typing import Any, Dict, ItemsView, Iterator, TypeVar
from typing import TYPE_CHECKING, Any, ItemsView, Iterator, TypeVar

from aws_lambda_powertools.utilities.data_classes import S3Event
from aws_lambda_powertools.utilities.data_classes.common import DictWrapper
from aws_lambda_powertools.utilities.data_classes.sns_event import SNSMessage

if TYPE_CHECKING:
from collections.abc import Iterator


class SQSRecordAttributes(DictWrapper):
@property
Expand Down Expand Up @@ -86,7 +89,7 @@ def data_type(self) -> str:
return self["dataType"]


class SQSMessageAttributes(Dict[str, SQSMessageAttribute]):
class SQSMessageAttributes(dict[str, SQSMessageAttribute]):
def __getitem__(self, key: str) -> SQSMessageAttribute | None: # type: ignore
item = super().get(key)
return None if item is None else SQSMessageAttribute(item) # type: ignore
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

import json
import zipfile
from io import StringIO
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

import pytest

from aws_lambda_powertools.utilities.data_classes.active_mq_event import (
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

from aws_lambda_powertools.utilities.data_classes import ALBEvent
from tests.functional.utils import load_event

Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

import pytest

from aws_lambda_powertools.utilities.data_classes.api_gateway_authorizer_event import (
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

import pytest

from aws_lambda_powertools.utilities.data_classes.api_gateway_authorizer_event import (
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

import pytest

from aws_lambda_powertools.utilities.data_classes.api_gateway_authorizer_event import (
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

from aws_lambda_powertools.utilities.data_classes import (
APIGatewayProxyEvent,
APIGatewayProxyEventV2,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

import json

from aws_lambda_powertools.utilities.data_classes import APIGatewayWebSocketEvent
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

from aws_lambda_powertools.utilities.data_classes.appsync_authorizer_event import (
AppSyncAuthorizerEvent,
AppSyncAuthorizerResponse,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

import pytest

from aws_lambda_powertools.utilities.data_classes import AppSyncResolverEvent
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

import json

from aws_lambda_powertools.utilities.data_classes import AWSConfigRuleEvent
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

from aws_lambda_powertools.utilities.data_classes import BedrockAgentEvent
from tests.functional.utils import load_event

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from __future__ import annotations

import json
from typing import Dict, List

from aws_lambda_powertools.utilities.data_classes import CloudWatchAlarmEvent
from tests.functional.utils import load_event
Expand Down Expand Up @@ -36,7 +37,7 @@ def test_cloud_watch_alarm_event_single_metric():
assert parsed_event.alarm_data.configuration.alarm_actions_suppressor_extension_period is None
assert parsed_event.alarm_data.configuration.alarm_actions_suppressor_wait_period is None

assert isinstance(parsed_event.alarm_data.configuration.metrics, List)
assert isinstance(parsed_event.alarm_data.configuration.metrics, list)
# metric position 0
metric_0 = parsed_event.alarm_data.configuration.metrics[0]
raw_metric_0 = raw_event["alarmData"]["configuration"]["metrics"][0]
Expand All @@ -53,7 +54,7 @@ def test_cloud_watch_alarm_event_single_metric():
assert metric_1.metric_stat.stat == raw_metric_1["metricStat"]["stat"]
assert metric_1.metric_stat.period == raw_metric_1["metricStat"]["period"]
assert metric_1.metric_stat.unit is None
assert isinstance(metric_1.metric_stat.metric, Dict)
assert isinstance(metric_1.metric_stat.metric, dict)


def test_cloud_watch_alarm_event_composite_metric():
Expand Down Expand Up @@ -102,4 +103,4 @@ def test_cloud_watch_alarm_event_composite_metric():
parsed_event.alarm_data.configuration.alarm_actions_suppressor
== raw_event["alarmData"]["configuration"]["actionsSuppressor"]
)
assert isinstance(parsed_event.alarm_data.configuration.metrics, List)
assert isinstance(parsed_event.alarm_data.configuration.metrics, list)
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

from aws_lambda_powertools.utilities.data_classes import (
CloudWatchDashboardCustomWidgetEvent,
)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

from aws_lambda_powertools.utilities.data_classes import CloudWatchLogsEvent
from tests.functional.utils import load_event

Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

import pytest

from aws_lambda_powertools.utilities.data_classes import (
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

import pytest

from aws_lambda_powertools.utilities.data_classes import (
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

from secrets import compare_digest

from aws_lambda_powertools.utilities.data_classes.cognito_user_pool_event import (
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

from aws_lambda_powertools.utilities.data_classes.connect_contact_flow_event import (
ConnectContactFlowChannel,
ConnectContactFlowEndpointType,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

from decimal import Clamped, Context, Inexact, Overflow, Rounded, Underflow

from aws_lambda_powertools.utilities.data_classes.dynamo_db_stream_event import (
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

from aws_lambda_powertools.utilities.data_classes import EventBridgeEvent
from tests.functional.utils import load_event

Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

from datetime import datetime

from aws_lambda_powertools.utilities.data_classes.iot_registry_event import (
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

import pytest

from aws_lambda_powertools.utilities.data_classes import KafkaEvent
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

from aws_lambda_powertools.utilities.data_classes import KinesisFirehoseEvent
from tests.functional.utils import load_event

Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

from aws_lambda_powertools.utilities.data_classes import (
KinesisFirehoseDataTransformationRecord,
KinesisFirehoseDataTransformationRecordMetadata,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

import base64
import json

Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

from aws_lambda_powertools.utilities.data_classes import LambdaFunctionUrlEvent
from aws_lambda_powertools.utilities.data_classes.api_gateway_proxy_event import RequestContextV2Authorizer
from tests.functional.utils import load_event
Expand Down
Loading
Loading