mirror of
https://github.com/OpenBB-finance/OpenBB.git
synced 2026-11-06 01:12:27 +00:00
Fix issue in earnings transcript not allowing FY 2025 to be retrieved (#6500)
* remove ultima + althub * move twitter keys * Add one to date validator to allow FY diff. * Typo in spelling * multiple items allowed * static assets --------- Co-authored-by: Danglewood <85772166+deeleeramone@users.noreply.github.com>
This commit is contained in:
@@ -17,7 +17,7 @@ class EarningsCallTranscriptQueryParams(QueryParams):
|
||||
"""Earnings Call Transcript rating Query."""
|
||||
|
||||
symbol: str = Field(description=QUERY_DESCRIPTIONS.get("symbol", ""))
|
||||
year: int = Field(description="Year of the earnings call transcript.")
|
||||
year: Union[int, str] = Field(description="Year of the earnings call transcript.")
|
||||
|
||||
@field_validator("symbol", mode="before", check_fields=False)
|
||||
@classmethod
|
||||
|
||||
10
openbb_platform/openbb/assets/reference.json
vendored
10
openbb_platform/openbb/assets/reference.json
vendored
@@ -21196,21 +21196,21 @@
|
||||
"message": null
|
||||
},
|
||||
"description": "Get earnings call transcripts for a given company.",
|
||||
"examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.transcript(symbol='AAPL', year=2020, provider='fmp')\n```\n\n",
|
||||
"examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.fundamental.transcript(symbol='AAPL', year='2020', provider='fmp')\n```\n\n",
|
||||
"parameters": {
|
||||
"standard": [
|
||||
{
|
||||
"name": "symbol",
|
||||
"type": "str",
|
||||
"description": "Symbol to get data for.",
|
||||
"type": "Union[str, List[str]]",
|
||||
"description": "Symbol to get data for. Multiple items allowed for provider(s): fmp.",
|
||||
"default": "",
|
||||
"optional": false,
|
||||
"choices": null
|
||||
},
|
||||
{
|
||||
"name": "year",
|
||||
"type": "int",
|
||||
"description": "Year of the earnings call transcript.",
|
||||
"type": "Union[Union[int, str], List[Union[int, str]]]",
|
||||
"description": "Year of the earnings call transcript. Multiple items allowed for provider(s): fmp.",
|
||||
"default": "",
|
||||
"optional": false,
|
||||
"choices": null
|
||||
|
||||
@@ -3636,9 +3636,17 @@ class ROUTER_equity_fundamental(Container):
|
||||
@validate
|
||||
def transcript(
|
||||
self,
|
||||
symbol: Annotated[str, OpenBBField(description="Symbol to get data for.")],
|
||||
symbol: Annotated[
|
||||
Union[str, List[str]],
|
||||
OpenBBField(
|
||||
description="Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp."
|
||||
),
|
||||
],
|
||||
year: Annotated[
|
||||
int, OpenBBField(description="Year of the earnings call transcript.")
|
||||
Union[int, str, List[Union[int, str]]],
|
||||
OpenBBField(
|
||||
description="Year of the earnings call transcript. Multiple comma separated items allowed for provider(s): fmp."
|
||||
),
|
||||
],
|
||||
provider: Annotated[
|
||||
Optional[Literal["fmp"]],
|
||||
@@ -3652,10 +3660,10 @@ class ROUTER_equity_fundamental(Container):
|
||||
|
||||
Parameters
|
||||
----------
|
||||
symbol : str
|
||||
Symbol to get data for.
|
||||
year : int
|
||||
Year of the earnings call transcript.
|
||||
symbol : Union[str, List[str]]
|
||||
Symbol to get data for. Multiple comma separated items allowed for provider(s): fmp.
|
||||
year : Union[int, str, List[Union[int, str]]]
|
||||
Year of the earnings call transcript. Multiple comma separated items allowed for provider(s): fmp.
|
||||
provider : Optional[Literal['fmp']]
|
||||
The provider to use, by default None. If None, the priority list configured in the settings is used. Default priority: fmp.
|
||||
|
||||
@@ -3689,7 +3697,7 @@ class ROUTER_equity_fundamental(Container):
|
||||
Examples
|
||||
--------
|
||||
>>> from openbb import obb
|
||||
>>> obb.equity.fundamental.transcript(symbol='AAPL', year=2020, provider='fmp')
|
||||
>>> obb.equity.fundamental.transcript(symbol='AAPL', year='2020', provider='fmp')
|
||||
""" # noqa: E501
|
||||
|
||||
return self._run(
|
||||
@@ -3707,5 +3715,9 @@ class ROUTER_equity_fundamental(Container):
|
||||
"year": year,
|
||||
},
|
||||
extra_params=kwargs,
|
||||
info={
|
||||
"symbol": {"fmp": {"multiple_items_allowed": True}},
|
||||
"year": {"fmp": {"multiple_items_allowed": True}},
|
||||
},
|
||||
)
|
||||
)
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
"""FMP Earnings Call Transcript Model."""
|
||||
|
||||
# pylint: disable=unused-argument
|
||||
|
||||
from datetime import datetime
|
||||
from typing import Any, Dict, List, Optional
|
||||
|
||||
@@ -8,7 +10,7 @@ from openbb_core.provider.standard_models.earnings_call_transcript import (
|
||||
EarningsCallTranscriptData,
|
||||
EarningsCallTranscriptQueryParams,
|
||||
)
|
||||
from openbb_fmp.utils.helpers import create_url, get_data_many
|
||||
from openbb_core.provider.utils.helpers import amake_requests
|
||||
from pydantic import field_validator
|
||||
|
||||
|
||||
@@ -18,12 +20,10 @@ class FMPEarningsCallTranscriptQueryParams(EarningsCallTranscriptQueryParams):
|
||||
Source: https://site.financialmodelingprep.com/developer/docs/earning-call-transcript-api/
|
||||
"""
|
||||
|
||||
@field_validator("year", mode="before", check_fields=False)
|
||||
@classmethod
|
||||
def time_validate(cls, v: int): # pylint: disable=E0213
|
||||
"""Return the year as an integer."""
|
||||
current_year = datetime.now().year
|
||||
return current_year if v > current_year or v < 1950 else v
|
||||
__json_schema_extra__ = {
|
||||
"symbol": {"multiple_items_allowed": True},
|
||||
"year": {"multiple_items_allowed": True},
|
||||
}
|
||||
|
||||
|
||||
class FMPEarningsCallTranscriptData(EarningsCallTranscriptData):
|
||||
@@ -31,7 +31,7 @@ class FMPEarningsCallTranscriptData(EarningsCallTranscriptData):
|
||||
|
||||
@field_validator("date", mode="before", check_fields=False)
|
||||
@classmethod
|
||||
def date_validate(cls, v: str): # pylint: disable=E0213
|
||||
def date_validate(cls, v):
|
||||
"""Return the date as a datetime object."""
|
||||
return datetime.strptime(v, "%Y-%m-%d %H:%M:%S")
|
||||
|
||||
@@ -42,7 +42,7 @@ class FMPEarningsCallTranscriptFetcher(
|
||||
List[FMPEarningsCallTranscriptData],
|
||||
]
|
||||
):
|
||||
"""Transform the query, extract and transform the data from the FMP endpoints."""
|
||||
"""FMP Earnings Call Transcript Fetcher."""
|
||||
|
||||
@staticmethod
|
||||
def transform_query(params: Dict[str, Any]) -> FMPEarningsCallTranscriptQueryParams:
|
||||
@@ -57,16 +57,23 @@ class FMPEarningsCallTranscriptFetcher(
|
||||
) -> List[Dict]:
|
||||
"""Return the raw data from the FMP endpoint."""
|
||||
api_key = credentials.get("fmp_api_key") if credentials else ""
|
||||
symbols = query.symbol.split(",")
|
||||
years = query.year.split(",") if isinstance(query.year, str) else [query.year]
|
||||
|
||||
url = create_url(
|
||||
4,
|
||||
f"batch_earning_call_transcript/{query.symbol}",
|
||||
api_key,
|
||||
query,
|
||||
["symbol"],
|
||||
)
|
||||
def generate_url(symbol, year):
|
||||
"""Generate the URL."""
|
||||
url = (
|
||||
f"https://financialmodelingprep.com/api/v4/batch_earning_call_transcript/{symbol}?"
|
||||
+ f"year={year}&apikey={api_key}"
|
||||
)
|
||||
return url
|
||||
|
||||
return await get_data_many(url, **kwargs)
|
||||
urls: List = []
|
||||
for symbol in symbols:
|
||||
for year in years:
|
||||
urls.append(generate_url(symbol, year))
|
||||
|
||||
return await amake_requests(urls, **kwargs) # type: ignore
|
||||
|
||||
@staticmethod
|
||||
def transform_data(
|
||||
|
||||
Reference in New Issue
Block a user