Skip to content

Commit 01c95fb

Browse files
committed
fix(parser): overload parse when using envelope
1 parent 8de3729 commit 01c95fb

File tree

2 files changed

+17
-9
lines changed

2 files changed

+17
-9
lines changed

Diff for: aws_lambda_powertools/utilities/parser/envelopes/base.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from abc import ABC, abstractmethod
33
from typing import Any, Dict, Optional, Type, TypeVar, Union
44

5-
from ..types import Model
5+
from aws_lambda_powertools.utilities.parser.types import Model
66

77
logger = logging.getLogger(__name__)
88

Diff for: aws_lambda_powertools/utilities/parser/parser.py

+16-8
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
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
35

46
from ...middleware_factory import lambda_handler_decorator
57
from ..typing import LambdaContext
68
from .envelopes.base import Envelope
79
from .exceptions import InvalidEnvelopeError, InvalidModelTypeError
8-
from .types import Model
910

1011
logger = logging.getLogger(__name__)
1112

12-
1313
EventParserReturnType = 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

Comments
 (0)