45 lines
1.2 KiB
Python
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 |