diff options
Diffstat (limited to 'openbb_platform/providers/fmp')
5 files changed, 85 insertions, 75 deletions
diff --git a/openbb_platform/providers/fmp/openbb_fmp/models/equity_screener.py b/openbb_platform/providers/fmp/openbb_fmp/models/equity_screener.py index 58579cacaf9..beb23b80785 100644 --- a/openbb_platform/providers/fmp/openbb_fmp/models/equity_screener.py +++ b/openbb_platform/providers/fmp/openbb_fmp/models/equity_screener.py @@ -1,5 +1,7 @@ """FMP Equity Screener Model.""" +# pylint: disable=unused-argument +from copy import deepcopy from typing import Any, Dict, List, Literal, Optional import pandas as pd @@ -8,6 +10,7 @@ from openbb_core.provider.standard_models.equity_screener import ( EquityScreenerData, EquityScreenerQueryParams, ) +from openbb_core.provider.utils.errors import EmptyDataError from openbb_fmp.utils.definitions import EXCHANGES, SECTORS from openbb_fmp.utils.helpers import create_url, get_data from pydantic import Field @@ -162,23 +165,26 @@ class FMPEquityScreenerFetcher( ) -> List[Dict]: """Return the raw data from the FMP endpoint.""" api_key = credentials.get("fmp_api_key") if credentials else "" + _query = deepcopy(query) + if _query.sector is not None: + _query.sector = _query.sector.replace("_", " ").title() url = create_url( version=3, endpoint="stock-screener", api_key=api_key, - query=query, + query=_query, exclude=["query", "is_symbol", "industry"], ).replace(" ", "%20") - return await get_data(url, **kwargs) + return await get_data(url, **kwargs) # type: ignore @staticmethod def transform_data( query: FMPEquityScreenerQueryParams, data: List[Dict], **kwargs: Any ) -> List[FMPEquityScreenerData]: """Return the transformed data.""" + if not data: + raise EmptyDataError("The request was returned empty.") results = pd.DataFrame(data) - if len(results) == 0: - return [] if query.industry: results = results[ results["sector"].str.contains(query.industry, case=False) diff --git a/openbb_platform/providers/fmp/openbb_fmp/models/insider_trading.py b/openbb_platform/providers/fmp/openbb_fmp/models/insider_trading.py index f907b821c84..b0309ad79d3 100644 --- a/openbb_platform/providers/fmp/openbb_fmp/models/insider_trading.py +++ b/openbb_platform/providers/fmp/openbb_fmp/models/insider_trading.py @@ -1,5 +1,7 @@ """FMP Insider Trading Model.""" +# pylint: disable=unused-argument + import math from typing import Any, Dict, List, Optional @@ -19,7 +21,7 @@ class FMPInsiderTradingQueryParams(InsiderTradingQueryParams): Source: https://site.financialmodelingprep.com/developer/docs/#Stock-Insider-Trading """ - transaction_type: TRANSACTION_TYPES = Field( + transaction_type: Optional[TRANSACTION_TYPES] = Field( default=None, description="Type of the transaction.", alias="transactionType", diff --git a/openbb_platform/providers/fmp/openbb_fmp/utils/definitions.py b/openbb_platform/providers/fmp/openbb_fmp/utils/definitions.py index 970b26db7d5..a558197a5ee 100644 --- a/openbb_platform/providers/fmp/openbb_fmp/utils/definitions.py +++ b/openbb_platform/providers/fmp/openbb_fmp/utils/definitions.py @@ -3,21 +3,21 @@ from typing import Literal SECTORS = Literal[ - "Consumer Cyclical", - "Energy", - "Technology", - "Industrials", - "Financial Services", - "Basic Materials", - "Communication Services", - "Consumer Defensive", - "Healthcare", - "Real Estate", - "Utilities", - "Industrial Goods", - "Financial", - "Services", - "Conglomerates", + "consumer_cyclical", + "energy", + "technology", + "industrials", + "financial_services", + "basic_materials", + "communication_services", + "consumer_defensive", + "healthcare", + "real_estate", + "utilities", + "industrial_goods", + "financial", + "services", + "conglomerates", ] EXCHANGES = Literal[ @@ -142,7 +142,6 @@ MARKETS = Literal[ ] TRANSACTION_TYPES = Literal[ - None, "award", "conversion", "return", diff --git a/openbb_platform/providers/fmp/tests/record/http/test_fmp_fetchers/test_fmp_equity_screener_fetcher.yaml b/openbb_platform/providers/fmp/tests/record/http/test_fmp_fetchers/test_fmp_equity_screener_fetcher.yaml index d0ecd34d58f..86d183d7cc6 100644 --- a/openbb_platform/providers/fmp/tests/record/http/test_fmp_fetchers/test_fmp_equity_screener_fetcher.yaml +++ b/openbb_platform/providers/fmp/tests/record/http/test_fmp_fetchers/test_fmp_equity_screener_fetcher.yaml @@ -3,9 +3,9 @@ interactions: body: null headers: Accept: - - '*/*' + - application/json Accept-Encoding: - - gzip, deflate, br + - gzip, deflate Connection: - keep-alive method: GET @@ -13,59 +13,62 @@ interactions: response: body: string: !!binary | - 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 headers: Access-Control-Allow-Credentials: - 'true' Access-Control-Allow-Headers: - X-Requested-With, content-type, auth-token, Authorization, stripe-signature, - APPS + APPS, publicauthkey, privateauthkey Access-Control-Allow-Methods: - GET, POST, OPTIONS Access-Control-Allow-Origin: @@ -79,9 +82,9 @@ interactions: Content-Type: - application/json; charset=utf-8 Date: - - Wed, 01 Nov 2023 03:52:34 GMT - ETag: - - W/"4982-+8Qdcwj1qb7/EmFCGB+B5c50150" + - Sat, 18 May 2024 00:53:55 GMT + Etag: + - W/"5065-ZEn6rIEbJjPKIDVPjFO8zIEy3jg" Server: - nginx/1.18.0 (Ubuntu) Transfer-Encoding: diff --git a/openbb_platform/providers/fmp/tests/test_fmp_fetchers.py b/openbb_platform/providers/fmp/tests/test_fmp_fetchers.py index b740b6e8050..7bd48e003ee 100644 --- a/openbb_platform/providers/fmp/tests/test_fmp_fetchers.py +++ b/openbb_platform/providers/fmp/tests/test_fmp_fetchers.py @@ -542,7 +542,7 @@ def test_fmp_equity_quote_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_fmp_equity_screener_fetcher(credentials=test_credentials): """Test FMP equity screener fetcher.""" - params = {"query": "midstream", "sector": "Energy", "beta_max": 0.5} + params = {"industry": "midstream", "sector": "energy", "beta_max": 0.5} fetcher = FMPEquityScreenerFetcher() result = fetcher.test(params, credentials) |