Skip to content

Commit 38403e3

Browse files
authored
fix: periodic trigger export with datetime (baserow#5322)
1 parent ea1e2d3 commit 38403e3

4 files changed

Lines changed: 68 additions & 1 deletion

File tree

backend/src/baserow/contrib/integrations/core/service_types.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1317,6 +1317,48 @@ def prepare_values(
13171317

13181318
return super().prepare_values(values, user, instance)
13191319

1320+
def serialize_property(
1321+
self,
1322+
service: CorePeriodicService,
1323+
prop_name: str,
1324+
files_zip=None,
1325+
storage=None,
1326+
cache=None,
1327+
):
1328+
if prop_name == "next_run_at":
1329+
return (
1330+
service.next_run_at.isoformat()
1331+
if service.next_run_at is not None
1332+
else None
1333+
)
1334+
1335+
return super().serialize_property(
1336+
service, prop_name, files_zip=files_zip, storage=storage, cache=cache
1337+
)
1338+
1339+
def deserialize_property(
1340+
self,
1341+
prop_name: str,
1342+
value: Any,
1343+
id_mapping: Dict[str, Any],
1344+
files_zip=None,
1345+
storage=None,
1346+
cache=None,
1347+
**kwargs,
1348+
):
1349+
if prop_name == "next_run_at" and value is not None:
1350+
return datetime.fromisoformat(value)
1351+
1352+
return super().deserialize_property(
1353+
prop_name,
1354+
value,
1355+
id_mapping,
1356+
files_zip=files_zip,
1357+
storage=storage,
1358+
cache=cache,
1359+
**kwargs,
1360+
)
1361+
13201362
def can_immediately_be_tested(self, service):
13211363
return True
13221364

backend/tests/baserow/contrib/integrations/core/test_core_periodic_service_type.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import json
12
from datetime import datetime, timezone
23
from unittest.mock import MagicMock, call, patch
34

@@ -112,6 +113,21 @@ def test_periodic_trigger_node_creation_and_property_updates(data_fixture):
112113
assert updated_service_specific.next_run_at is None
113114

114115

116+
@pytest.mark.django_db
117+
def test_periodic_service_export_serializes_next_run_at_as_iso(data_fixture):
118+
service = data_fixture.create_core_periodic_service(
119+
interval=PERIODIC_INTERVAL_MINUTE,
120+
minute=15,
121+
next_run_at=datetime(2025, 2, 15, 10, 30, 0, tzinfo=timezone.utc),
122+
)
123+
124+
serialized = json.loads(
125+
json.dumps(CorePeriodicServiceType().export_serialized(service))
126+
)
127+
128+
assert serialized["next_run_at"] == "2025-02-15T10:30:00+00:00"
129+
130+
115131
@pytest.mark.django_db
116132
@patch(
117133
"baserow.contrib.integrations.core.service_types.settings.INTEGRATIONS_PERIODIC_MINUTE_MIN",
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"type": "bug",
3+
"message": "Fix export workflow with periodic triggers",
4+
"issue_origin": "github",
5+
"issue_number": null,
6+
"domain": "automation",
7+
"bullet_points": [],
8+
"created_at": "2026-05-06"
9+
}

web-frontend/modules/builder/components/elements/baseComponents/ABDateTimePicker.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ export default {
241241
*/
242242
handleDateBlur(event) {
243243
this.updateDate(event.target.value)
244-
this.$refs.dateContext.hide()
244+
this.$refs.dateContext?.hide()
245245
},
246246
/**
247247
* Handle blur event on the time input field.

0 commit comments

Comments
 (0)