diff options
author | Henrique Joaquim <henriquecjoaquim@gmail.com> | 2024-04-10 13:29:16 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-10 12:29:16 +0000 |
commit | 72e322fd01133db0d087a35fb53268efb11e8253 (patch) | |
tree | a734931368cf659403781e305e1434f35fc15686 | |
parent | a255fa52a060c1aeb43a18e947e84d2a77eb01c5 (diff) |
[BugFix] Handling negative timestamps on Windows (#6298)
* safe fromtimestamp
* sage timestamp convertion on equity profile
---------
Co-authored-by: hjoaquim <h.joaquim@campus.fct.unl.pt>
-rw-r--r-- | openbb_platform/core/openbb_core/provider/utils/helpers.py | 10 | ||||
-rw-r--r-- | openbb_platform/providers/yfinance/openbb_yfinance/models/equity_profile.py | 10 |
2 files changed, 16 insertions, 4 deletions
diff --git a/openbb_platform/core/openbb_core/provider/utils/helpers.py b/openbb_platform/core/openbb_core/provider/utils/helpers.py index 3a5c557341f..36c5907ae7e 100644 --- a/openbb_platform/core/openbb_core/provider/utils/helpers.py +++ b/openbb_platform/core/openbb_core/provider/utils/helpers.py @@ -1,8 +1,9 @@ """Provider helpers.""" import asyncio +import os import re -from datetime import date, datetime +from datetime import date, datetime, timedelta, timezone from difflib import SequenceMatcher from functools import partial from inspect import iscoroutinefunction @@ -313,3 +314,10 @@ def filter_by_dates( return False return list(filter(_filter, data)) + + +def safe_fromtimestamp(timestamp: float, tz: Optional[timezone] = None) -> datetime: + """datetime.fromtimestamp alternative which supports negative timestamps on Windows platform.""" + if os.name == "nt" and timestamp < 0: + return datetime(1970, 1, 1, tzinfo=tz) + timedelta(seconds=timestamp) + return datetime.fromtimestamp(timestamp, tz) diff --git a/openbb_platform/providers/yfinance/openbb_yfinance/models/equity_profile.py b/openbb_platform/providers/yfinance/openbb_yfinance/models/equity_profile.py index cc98e5838c3..7150bc7be50 100644 --- a/openbb_platform/providers/yfinance/openbb_yfinance/models/equity_profile.py +++ b/openbb_platform/providers/yfinance/openbb_yfinance/models/equity_profile.py @@ -3,7 +3,10 @@ # pylint: disable=unused-argument import asyncio import warnings -from datetime import datetime +from datetime import ( + date as dateType, + timezone, +) from typing import Any, Dict, List, Optional from openbb_core.provider.abstract.fetcher import Fetcher @@ -11,6 +14,7 @@ from openbb_core.provider.standard_models.equity_info import ( EquityInfoData, EquityInfoQueryParams, ) +from openbb_core.provider.utils.helpers import safe_fromtimestamp from pydantic import Field, field_validator from yfinance import Ticker @@ -97,9 +101,9 @@ class YFinanceEquityProfileData(EquityInfoData): @field_validator("first_stock_price_date", mode="before", check_fields=False) @classmethod - def validate_first_trade_date(cls, v): + def validate_first_trade_date(cls, v: float) -> Optional[dateType]: """Validate first stock price date.""" - return datetime.utcfromtimestamp(v).date() if v else None + return safe_fromtimestamp(v, tz=timezone.utc).date() if v else None class YFinanceEquityProfileFetcher( |