mirror of
https://github.com/OpenBB-finance/OpenBB.git
synced 2026-10-27 04:31:13 +00:00
fix(sec): handle unexpected SEC API responses in cik_map (#7441)
* fix(sec): handle unexpected SEC API responses in cik_map and get_all_companies Fixes #7097 The cik_map command throws 'ValueError: If using all scalar values, you must pass an index' when the SEC API returns an unexpected response format (e.g., flat dict instead of nested dict of dicts). Changes: - get_all_companies: validate response before DataFrame creation, use from_dict(orient='index') instead of DataFrame().transpose(), check column count matches expected fields - cik_map fetcher: raise proper OpenBBError when symbol not found instead of returning empty dict that passes truthiness checks * run black --------- Co-authored-by: JasonOA888 <JasonOA888@users.noreply.github.com> Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com>
This commit is contained in:
@@ -5,6 +5,7 @@
|
||||
from typing import Any
|
||||
|
||||
from openbb_core.provider.abstract.fetcher import Fetcher
|
||||
from openbb_core.app.model.abstract.error import OpenBBError
|
||||
from openbb_core.provider.standard_models.cik_map import CikMapData, CikMapQueryParams
|
||||
from pydantic import Field
|
||||
|
||||
@@ -48,10 +49,10 @@ class SecCikMapFetcher(
|
||||
# pylint: disable=import-outside-toplevel
|
||||
from openbb_sec.utils.helpers import symbol_map
|
||||
|
||||
results = {"cik": await symbol_map(query.symbol, query.use_cache)}
|
||||
if not results:
|
||||
return {"Error": "Symbol not found."}
|
||||
return results
|
||||
cik = await symbol_map(query.symbol, query.use_cache)
|
||||
if not cik:
|
||||
raise OpenBBError(f"Symbol '{query.symbol}' not found in SEC database.")
|
||||
return {"cik": cik}
|
||||
|
||||
@staticmethod
|
||||
def transform_data(
|
||||
|
||||
@@ -49,8 +49,17 @@ async def get_all_companies(use_cache: bool = True) -> DataFrame:
|
||||
else:
|
||||
response = await amake_request(url, headers=SEC_HEADERS) # type: ignore
|
||||
|
||||
df = DataFrame(response).transpose()
|
||||
if not response or not isinstance(response, dict):
|
||||
raise OpenBBError(
|
||||
"Empty or invalid response from SEC company tickers endpoint."
|
||||
)
|
||||
|
||||
df = DataFrame.from_dict(response, orient="index")
|
||||
cols = ["cik", "symbol", "name"]
|
||||
if len(df.columns) != len(cols):
|
||||
raise OpenBBError(
|
||||
f"Unexpected SEC response format. Expected {len(cols)} fields, got {len(df.columns)}: {df.columns.tolist()}"
|
||||
)
|
||||
df.columns = cols
|
||||
return df.astype(str)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user