11import logging
2- from typing import Any , Callable , Dict , Optional
2+ from typing import Any , Callable , Dict , Optional , Type , TypeVar
33
44from pydantic import BaseModel
55
88from .envelopes .base import BaseEnvelope
99from .exceptions import InvalidEnvelopeError , InvalidModelTypeError
1010
11+ Model = TypeVar ("Model" , bound = BaseModel )
12+ Envelope = TypeVar ("Envelope" , bound = BaseEnvelope )
1113logger = logging .getLogger (__name__ )
1214
1315
@@ -16,8 +18,8 @@ def event_parser(
1618 handler : Callable [[Dict , Any ], Any ],
1719 event : Dict [str , Any ],
1820 context : LambdaContext ,
19- model : BaseModel ,
20- envelope : Optional [BaseEnvelope ] = None ,
21+ model : Type [ Model ] ,
22+ envelope : Optional [Type [ Envelope ] ] = None ,
2123) -> Any :
2224 """Lambda handler decorator to parse & validate events using Pydantic models
2325
@@ -84,7 +86,7 @@ def handler(event: Order, context: LambdaContext):
8486 return handler (parsed_event , context )
8587
8688
87- def parse (event : Dict [str , Any ], model : BaseModel , envelope : Optional [BaseEnvelope ] = None ) -> Any :
89+ def parse (event : Dict [str , Any ], model : Type [ Model ] , envelope : Optional [Type [ Envelope ] ] = None ) -> Any :
8890 """Standalone function to parse & validate events using Pydantic models
8991
9092 Typically used when you need fine-grained control over error handling compared to event_parser decorator.
@@ -152,4 +154,4 @@ def handler(event: Order, context: LambdaContext):
152154
153155 return model .parse_obj (event )
154156 except AttributeError :
155- raise InvalidModelTypeError ("Input model must implement BaseModel" )
157+ raise InvalidModelTypeError (f "Input model must implement BaseModel, model= { model } " )
0 commit comments