import os from typing import Dict, Optional, Union from gpxpy.gpx import GPXTrackPoint from fittrackee import appLog from .visual_crossing import VisualCrossing class WeatherService: """ Available API: - VisualCrossing """ def __init__(self) -> None: self.weather_api = self._get_weather_api() @staticmethod def _get_weather_api() -> Union[VisualCrossing, None]: weather_api_key: str = os.getenv('WEATHER_API_KEY', '') weather_api_provider: str = os.getenv( 'WEATHER_API_PROVIDER', '' ).lower() if not weather_api_key: return None if weather_api_provider == 'visualcrossing': return VisualCrossing(weather_api_key) return None def get_weather(self, point: GPXTrackPoint) -> Optional[Dict]: if not self.weather_api: return None try: return self.weather_api.get_weather(point) except Exception as e: appLog.error(f'error when getting weather data: {e}') return None