Skip to content

Commit 0daf753

Browse files
[v3-0-test] Persist EventsTimetable's description during serialization (#51203) (#51926)
(cherry picked from commit a150e70) Co-authored-by: Kacper Muda <[email protected]>
1 parent 33875db commit 0daf753

File tree

2 files changed

+39
-4
lines changed

2 files changed

+39
-4
lines changed

airflow-core/src/airflow/timetables/events.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,8 @@ def __init__(
6262
if description is None:
6363
if self.event_dates:
6464
self.description = (
65-
f"{len(self.event_dates)} events between {self.event_dates[0]} and {self.event_dates[-1]}"
65+
f"{len(self.event_dates)} events between "
66+
f"{self.event_dates[0].isoformat(sep='T')} and {self.event_dates[-1].isoformat(sep='T')}"
6667
)
6768
else:
6869
self.description = "No events"
@@ -123,12 +124,17 @@ def serialize(self):
123124
return {
124125
"event_dates": [x.isoformat(sep="T") for x in self.event_dates],
125126
"restrict_to_events": self.restrict_to_events,
127+
"description": self.description,
128+
"_summary": self._summary,
126129
}
127130

128131
@classmethod
129132
def deserialize(cls, data) -> Timetable:
130-
return cls(
131-
[pendulum.DateTime.fromisoformat(x) for x in data["event_dates"]],
132-
data["restrict_to_events"],
133+
time_table = cls(
134+
event_dates=[pendulum.DateTime.fromisoformat(x) for x in data["event_dates"]],
135+
restrict_to_events=data["restrict_to_events"],
133136
presorted=True,
137+
description=data["description"],
134138
)
139+
time_table._summary = data["_summary"]
140+
return time_table

airflow-core/tests/unit/timetables/test_events_timetable.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,4 +190,33 @@ def test_serialize(unrestricted_timetable: Timetable):
190190
"2021-10-09T00:00:00+00:00",
191191
],
192192
"restrict_to_events": False,
193+
"_summary": "6 events",
194+
"description": "6 events between 2021-09-06T00:00:00+00:00 and 2021-10-09T00:00:00+00:00",
193195
}
196+
197+
198+
def test_timetable_after_serialization_is_the_same():
199+
description = "Example description"
200+
timetable = EventsTimetable(
201+
event_dates=EVENT_DATES, restrict_to_events=True, description=description, presorted=True
202+
)
203+
assert timetable.summary == description
204+
assert timetable.description == description
205+
assert timetable.event_dates == EVENT_DATES
206+
207+
deserialized: EventsTimetable = timetable.deserialize(timetable.serialize())
208+
assert deserialized.summary == description
209+
assert deserialized.description == description
210+
assert deserialized.event_dates == EVENT_DATES
211+
212+
213+
def test_timetable_without_description_after_serialization_is_the_same():
214+
timetable = EventsTimetable(event_dates=EVENT_DATES, presorted=True)
215+
summary = f"{timetable.summary}"
216+
description = f"{timetable.description}"
217+
assert timetable.event_dates == EVENT_DATES
218+
219+
deserialized: EventsTimetable = timetable.deserialize(timetable.serialize())
220+
assert deserialized.summary == summary
221+
assert deserialized.description == description
222+
assert deserialized.event_dates == EVENT_DATES

0 commit comments

Comments
 (0)