finance-api/api/service/historical.py

45 lines
1.2 KiB
Python

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