Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SDK mapping refactors + FA refactor #3440

Merged
merged 7 commits into from
Nov 17, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 9 additions & 17 deletions openbb_terminal/miscellaneous/library/trail_map.csv
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ stocks.ba.infer,openbb_terminal.common.behavioural_analysis.twitter_model.load_a
stocks.ba.sentiment,openbb_terminal.common.behavioural_analysis.twitter_model.get_sentiment,openbb_terminal.common.behavioural_analysis.twitter_view.display_sentiment
etf.news,openbb_terminal.common.newsapi_model.get_news,openbb_terminal.common.newsapi_view.display_news
news,openbb_terminal.common.feedparser_model.get_news,
qa.bw,openbb_terminal.common.quantitative_analysis.qa_view.display_bw,openbb_terminal.common.quantitative_analysis.qa_view.display_bw
qa.bw,openbb_terminal.common.quantitative_analysis.qa_view.display_bw,
qa.calculate_adjusted_var,openbb_terminal.common.quantitative_analysis.qa_model.calculate_adjusted_var,
qa.es,openbb_terminal.common.quantitative_analysis.qa_model.get_es,openbb_terminal.common.quantitative_analysis.qa_view.display_es
qa.normality,openbb_terminal.common.quantitative_analysis.qa_model.get_normality,openbb_terminal.common.quantitative_analysis.qa_view.display_normality
Expand Down Expand Up @@ -105,7 +105,6 @@ crypto.disc.categories_keys,openbb_terminal.cryptocurrency.discovery.pycoingecko
crypto.disc.coin_list,openbb_terminal.cryptocurrency.discovery.pycoingecko_model.get_coin_list,
crypto.disc.coins,openbb_terminal.cryptocurrency.discovery.pycoingecko_model.get_coins,openbb_terminal.cryptocurrency.discovery.pycoingecko_view.display_coins
crypto.disc.coins_for_given_exchange,openbb_terminal.cryptocurrency.discovery.pycoingecko_model.get_coins_for_given_exchange,
crypto.disc.gainers_or_losers,openbb_terminal.cryptocurrency.discovery.pycoingecko_model.get_gainers_or_losers,
crypto.disc.gainers,openbb_terminal.cryptocurrency.discovery.pycoingecko_model.get_gainers,openbb_terminal.cryptocurrency.discovery.pycoingecko_view.display_gainers
crypto.disc.losers,openbb_terminal.cryptocurrency.discovery.pycoingecko_model.get_losers,openbb_terminal.cryptocurrency.discovery.pycoingecko_view.display_losers
crypto.disc.trending,openbb_terminal.cryptocurrency.discovery.pycoingecko_model.get_trending_coins,openbb_terminal.cryptocurrency.discovery.pycoingecko_view.display_trending
Expand Down Expand Up @@ -250,11 +249,10 @@ economy.perfmap,openbb_terminal.economy.finviz_model.get_performance_map,
economy.fred_series,openbb_terminal.economy.fred_model.get_aggregated_series_data,openbb_terminal.economy.fred_view.display_fred_series
economy.fred_ids,openbb_terminal.economy.fred_model.get_series_ids,
economy.fred_notes,openbb_terminal.economy.fred_model.get_series_notes,
economy.fred_yield_curve,openbb_terminal.economy.fred_model.get_yield_curve,openbb_terminal.economy.fred_view.display_yield_curve
economy.ycrv,openbb_terminal.economy.fred_model.get_yield_curve,openbb_terminal.economy.fred_view.display_yield_curve
economy.get_events_countries,openbb_terminal.economy.investingcom_model.get_events_countries,
economy.events,openbb_terminal.economy.nasdaq_model.get_economic_calendar,
economy.get_ycrv_countries,openbb_terminal.economy.investingcom_model.get_ycrv_countries,
economy.ycrv,openbb_terminal.economy.fred_model.get_yield_curve,openbb_terminal.economy.fred_view.display_yield_curve
economy.country_codes,openbb_terminal.economy.nasdaq_model.get_country_codes,
economy.bigmac,openbb_terminal.economy.nasdaq_model.get_big_mac_indices,openbb_terminal.economy.nasdaq_view.display_big_mac_index
economy.glbonds,openbb_terminal.economy.wsj_model.global_bonds,
Expand All @@ -278,9 +276,8 @@ etf.etf_by_name,openbb_terminal.etf.stockanalysis_model.get_etfs_by_name,openbb_
etf.weights,openbb_terminal.etf.yfinance_model.get_etf_sector_weightings,openbb_terminal.etf.yfinance_view.display_etf_weightings
etf.summary,openbb_terminal.etf.yfinance_model.get_etf_summary_description,openbb_terminal.etf.yfinance_view.display_etf_description
forex.get_currency_list,openbb_terminal.forex.av_model.get_currency_list,
forex.hist,openbb_terminal.forex.av_model.get_historical,
forex.quote,openbb_terminal.forex.av_model.get_quote,openbb_terminal.forex.av_view.display_quote
forex.oanda.fwd,openbb_terminal.forex.fxempire_model.get_forward_rates,openbb_terminal.forex.fxempire_view.display_forward_rates
forex.quote,openbb_terminal.forex.av_model.get_quote,
forex.fwd,openbb_terminal.forex.fxempire_model.get_forward_rates,openbb_terminal.forex.fxempire_view.display_forward_rates
forex.oanda.summary,openbb_terminal.forex.oanda.oanda_model.account_summary_request,openbb_terminal.forex.oanda.oanda_view.get_account_summary
forex.oanda.cancel,openbb_terminal.forex.oanda.oanda_model.cancel_pending_order_request,openbb_terminal.forex.oanda.oanda_view.cancel_pending_order
forex.oanda.close,openbb_terminal.forex.oanda.oanda_model.close_trades_request,openbb_terminal.forex.oanda.oanda_view.close_trade
Expand Down Expand Up @@ -409,12 +406,12 @@ stocks.dd.analyst,openbb_terminal.stocks.due_diligence.finviz_model.get_analyst_
stocks.dd.news,openbb_terminal.stocks.due_diligence.finviz_model.get_news,
stocks.dd.rating,openbb_terminal.stocks.due_diligence.fmp_model.get_rating,
stocks.dd.sec,openbb_terminal.stocks.due_diligence.marketwatch_model.get_sec_filings,openbb_terminal.stocks.due_diligence.marketwatch_view.sec_filings
stocks.fa.av_balance,openbb_terminal.stocks.fundamental_analysis.av_model.get_balance_sheet,
stocks.fa.av_cash,openbb_terminal.stocks.fundamental_analysis.av_model.get_cash_flow,openbb_terminal.stocks.fundamental_analysis.av_view.display_cash_flow
stocks.fa.dupont,openbb_terminal.stocks.fundamental_analysis.av_model.get_dupont,
stocks.fa.earnings,openbb_terminal.stocks.fundamental_analysis.av_model.get_earnings,
stocks.fa.fraud,openbb_terminal.stocks.fundamental_analysis.av_model.get_fraud_ratios,
stocks.fa.av_income,openbb_terminal.stocks.fundamental_analysis.av_model.get_income_statements,
stocks.fa.income,openbb_terminal.stocks.fundamental_analysis.sdk_helpers.get_income_statement,
stocks.fa.cash,openbb_terminal.stocks.fundamental_analysis.sdk_helpers.get_cash_flow,
stocks.fa.balance,openbb_terminal.stocks.fundamental_analysis.sdk_helpers.get_balance_sheet,
stocks.fa.av_metrics,openbb_terminal.stocks.fundamental_analysis.av_model.get_key_metrics,
stocks.fa.av_overview,openbb_terminal.stocks.fundamental_analysis.av_model.get_overview,
stocks.fa.mgmt,openbb_terminal.stocks.fundamental_analysis.business_insider_model.get_management,
Expand All @@ -423,22 +420,17 @@ stocks.fa.fama_raw,openbb_terminal.stocks.fundamental_analysis.dcf_model.get_fam
stocks.fa.historical_5,openbb_terminal.stocks.fundamental_analysis.dcf_model.get_historical_5,
stocks.fa.similar_dfs,openbb_terminal.stocks.fundamental_analysis.dcf_model.get_similar_dfs,
stocks.fa.analysis,openbb_terminal.stocks.fundamental_analysis.eclect_us_model.get_filings_analysis,
stocks.fa.fmp_balance,openbb_terminal.stocks.fundamental_analysis.fmp_model.get_balance,
stocks.fa.fmp_cash,openbb_terminal.stocks.fundamental_analysis.fmp_model.get_cash,
stocks.fa.dcf,openbb_terminal.stocks.fundamental_analysis.fmp_model.get_dcf,
stocks.fa.enterprise,openbb_terminal.stocks.fundamental_analysis.fmp_model.get_enterprise,
stocks.fa.growth,openbb_terminal.stocks.fundamental_analysis.fmp_model.get_financial_growth,
stocks.fa.fmp_income,openbb_terminal.stocks.fundamental_analysis.fmp_model.get_income,
stocks.fa.fmp_metrics,openbb_terminal.stocks.fundamental_analysis.fmp_model.get_key_metrics,
stocks.fa.fmp_ratios,openbb_terminal.stocks.fundamental_analysis.fmp_model.get_key_ratios,
stocks.fa.ratios,openbb_terminal.stocks.fundamental_analysis.fmp_model.get_key_ratios,
stocks.fa.profile,openbb_terminal.stocks.fundamental_analysis.fmp_model.get_profile,
stocks.fa.quote,openbb_terminal.stocks.fundamental_analysis.fmp_model.get_quote,
stocks.fa.score,openbb_terminal.stocks.fundamental_analysis.fmp_model.get_score,
stocks.fa.data,openbb_terminal.stocks.fundamental_analysis.finviz_model.get_data,
stocks.fa.poly_financials,openbb_terminal.stocks.fundamental_analysis.polygon_model.get_financials,openbb_terminal.stocks.fundamental_analysis.polygon_view.display_fundamentals
stocks.fa.cal,openbb_terminal.stocks.fundamental_analysis.yahoo_finance_model.get_calendar_earnings,
stocks.fa.divs,openbb_terminal.stocks.fundamental_analysis.yahoo_finance_model.get_dividends,
stocks.fa.yf_financials,openbb_terminal.stocks.fundamental_analysis.yahoo_finance_model.get_financials,openbb_terminal.stocks.fundamental_analysis.yahoo_finance_view.display_fundamentals
stocks.fa.hq,openbb_terminal.stocks.fundamental_analysis.yahoo_finance_model.get_hq,
stocks.fa.info,openbb_terminal.stocks.fundamental_analysis.yahoo_finance_model.get_info,
stocks.fa.mktcap,openbb_terminal.stocks.fundamental_analysis.yahoo_finance_model.get_mktcap,openbb_terminal.stocks.fundamental_analysis.yahoo_finance_view.display_mktcap
Expand Down Expand Up @@ -555,4 +547,4 @@ keys.shroom,openbb_terminal.keys_model.set_shroom_key,
futures.search,openbb_terminal.futures.yfinance_model.get_search_futures,openbb_terminal.futures.yfinance_view.display_search
futures.historical,openbb_terminal.futures.yfinance_model.get_historical_futures,openbb_terminal.futures.yfinance_view.display_historical
futures.curve,openbb_terminal.futures.yfinance_model.get_curve_futures,openbb_terminal.futures.yfinance_view.display_curve
economy.get_groups,openbb_terminal.economy.finviz_model.get_groups
economy.get_groups,openbb_terminal.economy.finviz_model.get_groups
6 changes: 6 additions & 0 deletions openbb_terminal/stocks/fundamental_analysis/fmp_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -252,9 +252,11 @@ def get_income(
# Invalid API Keys
except ValueError as e:
console.print(e)
return pd.DataFrame()
# Premium feature, API plan is not authorized
except HTTPError as e:
console.print(e)
return pd.DataFrame()

if ratios:
types = df_fa.copy().applymap(lambda x: isinstance(x, (float, int))).all(axis=1)
Expand Down Expand Up @@ -321,9 +323,11 @@ def get_balance(
# Invalid API Keys
except ValueError as e:
console.print(e)
return pd.DataFrame()
# Premium feature, API plan is not authorized
except HTTPError as e:
console.print(e)
return pd.DataFrame()

if ratios:
types = df_fa.copy().applymap(lambda x: isinstance(x, (float, int))).all(axis=1)
Expand Down Expand Up @@ -387,9 +391,11 @@ def get_cash(
# Invalid API Keys
except ValueError as e:
console.print(e)
return pd.DataFrame()
# Premium feature, API plan is not authorized
except HTTPError as e:
console.print(e)
return pd.DataFrame()

if ratios:
types = df_fa.copy().applymap(lambda x: isinstance(x, (float, int))).all(axis=1)
Expand Down
200 changes: 200 additions & 0 deletions openbb_terminal/stocks/fundamental_analysis/sdk_helpers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,200 @@
"""SDK Helper Functions"""
__docformat__ = "numpy"

import pandas as pd
from openbb_terminal.stocks.fundamental_analysis import (
yahoo_finance_model,
polygon_model,
av_model,
fmp_model,
eodhd_model,
)


def get_income_statement(
symbol: str,
quarterly: bool = False,
ratios: bool = False,
source: str = "YahooFinance",
limit: int = 10,
) -> pd.DataFrame:
"""Get income statement.

Parameters
----------
symbol : str
Symbol to get income statement for
source : str, optional
Data source for income statement, by default "YahooFinance"
quarterly : bool, optional
Flag to get quarterly data
ratios : bool, optional
Flag to return data as a percent change.
limit : int
Number of statements to return (free tiers may be limited to 5 years)

Returns
-------
pd.DataFrame
Dataframe of income statement

Examples
--------
>>> from openbb_terminal.sdk import openbb
>>> income_statement = openbb.stocks.fa.income("AAPL", source="YahooFinance)

If you have a premium AlphaVantage key, you can use the quarterly flag to get quarterly statements
>>> quarterly_income_statement = openbb.stocks.fa.income("AAPL", source="AlphaVantage", quarterly=True)
"""
if source == "YahooFinance":
if quarterly:
print(
"Quarterly income statement not available from Yahoo Finance. Returning annual"
)
df = yahoo_finance_model.get_financials(
symbol=symbol, statement="financials", ratios=ratios
)
return df
if source == "AlphaVantage":
df = av_model.get_income_statements(
symbol=symbol, quarterly=quarterly, ratios=ratios, limit=limit
)
return df
if source == "FinancialModelingPrep":
df = fmp_model.get_income(
symbol=symbol, limit=limit, quarterly=quarterly, ratios=ratios
)
return df
if source == "Polygon":
df = polygon_model.get_financials(symbol, "income", quarterly, ratios)
return df
if source == "EODHD":
df = eodhd_model.get_financials(symbol, "income", quarterly, ratios)
return df
return pd.DataFrame()


def get_balance_sheet(
symbol: str,
quarterly: bool = False,
ratios: bool = False,
source: str = "YahooFinance",
limit: int = 10,
) -> pd.DataFrame:
"""Get balance sheet.

Parameters
----------
symbol : str
Symbol to get balance sheet for
source : str, optional
Data source for balance sheet, by default "YahooFinance"
quarterly : bool, optional
Flag to get quarterly data
ratios : bool, optional
Flag to return data as a percent change.
limit : int
Number of statements to return (free tiers may be limited to 5 years)

Returns
-------
pd.DataFrame
Dataframe of balance sheet

Examples
--------
>>> from openbb_terminal.sdk import openbb
>>> balance_sheet = openbb.stocks.fa.balance("AAPL", source="YahooFinance)

If you have a premium AlphaVantage key, you can use the quarterly flag to get quarterly statements
>>> quarterly_income_statement = openbb.stocks.fa.balance("AAPL", source="AlphaVantage", quarterly=True)
"""
if source == "YahooFinance":
if quarterly:
print(
"Quarterly statements not available from Yahoo Finance. Returning annual"
)
df = yahoo_finance_model.get_financials(
symbol=symbol, statement="balance-sheet", ratios=ratios
)
return df
if source == "AlphaVantage":
df = av_model.get_balance_sheet(
symbol=symbol, quarterly=quarterly, ratios=ratios, limit=limit
)
return df
if source == "FinancialModelingPrep":
df = fmp_model.get_balance(
symbol=symbol, limit=limit, quarterly=quarterly, ratios=ratios
)
return df
if source == "Polygon":
df = polygon_model.get_financials(symbol, "balance", quarterly, ratios)
return df
if source == "EODHD":
df = eodhd_model.get_financials(symbol, "balance", quarterly, ratios)
return df
return pd.DataFrame()


def get_cash_flow(
symbol: str,
quarterly: bool = False,
ratios: bool = False,
source: str = "YahooFinance",
limit: int = 10,
) -> pd.DataFrame:
"""Get Cash Flow.

Parameters
----------
symbol : str
Symbol to get cash flow for
source : str, optional
Data source for cash flow, by default "YahooFinance"
quarterly : bool, optional
Flag to get quarterly data
ratios : bool, optional
Flag to return data as a percent change.
limit : int
Number of statements to return (free tiers may be limited to 5 years)

Returns
-------
pd.DataFrame
Dataframe of cash flow

Examples
--------
>>> from openbb_terminal.sdk import openbb
>>> cash_flow = openbb.stocks.fa.cash("AAPL", source="YahooFinance)

If you have a premium AlphaVantage key, you can use the quarterly flag to get quarterly statements
>>> quarterly_income_statement = openbb.stocks.fa.cash("AAPL", source="AlphaVantage", quarterly=True)
"""
if source == "YahooFinance":
if quarterly:
print(
"Quarterly statements not available from Yahoo Finance. Returning annual"
)
df = yahoo_finance_model.get_financials(
symbol=symbol, statement="cash-flow", ratios=ratios
)
return df
if source == "AlphaVantage":
df = av_model.get_cash_flow(
symbol=symbol, quarterly=quarterly, ratios=ratios, limit=limit
)
return df
if source == "FinancialModelingPrep":
df = fmp_model.get_cash(
symbol=symbol, limit=limit, quarterly=quarterly, ratios=ratios
)
return df
if source == "Polygon":
df = polygon_model.get_financials(symbol, "cash", quarterly, ratios)
return df
if source == "EODHD":
df = eodhd_model.get_financials(symbol, "cash", quarterly, ratios)
return df
return pd.DataFrame()