Skip to content

Commit 3544ea6

Browse files
fix(parser): fix EventBridgeModel when working with scheduled events (#6134)
* Fixing scheduler detail field * Fixing scheduler detail field
1 parent 1b4d796 commit 3544ea6

File tree

3 files changed

+28
-1
lines changed

3 files changed

+28
-1
lines changed

aws_lambda_powertools/utilities/parser/models/event_bridge.py

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from datetime import datetime
22
from typing import List, Optional
33

4-
from pydantic import BaseModel, ConfigDict, Field
4+
from pydantic import BaseModel, ConfigDict, Field, field_validator
55

66
from aws_lambda_powertools.utilities.parser.types import RawDictOrModel
77

@@ -19,3 +19,9 @@ class EventBridgeModel(BaseModel):
1919
detail_type: str = Field(..., alias="detail-type")
2020
detail: RawDictOrModel
2121
replay_name: Optional[str] = Field(None, alias="replay-name")
22+
23+
@field_validator("detail", mode="before")
24+
def validate_detail(cls, v, fields):
25+
# EventBridge Scheduler sends detail field as '{}' string when no payload is present
26+
# See: https://github.com/aws-powertools/powertools-lambda-python/issues/6112
27+
return {} if fields.data.get("source") == "aws.scheduler" and v == "{}" else v
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"version":"0",
3+
"id":"d167b752-343a-4b28-afd6-d4de056319e8",
4+
"detail-type":"Scheduled Event",
5+
"source":"aws.scheduler",
6+
"account":"123456789012",
7+
"time":"2025-02-20T16:03:00Z",
8+
"region":"us-east-1",
9+
"resources":[
10+
"arn:aws:scheduler:us-east-1:123456789012:schedule/default/aaaaa"
11+
],
12+
"detail":"{}"
13+
}

tests/unit/parser/_pydantic/test_eventbridge.py

+8
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import pytest
22

33
from aws_lambda_powertools.utilities.parser import ValidationError, envelopes, parse
4+
from aws_lambda_powertools.utilities.parser.models import EventBridgeModel
45
from tests.functional.utils import load_event
56
from tests.unit.parser._pydantic.schemas import (
67
MyAdvancedEventbridgeBusiness,
@@ -51,3 +52,10 @@ def test_handle_invalid_event_with_eventbridge_envelope():
5152
empty_event = {}
5253
with pytest.raises(ValidationError):
5354
parse(event=empty_event, model=MyEventbridgeBusiness, envelope=envelopes.EventBridgeEnvelope)
55+
56+
57+
def test_handle_eventbridge_scheduler():
58+
raw_event = load_event("eventBridgeSchedulerEvent.json")
59+
parsed_event: EventBridgeModel = EventBridgeModel(**raw_event)
60+
61+
assert parsed_event.detail == {}

0 commit comments

Comments
 (0)