Add POI feature and imporve the overall backend implementation

This commit is contained in:
Urtzi Alfaro
2025-11-12 15:34:10 +01:00
parent e8096cd979
commit 5783c7ed05
173 changed files with 16862 additions and 9078 deletions

View File

@@ -98,32 +98,53 @@ class MadridAdapter(CityDataAdapter):
async def validate_connection(self) -> bool:
"""Validate connection to AEMET and Madrid OpenData
Note: Validation is lenient - passes if traffic API works.
Note: Validation is lenient - allows partial failures for temporary API issues.
AEMET rate limits may cause weather validation to fail during initialization.
Madrid traffic API outages should not block validation entirely.
"""
try:
test_traffic = await self.traffic_client.get_current_traffic(
self.madrid_lat,
self.madrid_lon
)
traffic_validation_passed = False
weather_validation_passed = False
# Traffic API must work (critical for operations)
if test_traffic is None:
logger.error("Traffic API validation failed - this is critical")
# Try traffic API first
try:
test_traffic = await self.traffic_client.get_current_traffic(
self.madrid_lat,
self.madrid_lon
)
if test_traffic is not None and len(test_traffic) > 0:
traffic_validation_passed = True
logger.info("Traffic API validation successful")
else:
logger.warning("Traffic API validation failed - temporary unavailability (proceeding anyway)")
except Exception as traffic_error:
logger.warning("Traffic API validation error (temporary unavailability) - proceeding anyway", error=str(traffic_error))
# Try weather API
try:
test_weather = await self.aemet_client.get_current_weather(
self.madrid_lat,
self.madrid_lon
)
if test_weather is not None:
weather_validation_passed = True
logger.info("Weather API validation successful")
else:
logger.warning("Weather API validation failed (likely rate limited) - proceeding anyway")
except Exception as weather_error:
logger.warning("Weather API validation error - proceeding anyway", error=str(weather_error))
# At least one validation should pass for basic connectivity
if not traffic_validation_passed and not weather_validation_passed:
logger.error("Both traffic and weather API validations failed - no connectivity")
return False
# Try weather API, but don't fail validation if rate limited
test_weather = await self.aemet_client.get_current_weather(
self.madrid_lat,
self.madrid_lon
)
if test_weather is None:
logger.warning("Weather API validation failed (likely rate limited) - proceeding anyway")
else:
logger.info("Weather API validation successful")
# Pass validation if traffic works (weather can be fetched later)
# Return success if at least one API is accessible
logger.info("Adapter connection validation passed",
traffic_valid=traffic_validation_passed,
weather_valid=weather_validation_passed)
return True
except Exception as e: