|
1 | 1 | import json
|
| 2 | +from datetime import datetime |
2 | 3 | from typing import Any, Dict, Literal, Union
|
3 | 4 |
|
4 | 5 | import pydantic
|
5 | 6 | import pytest
|
6 | 7 | from pydantic import ValidationError
|
7 | 8 | from typing_extensions import Annotated
|
8 | 9 |
|
9 |
| -from aws_lambda_powertools.utilities.parser import ( |
10 |
| - event_parser, |
11 |
| - exceptions, |
12 |
| -) |
| 10 | +from aws_lambda_powertools.utilities.parser import event_parser, exceptions, parse |
| 11 | +from aws_lambda_powertools.utilities.parser.envelopes.sqs import SqsEnvelope |
| 12 | +from aws_lambda_powertools.utilities.parser.models import SqsModel |
| 13 | +from aws_lambda_powertools.utilities.parser.models.event_bridge import EventBridgeModel |
13 | 14 | from aws_lambda_powertools.utilities.typing import LambdaContext
|
14 | 15 |
|
15 | 16 |
|
@@ -161,3 +162,42 @@ def handler(event: test_input, _: Any) -> str:
|
161 | 162 |
|
162 | 163 | ret = handler(test_input, None)
|
163 | 164 | assert ret == expected
|
| 165 | + |
| 166 | + |
| 167 | +def test_parser_with_model_type_model_and_envelope(): |
| 168 | + event = { |
| 169 | + "Records": [ |
| 170 | + { |
| 171 | + "messageId": "19dd0b57-b21e-4ac1-bd88-01bbb068cb78", |
| 172 | + "receiptHandle": "MessageReceiptHandle", |
| 173 | + "body": EventBridgeModel( |
| 174 | + version="version", |
| 175 | + id="id", |
| 176 | + source="source", |
| 177 | + account="account", |
| 178 | + time=datetime.now(), |
| 179 | + region="region", |
| 180 | + resources=[], |
| 181 | + detail={"key": "value"}, |
| 182 | + ).model_dump_json(), |
| 183 | + "attributes": { |
| 184 | + "ApproximateReceiveCount": "1", |
| 185 | + "SentTimestamp": "1523232000000", |
| 186 | + "SenderId": "123456789012", |
| 187 | + "ApproximateFirstReceiveTimestamp": "1523232000001", |
| 188 | + }, |
| 189 | + "messageAttributes": {}, |
| 190 | + "md5OfBody": "{{{md5_of_body}}}", |
| 191 | + "eventSource": "aws:sqs", |
| 192 | + "eventSourceARN": "arn:aws:sqs:us-east-1:123456789012:MyQueue", |
| 193 | + "awsRegion": "us-east-1", |
| 194 | + }, |
| 195 | + ], |
| 196 | + } |
| 197 | + |
| 198 | + def handler(event: SqsModel, _: LambdaContext): |
| 199 | + parsed_event: EventBridgeModel = parse(event, model=EventBridgeModel, envelope=SqsEnvelope) |
| 200 | + print(parsed_event) |
| 201 | + assert parsed_event[0].version == "version" |
| 202 | + |
| 203 | + handler(event, LambdaContext()) |
0 commit comments