Skip to content

Commit d86c72c

Browse files
authored
Serialize date metadata values
Serialize date and datetime values in country metadata before serving metadata JSON.
1 parent 6cec8d7 commit d86c72c

3 files changed

Lines changed: 22 additions & 0 deletions

File tree

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Serialize date values in country metadata responses.

policyengine_api/country.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import dpath
1818
import math
1919
import pandas as pd
20+
from datetime import date, datetime
2021
from pathlib import Path
2122
from policyengine_api.data.congressional_districts import (
2223
build_congressional_district_metadata,
@@ -62,6 +63,8 @@ def build_metadata(self):
6263
def _json_safe(self, value):
6364
if isinstance(value, Path):
6465
return str(value)
66+
if isinstance(value, (date, datetime)):
67+
return value.isoformat()
6568
if isinstance(value, dict):
6669
return {
6770
key: self._json_safe(nested_value)

tests/unit/test_country.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,29 @@
11
import pytest
22
import pandas as pd
3+
from datetime import date, datetime
34
from pathlib import Path
45
from types import SimpleNamespace
56

67
from policyengine_api.country import COUNTRIES, PolicyEngineCountry
78

89

10+
class TestCountryJsonSafety:
11+
def test__json_safe_serializes_dates(self):
12+
country = PolicyEngineCountry.__new__(PolicyEngineCountry)
13+
14+
result = country._json_safe(
15+
{
16+
"release_date": date(2026, 5, 12),
17+
"nested": [datetime(2026, 5, 12, 8, 30, 45)],
18+
}
19+
)
20+
21+
assert result == {
22+
"release_date": "2026-05-12",
23+
"nested": ["2026-05-12T08:30:45"],
24+
}
25+
26+
927
class TestUKCountryMetadata:
1028
"""Tests for UK country metadata, specifically local authority loading."""
1129

0 commit comments

Comments
 (0)