refactor(data): restructure TimeSeriesTickerData to use series list and add helper methods

This commit is contained in:
Giulio De Pasquale 2025-10-16 12:17:56 +01:00
parent b060d988e7
commit aeeb639fe2

View File

@ -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