summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDanglewood <85772166+deeleeramone@users.noreply.github.com>2024-05-15 17:44:57 -0700
committerDanglewood <85772166+deeleeramone@users.noreply.github.com>2024-05-15 17:44:57 -0700
commit8f476b84b484c57e69d5544a72d2421c87d6c444 (patch)
tree0d6768cc2474ec349100af0c691d9a09c6bbfe1a
parentcd54a51dd2a124fbe78d87d75328b92ec30b8389 (diff)
econdb date filter
-rw-r--r--openbb_platform/providers/econdb/openbb_econdb/models/yield_curve.py32
1 files changed, 21 insertions, 11 deletions
diff --git a/openbb_platform/providers/econdb/openbb_econdb/models/yield_curve.py b/openbb_platform/providers/econdb/openbb_econdb/models/yield_curve.py
index 815ff2d630a..daf2748b4fe 100644
--- a/openbb_platform/providers/econdb/openbb_econdb/models/yield_curve.py
+++ b/openbb_platform/providers/econdb/openbb_econdb/models/yield_curve.py
@@ -3,7 +3,7 @@
# pylint: disable=unused-argument
from datetime import datetime
-from typing import Any, Dict, List, Optional
+from typing import Any, Dict, List, Optional, Union
from openbb_core.provider.abstract.annotated_result import AnnotatedResult
from openbb_core.provider.abstract.fetcher import Fetcher
@@ -85,6 +85,7 @@ class EconDbYieldCurveFetcher(
+ f"%5B{','.join(symbols)}%5D&page_size=50&format=json&token={token}"
)
data: List[Dict] = []
+ response: Union[Dict, List[Dict]] = {}
if query.use_cache is True:
cache_dir = f"{helpers.get_user_cache_directory()}/http/econdb_yield_curve"
async with helpers.CachedSession(
@@ -146,14 +147,21 @@ class EconDbYieldCurveFetcher(
if maturity not in new_data:
new_data[maturity] = {}
new_data[maturity][d] = r
+
+ # Create a DataFrame from the data
df = DataFrame(new_data)
- df = df.dropna() # Drop rows with missing values
# Convert the index to a DatetimeIndex
df.index = DatetimeIndex(df.index)
# Find the nearest date in the DataFrame to each date in dates_list
- nearest_dates = [df.index.asof(date) for date in dates_list]
+ def get_nearest_date(df, target_date):
+ differences = (df.index - target_date).to_series().abs()
+ nearest_date_index = differences.argmin()
+ nearest_date = df.index[nearest_date_index]
+ return nearest_date
+
+ nearest_dates = [get_nearest_date(df, date) for date in dates_list]
# Filter for only the nearest dates
df = df[df.index.isin(nearest_dates)]
@@ -175,11 +183,13 @@ class EconDbYieldCurveFetcher(
flattened_data.loc[:, "date"] = flattened_data["date"].dt.strftime("%Y-%m-%d")
records = flattened_data.copy()
records["rate"] = records["rate"].fillna("N/A").replace("N/A", None)
- return AnnotatedResult(
- result=[
- EconDbYieldCurveData.model_validate(r)
- for r in records.to_dict("records")
- if r.get("rate")
- ],
- metadata=metadata,
- )
+ records = records.to_dict("records")
+ results: List[EconDbYieldCurveData] = [
+ EconDbYieldCurveData.model_validate(r) for r in records if r.get("rate")
+ ]
+ if not results:
+ raise EmptyDataError(
+ f"No data was found for the country, {query.country},"
+ f" and dates, {query.date}"
+ )
+ return AnnotatedResult(result=results, metadata=metadata)