1
1
import 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
3
5
4
6
from ...middleware_factory import lambda_handler_decorator
5
7
from ..typing import LambdaContext
6
8
from .envelopes .base import Envelope
7
9
from .exceptions import InvalidEnvelopeError , InvalidModelTypeError
8
- from .types import Model
9
10
10
11
logger = logging .getLogger (__name__ )
11
12
12
-
13
13
EventParserReturnType = TypeVar ("EventParserReturnType" )
14
14
15
15
@@ -19,7 +19,7 @@ def event_parser(
19
19
event : Dict [str , Any ],
20
20
context : LambdaContext ,
21
21
model : Type [Model ],
22
- envelope : Optional [Union [ Envelope , Type [Envelope ] ]] = None ,
22
+ envelope : Optional [Type [Envelope ]] = None ,
23
23
) -> EventParserReturnType :
24
24
"""Lambda handler decorator to parse & validate events using Pydantic models
25
25
@@ -81,14 +81,22 @@ def handler(event: Order, context: LambdaContext):
81
81
InvalidEnvelopeError
82
82
When envelope given does not implement BaseEnvelope
83
83
"""
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 )
85
85
logger .debug (f"Calling handler { handler .__name__ } " )
86
86
return handler (parsed_event , context )
87
87
88
88
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 ):
92
100
"""Standalone function to parse & validate events using Pydantic models
93
101
94
102
Typically used when you need fine-grained control over error handling compared to event_parser decorator.
0 commit comments