summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDanglewood <85772166+deeleeramone@users.noreply.github.com>2024-02-02 03:45:09 -0800
committerGitHub <noreply@github.com>2024-02-02 11:45:09 +0000
commitc9f1aec2b3fdc683d7e373029d5172017abc582c (patch)
tree2516e562207b8bbfb433eecc8124ede1a9c9a98f
parent9ddbf34456b748fd38aa7e1bd4e95618dc253f94 (diff)
[feature]: feature/overview-to-profile: Deprecate `equity.fundamental.overview()` and move to `equity.profile()` (#6011)
* fmp overview to equity profile * deprecation warning * urls * wrangle fields * black * pylint unused argument * insert additional securityID fields to standard model * custom deprecation using OpenBBDeprecationWarning * typo - need to have the deprecated=True flag * static assets * fix non related test * minor adjustment - removing the need for the try/except block - using the get and pop removes the need for key existance checking. cc @deeleeramone --------- Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Co-authored-by: Henrique Joaquim <h.joaquim@campus.fct.unl.pt>
-rw-r--r--openbb_platform/core/openbb_core/provider/standard_models/equity_info.py6
-rw-r--r--openbb_platform/extensions/equity/integration/test_equity_api.py1
-rw-r--r--openbb_platform/extensions/equity/integration/test_equity_python.py3
-rw-r--r--openbb_platform/extensions/equity/openbb_equity/fundamental/fundamental_router.py11
-rw-r--r--openbb_platform/openbb/package/equity.py45
-rw-r--r--openbb_platform/openbb/package/equity_fundamental.py15
-rw-r--r--openbb_platform/providers/finviz/openbb_finviz/models/equity_profile.py12
-rw-r--r--openbb_platform/providers/fmp/openbb_fmp/__init__.py2
-rw-r--r--openbb_platform/providers/fmp/openbb_fmp/models/equity_profile.py150
-rw-r--r--openbb_platform/providers/fmp/tests/record/http/test_fmp_fetchers/test_fmp_equity_profile_fetcher.yaml74
-rw-r--r--openbb_platform/providers/fmp/tests/test_fmp_fetchers.py10
11 files changed, 312 insertions, 17 deletions
diff --git a/openbb_platform/core/openbb_core/provider/standard_models/equity_info.py b/openbb_platform/core/openbb_core/provider/standard_models/equity_info.py
index b23c82bda9f..bc62fc538e8 100644
--- a/openbb_platform/core/openbb_core/provider/standard_models/equity_info.py
+++ b/openbb_platform/core/openbb_core/provider/standard_models/equity_info.py
@@ -36,6 +36,12 @@ class EquityInfoData(Data):
default=None,
description=DATA_DESCRIPTIONS.get("cik", ""),
)
+ cusip: Optional[str] = Field(
+ default=None, description="CUSIP identifier for the company."
+ )
+ isin: Optional[str] = Field(
+ default=None, description="International Securities Identification Number."
+ )
lei: Optional[str] = Field(
default=None, description="Legal Entity Identifier assigned to the company."
)
diff --git a/openbb_platform/extensions/equity/integration/test_equity_api.py b/openbb_platform/extensions/equity/integration/test_equity_api.py
index 6cd0709dcb1..d09fca2fef3 100644
--- a/openbb_platform/extensions/equity/integration/test_equity_api.py
+++ b/openbb_platform/extensions/equity/integration/test_equity_api.py
@@ -1271,6 +1271,7 @@ def test_equity_price_quote(params, headers):
({"symbol": "AAPL,MSFT", "provider": "intrinio"}),
({"symbol": "AAPL,MSFT", "provider": "finviz"}),
({"symbol": "AAPL,MSFT", "provider": "yfinance"}),
+ ({"symbol": "AAPL,MSFT", "provider": "fmp"}),
],
)
@pytest.mark.integration
diff --git a/openbb_platform/extensions/equity/integration/test_equity_python.py b/openbb_platform/extensions/equity/integration/test_equity_python.py
index 09adb9bb956..0fd11eac27c 100644
--- a/openbb_platform/extensions/equity/integration/test_equity_python.py
+++ b/openbb_platform/extensions/equity/integration/test_equity_python.py
@@ -1204,6 +1204,7 @@ def test_equity_price_quote(params, obb):
({"symbol": "AAPL,MSFT", "provider": "intrinio"}),
({"symbol": "AAPL,MSFT", "provider": "finviz"}),
({"symbol": "AAPL,MSFT", "provider": "yfinance"}),
+ ({"symbol": "AAPL,MSFT", "provider": "fmp"}),
],
)
@pytest.mark.integration
@@ -1368,7 +1369,7 @@ def test_equity_discovery_upcoming_release_days(params, obb):
"start_date": None,
"end_date": None,
"limit": 10,
- "form_type": None,
+ "form_type": "1-A",
"is_done": None,
"provider": "fmp",
}
diff --git a/openbb_platform/extensions/equity/openbb_equity/fundamental/fundamental_router.py b/openbb_platform/extensions/equity/openbb_equity/fundamental/fundamental_router.py
index dbaddcb70ba..b4525ec4e35 100644
--- a/openbb_platform/extensions/equity/openbb_equity/fundamental/fundamental_router.py
+++ b/openbb_platform/extensions/equity/openbb_equity/fundamental/fundamental_router.py
@@ -1,6 +1,7 @@
# pylint: disable=W0613:unused-argument
"""Fundamental Analysis Router."""
+from openbb_core.app.deprecation import OpenBBDeprecationWarning
from openbb_core.app.model.command_context import CommandContext
from openbb_core.app.model.obbject import OBBject
from openbb_core.app.provider_interface import (
@@ -202,7 +203,15 @@ async def management_compensation(
return await OBBject.from_query(Query(**locals()))
-@router.command(model="CompanyOverview")
+@router.command(
+ model="CompanyOverview",
+ deprecated=True,
+ deprecation=OpenBBDeprecationWarning(
+ message="This endpoint is deprecated; use `/equity/profile` instead.",
+ since=(4, 1),
+ expected_removal=(4, 3),
+ ),
+)
async def overview(
cc: CommandContext,
provider_choices: ProviderChoices,
diff --git a/openbb_platform/openbb/package/equity.py b/openbb_platform/openbb/package/equity.py
index 105c6423e47..8a4feb09b85 100644
--- a/openbb_platform/openbb/package/equity.py
+++ b/openbb_platform/openbb/package/equity.py
@@ -224,7 +224,7 @@ class ROUTER_equity(Container):
Union[str, List[str]],
OpenBBCustomParameter(description="Symbol to get data for."),
],
- provider: Optional[Literal["intrinio", "yfinance"]] = None,
+ provider: Optional[Literal["fmp", "intrinio", "yfinance"]] = None,
**kwargs
) -> OBBject:
"""Equity Info. Get general price and performance metrics of a stock.
@@ -233,9 +233,9 @@ class ROUTER_equity(Container):
----------
symbol : str
Symbol to get data for.
- provider : Optional[Literal['intrinio', 'yfinance']]
+ provider : Optional[Literal['fmp', 'intrinio', 'yfinance']]
The provider to use for the query, by default None.
- If None, the provider specified in defaults is selected or 'intrinio' if there is
+ If None, the provider specified in defaults is selected or 'fmp' if there is
no default.
Returns
@@ -243,7 +243,7 @@ class ROUTER_equity(Container):
OBBject
results : List[EquityInfo]
Serializable results.
- provider : Optional[Literal['intrinio', 'yfinance']]
+ provider : Optional[Literal['fmp', 'intrinio', 'yfinance']]
Provider name.
warnings : Optional[List[Warning_]]
List of warnings.
@@ -260,6 +260,10 @@ class ROUTER_equity(Container):
Common name of the company.
cik : Optional[str]
Central Index Key (CIK) for the requested entity.
+ cusip : Optional[str]
+ CUSIP identifier for the company.
+ isin : Optional[str]
+ International Securities Identification Number.
lei : Optional[str]
Legal Entity Identifier assigned to the company.
legal_name : Optional[str]
@@ -326,6 +330,33 @@ class ROUTER_equity(Container):
Date of the company's first stock price.
last_stock_price_date : Optional[date]
Date of the company's last stock price.
+ is_etf : Optional[bool]
+ If the symbol is an ETF. (provider: fmp)
+ is_actively_trading : Optional[bool]
+ If the company is actively trading. (provider: fmp)
+ is_adr : Optional[bool]
+ If the stock is an ADR. (provider: fmp)
+ is_fund : Optional[bool]
+ If the company is a fund. (provider: fmp)
+ image : Optional[str]
+ Image of the company. (provider: fmp)
+ currency : Optional[str]
+ Currency in which the stock is traded. (provider: fmp, yfinance)
+ market_cap : Optional[int]
+ Market capitalization of the company. (provider: fmp);
+ The market capitalization of the asset. (provider: yfinance)
+ last_price : Optional[float]
+ The last traded price. (provider: fmp)
+ year_high : Optional[float]
+ The one-year high of the price. (provider: fmp)
+ year_low : Optional[float]
+ The one-year low of the price. (provider: fmp)
+ volume_avg : Optional[int]
+ Average daily trading volume. (provider: fmp)
+ annualized_dividend_amount : Optional[float]
+ The annualized dividend payment based on the most recent regular dividend payment. (provider: fmp)
+ beta : Optional[float]
+ Beta of the stock relative to the market. (provider: fmp, yfinance)
id : Optional[str]
Intrinio ID for the company. (provider: intrinio)
thea_enabled : Optional[bool]
@@ -334,10 +365,6 @@ class ROUTER_equity(Container):
The timezone of the exchange. (provider: yfinance)
issue_type : Optional[str]
The issuance type of the asset. (provider: yfinance)
- currency : Optional[str]
- The currency in which the asset is traded. (provider: yfinance)
- market_cap : Optional[int]
- The market capitalization of the asset. (provider: yfinance)
shares_outstanding : Optional[int]
The number of listed shares outstanding. (provider: yfinance)
shares_float : Optional[int]
@@ -348,8 +375,6 @@ class ROUTER_equity(Container):
The reported number of shares short. (provider: yfinance)
dividend_yield : Optional[float]
The dividend yield of the asset, as a normalized percent. (provider: yfinance)
- beta : Optional[float]
- The beta of the asset relative to the broad market. (provider: yfinance)
Example
-------
diff --git a/openbb_platform/openbb/package/equity_fundamental.py b/openbb_platform/openbb/package/equity_fundamental.py
index c7447aae0bf..ced8bb656d4 100644
--- a/openbb_platform/openbb/package/equity_fundamental.py
+++ b/openbb_platform/openbb/package/equity_fundamental.py
@@ -2,14 +2,16 @@
import datetime
from typing import List, Literal, Optional, Union
+from warnings import simplefilter, warn
from annotated_types import Ge
+from openbb_core.app.deprecation import OpenBBDeprecationWarning
from openbb_core.app.model.custom_parameter import OpenBBCustomParameter
from openbb_core.app.model.obbject import OBBject
from openbb_core.app.static.container import Container
from openbb_core.app.static.utils.decorators import validate
from openbb_core.app.static.utils.filters import filter_inputs
-from typing_extensions import Annotated
+from typing_extensions import Annotated, deprecated
class ROUTER_equity_fundamental(Container):
@@ -2611,6 +2613,10 @@ class ROUTER_equity_fundamental(Container):
)
@validate
+ @deprecated(
+ "This endpoint is deprecated; use `/equity/profile` instead. Deprecated in OpenBB Platform V4.1 to be removed in V4.3.",
+ category=OpenBBDeprecationWarning,
+ )
def overview(
self,
symbol: Annotated[
@@ -2726,6 +2732,13 @@ class ROUTER_equity_fundamental(Container):
>>> obb.equity.fundamental.overview(symbol="AAPL")
""" # noqa: E501
+ simplefilter("always", DeprecationWarning)
+ warn(
+ "This endpoint is deprecated; use `/equity/profile` instead. Deprecated in OpenBB Platform V4.1 to be removed in V4.3.",
+ category=DeprecationWarning,
+ stacklevel=2,
+ )
+
return self._run(
"/equity/fundamental/overview",
**filter_inputs(
diff --git a/openbb_platform/providers/finviz/openbb_finviz/models/equity_profile.py b/openbb_platform/providers/finviz/openbb_finviz/models/equity_profile.py
index eba392f56a8..c8fd5eff7d4 100644
--- a/openbb_platform/providers/finviz/openbb_finviz/models/equity_profile.py
+++ b/openbb_platform/providers/finviz/openbb_finviz/models/equity_profile.py
@@ -26,14 +26,14 @@ class FinvizEquityProfileQueryParams(EquityInfoQueryParams):
class FinvizEquityProfileData(EquityInfoData):
"""Finviz Equity Profile Data."""
+ __alias_dict__ = {
+ "stock_exchange": "exchange",
+ }
+
index: Optional[str] = Field(
default=None,
description="Included in indices - i.e., Dow, Nasdaq, or S&P.",
)
- beta: Optional[float] = Field(
- default=None,
- description="The beta of the stock relative to the broad market.",
- )
optionable: Optional[str] = Field(
default=None,
description="Whether options trade against the ticker.",
@@ -73,6 +73,10 @@ class FinvizEquityProfileData(EquityInfoData):
description="The last, or next confirmed, earnings date and announcement time, as a string."
+ " The format is Nov 02 AMC - for after market close.",
)
+ beta: Optional[float] = Field(
+ default=None,
+ description="The beta of the stock relative to the broad market.",
+ )
class FinvizEquityProfileFetcher(
diff --git a/openbb_platform/providers/fmp/openbb_fmp/__init__.py b/openbb_platform/providers/fmp/openbb_fmp/__init__.py
index f4ce652e86d..1af89b46c0a 100644
--- a/openbb_platform/providers/fmp/openbb_fmp/__init__.py
+++ b/openbb_platform/providers/fmp/openbb_fmp/__init__.py
@@ -23,6 +23,7 @@ from openbb_fmp.models.economic_calendar import FMPEconomicCalendarFetcher
from openbb_fmp.models.equity_historical import FMPEquityHistoricalFetcher
from openbb_fmp.models.equity_ownership import FMPEquityOwnershipFetcher
from openbb_fmp.models.equity_peers import FMPEquityPeersFetcher
+from openbb_fmp.models.equity_profile import FMPEquityProfileFetcher
from openbb_fmp.models.equity_quote import FMPEquityQuoteFetcher
from openbb_fmp.models.equity_screener import FMPEquityScreenerFetcher
from openbb_fmp.models.equity_valuation_multiples import (
@@ -90,6 +91,7 @@ fmp_provider = Provider(
"EquityHistorical": FMPEquityHistoricalFetcher,
"EquityOwnership": FMPEquityOwnershipFetcher,
"EquityPeers": FMPEquityPeersFetcher,
+ "EquityInfo": FMPEquityProfileFetcher,
"EquityQuote": FMPEquityQuoteFetcher,
"EquityScreener": FMPEquityScreenerFetcher,
"EquityValuationMultiples": FMPEquityValuationMultiplesFetcher,
diff --git a/openbb_platform/providers/fmp/openbb_fmp/models/equity_profile.py b/openbb_platform/providers/fmp/openbb_fmp/models/equity_profile.py
new file mode 100644
index 00000000000..22cbce22f29
--- /dev/null
+++ b/openbb_platform/providers/fmp/openbb_fmp/models/equity_profile.py
@@ -0,0 +1,150 @@
+"""FMP Equity Profile Model."""
+
+# pylint: disable=unused-argument
+
+from datetime import (
+ date as dateType,
+)
+from typing import Any, Dict, List, Optional
+
+from openbb_core.provider.abstract.data import ForceInt
+from openbb_core.provider.abstract.fetcher import Fetcher
+from openbb_core.provider.standard_models.equity_info import (
+ EquityInfoData,
+ EquityInfoQueryParams,
+)
+from openbb_core.provider.utils.helpers import amake_requests
+from pydantic import Field, field_validator, model_validator
+
+
+class FMPEquityProfileQueryParams(EquityInfoQueryParams):
+ """FMP Equity Profile Query.
+
+ Source: https://site.financialmodelingprep.com/developer/docs/companies-key-stats-free-api/
+ """
+
+
+class FMPEquityProfileData(EquityInfoData):
+ """FMP Equity Profile Data."""
+
+ __alias_dict__ = {
+ "name": "companyName",
+ "stock_exchange": "exchange",
+ "company_url": "website",
+ "hq_address1": "address",
+ "hq_address_city": "city",
+ "hq_address_postal_code": "zip",
+ "hq_state": "state",
+ "hq_country": "country",
+ "business_phone_no": "phone",
+ "industry_category": "industry",
+ "employees": "fullTimeEmployees",
+ "long_description": "description",
+ "first_stock_price_date": "ipoDate",
+ }
+
+ is_etf: bool = Field(description="If the symbol is an ETF.")
+ is_actively_trading: bool = Field(description="If the company is actively trading.")
+ is_adr: bool = Field(description="If the stock is an ADR.")
+ is_fund: bool = Field(description="If the company is a fund.")
+ image: Optional[str] = Field(default=None, description="Image of the company.")
+ currency: Optional[str] = Field(
+ default=None, description="Currency in which the stock is traded."
+ )
+ market_cap: Optional[ForceInt] = Field(
+ default=None,
+ description="Market capitalization of the company.",
+ alias="mktCap",
+ )
+ last_price: Optional[float] = Field(
+ default=None,
+ description="The last traded price.",
+ alias="price",
+ )
+ year_high: Optional[float] = Field(
+ default=None, description="The one-year high of the price."
+ )
+ year_low: Optional[float] = Field(
+ default=None, description="The one-year low of the price."
+ )
+ volume_avg: Optional[ForceInt] = Field(
+ default=None,
+ description="Average daily trading volume.",
+ alias="volAvg",
+ )
+ annualized_dividend_amount: Optional[float] = Field(
+ default=None,
+ description="The annualized dividend payment based on the most recent regular dividend payment.",
+ alias="lastDiv",
+ )
+ beta: Optional[float] = Field(
+ default=None, description="Beta of the stock relative to the market."
+ )
+
+ @field_validator("first_stock_price_date", mode="before", check_fields=False)
+ @classmethod
+ def validate_date(cls, v): # pylint: disable=E0213
+ """Return the date as a datetime object."""
+ if isinstance(v, dateType) or v is None:
+ return v
+ return dateType.fromisoformat(v) if v else None
+
+ @model_validator(mode="before")
+ @classmethod
+ def replace_empty_strings(cls, values):
+ """Check for empty strings and replace with None."""
+ return {k: None if v in ("", "NA") else v for k, v in values.items()}
+
+
+class FMPEquityProfileFetcher(
+ Fetcher[
+ FMPEquityProfileQueryParams,
+ List[FMPEquityProfileData],
+ ]
+):
+ """FMP Equity Profile Fetcher."""
+
+ @staticmethod
+ def transform_query(params: Dict[str, Any]) -> FMPEquityProfileQueryParams:
+ """Transform the query params."""
+ return FMPEquityProfileQueryParams(**params)
+
+ @staticmethod
+ async def aextract_data(
+ query: FMPEquityProfileQueryParams,
+ credentials: Optional[Dict[str, str]],
+ **kwargs: Any,
+ ) -> List[Dict]:
+ """Return the raw data from the FMP endpoint."""
+ api_key = credentials.get("fmp_api_key") if credentials else ""
+ symbols = query.symbol.split(",")
+ base_url = "https://financialmodelingprep.com/api/v3"
+ urls = [f"{base_url}/profile/{symbol}?apikey={api_key}" for symbol in symbols]
+
+ return await amake_requests(urls, **kwargs)
+
+ @staticmethod
+ def transform_data(
+ query: FMPEquityProfileQueryParams,
+ data: List[Dict],
+ **kwargs: Any,
+ ) -> List[FMPEquityProfileData]:
+ """Return the transformed data."""
+ results: List[FMPEquityProfileData] = []
+ for d in data:
+ d["year_low"], d["year_high"] = d.get("range", "-").split("-")
+
+ # Clear out fields that don't belong and can be had elsewhere.
+ entries_to_remove = (
+ "exchangeShortName",
+ "defaultImage",
+ "dcf",
+ "dcfDiff",
+ "changes",
+ "range",
+ )
+ for key in entries_to_remove:
+ d.pop(key, None)
+
+ results.append(FMPEquityProfileData.model_validate(d))
+ return results
diff --git a/openbb_platform/providers/fmp/tests/record/http/test_fmp_fetchers/test_fmp_equity_profile_fetcher.yaml b/openbb_platform/providers/fmp/tests/record/http/test_fmp_fetchers/test_fmp_equity_profile_fetcher.yaml
new file mode 100644
index 00000000000..cbae54bd4aa
--- /dev/null
+++ b/openbb_platform/providers/fmp/tests/record/http/test_fmp_fetchers/test_fmp_equity_profile_fetcher.yaml
@@ -0,0 +1,74 @@
+interactions:
+- request:
+ body: null
+ headers:
+ Accept:
+ - application/json
+ Accept-Encoding:
+ - gzip, deflate
+ Connection:
+ - keep-alive
+ method: GET
+ uri: https://financialmodelingprep.com/api/v3/profile/AAPL?apikey=MOCK_API_KEY
+ response:
+ body:
+ string: !!binary |
+ H4sIAAAAAAAAA21WTXPbNhC951dgfI1Ek5IsS/FJlZ3WM03ijp3k0OkBAkARYxBgAVCM0ul/71t+
+ ybJ7sCzt59vFWyz+fMfYP/hj7CIcy50zFx/YxWbz8PvFpJNWXgsFYbbOkut5L9ypyEmWzNa95ODM
+ 5rCH7Gq+Wl2tl4Nl+Ry3vIJ8tl4urrI0XV2nadorDQ/xVh+gTZP1shd6bveU8CJbZMl8Ns3W62Q5
+ G+CIgtQB+mmaLIfswpUVt8fPvGw9N1VlFLu3Ihndau+VFUfSfn28HcX6mSRAlM5nabaeDwodtO1s
+ 0/n1aj4H8KtTrKCr1m1QDRr1o4NHys+bx9vNH+xX43bcsEdllIiv7R4L5+MAunMYAVhZh+hbwFtn
+ Q10qz+4oiHdWizDYNWoXdGwDFDFW4cPlZdM0CacOJGjLYCdVEF5XUTt73iEGjd7bMGElt3XORay9
+ wi9uJST+WcXAAr7EqnCWFJXywVnURE2vI35NWOQ7A8MJaxT39L0PwIVQITivVWCN80Y2WqqEPRWK
+ 9UfGXJ4jBNMPFB5ezGirIH2Z9IZ94uKl7i2GG0Tg8qVNWZuop1XtKxfUgPCmhfUCZeFK9RYrhfXE
+ gT3baP/gJCy7lj19G75951EUE/aL4uhQ5Z2sRezL/g1B4ZSw+8i4CY7UB1QeOtct94qFuqpw+q29
+ MK6WLCh/wKz1GB1q5BEuB+61q5HC8Jg7XyKHtsLUktBFdBIx2WN0iBkLTgmNaxhIGoECnY2OSR2E
+ O4BAFFi6xhrHUTCwaMGJEqHT6L2ObVNtVDZOgFEUjAe2c+6ZCALi4xioEjdhe/C2r7dyUmCUAwq2
+ jEupKeakBffqmIdihlpPObqmbrzgsqUBhYdyN9J28LnpTT/qCGqE92Q88EH/VJLlneK1/acOfVNo
+ JOzh1IE+ObpFvZbgTkDl1Fj1AzE1rgzFGh3hYKdSlVSs51I7FmLXuCH6Z9V0UM4gW0j7Sdrzn0TM
+ V6Cevr1/BQl3gwHSAzjscR72dB6DD+jTEl246Q6XpQRu4RWazgQ0HXs6ywd+bA15KAx1pOLHEoEG
+ EBPqe6OMof+ggrIBfNOgs0ZCQ5dNjfQgL3oRj+dzSzHaSenupp4JGFoKRxVrOQ3teexQDh3IwGyi
+ hcK08I4lAKQ8TVs/h3tiqm1x9vdPO0fgcPR6V9NIxEJ7Oa1wPxzPWYz5aPEP4whL7+p9cT4n54W0
+ AxpQbvh/VxJ67Dvd1eVse8EECtQXLbVHq1jgaDJBoOPtCj3BFEhQG+5BiYib8JnOCvyivjWFgyOc
+ 6UeXaewnctBBePTgxZXdcDoi4XC1dbzVFvv5+rp10YEVisu/a+RVvlNuazpBbTG2W0wJMFrNT8tR
+ OdoJnzwao0sXiyO7TdgWQz9YBNTnPBk9KVFYZ9z+OHq72vaL6uvjIMxrYxBL3ZWVcUfVLuyLbIld
+ OS7L9mon8SJdsfV6ybI0G5W4RFB66/XFqpHO6Nt3fsqsY7cfh+pGuBjONvR2M4h+dit7fZVmi3En
+ ivxW5znki1WyyNLZ6qSg181ilqxm1/PZPMWDZpkuF8NuxjSfbdwcY2qF5qZ0UoEe+8qrirbvZWs6
+ BVnE8yW9qpLK7scVX7nbHme2XqXTDG+d8Z0jVc6xwO77VDlYqsa3yV3M38g2IuLSMMcnup8svcSi
+ r1+opX/j8rG2chBC9u+7v/4DmxrpEg4KAAA=
+ headers:
+ Access-Control-Allow-Credentials:
+ - 'true'
+ Access-Control-Allow-Headers:
+ - X-Requested-With, content-type, auth-token, Authorization, stripe-signature,
+ APPS
+ Access-Control-Allow-Methods:
+ - GET, POST, OPTIONS
+ Access-Control-Allow-Origin:
+ - '*'
+ Access-Control-Max-Age:
+ - '3600'
+ Connection:
+ - keep-alive
+ Content-Encoding:
+ - gzip
+ Content-Type:
+ - application/json; charset=utf-8
+ Date:
+ - Tue, 30 Jan 2024 03:22:46 GMT
+ Etag:
+ - W/"a0e-8FPveCU8Qcu3WMIc1cX4pwjsvrQ"
+ Server:
+ - nginx/1.18.0 (Ubuntu)
+ Transfer-Encoding:
+ - chunked
+ Vary:
+ - Accept-Encoding
+ X-Frame-Options:
+ - SAMEORIGIN
+ X-Powered-By:
+ - Express
+ status:
+ code: 200
+ message: OK
+version: 1
diff --git a/openbb_platform/providers/fmp/tests/test_fmp_fetchers.py b/openbb_platform/providers/fmp/tests/test_fmp_fetchers.py
index 407c2b5d1dc..e64f2f7c92c 100644
--- a/openbb_platform/providers/fmp/tests/test_fmp_fetchers.py
+++ b/openbb_platform/providers/fmp/tests/test_fmp_fetchers.py
@@ -27,6 +27,7 @@ from openbb_fmp.models.economic_calendar import FMPEconomicCalendarFetcher
from openbb_fmp.models.equity_historical import FMPEquityHistoricalFetcher
from openbb_fmp.models.equity_ownership import FMPEquityOwnershipFetcher
from openbb_fmp.models.equity_peers import FMPEquityPeersFetcher
+from openbb_fmp.models.equity_profile import FMPEquityProfileFetcher
from openbb_fmp.models.equity_quote import FMPEquityQuoteFetcher
from openbb_fmp.models.equity_screener import FMPEquityScreenerFetcher
from openbb_fmp.models.equity_valuation_multiples import (
@@ -634,3 +635,12 @@ def test_fmp_calendar_earnings_fetcher(credentials=test_credentials):
fetcher = FMPCalendarEarningsFetcher()
result = fetcher.test(params, credentials)
assert result is None
+
+
+@pytest.mark.record_http
+def test_fmp_equity_profile_fetcher(credentials=test_credentials):
+ params = {"symbol": "AAPL"}
+
+ fetcher = FMPEquityProfileFetcher()
+ result = fetcher.test(params, credentials)
+ assert result is None