|
4 | 4 |
|
5 | 5 | import pydantic |
6 | 6 | import pytest |
| 7 | +from typing_extensions import Annotated |
7 | 8 | from pydantic import ValidationError, BaseModel |
8 | 9 |
|
9 | 10 | from aws_lambda_powertools.utilities.parser import event_parser, exceptions, parse |
@@ -251,19 +252,18 @@ class SuccessfulCallback(pydantic.BaseModel): |
251 | 252 | class FailedCallback(pydantic.BaseModel): |
252 | 253 | status: Literal["failed"] |
253 | 254 | error: str |
| 255 | + |
| 256 | + DogCallback = Annotated[Union[SuccessfulCallback, FailedCallback], pydantic.Field(discriminator="status")] |
| 257 | + DogCallbackTypeAdapter = pydantic.TypeAdapter(DogCallback) |
254 | 258 |
|
255 | | - class DogCallbackModel(pydantic.BaseModel): |
256 | | - data: Union[SuccessfulCallback, FailedCallback] = pydantic.Field(discriminator="status") |
257 | | - |
258 | | - @event_parser(model=DogCallbackModel) |
| 259 | + @event_parser(model=DogCallbackTypeAdapter) |
259 | 260 | def handler(event, _: Any) -> str: |
260 | | - if isinstance(event.data, FailedCallback): |
261 | | - return f"Uh oh. Had a problem: {event.data.error}" |
| 261 | + if isinstance(event, FailedCallback): |
| 262 | + return f"Uh oh. Had a problem: {event.error}" |
262 | 263 |
|
263 | | - return f"Successfully retrieved {event.data.breed} named {event.data.name}" |
| 264 | + return f"Successfully retrieved {event.breed} named {event.name}" |
264 | 265 |
|
265 | | - wrapped_input = {"data": test_input} |
266 | | - ret = handler(wrapped_input, None) |
| 266 | + ret = handler(test_input, None) |
267 | 267 | assert ret == expected |
268 | 268 |
|
269 | 269 |
|
|
0 commit comments