← Files Public Equity InvestingARCHIVED FILE
skills/equity-model-update/scripts/model_update_dates.py
1.11 KB · Oct 2, 2026 · 00:03 UTC
from __future__ import annotations
from datetime import datetime, timezone
from model_update_format import text
def parse_date(value: object) -> datetime | None:
raw = text(value)
if not raw:
return None
formats = ("%Y-%m-%d", "%m/%d/%Y", "%Y/%m/%d")
for date_format in formats:
try:
return datetime.strptime(raw, date_format).replace(tzinfo=timezone.utc)
except ValueError:
pass
try:
parsed = datetime.fromisoformat(raw)
except ValueError:
return None
if parsed.tzinfo:
return parsed
return parsed.replace(tzinfo=timezone.utc)
def freshness(row: dict[str, str], run_date: datetime, stale_days: int) -> tuple[str, str | None]:
explicit = text(row.get("freshness_status"))
if explicit:
return explicit, None
as_of = parse_date(row.get("as_of_date") or row.get("source_as_of_date"))
if as_of is None:
return "unknown", "missing_as_of_date"
age_days = (run_date - as_of).days
if age_days > stale_days:
return "stale", f"source data is {age_days} days old"
return "current", None
SHA-256: 4059ee9634e6746e3dc6f1b501133e968ed6950f91eddb41c7da36707df6f27a