44 lines
1.1 KiB
Python
44 lines
1.1 KiB
Python
|
|
# services/external/app/ingestion/base_adapter.py
|
||
|
|
"""
|
||
|
|
Base adapter interface for city-specific data sources
|
||
|
|
"""
|
||
|
|
|
||
|
|
from abc import ABC, abstractmethod
|
||
|
|
from typing import List, Dict, Any
|
||
|
|
from datetime import datetime
|
||
|
|
|
||
|
|
|
||
|
|
class CityDataAdapter(ABC):
|
||
|
|
"""Abstract base class for city-specific data adapters"""
|
||
|
|
|
||
|
|
def __init__(self, city_id: str, config: Dict[str, Any]):
|
||
|
|
self.city_id = city_id
|
||
|
|
self.config = config
|
||
|
|
|
||
|
|
@abstractmethod
|
||
|
|
async def fetch_historical_weather(
|
||
|
|
self,
|
||
|
|
start_date: datetime,
|
||
|
|
end_date: datetime
|
||
|
|
) -> List[Dict[str, Any]]:
|
||
|
|
"""Fetch historical weather data for date range"""
|
||
|
|
pass
|
||
|
|
|
||
|
|
@abstractmethod
|
||
|
|
async def fetch_historical_traffic(
|
||
|
|
self,
|
||
|
|
start_date: datetime,
|
||
|
|
end_date: datetime
|
||
|
|
) -> List[Dict[str, Any]]:
|
||
|
|
"""Fetch historical traffic data for date range"""
|
||
|
|
pass
|
||
|
|
|
||
|
|
@abstractmethod
|
||
|
|
async def validate_connection(self) -> bool:
|
||
|
|
"""Validate connection to data source"""
|
||
|
|
pass
|
||
|
|
|
||
|
|
def get_city_id(self) -> str:
|
||
|
|
"""Get city identifier"""
|
||
|
|
return self.city_id
|