from datetime import datetime from .base import BaseService from api.errors import DateFormatError from api.errors import ResourceNotFound from model.ticker import Ticker def validate_date(date_str): try: date_obj = datetime.strptime(date_str, "%Y-%m-%d") return date_obj except ValueError: raise DateFormatError class HistoricalService(BaseService): def get_historical_ticker(self, symbol, params): from_date = params.get("from_date", "2000-01-01") to_date = params.get("to_date", "2001-01-01") from_date = validate_date(from_date) to_date = validate_date(to_date) historical = ( self.database.session.query(Ticker) .filter(Ticker.symbol == symbol) .filter(Ticker.date >= from_date) .filter(Ticker.date <= to_date) .all() ) if not historical: raise ResourceNotFound output = {} data = [] for ticker in historical: ticker = ticker.to_dict() ticker.pop("symbol") data.append(ticker) output["ticker"] = symbol output["data"] = data return output