Skip to content

Commit 5f1ad0a

Browse files
committed
fix: generic type to match ABC bound class
1 parent 2732760 commit 5f1ad0a

File tree

1 file changed

+7
-5
lines changed
  • aws_lambda_powertools/utilities/parser

1 file changed

+7
-5
lines changed

aws_lambda_powertools/utilities/parser/parser.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import logging
2-
from typing import Any, Callable, Dict, Optional
2+
from typing import Any, Callable, Dict, Optional, Type, TypeVar
33

44
from pydantic import BaseModel
55

@@ -8,6 +8,8 @@
88
from .envelopes.base import BaseEnvelope
99
from .exceptions import InvalidEnvelopeError, InvalidModelTypeError
1010

11+
Model = TypeVar("Model", bound=BaseModel)
12+
Envelope = TypeVar("Envelope", bound=BaseEnvelope)
1113
logger = 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

Comments
 (0)