diff options
16 files changed, 353 insertions, 283 deletions
diff --git a/openbb_platform/core/openbb_core/provider/standard_models/equity_quote.py b/openbb_platform/core/openbb_core/provider/standard_models/equity_quote.py index c98c7cfdfad..fe8885d89dd 100644 --- a/openbb_platform/core/openbb_core/provider/standard_models/equity_quote.py +++ b/openbb_platform/core/openbb_core/provider/standard_models/equity_quote.py @@ -142,7 +142,7 @@ class EquityQuoteData(Data): change_percent: Optional[float] = Field( default=None, description="Change in price as a normalized percentage.", - json_schema_extra={"x-frontendmultiply": 100}, + json_schema_extra={"x-frontend_multiply": 100}, ) year_high: Optional[float] = Field( default=None, description="The one year high (52W High)." diff --git a/openbb_platform/core/openbb_core/provider/standard_models/etf_equity_exposure.py b/openbb_platform/core/openbb_core/provider/standard_models/etf_equity_exposure.py index eb739ea1122..b2ceb5f02ea 100644 --- a/openbb_platform/core/openbb_core/provider/standard_models/etf_equity_exposure.py +++ b/openbb_platform/core/openbb_core/provider/standard_models/etf_equity_exposure.py @@ -35,7 +35,7 @@ class EtfEquityExposureData(Data): weight: Optional[float] = Field( default=None, description="The weight of the equity in the ETF, as a normalized percent.", - json_schema_extra={"units_measurement": "percent", "frontend_multiply": 100}, + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, ) market_value: Optional[Union[int, float]] = Field( default=None, diff --git a/openbb_platform/core/openbb_core/provider/standard_models/eu_yield_curve.py b/openbb_platform/core/openbb_core/provider/standard_models/eu_yield_curve.py index 81d01c278b8..eaf9efd6877 100644 --- a/openbb_platform/core/openbb_core/provider/standard_models/eu_yield_curve.py +++ b/openbb_platform/core/openbb_core/provider/standard_models/eu_yield_curve.py @@ -25,5 +25,5 @@ class EUYieldCurveData(Data): rate: Optional[float] = Field( description="Yield curve rate, as a normalized percent.", default=None, - json_schema_extra={"unit_measurement": "percent.", "frontend_multiply": 100}, + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, ) diff --git a/openbb_platform/core/openbb_core/provider/standard_models/index_historical.py b/openbb_platform/core/openbb_core/provider/standard_models/index_historical.py index ad5c1ecea46..cd32f05e594 100644 --- a/openbb_platform/core/openbb_core/provider/standard_models/index_historical.py +++ b/openbb_platform/core/openbb_core/provider/standard_models/index_historical.py @@ -69,7 +69,7 @@ class IndexHistoricalData(Data): @field_validator("date", mode="before", check_fields=False) @classmethod - def date_validate(cls, v): + def date_validate(cls, v): # pylint: disable=E0213 """Return formatted datetime.""" if ":" in str(v): return parser.isoparse(str(v)) diff --git a/openbb_platform/core/openbb_core/provider/standard_models/treasury_rates.py b/openbb_platform/core/openbb_core/provider/standard_models/treasury_rates.py index 743ec65a746..93149d1c377 100644 --- a/openbb_platform/core/openbb_core/provider/standard_models/treasury_rates.py +++ b/openbb_platform/core/openbb_core/provider/standard_models/treasury_rates.py @@ -33,65 +33,65 @@ class TreasuryRatesData(Data): week_4: Optional[float] = Field( default=None, description="4 week Treasury bills rate (secondary market).", - json_schema_extra={"unit_measurement": "percent", "frontend_multiply": 100}, + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, ) month_1: Optional[float] = Field( description="1 month Treasury rate.", default=None, - json_schema_extra={"unit_measurement": "percent", "frontend_multiply": 100}, + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, ) month_2: Optional[float] = Field( description="2 month Treasury rate.", default=None, - json_schema_extra={"unit_measurement": "percent", "frontend_multiply": 100}, + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, ) month_3: Optional[float] = Field( description="3 month Treasury rate.", default=None, - json_schema_extra={"unit_measurement": "percent", "frontend_multiply": 100}, + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, ) month_6: Optional[float] = Field( description="6 month Treasury rate.", default=None, - json_schema_extra={"unit_measurement": "percent", "frontend_multiply": 100}, + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, ) year_1: Optional[float] = Field( description="1 year Treasury rate.", default=None, - json_schema_extra={"unit_measurement": "percent", "frontend_multiply": 100}, + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, ) year_2: Optional[float] = Field( description="2 year Treasury rate.", default=None, - json_schema_extra={"unit_measurement": "percent", "frontend_multiply": 100}, + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, ) year_3: Optional[float] = Field( description="3 year Treasury rate.", default=None, - json_schema_extra={"unit_measurement": "percent", "frontend_multiply": 100}, + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, ) year_5: Optional[float] = Field( description="5 year Treasury rate.", default=None, - json_schema_extra={"unit_measurement": "percent", "frontend_multiply": 100}, + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, ) year_7: Optional[float] = Field( description="7 year Treasury rate.", default=None, - json_schema_extra={"unit_measurement": "percent", "frontend_multiply": 100}, + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, ) year_10: Optional[float] = Field( description="10 year Treasury rate.", default=None, - json_schema_extra={"unit_measurement": "percent", "frontend_multiply": 100}, + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, ) year_20: Optional[float] = Field( description="20 year Treasury rate.", default=None, - json_schema_extra={"unit_measurement": "percent", "frontend_multiply": 100}, + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, ) year_30: Optional[float] = Field( description="30 year Treasury rate.", default=None, - json_schema_extra={"unit_measurement": "percent", "frontend_multiply": 100}, + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, ) diff --git a/openbb_platform/core/tests/app/logs/test_handlers_manager.py b/openbb_platform/core/tests/app/logs/test_handlers_manager.py index d46451c6314..1d0f865565f 100644 --- a/openbb_platform/core/tests/app/logs/test_handlers_manager.py +++ b/openbb_platform/core/tests/app/logs/test_handlers_manager.py @@ -40,15 +40,19 @@ class MockFormatterWithExceptions(logging.Formatter): def test_handlers_added_correctly(): """Test if the handlers are added correctly.""" - with patch( - "openbb_core.app.logs.handlers_manager.PosthogHandler", - MockPosthogHandler, - ), patch( - "openbb_core.app.logs.handlers_manager.PathTrackingFileHandler", - MockPathTrackingFileHandler, - ), patch( - "openbb_core.app.logs.handlers_manager.FormatterWithExceptions", - MockFormatterWithExceptions, + with ( + patch( + "openbb_core.app.logs.handlers_manager.PosthogHandler", + MockPosthogHandler, + ), + patch( + "openbb_core.app.logs.handlers_manager.PathTrackingFileHandler", + MockPathTrackingFileHandler, + ), + patch( + "openbb_core.app.logs.handlers_manager.FormatterWithExceptions", + MockFormatterWithExceptions, + ), ): settings = Mock() settings.handler_list = ["stdout", "stderr", "noop", "file", "posthog"] @@ -75,15 +79,19 @@ def test_handlers_added_correctly(): def test_update_handlers(): """Test if the handlers are updated correctly.""" - with patch( - "openbb_core.app.logs.handlers_manager.PosthogHandler", - MockPosthogHandler, - ), patch( - "openbb_core.app.logs.handlers_manager.PathTrackingFileHandler", - MockPathTrackingFileHandler, - ), patch( - "openbb_core.app.logs.handlers_manager.FormatterWithExceptions", - MockFormatterWithExceptions, + with ( + patch( + "openbb_core.app.logs.handlers_manager.PosthogHandler", + MockPosthogHandler, + ), + patch( + "openbb_core.app.logs.handlers_manager.PathTrackingFileHandler", + MockPathTrackingFileHandler, + ), + patch( + "openbb_core.app.logs.handlers_manager.FormatterWithExceptions", + MockFormatterWithExceptions, + ), ): settings = Mock() settings.handler_list = ["file", "posthog"] diff --git a/openbb_platform/providers/benzinga/openbb_benzinga/models/analyst_search.py b/openbb_platform/providers/benzinga/openbb_benzinga/models/analyst_search.py index f5cf40a2a5a..3c9cf4646ab 100644 --- a/openbb_platform/providers/benzinga/openbb_benzinga/models/analyst_search.py +++ b/openbb_platform/providers/benzinga/openbb_benzinga/models/analyst_search.py @@ -90,19 +90,19 @@ class BenzingaAnalystSearchData(AnalystSearchData): overall_success_rate: Optional[float] = Field( default=None, description="The percentage (normalized) of gain/loss ratings that resulted in a gain overall.", - json_schema_extra={"unit_measurement": "percent", "frontend_multiply": 100}, + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, ) overall_avg_return_percentile: Optional[float] = Field( default=None, description="The percentile (normalized) of this analyst's overall average" + " return per rating in comparison to other analysts' overall average returns per rating.", - json_schema_extra={"unit_measurement": "percent", "frontend_multiply": 100}, + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, ) total_ratings_percentile: Optional[float] = Field( default=None, description="The percentile (normalized) of this analyst's total number of ratings" + " in comparison to the total number of ratings published by all other analysts", - json_schema_extra={"unit_measurement": "percent", "frontend_multiply": 100}, + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, ) total_ratings: Optional[int] = Field( default=None, @@ -119,13 +119,13 @@ class BenzingaAnalystSearchData(AnalystSearchData): overall_average_return: Optional[float] = Field( default=None, description="The average percent (normalized) price difference per rating since the date of recommendation", - json_schema_extra={"unit_measurement": "percent", "frontend_multiply": 100}, + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, ) overall_std_dev: Optional[float] = Field( default=None, description="The standard deviation in percent (normalized) price difference in the" + " analyst's ratings since the date of recommendation", - json_schema_extra={"unit_measurement": "percent", "frontend_multiply": 100}, + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, alias="overall_stdev", ) gain_count_1m: Optional[int] = Field( @@ -141,14 +141,14 @@ class BenzingaAnalystSearchData(AnalystSearchData): average_return_1m: Optional[float] = Field( default=None, description="The average percent (normalized) price difference per rating over the last month", - json_schema_extra={"unit_measurement": "percent", "frontend_multiply": 100}, + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, alias="1m_average_return", ) std_dev_1m: Optional[float] = Field( default=None, description="The standard deviation in percent (normalized) price difference in the" + " analyst's ratings over the last month", - json_schema_extra={"unit_measurement": "percent", "frontend_multiply": 100}, + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, alias="1m_stdev", ) smart_score_1m: Optional[float] = Field( @@ -176,14 +176,14 @@ class BenzingaAnalystSearchData(AnalystSearchData): default=None, description="The average percent (normalized) price difference per rating over" + " the last 3 months", - json_schema_extra={"unit_measurement": "percent", "frontend_multiply": 100}, + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, alias="3m_average_return", ) std_dev_3m: Optional[float] = Field( default=None, description="The standard deviation in percent (normalized) price difference in the" + " analyst's ratings over the last 3 months", - json_schema_extra={"unit_measurement": "percent", "frontend_multiply": 100}, + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, alias="3m_stdev", ) smart_score_3m: Optional[float] = Field( @@ -211,14 +211,14 @@ class BenzingaAnalystSearchData(AnalystSearchData): default=None, description="The average percent (normalized) price difference per rating over" + " the last 6 months", - json_schema_extra={"unit_measurement": "percent", "frontend_multiply": 100}, + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, alias="6m_average_return", ) std_dev_6m: Optional[float] = Field( default=None, description="The standard deviation in percent (normalized) price difference in the" + " analyst's ratings over the last 6 months", - json_schema_extra={"unit_measurement": "percent", "frontend_multiply": 100}, + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, alias="6m_stdev", ) gain_count_9m: Optional[int] = Field( @@ -235,14 +235,14 @@ class BenzingaAnalystSearchData(AnalystSearchData): default=None, description="The average percent (normalized) price difference per rating over" + " the last 9 months", - json_schema_extra={"unit_measurement": "percent", "frontend_multiply": 100}, + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, alias="9m_average_return", ) std_dev_9m: Optional[float] = Field( default=None, description="The standard deviation in percent (normalized) price difference in the" + " analyst's ratings over the last 9 months", - json_schema_extra={"unit_measurement": "percent", "frontend_multiply": 100}, + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, alias="9m_stdev", ) smart_score_9m: Optional[float] = Field( @@ -270,14 +270,14 @@ class BenzingaAnalystSearchData(AnalystSearchData): default=None, description="The average percent (normalized) price difference per rating over" + " the last 1 year", - json_schema_extra={"unit_measurement": "percent", "frontend_multiply": 100}, + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, alias="1y_average_return", ) std_dev_1y: Optional[float] = Field( default=None, description="The standard deviation in percent (normalized) price difference in the" + " analyst's ratings over the last 1 year", - json_schema_extra={"unit_measurement": "percent", "frontend_multiply": 100}, + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, alias="1y_stdev", ) smart_score_1y: Optional[float] = Field( @@ -305,14 +305,14 @@ class BenzingaAnalystSearchData(AnalystSearchData): default=None, description="The average percent (normalized) price difference per rating over" + " the last 2 years", - json_schema_extra={"unit_measurement": "percent", "frontend_multiply": 100}, + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, alias="2y_average_return", ) std_dev_2y: Optional[float] = Field( default=None, description="The standard deviation in percent (normalized) price difference in the" + " analyst's ratings over the last 2 years", - json_schema_extra={"unit_measurement": "percent", "frontend_multiply": 100}, + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, alias="2y_stdev", ) smart_score_2y: Optional[float] = Field( @@ -340,14 +340,14 @@ class BenzingaAnalystSearchData(AnalystSearchData): default=None, description="The average percent (normalized) price difference per rating over" + " the last 3 years", - json_schema_extra={"unit_measurement": "percent", "frontend_multiply": 100}, + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, alias="3y_average_return", ) std_dev_3y: Optional[float] = Field( default=None, description="The standard deviation in percent (normalized) price difference in the" + " analyst's ratings over the last 3 years", - json_schema_extra={"unit_measurement": "percent", "frontend_multiply": 100}, + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, alias="3y_stdev", ) smart_score_3y: Optional[float] = Field( diff --git a/openbb_platform/providers/benzinga/openbb_benzinga/models/price_target.py b/openbb_platform/providers/benzinga/openbb_benzinga/models/price_target.py index d799e3410d8..b0517af5127 100644 --- a/openbb_platform/providers/benzinga/openbb_benzinga/models/price_target.py +++ b/openbb_platform/providers/benzinga/openbb_benzinga/models/price_target.py @@ -45,11 +45,26 @@ class BenzingaPriceTargetQueryParams(PriceTargetQueryParams): Source: https://docs.benzinga.io/benzinga-apis/calendar/get-ratings """ + # using __alias_dict__ for the aliasing of the fields instead of `Field` alias kwarg + # otherwise openapi schema shows as `parameters[date_from]` instead of `start_date` __alias_dict__ = { "limit": "pagesize", "symbol": "parameters[tickers]", + "date": "parameters[date]", + "start_date": "parameters[date_from]", + "end_date": "parameters[date_to]", + "updated": "parameters[updated]", + "importance": "parameters[importance]", + "action": "parameters[action]", + "analyst_ids": "parameters[analyst_id]", + "firm_ids": "parameters[firm_id]", + } + __json_schema_extra__ = { + "symbol": ["multiple_items_allowed"], + "analyst_ids": ["multiple_items_allowed"], + "firm_ids": ["multiple_items_allowed"], + "fields": ["multiple_items_allowed"], } - __json_schema_extra__ = {"symbol": ["multiple_items_allowed"]} page: Optional[int] = Field( default=0, @@ -60,17 +75,14 @@ class BenzingaPriceTargetQueryParams(PriceTargetQueryParams): date: Optional[dateType] = Field( default=None, description="Date for calendar data, shorthand for date_from and date_to.", - alias="parameters[date]", ) start_date: Optional[dateType] = Field( default=None, description=QUERY_DESCRIPTIONS.get("start_date", ""), - alias="parameters[date_from]", ) end_date: Optional[dateType] = Field( default=None, description=QUERY_DESCRIPTIONS.get("end_date", ""), - alias="parameters[date_to]", ) updated: Optional[Union[dateType, int]] = Field( default=None, @@ -78,13 +90,11 @@ class BenzingaPriceTargetQueryParams(PriceTargetQueryParams): + " This will force the sort order to be Greater Than or Equal to the timestamp indicated." + " The date can be a date string or a Unix timestamp." + " The date string must be in the format of YYYY-MM-DD.", - alias="parameters[updated]", ) importance: Optional[int] = Field( default=None, description="Importance level to filter by." + " Uses Greater Than or Equal To the importance indicated", - alias="parameters[importance]", ) action: Optional[ Literal[ @@ -103,18 +113,15 @@ class BenzingaPriceTargetQueryParams(PriceTargetQueryParams): ] = Field( default=None, description="Filter by a specific action_company.", - alias="parameters[action]", ) analyst_ids: Optional[Union[List[str], str]] = Field( default=None, description="Comma-separated list of analyst (person) IDs." + " Omitting will bring back all available analysts.", - alias="parameters[analyst_id]", ) firm_ids: Optional[Union[List[str], str]] = Field( default=None, description="Comma-separated list of firm IDs.", - alias="parameters[firm_id]", ) fields: Optional[Union[List[str], str]] = Field( default=None, diff --git a/openbb_platform/providers/fmp/openbb_fmp/models/equity_historical.py b/openbb_platform/providers/fmp/openbb_fmp/models/equity_historical.py index 5225a0daa18..27e78bcf101 100644 --- a/openbb_platform/providers/fmp/openbb_fmp/models/equity_historical.py +++ b/openbb_platform/providers/fmp/openbb_fmp/models/equity_historical.py @@ -43,6 +43,7 @@ class FMPEquityHistoricalQueryParams(EquityHistoricalQueryParams): class FMPEquityHistoricalData(EquityHistoricalData): """FMP Equity Historical Price Data.""" + symbol: Optional[str] = Field(default=None, description="Symbol of the equity.") adj_close: Optional[float] = Field( default=None, description=DATA_DESCRIPTIONS.get("adj_close", "") ) diff --git a/openbb_platform/providers/fmp/openbb_fmp/models/etf_holdings.py b/openbb_platform/providers/fmp/openbb_fmp/models/etf_holdings.py index 6c6566828de..385a2403926 100644 --- a/openbb_platform/providers/fmp/openbb_fmp/models/etf_holdings.py +++ b/openbb_platform/providers/fmp/openbb_fmp/models/etf_holdings.py @@ -73,7 +73,7 @@ class FMPEtfHoldingsData(EtfHoldingsData): description="The weight of the holding, as a normalized percent.", alias="pctVal", default=None, - json_schema_extra={"unit_measurement": "percent", "frontend_multiply": 100}, + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, ) payoff_profile: Optional[str] = Field( description="The payoff profile of the holding.", diff --git a/openbb_platform/providers/fmp/openbb_fmp/models/etf_info.py b/openbb_platform/providers/fmp/openbb_fmp/models/etf_info.py index 21cfab00a8a..4df138fc01a 100644 --- a/openbb_platform/providers/fmp/openbb_fmp/models/etf_info.py +++ b/openbb_platform/providers/fmp/openbb_fmp/models/etf_info.py @@ -43,7 +43,7 @@ class FMPEtfInfoData(EtfInfoData): expense_ratio: Optional[float] = Field( default=None, description="The expense ratio, as a normalized percent.", - json_schema_extra={"unit_measurement": "percent", "frontend_multiply": 100}, + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, ) holdings_count: Optional[int] = Field( default=None, description="Number of holdings." @@ -76,7 +76,7 @@ class FMPEtfInfoFetcher( """Return the raw data from the FMP endpoint.""" api_key = credentials.get("fmp_api_key") if credentials else "" symbols = query.symbol.split(",") - results = [] + results: List[dict] = [] async def get_one(symbol): """Get one symbol.""" diff --git a/openbb_platform/providers/fmp/openbb_fmp/models/financial_ratios.py b/openbb_platform/providers/fmp/openbb_fmp/models/financial_ratios.py index 2cc5b5f7d9b..74c678fd300 100644 --- a/openbb_platform/providers/fmp/openbb_fmp/models/financial_ratios.py +++ b/openbb_platform/providers/fmp/openbb_fmp/models/financial_ratios.py @@ -8,13 +8,16 @@ from openbb_core.provider.standard_models.financial_ratios import ( FinancialRatiosData, FinancialRatiosQueryParams, ) -from openbb_core.provider.utils.descriptions import QUERY_DESCRIPTIONS -from openbb_core.provider.utils.errors import EmptyDataError +from openbb_core.provider.utils.descriptions import ( + DATA_DESCRIPTIONS, + QUERY_DESCRIPTIONS, +) from openbb_core.provider.utils.helpers import ( - amake_request, + ClientResponse, + ClientSession, + amake_requests, to_snake_case, ) -from openbb_fmp.utils.helpers import response_callback from pydantic import Field, model_validator @@ -24,22 +27,33 @@ class FMPFinancialRatiosQueryParams(FinancialRatiosQueryParams): Source: https://financialmodelingprep.com/developer/docs/#Company-Financial-Ratios """ + __json_schema_extra__ = {"symbol": ["multiple_items_allowed"]} + period: Literal["annual", "quarter", "ttm"] = Field( default="annual", description=QUERY_DESCRIPTIONS.get("period", "") ) + with_ttm: Optional[bool] = Field( + default=False, description="Include trailing twelve months (TTM) data." + ) class FMPFinancialRatiosData(FinancialRatiosData): """FMP Financial Ratios Data.""" __alias_dict__ = { - "dividend_yield_ttm": "dividend_yiel_ttm", - "dividend_yield_ttm_percent": "dividend_yiel_percentage_ttm", "period_ending": "date", "fiscal_period": "period", "fiscal_year": "calendar_year", + "dividend_yield": "dividend_yiel", + "cash_flow_coverage_ratio": "cash_flow_coverage_ratios", + "short_term_coverage_ratio": "short_term_coverage_ratios", + "cash_flow_to_debt": "cash_flow_to_debt_ratio", + "interest_coverage_ratio": "interest_coverage", } + symbol: Optional[str] = Field( + default=None, description=DATA_DESCRIPTIONS.get("symbol", "") + ) current_ratio: Optional[float] = Field(default=None, description="Current ratio.") quick_ratio: Optional[float] = Field(default=None, description="Quick ratio.") cash_ratio: Optional[float] = Field(default=None, description="Cash ratio.") @@ -59,28 +73,44 @@ class FMPFinancialRatiosData(FinancialRatiosData): default=None, description="Cash conversion cycle." ) gross_profit_margin: Optional[float] = Field( - default=None, description="Gross profit margin." + default=None, + description="Gross profit margin.", + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, ) operating_profit_margin: Optional[float] = Field( - default=None, description="Operating profit margin." + default=None, + description="Operating profit margin.", + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, ) pretax_profit_margin: Optional[float] = Field( - default=None, description="Pretax profit margin." + default=None, + description="Pretax profit margin.", + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, ) net_profit_margin: Optional[float] = Field( - default=None, description="Net profit margin." + default=None, + description= |