Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/fix-metadata-date-json.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Serialize date values in country metadata responses.
3 changes: 3 additions & 0 deletions policyengine_api/country.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import dpath
import math
import pandas as pd
from datetime import date, datetime
from pathlib import Path
from policyengine_api.data.congressional_districts import (
build_congressional_district_metadata,
Expand Down Expand Up @@ -62,6 +63,8 @@ def build_metadata(self):
def _json_safe(self, value):
if isinstance(value, Path):
return str(value)
if isinstance(value, (date, datetime)):
return value.isoformat()
if isinstance(value, dict):
return {
key: self._json_safe(nested_value)
Expand Down
18 changes: 18 additions & 0 deletions tests/unit/test_country.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,29 @@
import pytest
import pandas as pd
from datetime import date, datetime
from pathlib import Path
from types import SimpleNamespace

from policyengine_api.country import COUNTRIES, PolicyEngineCountry


class TestCountryJsonSafety:
def test__json_safe_serializes_dates(self):
country = PolicyEngineCountry.__new__(PolicyEngineCountry)

result = country._json_safe(
{
"release_date": date(2026, 5, 12),
"nested": [datetime(2026, 5, 12, 8, 30, 45)],
}
)

assert result == {
"release_date": "2026-05-12",
"nested": ["2026-05-12T08:30:45"],
}


class TestUKCountryMetadata:
"""Tests for UK country metadata, specifically local authority loading."""

Expand Down
Loading