Fix data fetch 7
This commit is contained in:
28
services/data/app/external/madrid_opendata.py
vendored
28
services/data/app/external/madrid_opendata.py
vendored
@@ -15,7 +15,7 @@ Features:
|
||||
import math
|
||||
import xml.etree.ElementTree as ET
|
||||
from typing import List, Dict, Any, Optional, Tuple
|
||||
from datetime import datetime, timedelta
|
||||
from datetime import datetime, timedelta, timezone
|
||||
import structlog
|
||||
import re
|
||||
from dataclasses import dataclass
|
||||
@@ -480,7 +480,19 @@ class MadridOpenDataClient(BaseAPIClient):
|
||||
|
||||
# Parse date
|
||||
record_date = self._parse_madrid_date(row.get('fecha', '').strip().strip('"'))
|
||||
if not record_date or not (start_date <= record_date <= end_date):
|
||||
if not record_date:
|
||||
return None
|
||||
|
||||
# ✅ CRITICAL FIX: Ensure both dates are timezone-aware for comparison
|
||||
if start_date.tzinfo is None:
|
||||
start_date = start_date.replace(tzinfo=timezone.utc)
|
||||
if end_date.tzinfo is None:
|
||||
end_date = end_date.replace(tzinfo=timezone.utc)
|
||||
if record_date.tzinfo is None:
|
||||
record_date = record_date.replace(tzinfo=timezone.utc)
|
||||
|
||||
# Now we can safely compare timezone-aware datetimes
|
||||
if not (start_date <= record_date <= end_date):
|
||||
return None
|
||||
|
||||
# Parse traffic data
|
||||
@@ -749,15 +761,21 @@ class MadridOpenDataClient(BaseAPIClient):
|
||||
return int(base * multiplier)
|
||||
|
||||
def _parse_madrid_date(self, fecha_str: str) -> Optional[datetime]:
|
||||
"""Parse Madrid date format"""
|
||||
"""Parse Madrid date format with timezone awareness"""
|
||||
if not fecha_str:
|
||||
return None
|
||||
|
||||
try:
|
||||
return datetime.strptime(fecha_str, '%Y-%m-%d %H:%M:%S')
|
||||
# Parse the date as timezone-naive first
|
||||
dt = datetime.strptime(fecha_str, '%Y-%m-%d %H:%M:%S')
|
||||
# Convert to timezone-aware (assume Madrid/UTC timezone)
|
||||
return dt.replace(tzinfo=timezone.utc)
|
||||
except ValueError:
|
||||
try:
|
||||
return datetime.strptime(fecha_str, '%d/%m/%Y %H:%M:%S')
|
||||
# Try alternative format
|
||||
dt = datetime.strptime(fecha_str, '%d/%m/%Y %H:%M:%S')
|
||||
# Convert to timezone-aware (assume Madrid/UTC timezone)
|
||||
return dt.replace(tzinfo=timezone.utc)
|
||||
except ValueError:
|
||||
return None
|
||||
|
||||
|
||||
Reference in New Issue
Block a user