11import logging
2- from typing import Any , Callable , Dict , Optional , Type , TypeVar , Union
2+ from typing import Any , Callable , Dict , Optional , Type , TypeVar , overload
3+
4+ from aws_lambda_powertools .utilities .parser .types import Model
35
46from ...middleware_factory import lambda_handler_decorator
57from ..typing import LambdaContext
68from .envelopes .base import Envelope
79from .exceptions import InvalidEnvelopeError , InvalidModelTypeError
8- from .types import Model
910
1011logger = logging .getLogger (__name__ )
1112
12-
1313EventParserReturnType = TypeVar ("EventParserReturnType" )
1414
1515
@@ -19,7 +19,7 @@ def event_parser(
1919 event : Dict [str , Any ],
2020 context : LambdaContext ,
2121 model : Type [Model ],
22- envelope : Optional [Union [ Envelope , Type [Envelope ] ]] = None ,
22+ envelope : Optional [Type [Envelope ]] = None ,
2323) -> EventParserReturnType :
2424 """Lambda handler decorator to parse & validate events using Pydantic models
2525
@@ -81,14 +81,22 @@ def handler(event: Order, context: LambdaContext):
8181 InvalidEnvelopeError
8282 When envelope given does not implement BaseEnvelope
8383 """
84- parsed_event = parse (event = event , model = model , envelope = envelope )
84+ parsed_event = parse (event = event , model = model , envelope = envelope ) if envelope else parse ( event = event , model = model )
8585 logger .debug (f"Calling handler { handler .__name__ } " )
8686 return handler (parsed_event , context )
8787
8888
89- def parse (
90- event : Dict [str , Any ], model : Type [Model ], envelope : Optional [Union [Envelope , Type [Envelope ]]] = None
91- ) -> Model :
89+ @overload
90+ def parse (event : Dict [str , Any ], model : Type [Model ]) -> Model :
91+ ...
92+
93+
94+ @overload
95+ def parse (event : Dict [str , Any ], model : Type [Model ], envelope : Type [Envelope ]):
96+ ...
97+
98+
99+ def parse (event : Dict [str , Any ], model : Type [Model ], envelope : Optional [Type [Envelope ]] = None ):
92100 """Standalone function to parse & validate events using Pydantic models
93101
94102 Typically used when you need fine-grained control over error handling compared to event_parser decorator.
0 commit comments