refactor(data): restructure TimeSeriesTickerData to use series list and add helper methods
This commit is contained in:
parent
b060d988e7
commit
aeeb639fe2
@ -1,4 +1,4 @@
|
||||
from dataclasses import dataclass
|
||||
from dataclasses import dataclass, field
|
||||
from datetime import datetime
|
||||
from typing import List
|
||||
|
||||
@ -11,15 +11,46 @@ class TickerData:
|
||||
low: float
|
||||
high: float
|
||||
avg: float
|
||||
volume: float
|
||||
volume: int
|
||||
|
||||
|
||||
@dataclass
|
||||
class TimeSeriesTickerData:
|
||||
ticker: str
|
||||
target_date: datetime
|
||||
current_day_data: TickerData
|
||||
past_30d_data: List[TickerData]
|
||||
series: List[TickerData] = field(default_factory=list)
|
||||
|
||||
@staticmethod
|
||||
def build_time_series_ticker_data(
|
||||
ticker: str, all_data: List[TickerData]
|
||||
):
|
||||
ordered = sorted({d.date: d for d in all_data}.values(), key=lambda d: d.date)
|
||||
|
||||
return TimeSeriesTickerData(
|
||||
ticker=ticker,
|
||||
series=ordered,
|
||||
)
|
||||
|
||||
def get_by_date(self, dt: datetime) -> TickerData | None:
|
||||
for d in self.series:
|
||||
if d.date == dt:
|
||||
return d
|
||||
|
||||
return None
|
||||
|
||||
def get_latest(self) -> TickerData | None:
|
||||
if not self.series:
|
||||
return None
|
||||
|
||||
return self.series[-1]
|
||||
|
||||
def get_range(self, start_date: datetime, end_date: datetime) -> List[TickerData]:
|
||||
return [d for d in self.series if start_date <= d.date <= end_date]
|
||||
|
||||
@property
|
||||
def target_date_data(self) -> TickerData | None:
|
||||
"""Return the most recent TickerData (by convention, the target date tick)."""
|
||||
return self.get_latest()
|
||||
|
||||
|
||||
|
||||
@dataclass
|
||||
|
Loading…
x
Reference in New Issue
Block a user