summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenrique Joaquim <henriquecjoaquim@gmail.com>2024-04-10 13:29:16 +0100
committerGitHub <noreply@github.com>2024-04-10 12:29:16 +0000
commit72e322fd01133db0d087a35fb53268efb11e8253 (patch)
treea734931368cf659403781e305e1434f35fc15686
parenta255fa52a060c1aeb43a18e947e84d2a77eb01c5 (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.py10
-rw-r--r--openbb_platform/providers/yfinance/openbb_yfinance/models/equity_profile.py10
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(