from datetime import datetime from api.error import Error from model.historic import HistoricWeather from model.current import CurrentWeather from model.forecast import ForecastWeather class BaseService: def __init__(self, database=None): self.database = database class HistoricWeatherService(BaseService): DATE_FORMAT = "%Y-%m-%d" def get_historic_weather(self, location, date=None): query = self.database.session.query(HistoricWeather).filter_by(city=location) if date: try: parsed_date = datetime.strptime(date, self.DATE_FORMAT) query = query.filter_by(date=parsed_date) except ValueError: raise Error("Date must be YYYY-MM-DD format", 400) results = query.all() if not results: raise Error("Resource Not Found", 404) return [result.to_dict() for result in results] class CurrentWeatherService(BaseService): def get_current_weather(self, location): query = self.database.session.query(CurrentWeather).filter_by(city=location) results = query.all() if not results: raise Error("Resource Not Found", 404) return [result.to_dict() for result in results] class ForecastWeatherService(BaseService): def get_forecast_weather(self, location): query = self.database.session.query(ForecastWeather).filter_by(city=location) results = query.all() if not results: raise Error("Resource Not Found", 404) return [result.to_dict() for result in results]