diff options
Diffstat (limited to 'openbb_platform/core/openbb_core/provider/utils/helpers.py')
-rw-r--r-- | openbb_platform/core/openbb_core/provider/utils/helpers.py | 48 |
1 files changed, 32 insertions, 16 deletions
diff --git a/openbb_platform/core/openbb_core/provider/utils/helpers.py b/openbb_platform/core/openbb_core/provider/utils/helpers.py index 99064cd8396..3a5c557341f 100644 --- a/openbb_platform/core/openbb_core/provider/utils/helpers.py +++ b/openbb_platform/core/openbb_core/provider/utils/helpers.py @@ -2,11 +2,20 @@ import asyncio import re -from datetime import datetime +from datetime import date, datetime from difflib import SequenceMatcher from functools import partial from inspect import iscoroutinefunction -from typing import Awaitable, Callable, List, Literal, Optional, TypeVar, Union, cast +from typing import ( + Awaitable, + Callable, + List, + Literal, + Optional, + TypeVar, + Union, + cast, +) import requests from anyio import start_blocking_portal @@ -21,6 +30,7 @@ from openbb_core.provider.utils.client import ( T = TypeVar("T") P = ParamSpec("P") +D = TypeVar("D", bound="Data") def check_item(item: str, allowed: List[str], threshold: float = 0.75) -> None: @@ -177,13 +187,13 @@ async def amake_requests( is_exception = isinstance(result, Exception) if is_exception and kwargs.get("raise_for_status", False): - raise result + raise result # type: ignore[misc] if is_exception or not result: continue - results.extend( # type: ignore - result if isinstance(result, list) else [result] + results.extend( + result if isinstance(result, list) else [result] # type: ignore[list-item] ) return results @@ -283,17 +293,23 @@ def run_async( def filter_by_dates( - data: List[Data], - start_date: datetime, - end_date: datetime, -) -> List[Data]: + data: List[D], start_date: Optional[date] = None, end_date: Optional[date] = None +) -> List[D]: """Filter data by dates.""" - if not any([start_date, end_date]): + if start_date is None and end_date is None: return data - return list( - filter( - lambda d: start_date <= d.date.date() <= end_date, - data, - ) - ) + def _filter(d: Data) -> bool: + _date = getattr(d, "date", None) + dt = _date.date() if _date and isinstance(_date, datetime) else _date + if dt: + if start_date and end_date: + return start_date <= dt <= end_date + if start_date: + return dt >= start_date + if end_date: + return dt <= end_date + return True + return False + + return list(filter(_filter, data)) |