Fix trip map unbooked flight pins and timezone-safe busy date comparisons

This commit is contained in:
Edward Betts 2026-03-07 12:58:38 +00:00
parent f38c5327ea
commit f9b79d5a51
3 changed files with 150 additions and 7 deletions

View file

@ -2,7 +2,7 @@
import itertools
import typing
from datetime import date, datetime, timedelta
from datetime import date, datetime, timedelta, timezone
import flask
import pycountry
@ -84,13 +84,20 @@ def get_busy_events(
def _parse_datetime_field(datetime_obj: datetime | date | str) -> tuple[datetime, date]:
"""Parse a datetime field that could be datetime object or string."""
if isinstance(datetime_obj, datetime):
return datetime_obj, datetime_obj.date()
if isinstance(datetime_obj, date):
return datetime.combine(datetime_obj, datetime.min.time()), datetime_obj
if isinstance(datetime_obj, str):
dt = datetime_obj
elif isinstance(datetime_obj, date):
dt = datetime.combine(datetime_obj, datetime.min.time(), tzinfo=timezone.utc)
elif isinstance(datetime_obj, str):
dt = datetime.fromisoformat(datetime_obj.replace("Z", "+00:00"))
return dt, dt.date()
raise ValueError(f"Invalid datetime format: {datetime_obj}")
else:
raise ValueError(f"Invalid datetime format: {datetime_obj}")
if dt.tzinfo is None:
dt = dt.replace(tzinfo=timezone.utc)
else:
dt = dt.astimezone(timezone.utc)
return dt, dt.date()
def _get_accommodation_location(