diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1f4f269b2d5..7881ddcb781 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -106,7 +106,7 @@ def get_most_shorted() -> pd.DataFrame: url = "https://finance.yahoo.com/screener/predefined/most_shorted_stocks" data = pd.read_html( - requests.get(url, headers={"User-Agent": get_user_agent()}).text + request(url, headers={"User-Agent": get_user_agent()}).text )[0] data = data.iloc[:, :-1] return data @@ -137,7 +137,7 @@ def get_economy_calendar_events() -> pd.DataFrame: pd.DataFrame Get dataframe with economic calendar events """ - response = requests.get( + response = request( f"https://finnhub.io/api/v1/calendar/economic?token={cfg.API_FINNHUB_KEY}" ) diff --git a/openbb_terminal/alternative/hackernews_model.py b/openbb_terminal/alternative/hackernews_model.py index 205a183d9f9..a01a50ff02d 100644 --- a/openbb_terminal/alternative/hackernews_model.py +++ b/openbb_terminal/alternative/hackernews_model.py @@ -4,8 +4,7 @@ __docformat__ = "numpy" import logging import pandas as pd -import requests - +from openbb_terminal.helper_funcs import request from openbb_terminal.decorators import log_start_end logger = logging.getLogger(__name__) @@ -24,12 +23,12 @@ def get_stories(limit: int = 10) -> pd.DataFrame: DataFrame with stories """ - res = requests.get("https://hacker-news.firebaseio.com/v0/topstories.json") + res = request("https://hacker-news.firebaseio.com/v0/topstories.json") if res.status_code == 200: top_stories = res.json() stories = [] for story_id in top_stories[:limit]: - story = requests.get( + story = request( f"https://hacker-news.firebaseio.com/v0/item/{story_id}.json" ).json() stories.append(story) diff --git a/openbb_terminal/alternative/oss/github_model.py b/openbb_terminal/alternative/oss/github_model.py index ffe1fbdf9bc..63ec3517310 100644 --- a/openbb_terminal/alternative/oss/github_model.py +++ b/openbb_terminal/alternative/oss/github_model.py @@ -6,13 +6,12 @@ import logging from typing import Any, Dict, Optional import math from datetime import datetime -import requests import pandas as pd from openbb_terminal import config_terminal as cfg from openbb_terminal.decorators import check_api_key, log_start_end from openbb_terminal.rich_config import console -from openbb_terminal.helper_funcs import get_user_agent +from openbb_terminal.helper_funcs import get_user_agent, request logger = logging.getLogger(__name__) @@ -33,7 +32,7 @@ def get_github_data(url: str, **kwargs) -> Optional[Dict[str, Any]]: Dict[str, Any] Dictionary with data """ - res = requests.get( + res = request( url, headers={ "Authorization": f"token {cfg.API_GITHUB_KEY}", diff --git a/openbb_terminal/alternative/oss/runa_model.py b/openbb_terminal/alternative/oss/runa_model.py index dfa13dd60ed..33b74780df2 100644 --- a/openbb_terminal/alternative/oss/runa_model.py +++ b/openbb_terminal/alternative/oss/runa_model.py @@ -9,7 +9,7 @@ from requests.adapters import HTTPAdapter, RetryError from urllib3.util.retry import Retry from openbb_terminal.decorators import log_start_end -from openbb_terminal.helper_funcs import get_user_agent +from openbb_terminal.helper_funcs import get_user_agent, request from openbb_terminal.rich_config import console logger = logging.getLogger(__name__) @@ -80,7 +80,7 @@ def _make_request(url: str) -> Union[BeautifulSoup, None]: headers = {"User-Agent": get_user_agent()} session = _retry_session("https://runacap.com/") try: - req = session.get(url, headers=headers, timeout=5) + req = session.get(url, headers=headers) except Exception as error: logger.exception(str(error)) console.print(error) @@ -109,7 +109,7 @@ def get_startups() -> pd.DataFrame: pd.DataFrame list of startups """ - response = requests.get("https://runacap.com/ross-index/", timeout=10) + response = request("https://runacap.com/ross-index/") soup = BeautifulSoup(response.content, "html.parser") startups = [] if soup: diff --git a/openbb_terminal/common/behavioural_analysis/finbrain_model.py b/openbb_terminal/common/behavioural_analysis/finbrain_model.py index 6a371dc59ba..49adf7facd7 100644 --- a/openbb_terminal/common/behavioural_analysis/finbrain_model.py +++ b/openbb_terminal/common/behavioural_analysis/finbrain_model.py @@ -4,7 +4,7 @@ __docformat__ = "numpy" import logging import pandas as pd -import requests +from openbb_terminal.helper_funcs import request from openbb_terminal.decorators import log_start_end @@ -25,7 +25,7 @@ def get_sentiment(symbol: str) -> pd.DataFrame: pd.DataFrame Empty if there was an issue with data retrieval """ - result = requests.get(f"https://api.finbrain.tech/v0/sentiments/{symbol}") + result = request(f"https://api.finbrain.tech/v0/sentiments/{symbol}") sentiment = pd.DataFrame() if result.status_code == 200: result_json = result.json() diff --git a/openbb_terminal/common/behavioural_analysis/finnhub_model.py b/openbb_terminal/common/behavioural_analysis/finnhub_model.py index 98f9bffb0ec..9423fcf7adc 100644 --- a/openbb_terminal/common/behavioural_analysis/finnhub_model.py +++ b/openbb_terminal/common/behavioural_analysis/finnhub_model.py @@ -4,8 +4,8 @@ __docformat__ = "numpy" import logging import pandas as pd -import requests +from openbb_terminal.helper_funcs import request from openbb_terminal import config_terminal as cfg from openbb_terminal.decorators import check_api_key, log_start_end from openbb_terminal.rich_config import console @@ -28,7 +28,7 @@ def get_sentiment_stats(ticker: str) -> pd.DataFrame: pd.DataFrame Get sentiment stats """ - response = requests.get( + response = request( f"https://finnhub.io/api/v1/news-sentiment?symbol={ticker}&token={cfg.API_FINNHUB_KEY}" ) diff --git a/openbb_terminal/common/behavioural_analysis/sentimentinvestor_model.py b/openbb_terminal/common/behavioural_analysis/sentimentinvestor_model.py deleted file mode 100644 index 856dba11d3f..00000000000 --- a/openbb_terminal/common/behavioural_analysis/sentimentinvestor_model.py +++ /dev/null @@ -1,195 +0,0 @@ -"""SentimentInvestor Model""" -__docformat__ = "numpy" - -from typing import Union, Dict, Optional -from datetime import datetime, timedelta -import logging - -import pandas as pd -import requests - -from openbb_terminal import config_terminal as cfg -from openbb_terminal.decorators import log_start_end, check_api_key -from openbb_terminal.rich_config import console - -logger = logging.getLogger(__name__) - - -@log_start_end(log=logger) -@check_api_key(["API_SENTIMENTINVESTOR_TOKEN"]) -def get_historical( - symbol: str, - start_date: Optional[str] = None, - end_date: Optional[str] = None, - number: int = 100, -) -> pd.DataFrame: - """Get hour-level sentiment data for the chosen symbol. - - Source: [Sentiment Investor] - - Parameters - ---------- - symbol: str - Ticker to view sentiment data - start_date: Optional[str] - Initial date like string or unix timestamp (e.g. 12-21-2021) - end_date: Optional[str] - End date like string or unix timestamp (e.g. 12-21-2021) - number : int - Number of results returned by API call - Maximum 250 per api call - - Returns - ------- - pd.DataFrame - Dataframe of historical sentiment - """ - - if start_date is None: - start_date = (datetime.utcnow() - timedelta(days=7)).strftime("%Y-%m-%d") - - if end_date is None: - end_date = datetime.utcnow().strftime("%Y-%m-%d") - - payload: Dict[str, Union[int, str]] = { - "token": cfg.API_SENTIMENTINVESTOR_TOKEN, - "symbol": symbol, - "start": str(start_date), - "end": str(end_date), - "limit": number, - } - - response = requests.get( - "https://api.sentimentinvestor.com/v1/historical", params=payload - ) - response_json = response.json() - - df = pd.DataFrame() - - if "results" in response_json: - if response_json["results"]: - df = pd.DataFrame(response_json["results"]) - df = df.set_index("timestamp_date") - df.index = pd.to_datetime(df.index) - else: - console.print("No data found.\n") - - elif "error" in response_json: - if "Authorization error" in response_json["error"]: - console.print("[red]Invalid API Key[/red]\n") - else: - console.print({response_json["error"]}) - - return df - - -@check_api_key(["API_SENTIMENTINVESTOR_TOKEN"]) -def check_supported_ticker(symbol: str) -> bool: - """Check if the ticker is supported. - - Source: [Sentiment Investor] - - Parameters - ---------- - symbol: str - Ticker symbol to view sentiment data - - Returns - ------- - bool - True if ticker is supported - """ - - payload: Dict[str, str] = { - "token": cfg.API_SENTIMENTINVESTOR_TOKEN, - "symbol": symbol, - } - - response = requests.get( - "https://api.sentimentinvestor.com/v1/supported", params=payload - ) - if response.status_code >= 500: - return False - response_json = response.json() - - result = False - - if "result" in response_json: - # if ticker is valid, payload has result key - if response_json["result"]: - result = response_json["result"] - else: - console.print( - f"[red]Ticker {symbol} not supported. Please try another one![/red]\n" - ) - - elif "error" in response_json: - if "Authorization error" in response_json["error"]: - console.print("[red]Invalid API Key[/red]\n") - else: - console.print({response_json["error"]}) - - return result - - -@check_api_key(["API_SENTIMENTINVESTOR_TOKEN"]) -def get_trending( - start_date: Optional[str] = None, - hour: int = 0, - number: int = 10, -) -> pd.DataFrame: - """Get sentiment data on the most talked about tickers - within the last hour Source: [Sentiment Investor]. - - Parameters - ---------- - start_date : Optional[str] - Initial date, format YYYY-MM-DD - hour: int - Hour of the day in 24-hour notation (e.g. 14) - number : int - Number of results returned by API call - Maximum 250 per api call - - Returns - ------- - pd.DataFrame - Dataframe of trending data - """ - - if start_date is None: - start_date = datetime.today().strftime("%Y-%m-%d") - - # type is datetime - start_timestamp = datetime.strptime(start_date, "%Y-%m-%d") + timedelta(hours=hour) - - payload: Dict[str, Union[int, str]] = { - "token": cfg.API_SENTIMENTINVESTOR_TOKEN, - "start": str(start_timestamp), - "end": str(start_timestamp), - "limit": number, - } - - response = requests.get( - "https://api.sentimentinvestor.com/v1/trending", params=payload - ) - if response.status_code >= 500: - return pd.DataFrame() - - response_json = response.json() - - df = pd.DataFrame() - - if "results" in response_json: - if response_json["results"]: - df = pd.DataFrame(response_json["results"]) - else: - console.print(f"No data found for start date of {str(start_timestamp)}.\n") - - elif "error" in response_json: - if "Authorization error" in response_json["error"]: - console.print("[red]Invalid API Key[/red]\n") - else: - console.print({response_json["error"]}) - - return df diff --git a/openbb_terminal/common/behavioural_analysis/sentimentinvestor_view.py b/openbb_terminal/common/behavioural_analysis/sentimentinvestor_view.py deleted file mode 100644 index e40dca13f97..00000000000 --- a/openbb_terminal/common/behavioural_analysis/sentimentinvestor_view.py +++ /dev/null @@ -1,226 +0,0 @@ -"""SentimentInvestor View""" -__docformat__ = "numpy" - -import logging -import os -from typing import Optional, List -from datetime import datetime, timedelta -from matplotlib import pyplot as plt -from matplotlib.lines import Line2D -import pandas as pd - -from openbb_terminal.config_terminal import theme -from openbb_terminal.config_plot import PLOT_DPI -from openbb_terminal.rich_config import console -from openbb_terminal.common.behavioural_analysis import sentimentinvestor_model -from openbb_terminal.decorators import log_start_end -from openbb_terminal.decorators import check_api_key -from openbb_terminal.helper_funcs import ( - export_data, - print_rich_table, - plot_autoscale, - is_valid_axes_count, -) - -# pylint: disable=too-many-arguments - -logger = logging.getLogger(__name__) - - -@log_start_end(log=logger) -@check_api_key(["API_SENTIMENTINVESTOR_TOKEN"]) -def display_historical( - symbol: str, - start_date: Optional[str] = None, - end_date: Optional[str] = None, - number: int = 100, - raw: bool = False, - limit: int = 10, - export: str = "", - sheet_name: str = None, - external_axes: Optional[List[plt.Axes]] = None, -): - """Display historical sentiment data of a ticker, - and plot a chart with RHI and AHI. - - Parameters - ---------- - symbol: str - Ticker symbol to view sentiment data - start_date: Optional[str] - Initial date like string or unix timestamp (e.g. 2021-12-21) - end_date: Optional[str] - End date like string or unix timestamp (e.g. 2022-01-15) - number: int - Number of results returned by API call - Maximum 250 per api call - raw: boolean - Whether to display raw data, by default False - limit: int - Number of results display on the terminal - Default: 10 - sheet_name: str - Optionally specify the name of the sheet the data is exported to. - export: str - Format to export data - external_axes: Optional[List[plt.Axes]], optional - External axes (2 axes are expected in the list), by default None - """ - - if start_date is None: - start_date = (datetime.utcnow() - timedelta(days=7)).strftime("%Y-%m-%d") - - if end_date is None: - end_date = datetime.utcnow().strftime("%Y-%m-%d") - - supported_ticker = sentimentinvestor_model.check_supported_ticker(symbol) - - # Check to see if the ticker is supported - if not supported_ticker: - logger.error("Ticker not supported") - console.print( - f"[red]Ticker {symbol} not supported. Please try another one![/red]\n" - ) - return - - df = sentimentinvestor_model.get_historical(symbol, start_date, end_date, number) - - if df.empty: - return - - # This plot has 2 axes - if external_axes is None: - _, ax1 = plt.subplots(figsize=plot_autoscale(), dpi=PLOT_DPI) - ax2 = ax1.twinx() - elif is_valid_axes_count(external_axes, 2): - (ax1, ax2) = external_axes - else: - return - - ax1.plot(df.index, df["RHI"], color=theme.get_colors()[0]) - - ax2.plot(df.index, df["AHI"], color=theme.get_colors(reverse=True)[0]) - - ax1.set_ylabel("RHI") - ax1.set_title("Hourly-level data of RHI and AHI") - ax1.set_xlim(df.index[0], df.index[-1]) - theme.style_primary_axis(ax1) - ax1.yaxis.set_label_position("left") - - ax2.set_ylabel("AHI") - - theme.style_primary_axis(ax2) - ax2.yaxis.set_label_position("right") - ax2.grid(visible=False) - - # Manually construct the chart legend - colors = [theme.get_colors()[0], theme.get_colors(reverse=True)[0]] - lines = [Line2D([0], [0], color=c) for c in colors] - labels = ["RHI", "AHI"] - ax2.legend(lines, labels) - - if external_axes is None: - theme.visualize_output() - - export_data( - export, - os.path.dirname(os.path.abspath(__file__)).replace("common", "stocks"), - "hist", - df, - sheet_name, - ) - - RAW_COLS = ["twitter", "stocktwits", "yahoo", "likes", "RHI", "AHI"] - - if raw: - df.index = df.index.strftime("%Y-%m-%d %H:%M") - df.index.name = "Time" - - print_rich_table( - df[RAW_COLS].head(limit), - headers=[ - "Twitter", - "Stocktwits", - "Yahoo", - "Likes", - "RHI", - "AHI", - ], - show_index=True, - index_name="Time", - title="Historical Sentiment Data", - ) - - -@log_start_end(log=logger) -@check_api_key(["API_SENTIMENTINVESTOR_TOKEN"]) -def display_trending( - start_date: Optional[str] = None, - hour: int = 0, - number: int = 10, - limit: int = 10, - export: str = "", - sheet_name: str = None, -): - """Display most talked about tickers within - the last hour together with their sentiment data. - - Parameters - ---------- - start_date : Optional[str] - Initial date, format YYYY-MM-DD - hour: int - Hour of the day in 24-hour notation (e.g. 14) - number : int - Number of results returned by API call - Maximum 250 per api call - limit: int - Number of results display on the terminal - Default: 10 - sheet_name: str - Optionally specify the name of the sheet the data is exported to. - export: str - Format to export data - """ - - if start_date is None: - start_date = datetime.today().strftime("%Y-%m-%d") - - df = sentimentinvestor_model.get_trending(start_date, hour, number) - - if df.empty: - return - - export_data( - export, - os.path.dirname(os.path.abspath(__file__)).replace("common", "stocks"), - "trend", - df, - sheet_name, - ) - - RAW_COLS = [ - "total", - "twitter", - "stocktwits", - "yahoo", - "likes", - "RHI", - "AHI", - ] - - RAW_COLS = [col for col in RAW_COLS if col in df.columns.tolist()] - - df.ticker = df.ticker.str.upper() - df = df.set_index("ticker") - - df.timestamp_date = pd.to_datetime(df.timestamp_date) - timestamp = df.timestamp_date[0].strftime("%Y-%m-%d %H:%M") - - print_rich_table( - df[RAW_COLS].head(limit), - headers=[col.upper() for col in RAW_COLS], - show_index=True, - index_name="TICKER", - title=f"Most trending stocks at {timestamp}", - ) diff --git a/openbb_terminal/common/behavioural_analysis/stocktwits_model.py b/openbb_terminal/common/behavioural_analysis/stocktwits_model.py index 304ab4daf65..53ef1639b2c 100644 --- a/openbb_terminal/common/behavioural_analysis/stocktwits_model.py +++ b/openbb_terminal/common/behavioural_analysis/stocktwits_model.py @@ -5,9 +5,9 @@ import logging from typing import Any, Dict, List, Tuple import pandas as pd -import requests from openbb_terminal.decorators import log_start_end +from openbb_terminal.helper_funcs import request logger = logging.getLogger(__name__) @@ -29,9 +29,7 @@ def get_bullbear(symbol: str) -> Tuple[int, int, int, int]: Number of bullish statements, Number of bearish statements, """ - result = requests.get( - f"https://api.stocktwits.com/api/2/streams/symbol/{symbol}.json" - ) + result = request(f"https://api.stocktwits.com/api/2/streams/symbol/{symbol}.json") if result.status_code == 200: result_json = result.json() watchlist_count = result_json["symbol"]["watchlist_count"] @@ -64,9 +62,7 @@ def get_messages(symbol: str, limit: int = 30) -> pd.DataFrame: pd.DataFrame Dataframe of messages """ - result = requests.get( - f"https://api.stocktwits.com/api/2/streams/symbol/{symbol}.json" - ) + result = request(f"https://api.stocktwits.com/api/2/streams/symbol/{symbol}.json") if result.status_code == 200: return pd.DataFrame( [message["body"] for message in result.json()["messages"][:limit]] @@ -84,7 +80,7 @@ def get_trending() -> pd.DataFrame: pd.DataFrame Dataframe of trending tickers and watchlist count """ - result = requests.get("https://api.stocktwits.com/api/2/trending/symbols.json") + result = request("https://api.stocktwits.com/api/2/trending/symbols.json") if result.status_code == 200: l_symbols = [ [symbol["symbol"], symbol["watchlist_count"], symbol["title"]] @@ -115,7 +111,7 @@ def get_stalker(user: str, limit: int = 30) -> List[Dict[str, Any]]: List[Dict[str, Any]] List of posts """ - result = requests.get(f"https://api.stocktwits.com/api/2/streams/user/{user}.json") + result = request(f"https://api.stocktwits.com/api/2/streams/user/{user}.json") if result.status_code == 200: return list(result.json()["messages"][:limit]) diff --git a/openbb_terminal/common/behavioural_analysis/twitter_model.py b/openbb_terminal/common/behavioural_analysis/twitter_model.py index ae9d4d15dcc..449c90d71ef 100644 --- a/openbb_terminal/common/behavioural_analysis/twitter_model.py +++ b/openbb_terminal/common/behavioural_analysis/twitter_model.py @@ -6,12 +6,11 @@ import logging from typing import Optional import pandas as pd -import requests from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer from openbb_terminal import config_terminal as cfg from openbb_terminal.decorators import check_api_key, log_start_end -from openbb_terminal.helper_funcs import clean_tweet, get_data +from openbb_terminal.helper_funcs import clean_tweet, get_data, request from openbb_terminal.rich_config import console logger = logging.getLogger(__name__) @@ -58,7 +57,7 @@ def load_analyze_tweets( params["end_time"] = end_date # Request Twitter API - response = requests.get( + response = request( "https://api.twitter.com/2/tweets/search/recent", params=params, # type: ignore headers={"authorization": "Bearer " + cfg.API_TWITTER_BEARER_TOKEN}, diff --git a/openbb_terminal/common/newsapi_model.py b/openbb_terminal/common/newsapi_model.py index eba9ef25a16..e239e45dabc 100644 --- a/openbb_terminal/common/newsapi_model.py +++ b/openbb_terminal/common/newsapi_model.py @@ -5,11 +5,11 @@ import logging from datetime import datetime, timedelta from typing import Any, List, Optional, Tuple -import requests import pandas as pd from openbb_terminal import config_terminal as cfg from openbb_terminal.decorators import check_api_key, log_start_end from openbb_terminal.rich_config import console +from openbb_terminal.helper_funcs import request logger = logging.getLogger(__name__) @@ -58,7 +58,7 @@ def get_news( link += f"&apiKey={cfg.API_NEWS_TOKEN}" - response = requests.get(link) + response = request(link) articles = {} diff --git a/openbb_terminal/config_terminal.py b/openbb_terminal/config_terminal.py index 3fb20facf17..f440267a7b5 100644 --- a/openbb_terminal/config_terminal.py +++ b/openbb_terminal/config_terminal.py @@ -19,6 +19,10 @@ dotenv.load_dotenv(USER_ENV_FILE) dotenv.load_dotenv(REPOSITORY_ENV_FILE, override=True) dotenv.load_dotenv(PACKAGE_ENV_FILE, override=True) +# Network requests +# Set request timeout +REQUEST_TIMEOUT = load_env_vars("OPENBB_REQUEST_TIMEOUT", int, 5) + # Terminal UX section MPL_STYLE = os.getenv("OPENBB_MPLSTYLE") or "dark" PMF_STYLE = os.getenv("OPENBB_PMFSTYLE") or "dark" diff --git a/openbb_terminal/cryptocurrency/coinbase_helpers.py b/openbb_terminal/cryptocurrency/coinbase_helpers.py index 77a0e604c63..7bfc7ee44ac 100644 --- a/openbb_terminal/cryptocurrency/coinbase_helpers.py +++ b/openbb_terminal/cryptocurrency/coinbase_helpers.py @@ -2,17 +2,18 @@ __docformat__ = "numpy" import argparse -import binascii -import logging - -from typing import Optional, Any, Union -import hmac -import hashlib -import time import base64 -import requests +import binascii +import hashlib +import hmac +import logging +import time +from typing import Any, Optional, Union + from requests.auth import AuthBase + import openbb_terminal.config_terminal as cfg +from openbb_terminal.helper_funcs import request from openbb_terminal.rich_config import console logger = logging.getLogger(__name__) @@ -26,9 +27,14 @@ class CoinbaseProAuth(AuthBase): self.secret_key = secret_key self.passphrase = passphrase - def __call__(self, request): + def __call__(self, request_coinbase): timestamp = str(time.time()) - message = timestamp + request.method + request.path_url + (request.body or "") + message = ( + timestamp + + request_coinbase.method + + request_coinbase.path_url + + (request_coinbase.body or "") + ) message = message.encode("ascii") try: @@ -39,7 +45,7 @@ class CoinbaseProAuth(AuthBase): logger.exception(str(e)) signature_b64 = "" - request.headers.update( + request_coinbase.headers.update( { "CB-ACCESS-SIGN": signature_b64, "CB-ACCESS-TIMESTAMP": timestamp, @@ -48,7 +54,7 @@ class CoinbaseProAuth(AuthBase): "Content-Type": "application/json", } ) - return request + return request_coinbase class CoinbaseRequestException(Exception): @@ -119,7 +125,7 @@ def make_coinbase_request( """ url = "https://api.pro.coinbase.com" - response = requests.get(url + endpoint, params=params, auth=auth) + response = request(url + endpoint, params=params, auth=auth) if not 200 <= response.status_code < 300: raise CoinbaseApiException(f"Invalid Authentication: {response.text}") diff --git a/openbb_terminal/cryptocurrency/data/README.md b/openbb_terminal/cryptocurrency/data/README.md index d25d9a2324a..3bcd2484f81 100644 --- a/openbb_terminal/cryptocurrency/data/README.md +++ b/openbb_terminal/cryptocurrency/data/README.md @@ -26,10 +26,10 @@ for category in categories: - Endpoint: [https://api.llama.fi/protocols](https://api.llama.fi/protocols) ```python -import requests +import request API_URL = "https://api.llama.fi" url = f"{API_URL}/protocols" -r = requests.get(url) +r = request(url) data = r.json() protocols = {} for protocol in data: diff --git a/openbb_terminal/cryptocurrency/defi/coindix_model.py b/openbb_terminal/cryptocurrency/defi/coindix_model.py index ea1d9a85faa..17bdee0b63a 100644 --- a/openbb_terminal/cryptocurrency/defi/coindix_model.py +++ b/openbb_terminal/cryptocurrency/defi/coindix_model.py @@ -6,10 +6,12 @@ from typing import Optional import urllib3 import pandas as pd -import requests - from openbb_terminal.decorators import log_start_end -from openbb_terminal.helper_funcs import get_user_agent, lambda_long_number_format +from openbb_terminal.helper_funcs import ( + get_user_agent, + lambda_long_number_format, + request, +) urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) @@ -140,7 +142,7 @@ def get_defi_vaults( headers = {"User-Agent": get_user_agent()} params = _prepare_params(chain=chain, protocol=protocol, kind=kind) - response = requests.get( + response = request( "https://apiv2.coindix.com/search", headers=headers, params=params, verify=False ) if not 200 <= response.status_code < 300: diff --git a/openbb_terminal/cryptocurrency/defi/cryptosaurio_model.py b/openbb_terminal/cryptocurrency/defi/cryptosaurio_model.py index 003814de620..47f9033de26 100644 --- a/openbb_terminal/cryptocurrency/defi/cryptosaurio_model.py +++ b/openbb_terminal/cryptocurrency/defi/cryptosaurio_model.py @@ -4,8 +4,7 @@ __docformat__ = "numpy" import logging from typing import Tuple import pandas as pd -import requests - +from openbb_terminal.helper_funcs import request from openbb_terminal.decorators import log_start_end logger = logging.getLogger(__name__) @@ -36,7 +35,7 @@ def get_anchor_data(address: str = "") -> Tuple[pd.DataFrame, pd.DataFrame, str] "Select a valid address. Valid terra addresses start with 'terra'" ) - response = requests.get(f"{api_url}/get-anchor-protocol-data-v2/{address}") + response = request(f"{api_url}/get-anchor-protocol-data-v2/{address}") if response.status_code != 200: raise Exception(f"Status code: {response.status_code}. Reason: {response.text}") diff --git a/openbb_terminal/cryptocurrency/defi/graph_model.py b/openbb_terminal/cryptocurrency/defi/graph_model.py index a843e159de8..4ff662d6e4c 100644 --- a/openbb_terminal/cryptocurrency/defi/graph_model.py +++ b/openbb_terminal/cryptocurrency/defi/graph_model.py @@ -5,13 +5,13 @@ import datetime import logging import pandas as pd -import requests from openbb_terminal.cryptocurrency.dataframe_helpers import ( lambda_very_long_number_formatter, ) from openbb_terminal.decorators import log_start_end from openbb_terminal.rich_config import console +from openbb_terminal.helper_funcs import request # pylint: disable=unsupported-assignment-operation @@ -71,7 +71,7 @@ def query_graph(url: str, query: str) -> dict: Dictionary with response data """ - response = requests.post(url, json={"query": query}) + response = request(url, method="POST", json={"query": query}) if response.status_code == 200: return response.json()["data"] return {} diff --git a/openbb_terminal/cryptocurrency/defi/llama_model.py b/openbb_terminal/cryptocurrency/defi/llama_model.py index 8b21e9b2c14..cc991461d3d 100644 --- a/openbb_terminal/cryptocurrency/defi/llama_model.py +++ b/openbb_terminal/cryptocurrency/defi/llama_model.py @@ -7,8 +7,8 @@ from datetime import datetime import numpy as np import pandas as pd -import requests +from openbb_terminal.helper_funcs import request from openbb_terminal.decorators import log_start_end from openbb_terminal.helper_funcs import lambda_long_number_format from openbb_terminal.cryptocurrency.dataframe_helpers import ( @@ -61,7 +61,7 @@ def get_defi_protocols( Information about DeFi protocols """ - response = requests.get(API_URL + "/protocols") + response = request(API_URL + "/protocols") columns = [ "name", "symbol", @@ -136,7 +136,7 @@ def get_defi_protocol(protocol: str) -> pd.DataFrame: Historical tvl """ url = f"{API_URL}/protocol/{protocol}" - r = requests.get(url) + r = request(url) data = r.json() df = pd.DataFrame(data["tvl"]) @@ -176,7 +176,7 @@ def get_defi_tvl() -> pd.DataFrame: pd.DataFrame Historical values of total sum of Total Value Locked from all listed protocols. """ - response = requests.get(API_URL + "/charts") + response = request(API_URL + "/charts") if response.status_code != 200: raise Exception(f"Status code: {response.status_code}. Reason: {response.text}") try: diff --git a/openbb_terminal/cryptocurrency/defi/smartstake_model.py b/openbb_terminal/cryptocurrency/defi/smartstake_model.py index b62c1491b84..583acf79ef9 100644 --- a/openbb_terminal/cryptocurrency/defi/smartstake_model.py +++ b/openbb_terminal/cryptocurrency/defi/smartstake_model.py @@ -2,12 +2,12 @@ __docformat__ = "numpy" from typing import Union, Dict -import requests import pandas as pd from openbb_terminal.decorators import check_api_key from openbb_terminal import config_terminal as cfg from openbb_terminal.rich_config import console +from openbb_terminal.helper_funcs import request @check_api_key(["API_SMARTSTAKE_KEY", "API_SMARTSTAKE_TOKEN"]) @@ -38,7 +38,7 @@ def get_luna_supply_stats( "token": cfg.API_SMARTSTAKE_TOKEN, } - response = requests.get( + response = request( "https://prod.smartstakeapi.com/listData?app=TERRA", params=payload, ) diff --git a/openbb_terminal/cryptocurrency/defi/substack_model.py b/openbb_terminal/cryptocurrency/defi/substack_model.py index ffce3970d6e..893c012a965 100644 --- a/openbb_terminal/cryptocurrency/defi/substack_model.py +++ b/openbb_terminal/cryptocurrency/defi/substack_model.py @@ -7,12 +7,12 @@ import textwrap from typing import List import pandas as pd -import requests from bs4 import BeautifulSoup from dateutil import parser from openbb_terminal.decorators import log_start_end from openbb_terminal.rich_config import console +from openbb_terminal.helper_funcs import request logger = logging.getLogger(__name__) @@ -36,7 +36,7 @@ def scrape_substack(url: str) -> List[List[str]]: - str datetime of newsletter [Format: "%Y-%m-%d %H:%M:%S"] """ - req = requests.get(url) + req = request(url) soup = BeautifulSoup(req.text, features="lxml") results: List[List[str]] = [] archive = soup.find("div", class_="portable-archive-list") diff --git a/openbb_terminal/cryptocurrency/defi/terraengineer_model.py b/openbb_terminal/cryptocurrency/defi/terraengineer_model.py index fcde79b411a..891a1434784 100644 --- a/openbb_terminal/cryptocurrency/defi/terraengineer_model.py +++ b/openbb_terminal/cryptocurrency/defi/terraengineer_model.py @@ -4,9 +4,9 @@ __docformat__ = "numpy" import logging import pandas as pd -import requests from openbb_terminal.decorators import log_start_end +from openbb_terminal.helper_funcs import request logger = logging.getLogger(__name__) @@ -43,7 +43,7 @@ def get_history_asset_from_terra_address( "Select a valid address. Valid terra addresses start with 'terra'" ) - response = requests.get( + response = request( f"{api_url}/terra_addresses/{address}/show_snapshot_data.json?asset={asset.lower()}" ) if response.status_code != 200: diff --git a/openbb_terminal/cryptocurrency/defi/terramoney_fcd_model.py b/openbb_terminal/cryptocurrency/defi/terramoney_fcd_model.py index ac0f9116006..42e4f919ded 100644 --- a/openbb_terminal/cryptocurrency/defi/terramoney_fcd_model.py +++ b/openbb_terminal/cryptocurrency/defi/terramoney_fcd_model.py @@ -7,7 +7,6 @@ from datetime import datetime from typing import Any, Tuple, Dict import pandas as pd -import requests from openbb_terminal.cryptocurrency.dataframe_helpers import ( denominate_number, @@ -16,6 +15,7 @@ from openbb_terminal.cryptocurrency.dataframe_helpers import ( ) from openbb_terminal.decorators import log_start_end from openbb_terminal.rich_config import console +from openbb_terminal.helper_funcs import request logger = logging.getLogger(__name__) @@ -56,9 +56,7 @@ def _make_request(endpoint: str) -> dict: """ url = f"https://fcd.terra.dev/v1/{endpoint}" - response = requests.get( - url, headers={"Accept": "application/json", "User-Agent": "GST"} - ) + response = request(url, headers={"Accept": "application/json", "User-Agent": "GST"}) if not 200 <= response.status_code < 300: console.print( f"[red]fcd terra api exception: {response.json()['type']}[/red]\n" diff --git a/openbb_terminal/cryptocurrency/discovery/dappradar_model.py b/openbb_terminal/cryptocurrency/discovery/dappradar_model.py index ee88baf43e6..0583933b874 100644 --- a/openbb_terminal/cryptocurrency/discovery/dappradar_model.py +++ b/openbb_terminal/cryptocurrency/discovery/dappradar_model.py @@ -6,10 +6,9 @@ from typing import Optional import logging import pandas as pd -import requests from openbb_terminal.decorators import log_start_end -from openbb_terminal.helper_funcs import get_user_agent +from openbb_terminal.helper_funcs import get_user_agent, request from openbb_terminal.rich_config import console logger = logging.getLogger(__name__) @@ -61,7 +60,7 @@ def _make_request(url: str, verbose: bool = True) -> Optional[dict]: "User-Agent": get_user_agent(), "referer": "https://dappradar.com/", } - response = requests.get(url, headers=headers) + response = request(url, headers=headers) if not 200 <= response.status_code < 300: if verbose: console.print(f"[red]dappradar api exception: {response.text}[/red]") diff --git a/openbb_terminal/cryptocurrency/due_diligence/glassnode_model.py b/openbb_terminal/cryptocurrency/due_diligence/glassnode_model.py index 033ce41ae49..f0750217794 100644 --- a/openbb_terminal/cryptocurrency/due_diligence/glassnode_model.py +++ b/openbb_terminal/cryptocurrency/due_diligence/glassnode_model.py @@ -4,12 +4,10 @@ import json from typing import Optional import pandas as pd -import requests - from openbb_terminal import config_terminal as cfg from openbb_terminal.decorators import log_start_end, check_api_key from openbb_terminal.rich_config import console -from openbb_terminal.helper_funcs import str_date_to_timestamp +from openbb_terminal.helper_funcs import str_date_to_timestamp, request # pylint: disable=unsupported-assignment-operation @@ -221,7 +219,7 @@ def get_close_price( "u": str(ts_end_date), } - r = requests.get(url, params=parameters) + r = request(url, params=parameters) df = pd.DataFrame() @@ -286,7 +284,7 @@ def get_non_zero_addresses( "u": str(ts_end_date), } - r = requests.get(url, params=parameters) + r = request(url, params=parameters) df = pd.DataFrame() @@ -351,7 +349,7 @@ def get_active_addresses( "u": str(ts_end_date), } - r = requests.get(url, params=parameters) + r = request(url, params=parameters) df = pd.DataFrame() if r.status_code == 200: @@ -418,8 +416,8 @@ def get_hashrate( df = pd.DataFrame() - r = requests.get(url, params=parameters) - r2 = requests.get(url2, params=parameters) + r = request(url, params=parameters) + r2 = request(url2, params=parameters) if r.status_code == 200 and r2.status_code == 200: df = pd.DataFrame(json.loads(r.text)) @@ -507,9 +505,9 @@ def get_exchange_balances( } df = pd.DataFrame() - r1 = requests.get(url, params=parameters) # get balances - r2 = requests.get(url2, params=parameters) # get relative (percentage) balances - r3 = requests.get( + r1 = request(url, params=parameters) # get balances + r2 = request(url2, params=parameters) # get relative (percentage) balances + r3 = request( url3, params=parameters ) # get price TODO: grab data from loaded symbol @@ -596,7 +594,7 @@ def get_exchange_net_position_change( "u": str(ts_end_date), } - r = requests.get(url, params=parameters) + r = request(url, params=parameters) df = pd.DataFrame() if r.status_code == 200: diff --git a/openbb_terminal/cryptocurrency/due_diligence/messari_model.py b/openbb_terminal/cryptocurrency/due_diligence/messari_model.py index 0d0e1db417e..3246135117e 100644 --- a/openbb_terminal/cryptocurrency/due_diligence/messari_model.py +++ b/openbb_terminal/cryptocurrency/due_diligence/messari_model.py @@ -8,7 +8,6 @@ from typing import Any, Optional, Tuple from datetime import datetime, timedelta import re import pandas as pd -import requests from openbb_terminal import config_terminal as cfg from openbb_terminal.cryptocurrency.dataframe_helpers import ( @@ -19,7 +18,7 @@ from openbb_terminal.cryptocurrency.due_diligence.pycoingecko_model import ( get_coin_tokenomics, ) from openbb_terminal.decorators import check_api_key, log_start_end -from openbb_terminal.helper_funcs import lambda_long_number_format +from openbb_terminal.helper_funcs import lambda_long_number_format, request from openbb_terminal.rich_config import console # pylint: disable=unsupported-assignment-operation @@ -45,7 +44,7 @@ def get_available_timeseries(only_free: bool = True) -> pd.DataFrame: pd.DataFrame available timeseries """ - r = requests.get("https://data.messari.io/api/v1/assets/metrics") + r = request("https://data.messari.io/api/v1/assets/metrics") if r.status_code == 200: data = r.json() metrics = data["data"]["metrics"] @@ -174,7 +173,7 @@ def get_messari_timeseries( "interval": interval, } - r = requests.get(url, params=parameters, headers=headers) + r = request(url, params=parameters, headers=headers) df = pd.DataFrame() title = "" @@ -222,7 +221,7 @@ def get_links(symbol: str) -> pd.DataFrame: params = {"fields": "profile/general/overview/official_links"} - r = requests.get(url, headers=headers, params=params) + r = request(url, headers=headers, params=params) df = pd.DataFrame() @@ -263,7 +262,7 @@ def get_roadmap(symbol: str, ascend: bool = True) -> pd.DataFrame: params = {"fields": "profile/general/roadmap"} - r = requests.get(url, headers=headers, params=params) + r = request(url, headers=headers, params=params) df = pd.DataFrame() @@ -311,7 +310,7 @@ def get_tokenomics(symbol: str, coingecko_id: str) -> Tuple[pd.DataFrame, pd.Dat params = {"fields": "profile/economics/consensus_and_emission"} - r = requests.get(url, headers=headers, params=params) + r = request(url, headers=headers, params=params) df = pd.DataFrame() circ_df = pd.DataFrame() @@ -383,7 +382,7 @@ def get_project_product_info( params = {"fields": "profile/general/overview/project_details,profile/technology"} - r = requests.get(url, headers=headers, params=params) + r = request(url, headers=headers, params=params) df = pd.DataFrame() if r.status_code == 200: @@ -445,7 +444,7 @@ def get_team(symbol: str) -> Tuple[pd.DataFrame, pd.DataFrame]: params = {"fields": "profile/contributors"} - r = requests.get(url, headers=headers, params=params) + r = request(url, headers=headers, params=params) df = pd.DataFrame() if r.status_code == 200: @@ -520,7 +519,7 @@ def get_investors(symbol: str) -> Tuple[pd.DataFrame, pd.DataFrame]: params = {"fields": "profile/investors"} - r = requests.get(url, headers=headers, params=params) + r = request(url, headers=headers, params=params) df = pd.DataFrame() if r.status_code == 200: @@ -593,7 +592,7 @@ def get_governance(symbol: str) -> Tuple[str, pd.DataFrame]: params = {"fields": "profile/governance"} - r = requests.get(url, headers=headers, params=params) + r = request(url, headers=headers, params=params) df = pd.DataFrame() if r.status_code == 200: @@ -672,7 +671,7 @@ def get_fundraising( params = {"fields": "profile/economics/launch"} - r = requests.get(url, headers=headers, params=params) + r = request(url, headers=headers, params=params) df = pd.DataFrame() if r.status_code == 200: diff --git a/openbb_terminal/cryptocurrency/due_diligence/santiment_model.py b/openbb_terminal/cryptocurrency/due_diligence/santiment_model.py index 06f3e586cca..32a4d957084 100644 --- a/openbb_terminal/cryptocurrency/due_diligence/santiment_model.py +++ b/openbb_terminal/cryptocurrency/due_diligence/santiment_model.py @@ -2,14 +2,13 @@ import logging from datetime import datetime, timedelta from typing import Optional -import requests - import pandas as pd from openbb_terminal import config_terminal as cfg from openbb_terminal.decorators import check_api_key, log_start_end from openbb_terminal.rich_config import console from openbb_terminal.cryptocurrency.discovery.pycoingecko_model import read_file_data +from openbb_terminal.helper_funcs import request logger = logging.getLogger(__name__) @@ -79,8 +78,8 @@ def get_github_activity( f'from: "{start_date}" to: "{end_date}" interval: "{interval}"){{ datetime value }} }} }}' ) - response = requests.post( - "https://api.santiment.net/graphql", headers=headers, data=data + response = request( + "https://api.santiment.net/graphql", method="POST", headers=headers, data=data ) df = pd.DataFrame() diff --git a/openbb_terminal/cryptocurrency/nft/nftpricefloor_model.py b/openbb_terminal/cryptocurrency/nft/nftpricefloor_model.py index 3805a194d78..189b43ec8dd 100644 --- a/openbb_terminal/cryptocurrency/nft/nftpricefloor_model.py +++ b/openbb_terminal/cryptocurrency/nft/nftpricefloor_model.py @@ -4,8 +4,8 @@ import logging from typing import List import pandas as pd -import requests +from openbb_terminal.helper_funcs import request from openbb_terminal.decorators import log_start_end logger = logging.getLogger(__name__) @@ -32,7 +32,7 @@ def get_collections() -> pd.DataFrame: pd.DataFrame nft collections """ - res = requests.get(f"{API_URL}/projects") + res = request(f"{API_URL}/projects") if res.status_code == 200: data = res.json() df = pd.DataFrame(data) @@ -56,7 +56,7 @@ def get_floor_price(slug: str) -> pd.DataFrame: pd.DataFrame nft collections """ - res = requests.get(f"{API_URL}/projects/{slug}/charts/all") + res = request(f"{API_URL}/projects/{slug}/charts/all") if res.status_code == 200: data = res.json() df = pd.DataFrame( diff --git a/openbb_terminal/cryptocurrency/nft/opensea_model.py b/openbb_terminal/cryptocurrency/nft/opensea_model.py index 1e82a08ef2a..f766979c0e7 100644 --- a/openbb_terminal/cryptocurrency/nft/opensea_model.py +++ b/openbb_terminal/cryptocurrency/nft/opensea_model.py @@ -4,8 +4,8 @@ import logging from datetime import datetime import pandas as pd -import requests +from openbb_terminal.helper_funcs import request from openbb_terminal.decorators import log_start_end logger = logging.getLogger(__name__) @@ -27,7 +27,7 @@ def get_collection_stats(slug: str) -> pd.DataFrame: pd.DataFrame collection stats """ - res = requests.get(f"{API_URL}/collection/{slug}") + res = request(f"{API_URL}/collection/{slug}") if res.status_code == 200: data = res.json() collection = data["collection"] diff --git a/openbb_terminal/cryptocurrency/onchain/blockchain_model.py b/openbb_terminal/cryptocurrency/onchain/blockchain_model.py index aebed7a0b01..a4869930a58 100644 --- a/openbb_terminal/cryptocurrency/onchain/blockchain_model.py +++ b/openbb_terminal/cryptocurrency/onchain/blockchain_model.py @@ -4,8 +4,8 @@ __docformat__ = "numpy" import logging import pandas as pd -import requests +from openbb_terminal.helper_funcs import request from openbb_terminal.decorators import log_start_end logger = logging.getLogger(__name__) @@ -27,7 +27,7 @@ def _make_request(endpoint: str) -> dict: """ url = f"https://api.blockchain.info/{endpoint}" - response = requests.get( + response = request( url, headers={ "Accept": "application/json", @@ -59,7 +59,7 @@ def _blockchain_data_api_make_request(endpoint: str) -> dict: """ url = f"https://blockchain.info/{endpoint}" - response = requests.get( + response = request( url, headers={ "Accept": "application/json", diff --git a/openbb_terminal/cryptocurrency/onchain/ethgasstation_model.py b/openbb_terminal/cryptocurrency/onchain/ethgasstation_model.py index e544c9cbac3..751ceb6efc0 100644 --- a/openbb_terminal/cryptocurrency/onchain/ethgasstation_model.py +++ b/openbb_terminal/cryptocurrency/onchain/ethgasstation_model.py @@ -4,6 +4,7 @@ import logging import pandas as pd import requests +from openbb_terminal.helper_funcs import request from openbb_terminal.decorators import log_start_end logger = logging.getLogger(__name__) @@ -26,7 +27,7 @@ def get_gwei_fees() -> pd.DataFrame: its average durations in seconds) """ - r = requests.get("https://ethgasstation.info/json/ethgasAPI.json") + r = request("https://ethgasstation.info/json/ethgasAPI.json") try: if r.status_code == 200: diff --git a/openbb_terminal/cryptocurrency/onchain/ethplorer_model.py b/openbb_terminal/cryptocurrency/onchain/ethplorer_model.py index eb9708488de..7b8366ebd06 100644 --- a/openbb_terminal/cryptocurrency/onchain/ethplorer_model.py +++ b/openbb_terminal/cryptocurrency/onchain/ethplorer_model.py @@ -8,8 +8,9 @@ from time import sleep from typing import Any, Optional import pandas as pd -import requests + +from openbb_terminal.helper_funcs import request import openbb_terminal.config_terminal as cfg from openbb_terminal.rich_config import console from openbb_terminal.cryptocurrency.dataframe_helpers import create_df_index @@ -155,7 +156,7 @@ def make_request( url += f"&limit={kwargs['limit']}" sleep(0.5) # Limit is 2 API calls per 1 sec. - response = requests.get(url) + response = request(url) result = {} if response.status_code == 200: diff --git a/openbb_terminal/cryptocurrency/onchain/shroom_model.py b/openbb_terminal/cryptocurrency/onchain/shroom_model.py index 8538f0b712c..b95475d9409 100644 --- a/openbb_terminal/cryptocurrency/onchain/shroom_model.py +++ b/openbb_terminal/cryptocurrency/onchain/shroom_model.py @@ -4,11 +4,12 @@ from typing import List import json import time import pandas as pd -import requests + from openbb_terminal.rich_config import console from openbb_terminal.decorators import log_start_end, check_api_key from openbb_terminal import config_terminal as cfg +from openbb_terminal.helper_funcs import request logger = logging.getLogger(__name__) @@ -23,8 +24,9 @@ PAGE_NUMBER = 1 def create_query(query: str): - r = requests.post( + r = request( "https://node-api.flipsidecrypto.com/queries", + method="POST", data=json.dumps({"sql": query, "ttlMinutes": TTL_MINUTES}), headers={ "Accept": "application/json", @@ -42,7 +44,7 @@ def create_query(query: str): def get_query_results(token): - r = requests.get( + r = request( f"https://node-api.flipsidecrypto.com/queries/{token}?pageNumber={PAGE_NUMBER}&pageSize={PAGE_SIZE}", headers={ "Accept": "application/json", diff --git a/openbb_terminal/cryptocurrency/onchain/whale_alert_model.py b/openbb_terminal/cryptocurrency/onchain/whale_alert_model.py index 059168ccd32..67b73d21dd7 100644 --- a/openbb_terminal/cryptocurrency/onchain/whale_alert_model.py +++ b/openbb_terminal/cryptocurrency/onchain/whale_alert_model.py @@ -7,8 +7,8 @@ from typing import Optional, Tuple, Any import numpy as np import pandas as pd -import requests +from openbb_terminal.helper_funcs import request import openbb_terminal.config_terminal as cfg from openbb_terminal.rich_config import console from openbb_terminal.decorators import check_api_key, log_start_end @@ -58,7 +58,7 @@ def make_request(params: Optional[dict] = None) -> Tuple[Optional[int], Any]: api_key = cfg.API_WHALE_ALERT_KEY or "" url = "https://api.whale-alert.io/v1/transactions?api_key=" + api_key try: - response = requests.get(url, timeout=2, params=params) + response = request(url, params=params) except Exception: return None, None diff --git a/openbb_terminal/cryptocurrency/overview/blockchaincenter_model.py b/openbb_terminal/cryptocurrency/overview/blockchaincenter_model.py index 45ec4b3e465..adf658bbde2 100644 --- a/openbb_terminal/cryptocurrency/overview/blockchaincenter_model.py +++ b/openbb_terminal/cryptocurrency/overview/blockchaincenter_model.py @@ -5,11 +5,11 @@ from datetime import datetime from typing import Optional import pandas as pd -import requests + from bs4 import BeautifulSoup from openbb_terminal.decorators import log_start_end -from openbb_terminal.helper_funcs import get_user_agent, str_date_to_timestamp +from openbb_terminal.helper_funcs import get_user_agent, str_date_to_timestamp, request logger = logging.getLogger(__name__) @@ -48,7 +48,7 @@ def get_altcoin_index( if period not in DAYS: return pd.DataFrame() soup = BeautifulSoup( - requests.get( + request( "https://www.blockchaincenter.net/altcoin-season-index/", headers={"User-Agent": get_user_agent()}, ).content, diff --git a/openbb_terminal/cryptocurrency/overview/cryptopanic_model.py b/openbb_terminal/cryptocurrency/overview/cryptopanic_model.py index c8ebbc114d9..c07a3f30bc2 100644 --- a/openbb_terminal/cryptocurrency/overview/cryptopanic_model.py +++ b/openbb_terminal/cryptocurrency/overview/cryptopanic_model.py @@ -8,8 +8,8 @@ import time from typing import Any, Optional import pandas as pd -import requests +from openbb_terminal.helper_funcs import request import openbb_terminal.config_terminal as cfg from openbb_terminal.rich_config import console from openbb_terminal.decorators import check_api_key, log_start_end @@ -111,7 +111,7 @@ def make_request(**kwargs: Any) -> Optional[dict]: console.print(f"Cannot find news for {currency}.\n") return {} - response = requests.get(url) + response = request(url) response_json = response.json() result = None @@ -217,7 +217,7 @@ def get_news( counter += 1 try: time.sleep(0.2) - res = requests.get(next_page).json() + res = request(next_page).json() for post in res["results"]: results.append(_parse_post(post)) next_page = res.get("next") diff --git a/openbb_terminal/cryptocurrency/overview/loanscan_model.py b/openbb_terminal/cryptocurrency/overview/loanscan_model.py index c7ced1f457c..65b47c336aa 100644 --- a/openbb_terminal/cryptocurrency/overview/loanscan_model.py +++ b/openbb_terminal/cryptocurrency/overview/loanscan_model.py @@ -4,10 +4,9 @@ import logging from typing import Any, Dict import pandas as pd -import requests from openbb_terminal.decorators import log_start_end -from openbb_terminal.helper_funcs import get_user_agent, log_and_raise +from openbb_terminal.helper_funcs import get_user_agent, log_and_raise, request logger = logging.getLogger(__name__) @@ -281,7 +280,7 @@ def get_rates(rate_type: str = "borrow") -> pd.DataFrame: if rate_type not in ("supply", "borrow"): raise Exception("Rate type not supported. Supported rates: borrow, supply") - response = requests.get( + response = request( f"{api_url}/v1/interest-rates", headers={"User-Agent": get_user_agent()}, ) diff --git a/openbb_terminal/cryptocurrency/overview/rekt_model.py b/openbb_terminal/cryptocurrency/overview/rekt_model.py index b123317169b..e10477022da 100644 --- a/openbb_terminal/cryptocurrency/overview/rekt_model.py +++ b/openbb_terminal/cryptocurrency/overview/rekt_model.py @@ -69,7 +69,7 @@ def _make_request(url: str) -> Union[BeautifulSoup, None]: headers = {"User-Agent": get_user_agent()} session = _retry_session("https://www.coingecko.com") try: - req = session.get(url, headers=headers, timeout=5) + req = session.get(url, headers=headers) except Exception as error: logger.exception(str(error)) console.print(error) diff --git a/openbb_terminal/cryptocurrency/overview/withdrawalfees_model.py b/openbb_terminal/cryptocurrency/overview/withdrawalfees_model.py index 8084b51d068..b5fc513c54d 100644 --- a/openbb_terminal/cryptocurrency/overview/withdrawalfees_model.py +++ b/openbb_terminal/cryptocurrency/overview/withdrawalfees_model.py @@ -4,11 +4,11 @@ import math from typing import Any, List import pandas as pd -import requests + from bs4 import BeautifulSoup from openbb_terminal.decorators import log_start_end -from openbb_terminal.helper_funcs import get_user_agent +from openbb_terminal.helper_funcs import get_user_agent, request logger = logging.getLogger(__name__) @@ -134,7 +134,7 @@ def get_overall_withdrawal_fees(limit: int = 100) -> pd.DataFrame: COINS_PER_PAGE = 100 withdrawal_fees_homepage = BeautifulSoup( - requests.get( + request( "https://withdrawalfees.com/", headers={"User-Agent": get_user_agent()}, ).text, @@ -157,7 +157,7 @@ def get_overall_withdrawal_fees(limit: int = 100) -> pd.DataFrame: if num_pages > 1: for idx in range(2, num_pages + 1): withdrawal_fees_homepage = BeautifulSoup( - requests.get( + request( f"https://withdrawalfees.com/coins/page/{idx}", headers={"User-Agent": get_user_agent()}, ).text, @@ -189,7 +189,7 @@ def get_overall_exchange_withdrawal_fees() -> pd.DataFrame: Exchange, Coins, Lowest, Average, Median, Highest """ exchange_withdrawal_fees = BeautifulSoup( - requests.get( + request( "https://withdrawalfees.com/exchanges", headers={"User-Agent": get_user_agent()}, ).text, @@ -222,7 +222,7 @@ def get_crypto_withdrawal_fees( - pd.DataFrame: Exchange, Withdrawal Fee, Minimum Withdrawal Amount """ crypto_withdrawal_fees = BeautifulSoup( - requests.get( + request( f"https://withdrawalfees.com/coins/{symbol}", headers={"User-Agent": get_user_agent()}, ).text, diff --git a/openbb_terminal/cryptocurrency/pycoingecko_helpers.py b/openbb_terminal/cryptocurrency/pycoingecko_helpers.py index 0f7cc6ce2af..a145c5ac92b 100644 --- a/openbb_terminal/cryptocurrency/pycoingecko_helpers.py +++ b/openbb_terminal/cryptocurrency/pycoingecko_helpers.py @@ -8,13 +8,14 @@ from datetime import timezone from typing import Sequence, Optional, Any, Dict, Tuple, Union, List import textwrap import logging -import requests + from bs4 import BeautifulSoup import pandas as pd +import requests from dateutil import parser from requests.adapters import HTTPAdapter, RetryError from urllib3.util.retry import Retry -from openbb_terminal.helper_funcs import get_user_agent +from openbb_terminal.helper_funcs import get_user_agent, request from openbb_terminal.rich_config import console logger = logging.getLogger(__name__) @@ -56,7 +57,7 @@ def get_btc_price() -> float: latest bitcoin price in usd. """ - req = requests.get( + req = request( "https://api.coingecko.com/api/v3/simple/" "price?ids=bitcoin&vs_currencies=usd&include_market_cap" "=false&include_24hr_vol" @@ -114,7 +115,7 @@ def scrape_gecko_data(url: str) -> BeautifulSoup: headers = {"User-Agent": get_user_agent()} session = _retry_session("https://www.coingecko.com") try: - req = session.get(url, headers=headers, timeout=5) + req = session.get(url, headers=headers) except Exception as error: logger.exception(error) console.print(error) diff --git a/openbb_terminal/dashboards/voila/shortdata.ipynb b/openbb_terminal/dashboards/voila/shortdata.ipynb index 4fc17ccc2aa..cdffaf9a28d 100644 --- a/openbb_terminal/dashboards/voila/shortdata.ipynb +++ b/openbb_terminal/dashboards/voila/shortdata.ipynb @@ -214,7 +214,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "venv", "language": "python", "name": "python3" }, @@ -228,7 +228,12 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.12" + "version": "3.10.5 (tags/v3.10.5:f377153, Jun 6 2022, 16:14:13) [MSC v.1929 64 bit (AMD64)]" + }, + "vscode": { + "interpreter": { + "hash": "62c7fcebfb488e3b3da3c2f615a089997cdd40a7f322d0940663a0c0d362d29d" + } } }, "nbformat": 4, diff --git a/openbb_terminal/economy/alphavantage_model.py b/openbb_terminal/economy/alphavantage_model.py index b7ad93bb8a4..060aa2de609 100644 --- a/openbb_terminal/economy/alphavantage_model.py +++ b/openbb_terminal/economy/alphavantage_model.py @@ -4,13 +4,12 @@ __docformat__ = "numpy" import logging import pandas as pd -import requests from alpha_vantage.sectorperformance import SectorPerformances from openbb_terminal.rich_config import console from openbb_terminal import config_terminal as cfg from openbb_terminal.decorators import log_start_end -from openbb_terminal.helper_funcs import get_user_agent +from openbb_terminal.helper_funcs import get_user_agent, request logger = logging.getLogger(__name__) @@ -65,7 +64,7 @@ def get_real_gdp( "https://www.alphavantage.co/query?function=REAL_GDP" + f"&interval={s_interval}&apikey={cfg.API_KEY_ALPHAVANTAGE}" ) - r = requests.get(url, headers={"User-Agent": get_user_agent()}) + r = request(url, headers={"User-Agent": get_user_agent()}) if r.status_code != 200: console.print(f"Request error. Response code: {str(r.status_code)}.\n") @@ -110,7 +109,7 @@ def get_gdp_capita(start_year: int = 2010) -> pd.DataFrame: "https://www.alphavantage.co/query?function=REAL_GDP_PER_CAPITA" + f"&apikey={cfg.API_KEY_ALPHAVANTAGE}" ) - r = requests.get(url, headers={"User-Agent": get_user_agent()}) + r = request(url, headers={"User-Agent": get_user_agent()}) if r.status_code != 200: console.print(f"Request error. Response code: {str(r.status_code)}.\n") return pd.DataFrame() @@ -153,7 +152,7 @@ def get_inflation(start_year: int = 2010) -> pd.DataFrame: "https://www.alphavantage.co/query?function=INFLATION" + f"&apikey={cfg.API_KEY_ALPHAVANTAGE}" ) - r = requests.get(url, headers={"User-Agent": get_user_agent()}) + r = request(url, headers={"User-Agent": get_user_agent()}) if r.status_code != 200: console.print(f"Request error. Response code: {str(r.status_code)}.\n") return pd.DataFrame() @@ -199,7 +198,7 @@ def get_cpi(interval: str = "m", start_year: int = 2010) -> pd.DataFrame: f"https://www.alphavantage.co/query?function=CPI&interval={s_interval}" + f"&apikey={cfg.API_KEY_ALPHAVANTAGE}" ) - r = requests.get(url, headers={"User-Agent": get_user_agent()}) + r = request(url, headers={"User-Agent": get_user_agent()}) if r.status_code != 200: console.print(f"Request error. Response code: {str(r.status_code)}.\n") @@ -254,7 +253,7 @@ def get_treasury_yield( + f"&interval={d_interval[interval]}" + f"&maturity={d_maturity[maturity]}&apikey={cfg.API_KEY_ALPHAVANTAGE}" ) - r = requests.get(url, headers={"User-Agent": get_user_agent()}) + r = request(url, headers={"User-Agent": get_user_agent()}) if r.status_code != 200: console.print(f"Request error. Response code: {str(r.status_code)}.\n") return pd.DataFrame() @@ -295,7 +294,7 @@ def get_unemployment(start_year: int = 2010) -> pd.DataFrame: Dataframe of historical yields """ url = f"https://www.alphavantage.co/query?function=UNEMPLOYMENT&apikey={cfg.API_KEY_ALPHAVANTAGE}" - r = requests.get(url, headers={"User-Agent": get_user_agent()}) + r = request(url, headers={"User-Agent": get_user_agent()}) if r.status_code != 200: return pd.DataFrame() diff --git a/openbb_terminal/economy/commodity_model.py b/openbb_terminal/economy/commodity_model.py index 5f914813af1..1227df7a0b0 100644 --- a/openbb_terminal/economy/commodity_model.py +++ b/openbb_terminal/economy/commodity_model.py @@ -1,11 +1,10 @@ import logging import re -import requests import pandas as pd from openbb_terminal.decorators import log_start_end -from openbb_terminal.helper_funcs import get_user_agent +from openbb_terminal.helper_funcs import get_user_agent, request logger = logging.getLogger(__name__) @@ -34,7 +33,7 @@ def get_debt() -> pd.DataFrame: Country, Debt [$], Debt [% of GDP], Debt per capita [$], Debt per capita [% of GDP] """ url = "https://en.wikipedia.org/wiki/List_of_countries_by_external_debt" - response = requests.get(url, headers={"User-Agent": get_user_agent()}) + response = request(url, headers={"User-Agent": get_user_agent()}) df = pd.read_html(response.text)[0] df = df.rename( columns={ diff --git a/openbb_terminal/economy/econdb_model.py b/openbb_terminal/economy/econdb_model.py index c58eaffbbf5..9e277de8531 100644 --- a/openbb_terminal/economy/econdb_model.py +++ b/openbb_terminal/economy/econdb_model.py @@ -10,12 +10,12 @@ from datetime import datetime import pandas as pd import pandas_datareader.data as web -import requests import yfinance as yf from openbb_terminal.decorators import log_start_end from openbb_terminal.rich_config import console from openbb_terminal.helpers_denomination import transform as transform_by_denomination +from openbb_terminal.helper_funcs import request logger = logging.getLogger(__name__) @@ -544,7 +544,7 @@ def get_macro_data( if transform: code += f"~{transform}" - r = requests.get(f"https://www.econdb.com/series/context/?tickers={code}") + r = request(f"https://www.econdb.com/series/context/?tickers={code}") res_json = r.json() if res_json: data = res_json[0] diff --git a/openbb_terminal/economy/finnhub_model.py b/openbb_terminal/economy/finnhub_model.py index 6b8147d16b3..bebf9155b65 100644 --- a/openbb_terminal/economy/finnhub_model.py +++ b/openbb_terminal/economy/finnhub_model.py @@ -1,11 +1,11 @@ import logging import pandas as pd -import requests from openbb_terminal import config_terminal as cfg from openbb_terminal.decorators import check_api_key, log_start_end from openbb_terminal.rich_config import console +from openbb_terminal.helper_funcs import request logger = logging.getLogger(__name__) @@ -21,7 +21,7 @@ def get_economy_calendar_events() -> pd.DataFrame: pd.DataFrame Get dataframe with economic calendar events """ - response = requests.get( + response = request( f"https://finnhub.io/api/v1/calendar/economic?token={cfg.API_FINNHUB_KEY}" ) diff --git a/openbb_terminal/economy/finviz_model.py b/openbb_terminal/economy/finviz_model.py index 71a24024c8e..1c37960d669 100644 --- a/openbb_terminal/economy/finviz_model.py +++ b/openbb_terminal/economy/finviz_model.py @@ -7,12 +7,11 @@ import webbrowser from typing import List import pandas as pd -import requests from finvizfinance.group import performance, spectrum, valuation from openbb_terminal.rich_config import console from openbb_terminal.decorators import log_start_end -from openbb_terminal.helper_funcs import get_user_agent +from openbb_terminal.helper_funcs import get_user_agent, request # pylint: disable=unsupported-assignment-operation @@ -203,7 +202,7 @@ def get_futures( pd.Dataframe Indices, Energy, Metals, Meats, Grains, Softs, Bonds, Currencies """ - source = requests.get( + source = request( "https://finviz.com/futures.ashx", headers={"User-Agent": get_user_agent()} ).text diff --git a/openbb_terminal/economy/fred_model.py b/openbb_terminal/economy/fred_model.py index 002f705ccc5..cf3ece90d52 100644 --- a/openbb_terminal/economy/fred_model.py +++ b/openbb_terminal/economy/fred_model.py @@ -11,13 +11,12 @@ from requests import HTTPError import fred import pandas as pd -import requests from fredapi import Fred import certifi from openbb_terminal import config_terminal as cfg from openbb_terminal.decorators import check_api_key, log_start_end -from openbb_terminal.helper_funcs import get_user_agent +from openbb_terminal.helper_funcs import get_user_agent, request from openbb_terminal.rich_config import console logger = logging.getLogger(__name__) @@ -40,7 +39,7 @@ def check_series_id(series_id: str) -> Tuple[bool, dict]: Dictionary of series information """ url = f"https://api.stlouisfed.org/fred/series?series_id={series_id}&api_key={cfg.API_FRED_KEY}&file_type=json" - r = requests.get(url, headers={"User-Agent": get_user_agent()}) + r = request(url, headers={"User-Agent": get_user_agent()}) # The above returns 200 if series is found # There seems to be an occasional bug giving a 503 response where the json decoding fails if r.status_code == 200: diff --git a/openbb_terminal/economy/nasdaq_model.py b/openbb_terminal/economy/nasdaq_model.py index e6ec2eea9a7..01d3eb4a40d 100644 --- a/openbb_terminal/economy/nasdaq_model.py +++ b/openbb_terminal/economy/nasdaq_model.py @@ -8,11 +8,11 @@ from typing import List, Optional, Union from datetime import datetime as dt import pandas as pd -import requests from openbb_terminal.config_terminal import API_KEY_QUANDL from openbb_terminal.decorators import check_api_key, log_start_end from openbb_terminal.rich_config import console +from openbb_terminal.helper_funcs import request logger = logging.getLogger(__name__) @@ -73,7 +73,7 @@ def get_economic_calendar( for date in dates: try: df = pd.DataFrame( - requests.get( + request( f"https://api.nasdaq.com/api/calendar/economicevents?date={date}", headers={ "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) " @@ -179,7 +179,7 @@ def get_big_mac_index(country_code: str = "USA") -> pd.DataFrame: URL = f"https://data.nasdaq.com/api/v3/datasets/ECONOMIST/BIGMAC_{country_code}" URL += f"?column_index=3&api_key={API_KEY_QUANDL}" try: - r = requests.get(URL) + r = request(URL) except Exception: console.print("[red]Error connecting to NASDAQ API[/red]\n") return pd.DataFrame() diff --git a/openbb_terminal/economy/wsj_model.py b/openbb_terminal/economy/wsj_model.py index e398db48b48..4739d5b0c8c 100644 --- a/openbb_terminal/economy/wsj_model.py +++ b/openbb_terminal/economy/wsj_model.py @@ -6,7 +6,7 @@ import pandas as pd import requests from openbb_terminal.decorators import log_start_end -from openbb_terminal.helper_funcs import get_user_agent +from openbb_terminal.helper_funcs import get_user_agent, request from openbb_terminal.rich_config import console logger = logging.getLogger(__name__) @@ -34,7 +34,7 @@ def us_indices() -> pd.DataFrame: "%20500%20Futures%22%7D%5D%7D&type=mdc_quotes" ) try: - response = requests.get( + response = request( url, headers={"User-Agent": get_user_agent()}, ) @@ -84,7 +84,7 @@ def market_overview() -> pd.DataFrame: "22Euro%22%7D%5D%7D&type=mdc_quotes" ) try: - response = requests.get(url, headers={"User-Agent": get_user_agent()}) + response = request(url, headers={"User-Agent": get_user_agent()}) except requests.exceptions.RequestException: console.print("[red]Could not retrieve data from wsj.[/red]\n") return pd.DataFrame() @@ -131,7 +131,7 @@ def top_commodities() -> pd.DataFrame: "%20Futures%22%7D%2C%7B%22symbol%22%3A%22INDEX%2FXX%2F%2FBCOM%22%7D%5D%7D&type=mdc_quotes" ) try: - response = requests.get(url, headers={"User-Agent": get_user_agent()}) + response = request(url, headers={"User-Agent": get_user_agent()}) except requests.exceptions.RequestException: console.print("[red]Could not retrieve data from wsj.[/red]\n") return pd.DataFrame() @@ -181,7 +181,7 @@ def us_bonds() -> pd.DataFrame: ) try: - response = requests.get(url, headers={"User-Agent": get_user_agent()}) + response = request(url, headers={"User-Agent": get_user_agent()}) except requests.exceptions.RequestException: console.print("[red]Could not retrieve data from wsj.[/red]\n") return pd.DataFrame() @@ -219,7 +219,7 @@ def global_bonds() -> pd.DataFrame: "%20Year%22%7D%5D%7D&type=mdc_governmentbonds" ) try: - response = requests.get(url, headers={"User-Agent": get_user_agent()}) + response = request(url, headers={"User-Agent": get_user_agent()}) except requests.exceptions.RequestException: console.print("[red]Could not retrieve data from wsj.[/red]\n") return pd.DataFrame() @@ -262,7 +262,7 @@ def global_currencies() -> pd.DataFrame: "2INDEX%2FUS%2F%2FDXY%22%2C%22name%22%3A%22U.S.%20Dollar%20Index%22%7D%5D%7D&type=mdc_quotes" ) try: - response = requests.get(url, headers={"User-Agent": get_user_agent()}) + response = request(url, headers={"User-Agent": get_user_agent()}) except requests.exceptions.RequestException: console.print("[red]Could not retrieve data from wsj.[/red]\n") return pd.DataFrame() diff --git a/openbb_terminal/etf/discovery/wsj_model.py b/openbb_terminal/etf/discovery/wsj_model.py index c491e677154..eb467b268a8 100644 --- a/openbb_terminal/etf/discovery/wsj_model.py +++ b/openbb_terminal/etf/discovery/wsj_model.py @@ -3,10 +3,9 @@ __docformat__ = "numpy" import logging import pandas as pd -import requests from openbb_terminal.decorators import log_start_end -from openbb_terminal.helper_funcs import get_user_agent +from openbb_terminal.helper_funcs import get_user_agent, request logger = logging.getLogger(__name__) @@ -48,7 +47,7 @@ def etf_movers(sort_type: str = "gainers", export: bool = False) -> pd.DataFrame url = "" if url: - data = requests.get(url, headers={"User-Agent": get_user_agent()}).json() + data = request(url, headers={"User-Agent": get_user_agent()}).json() symbol, name, last_price, net_change, percent_change, volume = ( [], [], diff --git a/openbb_terminal/etf/stockanalysis_model.py b/openbb_terminal/etf/stockanalysis_model.py index bfb15ef224e..4a98a9279d1 100644 --- a/openbb_terminal/etf/stockanalysis_model.py +++ b/openbb_terminal/etf/stockanalysis_model.py @@ -6,11 +6,10 @@ from typing import List, Tuple import pathlib import pandas as pd -import requests from bs4 import BeautifulSoup from openbb_terminal.decorators import log_start_end -from openbb_terminal.helper_funcs import get_user_agent +from openbb_terminal.helper_funcs import get_user_agent, request logger = logging.getLogger(__name__) @@ -56,7 +55,7 @@ def get_etf_overview(symbol: str) -> pd.DataFrame: >>> from openbb_terminal.sdk import openbb >>> openbb.etf.overview("SPY") """ - r = requests.get( + r = request( f"https://stockanalysis.com/etf/{symbol}", headers={"User-Agent": get_user_agent()}, ) @@ -97,7 +96,7 @@ def get_etf_holdings(symbol: str) -> pd.DataFrame: """ link = f"https://stockanalysis.com/etf/{symbol}/holdings/" - r = requests.get(link, headers={"User-Agent": get_user_agent()}) + r = request(link, headers={"User-Agent": get_user_agent()}) try: df = pd.read_html(r.content)[0] df["Symbol"] = df["Symbol"].fillna("N/A") diff --git a/openbb_terminal/forex/av_model.py b/openbb_terminal/forex/av_model.py index f3bb64e8c16..a2a8ab3f378 100644 --- a/openbb_terminal/forex/av_model.py +++ b/openbb_terminal/forex/av_model.py @@ -6,11 +6,11 @@ import os from typing import Any, Dict, List import pandas as pd -import requests from openbb_terminal import config_terminal as cfg from openbb_terminal.decorators import log_start_end from openbb_terminal.rich_config import console +from openbb_terminal.helper_funcs import request logger = logging.getLogger(__name__) @@ -75,7 +75,7 @@ def get_quote(to_symbol: str = "USD", from_symbol: str = "EUR") -> Dict[str, Any + f"&apikey={cfg.API_KEY_ALPHAVANTAGE}" ) - response = requests.get(url) + response = request(url) response_json = response.json() result = {} @@ -128,7 +128,7 @@ def get_historical( if resolution == "i": url += f"&interval={interval}min" - r = requests.get(url) + r = request(url) response_json = r.json() if r.status_code != 200: diff --git a/openbb_terminal/forex/fxempire_model.py b/openbb_terminal/forex/fxempire_model.py index 1ca2a0177c8..aeea531c78a 100644 --- a/openbb_terminal/forex/fxempire_model.py +++ b/openbb_terminal/forex/fxempire_model.py @@ -1,11 +1,10 @@ """FXEmpire Model""" import logging -import requests import pandas as pd -from openbb_terminal.helper_funcs import get_user_agent from openbb_terminal.decorators import log_start_end +from openbb_terminal.helper_funcs import get_user_agent, request logger = logging.getLogger(__name__) @@ -27,7 +26,7 @@ def get_forward_rates(to_symbol: str = "USD", from_symbol: str = "EUR") -> pd.Da Dataframe containing forward rates """ - r = requests.get( + r = request( f"https://www.fxempire.com/currencies/{from_symbol}-{to_symbol}/forward-rates", headers={"User-Agent": get_user_agent()}, ) diff --git a/openbb_terminal/forex/polygon_model.py b/openbb_terminal/forex/polygon_model.py index aa2938fec55..67a0cce85c1 100644 --- a/openbb_terminal/forex/polygon_model.py +++ b/openbb_terminal/forex/polygon_model.py @@ -3,10 +3,9 @@ __docformat__ = "numpy" from datetime import datetime from typing import Optional -import requests import pandas as pd from openbb_terminal.config_terminal import API_POLYGON_KEY as api_key -from openbb_terminal.helper_funcs import get_user_agent +from openbb_terminal.helper_funcs import get_user_agent, request from openbb_terminal.decorators import check_api_key from openbb_terminal.rich_config import console @@ -49,7 +48,7 @@ def get_historical( f"https://api.polygon.io/v2/aggs/ticker/C:{fx_pair}/range" f"/{multiplier}/{timespan}/{start_date}/{end_date}?adjusted=true&sort=desc&limit=50000&apiKey={api_key}" ) - json_response = requests.get( + json_response = request( request_url, headers={"User-Agent": get_user_agent()} ).json() diff --git a/openbb_terminal/helper_funcs.py b/openbb_terminal/helper_funcs.py index 87f92001c66..264a159aee1 100644 --- a/openbb_terminal/helper_funcs.py +++ b/openbb_terminal/helper_funcs.py @@ -40,6 +40,7 @@ from PIL import Image, ImageDraw from openbb_terminal.rich_config import console from openbb_terminal import feature_flags as obbff +from openbb_terminal import config_terminal as cfg from openbb_terminal import config_plot as cfgPlot from openbb_terminal.core.config.paths import ( HOME_DIRECTORY, @@ -1475,7 +1476,7 @@ def get_rf() -> float: base = "https://api.fiscaldata.treasury.gov/services/api/fiscal_service" end = "/v2/accounting/od/avg_interest_rates" filters = "?filter=security_desc:eq:Treasury Bills&sort=-record_date" - response = requests.get(base + end + filters) + response = request(base + end + filters) latest = response.json()["data"][0] return round(float(latest["avg_interest_rate_amt"]) / 100, 8) except Exception: @@ -1977,3 +1978,39 @@ def check_start_less_than_end(start_date: str, end_date: str) -> bool: console.print("[red]Start date cannot be greater than end date.[/red]") return True return False + + +# Write an abstract helper to make requests from a url with potential headers and params +def request(url: str, method="GET", **kwargs) -> requests.Response: + """Abstract helper to make requests from a url with potential headers and params. + + Parameters + ---------- + url : str + Url to make the request to + method : str, optional + HTTP method to use. Can be "GET" or "POST", by default "GET" + + Returns + ------- + requests.Response + Request response object + + Raises + ------ + ValueError + If invalid method is passed + """ + # We want to add a user agent to the request, so check if there are any headers + # If there are headers, check if there is a user agent, if not add one. + # Some requests seem to work only with a specific user agent, so we want to be able to override it. + headers = kwargs.pop("headers") if "headers" in kwargs else {} + if "User-Agent" not in headers: + headers["User-Agent"] = get_user_agent() + if method.upper() == "GET": + return requests.get(url, headers=headers, timeout=cfg.REQUEST_TIMEOUT, **kwargs) + if method.upper() == "POST": + return requests.post( + url, headers=headers, timeout=cfg.REQUEST_TIMEOUT, **kwargs + ) + raise ValueError("Method must be GET or POST") diff --git a/openbb_terminal/keys_model.py b/openbb_terminal/keys_model.py index 3f49acb8cd0..aee6df12128 100644 --- a/openbb_terminal/keys_model.py +++ b/openbb_terminal/keys_model.py @@ -32,6 +32,7 @@ from openbb_terminal.cryptocurrency.coinbase_helpers import ( from openbb_terminal import config_terminal as cfg from openbb_terminal.core.config.paths import USER_ENV_FILE from openbb_terminal.rich_config import console +from openbb_terminal.helper_funcs import request from openbb_terminal.terminal_helper import suppress_stdout from openbb_terminal.portfolio.brokers.degiro.degiro_model import DegiroModel @@ -397,7 +398,7 @@ def check_fmp_key(show_output: bool = False) -> str: logger.info("Financial Modeling Prep key not defined") status = KeyStatus.NOT_DEFINED else: - r = requests.get( + r = request( f"https://financialmodelingprep.com/api/v3/profile/AAPL?apikey={cfg.API_KEY_FINANCIALMODELINGPREP}" ) if r.status_code in [403, 401] or "Error Message" in str(r.content): @@ -525,7 +526,7 @@ def check_polygon_key(show_output: bool = False) -> str: logger.info("Polygon key not defined") status = KeyStatus.NOT_DEFINED else: - r = requests.get( + r = request( "https://api.polygon.io/v2/aggs/ticker/AAPL/range/1/day/2020-06-01/2020-06-17" f"?apiKey={cfg.API_POLYGON_KEY}" ) @@ -592,7 +593,7 @@ def check_fred_key(show_output: bool = False) -> str: logger.info("FRED key not defined") status = KeyStatus.NOT_DEFINED else: - r = requests.get( + r = request( f"https://api.stlouisfed.org/fred/series?series_id=GNPCA&api_key={cfg.API_FRED_KEY}" ) if r.status_code in [403, 401, 400]: @@ -658,7 +659,7 @@ def check_news_key(show_output: bool = False) -> str: logger.info("News API key not defined") status = KeyStatus.NOT_DEFINED else: - r = requests.get( + r = request( f"https://newsapi.org/v2/everything?q=keyword&apiKey={cfg.API_NEWS_TOKEN}" ) if r.status_code in [401, 403]: @@ -724,7 +725,7 @@ def check_tradier_key(show_output: bool = False) -> str: logger.info("Tradier key not defined") status = KeyStatus.NOT_DEFINED else: - r = requests.get( + r = request( "https://sandbox.tradier.com/v1/markets/quotes", params={"symbols": "AAPL"}, headers={ @@ -857,7 +858,7 @@ def check_finnhub_key(show_output: bool = False) -> str: logger.info("Finnhub key not defined") status = KeyStatus.NOT_DEFINED else: - r = r = requests.get( + r = r = request( f"https://finnhub.io/api/v1/quote?symbol=AAPL&token={cfg.API_FINNHUB_KEY}" ) if r.status_code in [403, 401, 400]: @@ -1113,8 +1114,11 @@ def check_bitquery_key(show_output: bool = False) -> str: protocol }}} """ - r = requests.post( - "https://graphql.bitquery.io", json={"query": query}, headers=headers + r = request( + "https://graphql.bitquery.io", + method="POST", + json={"query": query}, + headers=headers, ) if r.status_code == 200: logger.info("Bitquery key defined, test passed") @@ -1203,7 +1207,7 @@ def check_twitter_key(show_output: bool = False) -> str: "max_results": "10", "tweet.fields": "created_at,lang", } - r = requests.get( + r = request( "https://api.twitter.com/2/tweets/search/recent", params=params, # type: ignore headers={"authorization": "Bearer " + cfg.API_TWITTER_BEARER_TOKEN}, @@ -1453,10 +1457,10 @@ def check_oanda_key(show_output: bool = False) -> str: account = cfg.OANDA_ACCOUNT try: parameters = {"instruments": "EUR_USD"} - request = oandapyV20.endpoints.pricing.PricingInfo( + request_ = oandapyV20.endpoints.pricing.PricingInfo( accountID=account, params=parameters ) - client.request(request) + client.request(request_) logger.info("Oanda key defined, test passed") status = KeyStatus.DEFINED_TEST_PASSED @@ -1599,7 +1603,7 @@ def check_si_key(show_output: bool = False) -> str: status = KeyStatus.NOT_DEFINED else: try: - account = requests.get( + account = request( f"https://api.sentimentinvestor.com/v1/trending" f"?token={cfg.API_SENTIMENTINVESTOR_TOKEN}" ) @@ -1760,7 +1764,7 @@ def check_walert_key(show_output: bool = False) -> str: + cfg.API_WHALE_ALERT_KEY ) try: - response = requests.get(url, timeout=2) + response = request(url) if not 200 <= response.status_code < 300: logger.warning("Walert key defined, test failed") status = KeyStatus.DEFINED_TEST_FAILED @@ -1836,7 +1840,7 @@ def check_glassnode_key(show_output: bool = False) -> str: "u": str(1_641_227_783_561), } - r = requests.get(url, params=parameters) + r = request(url, params=parameters) if r.status_code == 200: logger.info("Glassnode key defined, test passed") status = KeyStatus.DEFINED_TEST_PASSED @@ -1903,7 +1907,7 @@ def check_coinglass_key(show_output: bool = False) -> str: headers = {"coinglassSecret": cfg.API_COINGLASS_KEY} - response = requests.request("GET", url, headers=headers) + response = request(url, headers=headers) if """success":false""" in str(response.content): logger.warning("Coinglass key defined, test failed") @@ -1969,7 +1973,7 @@ def check_cpanic_key(show_output: bool = False) -> str: status = KeyStatus.NOT_DEFINED else: crypto_panic_url = f"https://cryptopanic.com/api/v1/posts/?auth_token={cfg.API_CRYPTO_PANIC_KEY}" - response = requests.get(crypto_panic_url) + response = request(crypto_panic_url) if response.status_code == 200: logger.info("Cpanic key defined, test passed") @@ -2037,7 +2041,7 @@ def check_ethplorer_key(show_output: bool = False) -> str: ethplorer_url += cfg.API_ETHPLORER_KEY try: - response = requests.get(ethplorer_url) + response = request(ethplorer_url) if response.status_code == 200: logger.info("ethplorer key defined, test passed") status = KeyStatus.DEFINED_TEST_PASSED @@ -2119,7 +2123,7 @@ def check_smartstake_key(show_output: bool = False) -> str: } smartstake_url = "https://prod.smartstakeapi.com/listData?app=TERRA" - response = requests.get(smartstake_url, params=payload) # type: ignore + response = request(smartstake_url, params=payload) # type: ignore try: if ( @@ -2255,7 +2259,7 @@ def check_messari_key(show_output: bool = False) -> str: url = "https://data.messari.io/api/v2/assets/bitcoin/profile" headers = {"x-messari-api-key": cfg.API_MESSARI_KEY} params = {"fields": "profile/general/overview/official_links"} - r = requests.get(url, headers=headers, params=params) + r = request(url, headers=headers, params=params) if r.status_code == 200: logger.info("Messari key defined, test passed") @@ -2318,7 +2322,7 @@ def check_eodhd_key(show_output: bool = False) -> str: status = KeyStatus.NOT_DEFINED else: request_url = f"https://eodhistoricaldata.com/api/exchanges-list/?api_token={cfg.API_EODHD_KEY}&fmt=json" - r = requests.get(request_url) + r = request(request_url) if r.status_code == 200: logger.info("Eodhd key defined, test passed") status = KeyStatus.DEFINED_TEST_PASSED @@ -2389,8 +2393,11 @@ def check_santiment_key(show_output: bool = False) -> str: # pylint: disable=line-too-long data = '\n{{ getMetric(metric: "dev_activity"){{ timeseriesData( slug: "ethereum" from: ""2020-02-10T07:00:00Z"" to: "2020-03-10T07:00:00Z" interval: "1w"){{ datetime value }} }} }}' # noqa: E501 - response = requests.post( - "https://api.santiment.net/graphql", headers=headers, data=data + response = request( + "https://api.santiment.net/graphql", + method="POST", + headers=headers, + data=data, ) try: if response.status_code == 200: @@ -2457,8 +2464,9 @@ def check_shroom_key(show_output: bool = False) -> str: status = KeyStatus.NOT_DEFINED else: try: - response = requests.post( + response = request( "https://node-api.flipsidecrypto.com/queries", + method="POST", headers={"x-api-key": cfg.API_SHROOM_KEY}, ) if response.status_code == 400: diff --git a/openbb_terminal/mutual_funds/avanza_model.py b/openbb_terminal/mutual_funds/avanza_model.py index 64046b7afda..bad8328c877 100644 --- a/openbb_terminal/mutual_funds/avanza_model.py +++ b/openbb_terminal/mutual_funds/avanza_model.py @@ -5,11 +5,11 @@ __docformat__ = "numpy" import logging import os -import requests import pandas as pd from openbb_terminal.decorators import log_start_end +from openbb_terminal.helper_funcs import request logger = logging.getLogger(__name__) @@ -30,6 +30,6 @@ def get_data(name: str): ava_fund.index = ava_fund.index.str.upper() fund_id = ava_fund.loc[name, "ID"] url = f"https://www.avanza.se/_api/fund-guide/guide/{fund_id}" - response = requests.get(url) + response = request(url) fund_data = response.json() return fund_data diff --git a/openbb_terminal/portfolio/allocation_model.py b/openbb_terminal/portfolio/allocation_model.py index 0ae627ab9d5..e8fdcd40cdc 100644 --- a/openbb_terminal/portfolio/allocation_model.py +++ b/openbb_terminal/portfolio/allocation_model.py @@ -5,10 +5,11 @@ import logging from typing import Dict, Tuple import pandas as pd -import requests -from tqdm import tqdm import yfinance as yf +from tqdm import tqdm + from openbb_terminal.decorators import log_start_end +from openbb_terminal.helper_funcs import request from openbb_terminal.rich_config import console logger = logging.getLogger(__name__) @@ -331,7 +332,7 @@ def get_symbol_allocation( # Collect data from Fidelity about the portfolio composition of the benchmark URL = f"https://screener.fidelity.com/ftgw/etf/goto/snapshot/portfolioComposition.jhtml?symbols={symbol}" - html = requests.get(URL).content + html = request(URL).content df_list = pd.read_html(html) # Find the ones that contain regions and countries diff --git a/openbb_terminal/stocks/behavioural_analysis/cramer_model.py b/openbb_terminal/stocks/behavioural_analysis/cramer_model.py index 7798ec499b6..2ed1d036813 100644 --- a/openbb_terminal/stocks/behavioural_analysis/cramer_model.py +++ b/openbb_terminal/stocks/behavioural_analysis/cramer_model.py @@ -6,13 +6,13 @@ import logging import re import pandas as pd -import requests import numpy as np import yfinance as yf from bs4 import BeautifulSoup import certifi from openbb_terminal.decorators import log_start_end +from openbb_terminal.helper_funcs import request logger = logging.getLogger(__name__) @@ -40,8 +40,9 @@ def get_cramer_daily(inverse: bool = True) -> pd.DataFrame: link = ( "https://madmoney.thestreet.com/screener/index.cfm?showview=stocks&showrows=500" ) - r = requests.post( + r = request( link, + method="POST", headers={ "Content-Type": "application/x-www-form-urlencoded", "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) " diff --git a/openbb_terminal/stocks/cboe_model.py b/openbb_terminal/stocks/cboe_model.py index 6c86a5ee9c6..e18a51cee65 100644 --- a/openbb_terminal/stocks/cboe_model.py +++ b/openbb_terminal/stocks/cboe_model.py @@ -4,7 +4,7 @@ __docformat__ = "numpy" from typing import Tuple import pandas as pd -import requests +from openbb_terminal.helper_funcs import request from openbb_terminal.rich_config import console @@ -35,7 +35,7 @@ def get_top_of_book( # exchange need to be lower case. Not sure why url = f"https://www.cboe.com/json/{exchange.lower()}/book/{symbol}" - r = requests.get( + r = request( url, headers={ "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko)" diff --git a/openbb_terminal/stocks/comparison_analysis/finbrain_model.py b/openbb_terminal/stocks/comparison_analysis/finbrain_model.py index 14515c82e7e..109e0683cd2 100644 --- a/openbb_terminal/stocks/comparison_analysis/finbrain_model.py +++ b/openbb_terminal/stocks/comparison_analysis/finbrain_model.py @@ -5,7 +5,7 @@ import logging from typing import List, Tuple import pandas as pd -import requests +from openbb_terminal.helper_funcs import request from openbb_terminal.decorators import log_start_end from openbb_terminal.rich_config import console @@ -65,7 +65,7 @@ def get_sentiments(symbols: List[str]) -> pd.DataFrame: symbols_to_remove = list() results_list = list() for ticker in symbols: - result = requests.get(f"https://api.finbrain.tech/v0/sentiments/{ticker}") + result = request(f"https://api.finbrain.tech/v0/sentiments/{ticker}") # Check status code, if its correct then convert to dict using .json() if result.status_code == 200: result_json = result.json() diff --git a/openbb_terminal/stocks/comparison_analysis/finnhub_model.py b/openbb_terminal/stocks/comparison_analysis/finnhub_model.py index ccb8ce4107d..ddd74a3b3fa 100644 --- a/openbb_terminal/stocks/comparison_analysis/finnhub_model.py +++ b/openbb_terminal/stocks/comparison_analysis/finnhub_model.py @@ -4,7 +4,7 @@ __docformat__ = "numpy" import logging from typing import List -import requests +from openbb_terminal.helper_funcs import request from openbb_terminal import config_terminal as cfg from openbb_terminal.decorators import check_api_key, log_start_end @@ -29,7 +29,7 @@ def get_similar_companies(symbol: str) -> List[str]: List of similar companies """ - response = requests.get( + response = request( f"https://finnhub.io/api/v1/stock/peers?symbol={symbol}&token={cfg.API_FINNHUB_KEY}" ) diff --git a/openbb_terminal/stocks/comparison_analysis/marketwatch_model.py b/openbb_terminal/stocks/comparison_analysis/marketwatch_model.py index 17058bf2502..d6093ea172d 100644 --- a/openbb_terminal/stocks/comparison_analysis/marketwatch_model.py +++ b/openbb_terminal/stocks/comparison_analysis/marketwatch_model.py @@ -1,16 +1,15 @@ """ Comparison Analysis Marketwatch Model """ __docformat__ = "numpy" -from datetime import datetime import logging +from datetime import datetime from typing import Dict, List, Tuple import pandas as pd -import requests from bs4 import BeautifulSoup from openbb_terminal.decorators import log_start_end -from openbb_terminal.helper_funcs import get_user_agent +from openbb_terminal.helper_funcs import get_user_agent, request from openbb_terminal.rich_config import console logger = logging.getLogger(__name__) @@ -215,7 +214,7 @@ def prepare_df_financials( try: period = "quarter" if quarter else "annual" text_soup_financials = BeautifulSoup( - requests.get( + request( financial_urls[statement][period].format(ticker), headers={"User-Agent": get_user_agent()}, ).text, diff --git a/openbb_terminal/stocks/comparison_analysis/polygon_model.py b/openbb_terminal/stocks/comparison_analysis/polygon_model.py index 52f307a8b3c..f2d712c1fc7 100644 --- a/openbb_terminal/stocks/comparison_analysis/polygon_model.py +++ b/openbb_terminal/stocks/comparison_analysis/polygon_model.py @@ -4,11 +4,10 @@ __docformat__ = "numpy" import logging from typing import List -import requests - from openbb_terminal import config_terminal as cfg from openbb_terminal.decorators import check_api_key, log_start_end from openbb_terminal.rich_config import console +from openbb_terminal.helper_funcs import request logger = logging.getLogger(__name__) @@ -30,7 +29,7 @@ def get_similar_companies(symbol: str, us_only: bool = False) -> List[str]: List[str]: List of similar tickers """ - result = requests.get( + result = request( f"https://api.polygon.io/v1/meta/symbols/{symbol.upper()}/company?&apiKey={cfg.API_POLYGON_KEY}" ) @@ -43,7 +42,7 @@ def get_similar_companies(symbol: str, us_only: bool = False) -> List[str]: mkw_link = "https://www.marketwatch.com/investing/stock/" for sym in similar: prep_link = mkw_link + sym - sent_req = requests.get(prep_link) + sent_req = request(prep_link) if prep_link == sent_req.request.url: us_similar.append(sym) similar = us_similar diff --git a/openbb_terminal/stocks/dark_pool_shorts/finra_model.py b/openbb_terminal/stocks/dark_pool_shorts/finra_model.py index a46e59cee05..65e3bd0d577 100644 --- a/openbb_terminal/stocks/dark_pool_shorts/finra_model.py +++ b/openbb_terminal/stocks/dark_pool_shorts/finra_model.py @@ -10,6 +10,7 @@ from scipy import stats from openbb_terminal.decorators import log_start_end from openbb_terminal.rich_config import console +from openbb_terminal.helper_funcs import request logger = logging.getLogger(__name__) @@ -52,8 +53,9 @@ def getFINRAweeks(tier: str = "T1", is_ats: bool = True) -> List: "sortFields": ["-weekStartDate"], } - response = requests.post( + response = request( "https://api.finra.org/data/group/otcMarket/name/weeklyDownloadDetails", + method="POST", headers=req_hdr, json=req_data, ) @@ -130,8 +132,9 @@ def getFINRAdata_offset( "sortFields": ["totalWeeklyShareQuantity"], } - return requests.post( + return request( "https://api.finra.org/data/group/otcMarket/name/weeklySummary", + method="POST", headers=req_hdr, json=req_data, ) @@ -198,8 +201,9 @@ def getFINRAdata( "sortFields": ["totalWeeklyShareQuantity"], } - response = requests.post( + response = request( "https://api.finra.org/data/group/otcMarket/name/weeklySummary", + method="POST", headers=req_hdr, json=req_data, ) diff --git a/openbb_terminal/stocks/dark_pool_shorts/sec_model.py b/openbb_terminal/stocks/dark_pool_shorts/sec_model.py index a5c780f9184..20bc306ce3d 100644 --- a/openbb_terminal/stocks/dark_pool_shorts/sec_model.py +++ b/openbb_terminal/stocks/dark_pool_shorts/sec_model.py @@ -7,11 +7,10 @@ from typing import Optional from urllib.error import HTTPError import pandas as pd -import requests from bs4 import BeautifulSoup from openbb_terminal.decorators import log_start_end -from openbb_terminal.helper_funcs import get_user_agent +from openbb_terminal.helper_funcs import get_user_agent, request logger = logging.getLogger(__name__) @@ -97,7 +96,7 @@ def get_fails_to_deliver( if limit > 0: url_ftds = "https://www.sec.gov/data/foiadocsfailsdatahtm" text_soup_ftds = BeautifulSoup( - requests.get(url_ftds, headers={"User-Agent": get_user_agent()}).text, + request(url_ftds, headers={"User-Agent": get_user_agent()}).text, "lxml", ) diff --git a/openbb_terminal/stocks/dark_pool_shorts/shortinterest_model.py b/openbb_terminal/stocks/dark_pool_shorts/shortinterest_model.py index ee555fb2c3d..c80b32974ee 100644 --- a/openbb_terminal/stocks/dark_pool_shorts/shortinterest_model.py +++ b/openbb_terminal/stocks/dark_pool_shorts/shortinterest_model.py @@ -4,12 +4,11 @@ __docformat__ = "numpy" import logging import pandas as pd -import requests from bs4 import BeautifulSoup from pandas.core.frame import DataFrame from openbb_terminal.decorators import log_start_end -from openbb_terminal.helper_funcs import get_user_agent +from openbb_terminal.helper_funcs import get_user_agent, request logger = logging.getLogger(__name__) @@ -27,7 +26,7 @@ def get_high_short_interest() -> DataFrame: url_high_short_interested_stocks = "https://www.highshortinterest.com" text_soup_high_short_interested_stocks = BeautifulSoup( - requests.get( + request( url_high_short_interested_stocks, headers={"User-Agent": get_user_agent()} ).text, "lxml", diff --git a/openbb_terminal/stocks/dark_pool_shorts/stockgrid_model.py b/openbb_terminal/stocks/dark_pool_shorts/stockgrid_model.py index 2e256366238..2da010be45f 100644 --- a/openbb_terminal/stocks/dark_pool_shorts/stockgrid_model.py +++ b/openbb_terminal/stocks/dark_pool_shorts/stockgrid_model.py @@ -6,7 +6,7 @@ from typing import List, Tuple from json import JSONDecodeError import pandas as pd -import requests +from openbb_terminal.helper_funcs import request from openbb_terminal.decorators import log_start_end @@ -53,7 +53,7 @@ def get_dark_pool_short_positions( link = f"https://stockgridapp.herokuapp.com/get_dark_pool_data?top={field}&minmax={order}" - response = requests.get(link) + response = request(link) df = pd.DataFrame(response.json()["data"]) df = df[ @@ -88,7 +88,7 @@ def get_short_interest_days_to_cover(sortby: str = "float") -> pd.DataFrame: Short interest and days to cover data """ link = "https://stockgridapp.herokuapp.com/get_short_interest?top=days" - r = requests.get(link) + r = request(link) df = pd.DataFrame(r.json()["data"]) d_fields = { @@ -132,7 +132,7 @@ def get_short_interest_volume(symbol: str) -> Tuple[pd.DataFrame, List]: Short interest volume data, Price data """ link = f"https://stockgridapp.herokuapp.com/get_dark_pool_individual_data?ticker={symbol}" - response = requests.get(link) + response = request(link) try: response_json = response.json() except JSONDecodeError: @@ -176,7 +176,7 @@ def get_net_short_position(symbol: str) -> pd.DataFrame: Net short position """ link = f"https://stockgridapp.herokuapp.com/get_dark_pool_individual_data?ticker={symbol}" - response = requests.get(link) + response = request(link) try: df = pd.DataFrame(response.json()["individual_dark_pool_position_data"]) diff --git a/openbb_terminal/stocks/dark_pool_shorts/yahoofinance_model.py b/openbb_terminal/stocks/dark_pool_shorts/yahoofinance_model.py index 50c5052fa7d..8252e0793b5 100644 --- a/openbb_terminal/stocks/dark_pool_shorts/yahoofinance_model.py +++ b/openbb_terminal/stocks/dark_pool_shorts/yahoofinance_model.py @@ -4,10 +4,9 @@ __docformat__ = "numpy" import logging import pandas as pd -import requests from openbb_terminal.decorators import log_start_end -from openbb_terminal.helper_funcs import get_user_agent +from openbb_terminal.helper_funcs import get_user_agent, request logger = logging.getLogger(__name__) @@ -23,8 +22,6 @@ def get_most_shorted() -> pd.DataFrame: """ url = "https://finance.yahoo.com/screener/predefined/most_shorted_stocks" - data = pd.read_html( - requests.get(url, headers={"User-Agent": get_user_agent()}).text - )[0] + data = pd.read_html(request(url, headers={"User-Agent": get_user_agent()}).text)[0] data = data.iloc[:, :-1] return data diff --git a/openbb_terminal/stocks/discovery/ark_model.py b/openbb_terminal/stocks/discovery/ark_model.py index ecdc5ad5903..3505210fa40 100644 --- a/openbb_terminal/stocks/discovery/ark_model.py +++ b/openbb_terminal/stocks/discovery/ark_model.py @@ -7,13 +7,12 @@ from datetime import timedelta import numpy as np import pandas as pd -import requests import yfinance as yf from bs4 import BeautifulSoup from pandas.core.frame import DataFrame from openbb_terminal.decorators import log_start_end -from openbb_terminal.helper_funcs import get_user_agent +from openbb_terminal.helper_funcs import get_user_agent, request from openbb_terminal.rich_config import console logger = logging.getLogger(__name__) @@ -45,7 +44,7 @@ def get_ark_orders( """ url_orders = "https://cathiesark.com/ark-funds-combined/trades" - raw_page = requests.get(url_orders, headers={"User-Agent": get_user_agent()}).text + raw_page = request(url_orders, headers={"User-Agent": get_user_agent()}).text parsed_script = BeautifulSoup(raw_page, "lxml").find( "script", {"id": "__NEXT_DATA__"} diff --git a/openbb_terminal/stocks/discovery/disc_helpers.py b/openbb_terminal/stocks/discovery/disc_helpers.py index d20b3499232..8adac7fde4b 100644 --- a/openbb_terminal/stocks/discovery/disc_helpers.py +++ b/openbb_terminal/stocks/discovery/disc_helpers.py @@ -1,14 +1,11 @@ import re import pandas as pd -import requests - - -from openbb_terminal.helper_funcs import get_user_agent +from openbb_terminal.helper_funcs import get_user_agent, request def get_df(url: str, header: int = None) -> pd.DataFrame: headers = {"User-Agent": get_user_agent()} - html = requests.get(url, headers=headers).text + html = request(url, headers=headers).text # use regex to replace radio button html entries html_clean = re.sub(r"().*?()", "", html) dfs = pd.read_html(html_clean, header=header) diff --git a/openbb_terminal/stocks/discovery/fidelity_model.py b/openbb_terminal/stocks/discovery/fidelity_model.py index f17a322159e..c83584d9610 100644 --- a/openbb_terminal/stocks/discovery/fidelity_model.py +++ b/openbb_terminal/stocks/discovery/fidelity_model.py @@ -5,12 +5,11 @@ import logging from typing import Tuple import pandas as pd -import requests from bs4 import BeautifulSoup from pandas.core.frame import DataFrame from openbb_terminal.decorators import log_start_end -from openbb_terminal.helper_funcs import get_user_agent +from openbb_terminal.helper_funcs import get_user_agent, request logger = logging.getLogger(__name__) @@ -31,7 +30,7 @@ def get_orders() -> Tuple[str, DataFrame]: ) text_soup_url_orders = BeautifulSoup( - requests.get(url_orders, headers={"User-Agent": get_user_agent()}).text, "lxml" + request(url_orders, headers={"User-Agent": get_user_agent()}).text, "lxml" ) l_orders = [] diff --git a/openbb_terminal/stocks/discovery/finnhub_model.py b/openbb_terminal/stocks/discovery/finnhub_model.py index 8f4780fe298..d30816e259f 100644 --- a/openbb_terminal/stocks/discovery/finnhub_model.py +++ b/openbb_terminal/stocks/discovery/finnhub_model.py @@ -3,11 +3,11 @@ from datetime import datetime, timedelta from typing import Optional import pandas as pd -import requests from openbb_terminal import config_terminal as cfg from openbb_terminal.decorators import check_api_key, log_start_end from openbb_terminal.rich_config import console +from openbb_terminal.helper_funcs import request logger = logging.getLogger(__name__) @@ -39,7 +39,7 @@ def get_ipo_calendar( if end_date is None: end_date = datetime.now().strftime("%Y-%m-%d") - response = requests.get( + response = request( f"https://finnhub.io/api/v1/calendar/ipo?from={start_date}&to={end_date}&token={cfg.API_FINNHUB_KEY}" ) diff --git a/openbb_terminal/stocks/discovery/finviz_model.py b/openbb_terminal/stocks/discovery/finviz_model.py index 4ef178bef51..d23489219a3 100644 --- a/openbb_terminal/stocks/discovery/finviz_model.py +++ b/openbb_terminal/stocks/discovery/finviz_model.py @@ -2,8 +2,7 @@ __docformat__ = "numpy" import pandas as pd -import requests -from openbb_terminal.helper_funcs import get_user_agent +from openbb_terminal.helper_funcs import get_user_agent, request from openbb_terminal.rich_config import console timeframe_map = { @@ -33,11 +32,11 @@ def get_heatmap_data(timeframe: str) -> pd.DataFrame: if timeframe not in timeframe_map: console.print(f"[red]{timeframe} is an invalid timeframe[/red]") return pd.DataFrame() - r = requests.get( + r = request( f"https://finviz.com/api/map_perf.ashx?t=sec&st={timeframe_map[timeframe]}", headers={"User-Agent": get_user_agent()}, ) - r2_json = requests.get( + r2_json = request( "https://finviz.com/maps/sec.json?rev=316", headers={"User-Agent": get_user_agent()}, ).json() diff --git a/openbb_terminal/stocks/discovery/nasdaq_model.py b/openbb_terminal/stocks/discovery/nasdaq_model.py index 3d1b3324678..d2e7ed4cfc1 100644 --- a/openbb_terminal/stocks/discovery/nasdaq_model.py +++ b/openbb_terminal/stocks/discovery/nasdaq_model.py @@ -9,7 +9,7 @@ import requests import openbb_terminal.config_terminal as cfg from openbb_terminal.decorators import check_api_key, log_start_end -from openbb_terminal.helper_funcs import get_user_agent +from openbb_terminal.helper_funcs import get_user_agent, request from openbb_terminal.rich_config import console @@ -26,7 +26,7 @@ def get_retail_tickers() -> pd.DataFrame: pd.DataFrame Dataframe of tickers """ - r = requests.get( + r = request( f"https://data.nasdaq.com/api/v3/datatables/NDAQ/RTAT10/?api_key={cfg.API_KEY_QUANDL}" ) @@ -79,10 +79,9 @@ def get_dividend_cal(date: str = None) -> pd.DataFrame: ): ag = get_user_agent() try: - r = requests.get( + r = request( f"https://api.nasdaq.com/api/calendar/dividends?date={date}", headers={"User-Agent": ag}, - timeout=5, ) df = pd.DataFrame() diff --git a/openbb_terminal/stocks/discovery/seeking_alpha_model.py b/openbb_terminal/stocks/discovery/seeking_alpha_model.py index 6210a5b537e..cf11607300c 100644 --- a/openbb_terminal/stocks/discovery/seeking_alpha_model.py +++ b/openbb_terminal/stocks/discovery/seeking_alpha_model.py @@ -5,12 +5,11 @@ import logging from typing import Dict, List import pandas as pd -import requests from bs4 import BeautifulSoup from pandas.core.frame import DataFrame from openbb_terminal.decorators import log_start_end -from openbb_terminal.helper_funcs import get_user_agent +from openbb_terminal.helper_funcs import get_user_agent, request from openbb_terminal.rich_config import console logger = logging.getLogger(__name__) @@ -18,7 +17,7 @@ logger = logging.getLogger(__name__) @log_start_end(log=logger) def get_earnings_html(url_next_earnings: str) -> str: - """Wraps HTTP requests.get for testibility + """Wraps HTTP request for testibility Parameters ---------- @@ -30,7 +29,7 @@ def get_earnings_html(url_next_earnings: str) -> str: str HTML page of next earnings """ - earnings_html = requests.get( + earnings_html = request( url_next_earnings, headers={"User-Agent": get_user_agent()} ).text @@ -77,7 +76,7 @@ def get_next_earnings(limit: int = 10) -> DataFrame: @log_start_end(log=logger) def get_articles_html(url_articles: str) -> str: - """Wraps HTTP requests.get for testability + """Wraps HTTP request for testability Parameters ---------- @@ -89,9 +88,7 @@ def get_articles_html(url_articles: str) -> str: str HTML page of articles """ - articles_html = requests.get( - url_articles, headers={"User-Agent": get_user_agent()} - ).text + articles_html = request(url_articles, headers={"User-Agent": get_user_agent()}).text return articles_html @@ -113,7 +110,7 @@ def get_trending_list(limit: int = 5) -> list: articles = [] url_articles = "https://seekingalpha.com/news/trending_news" - response = requests.get(url_articles, headers={"User-Agent": get_user_agent()}) + response = request(url_articles, headers={"User-Agent": get_user_agent()}) # Check that the API response was successful if response.status_code != 200: @@ -152,7 +149,7 @@ def get_article_data(article_id: int) -> dict: """ article_url = f"https://seekingalpha.com/api/v3/news/{article_id}" - response = requests.get(article_url, headers={"User-Agent": get_user_agent()}) + response = request(article_url, headers={"User-Agent": get_user_agent()}) jdata = response.json() content = jdata["data"]["attributes"]["content"].replace("", "\n") content = BeautifulSoup(content, features="html.parser").get_text() @@ -188,9 +185,7 @@ def get_news_html(news_type: str = "Top-News") -> dict: "&isMounting=true&page%5Bsize%5D=25&page%5Bnumber%5D=1" ) - articles_html = requests.get( - sa_url, headers={"User-Agent": get_user_agent()} - ).json() + articles_html = request(sa_url, headers={"User-Agent": get_user_agent()}).json() return articles_html diff --git a/openbb_terminal/stocks/due_diligence/ark_model.py b/openbb_terminal/stocks/due_diligence/ark_model.py index 58d29dbccfe..88ad6e62d38 100644 --- a/openbb_terminal/stocks/due_diligence/ark_model.py +++ b/openbb_terminal/stocks/due_diligence/ark_model.py @@ -5,12 +5,11 @@ import json import logging import pandas as pd -import requests import yfinance as yf from bs4 import BeautifulSoup from openbb_terminal.decorators import log_start_end -from openbb_terminal.helper_funcs import get_user_agent +from openbb_terminal.helper_funcs import get_user_agent, request logger = logging.getLogger(__name__) @@ -30,7 +29,7 @@ def get_ark_trades_by_ticker(symbol: str) -> pd.DataFrame: DataFrame of trades """ url = f"https://cathiesark.com/ark-combined-holdings-of-{symbol}" - r = requests.get(url, headers={"User-Agent": get_user_agent()}) + r = request(url, headers={"User-Agent": get_user_agent()}) # Error in request if r.status_code != 200: return pd.DataFrame() diff --git a/openbb_terminal/stocks/due_diligence/business_insider_model.py b/openbb_terminal/stocks/due_diligence/business_insider_model.py index f6a6d42ac81..fabb0ee0cd9 100644 --- a/openbb_terminal/stocks/due_diligence/business_insider_model.py +++ b/openbb_terminal/stocks/due_diligence/business_insider_model.py @@ -7,11 +7,10 @@ import re from typing import Tuple import pandas as pd -import requests from bs4 import BeautifulSoup from openbb_terminal.decorators import log_start_end -from openbb_terminal.helper_funcs import get_user_agent +from openbb_terminal.helper_funcs import get_user_agent, request logger = logging.getLogger(__name__) @@ -39,7 +38,7 @@ def get_price_target_from_analysts(symbol: str) -> pd.DataFrame: f"https://markets.businessinsider.com/stocks/{symbol.lower()}-stock" ) text_soup_market_business_insider = BeautifulSoup( - requests.get( + request( url_market_business_insider, headers={"User-Agent": get_user_agent()} ).text, "lxml", @@ -99,7 +98,7 @@ def get_estimates(symbol: str) -> Tuple[pd.DataFrame, pd.DataFrame, pd.DataFrame f"https://markets.businessinsider.com/stocks/{symbol.lower()}-stock" ) text_soup_market_business_insider = BeautifulSoup( - requests.get( + request( url_market_business_insider, headers={"User-Agent": get_user_agent()} ).text, "lxml", diff --git a/openbb_terminal/stocks/due_diligence/finnhub_model.py b/openbb_terminal/stocks/due_diligence/finnhub_model.py index 08179bbf72b..db70551436a 100644 --- a/openbb_terminal/stocks/due_diligence/finnhub_model.py +++ b/openbb_terminal/stocks/due_diligence/finnhub_model.py @@ -4,11 +4,11 @@ __docformat__ = "numpy" import logging import pandas as pd -import requests from openbb_terminal import config_terminal as cfg from openbb_terminal.decorators import check_api_key, log_start_end from openbb_terminal.rich_config import console +from openbb_terminal.helper_funcs import request logger = logging.getLogger(__name__) @@ -28,7 +28,7 @@ def get_rating_over_time(symbol: str) -> pd.DataFrame: pd.DataFrame Get dataframe with ratings """ - response = requests.get( + response = request( f"https://finnhub.io/api/v1/stock/recommendation?symbol={symbol}&token={cfg.API_FINNHUB_KEY}" ) df = pd.DataFrame() diff --git a/openbb_terminal/stocks/due_diligence/marketwatch_model.py b/openbb_terminal/stocks/due_diligence/marketwatch_model.py index b8c59ab035e..f998c837d16 100644 --- a/openbb_terminal/stocks/due_diligence/marketwatch_model.py +++ b/openbb_terminal/stocks/due_diligence/marketwatch_model.py @@ -4,11 +4,10 @@ __docformat__ = "numpy" import logging import pandas as pd -import requests from bs4 import BeautifulSoup from openbb_terminal.decorators import log_start_end -from openbb_terminal.helper_funcs import get_user_agent +from openbb_terminal.helper_funcs import get_user_agent, request # pylint: disable=too-many-branches @@ -38,7 +37,7 @@ def get_sec_filings(symbol: str) -> pd.DataFrame: ) text_soup_financials = BeautifulSoup( - requests.get(url_financials, headers={"User-Agent": get_user_agent()}).text, + request(url_financials, headers={"User-Agent": get_user_agent()}).text, "lxml", ) diff --git a/openbb_terminal/stocks/fundamental_analysis/av_model.py b/openbb_terminal/stocks/fundamental_analysis/av_model.py index 98437b3bbfe..42917c67736 100644 --- a/openbb_terminal/stocks/fundamental_analysis/av_model.py +++ b/openbb_terminal/stocks/fundamental_analysis/av_model.py @@ -6,11 +6,11 @@ from typing import Dict, List import numpy as np import pandas as pd -import requests + from alpha_vantage.fundamentaldata import FundamentalData from openbb_terminal import config_terminal as cfg from openbb_terminal.decorators import log_start_end -from openbb_terminal.helper_funcs import lambda_long_number_format +from openbb_terminal.helper_funcs import lambda_long_number_format, request from openbb_terminal.rich_config import console from openbb_terminal.stocks.fundamental_analysis import yahoo_finance_model from openbb_terminal.stocks.stocks_helper import clean_fraction @@ -48,7 +48,7 @@ def get_overview(symbol: str) -> pd.DataFrame: """ # Request OVERVIEW data from Alpha Vantage API s_req = f"https://www.alphavantage.co/query?function=OVERVIEW&symbol={symbol}&apikey={cfg.API_KEY_ALPHAVANTAGE}" - result = requests.get(s_req, stream=True) + result = request(s_req, stream=True) result_json = result.json() df_fa = pd.DataFrame() @@ -113,7 +113,7 @@ def get_key_metrics(symbol: str) -> pd.DataFrame: """ # Request OVERVIEW data s_req = f"https://www.alphavantage.co/query?function=OVERVIEW&symbol={symbol}&apikey={cfg.API_KEY_ALPHAVANTAGE}" - result = requests.get(s_req, stream=True) + result = request(s_req, stream=True) result_json = result.json() # If the returned data was unsuccessful @@ -190,7 +190,7 @@ def get_income_statements( f"https://www.alphavantage.co/query?function=INCOME_STATEMENT&symbol={symbol}" f"&apikey={cfg.API_KEY_ALPHAVANTAGE}" ) - r = requests.get(url) + r = request(url) response_json = r.json() if check_premium_key(response_json): return pd.DataFrame() @@ -278,7 +278,7 @@ def get_balance_sheet( DataFrame of the balance sheet """ url = f"https://www.alphavantage.co/query?function=BALANCE_SHEET&symbol={symbol}&apikey={cfg.API_KEY_ALPHAVANTAGE}" - r = requests.get(url) + r = request(url) response_json = r.json() if check_premium_key(response_json): return pd.DataFrame() @@ -365,7 +365,7 @@ def get_cash_flow( Dataframe of cash flow statements """ url = f"https://www.alphavantage.co/query?function=CASH_FLOW&symbol={symbol}&apikey={cfg.API_KEY_ALPHAVANTAGE}" - r = requests.get(url) + r = request(url) response_json = r.json() if check_premium_key(response_json): return pd.DataFrame() @@ -447,7 +447,7 @@ def get_earnings(symbol: str, quarterly: bool = False) -> pd.DataFrame: "https://www.alphavantage.co/query?function=EARNINGS&" f"symbol={symbol}&apikey={cfg.API_KEY_ALPHAVANTAGE}" ) - result = requests.get(s_req, stream=True) + result = request(s_req, stream=True) result_json = result.json() df_fa = pd.DataFrame() diff --git a/openbb_terminal/stocks/fundamental_analysis/business_insider_model.py b/openbb_terminal/stocks/fundamental_analysis/business_insider_model.py index afe647476ec..410e25fd1bb 100644 --- a/openbb_terminal/stocks/fundamental_analysis/business_insider_model.py +++ b/openbb_terminal/stocks/fundamental_analysis/business_insider_model.py @@ -4,12 +4,11 @@ __docformat__ = "numpy" import logging import pandas as pd -import requests from bs4 import BeautifulSoup from rapidfuzz import fuzz from openbb_terminal.decorators import log_start_end -from openbb_terminal.helper_funcs import get_user_agent +from openbb_terminal.helper_funcs import get_user_agent, request from openbb_terminal.rich_config import console logger = logging.getLogger(__name__) @@ -33,7 +32,7 @@ def get_management(symbol: str) -> pd.DataFrame: f"https://markets.businessinsider.com/stocks/{symbol.lower()}-stock" ) text_soup_market_business_insider = BeautifulSoup( - requests.get( + request( url_market_business_insider, headers={"User-Agent": get_user_agent()} ).text, "lxml", diff --git a/openbb_terminal/stocks/fundamental_analysis/dcf_model.py b/openbb_terminal/stocks/fundamental_analysis/dcf_model.py index 3bce59ebb23..fd9955b6b07 100644 --- a/openbb_terminal/stocks/fundamental_analysis/dcf_model.py +++ b/openbb_terminal/stocks/fundamental_analysis/dcf_model.py @@ -11,7 +11,6 @@ from zipfile import ZipFile import financedatabase as fd import pandas as pd -import requests import yfinance as yf from bs4 import BeautifulSoup from openpyxl import worksheet @@ -19,7 +18,7 @@ from sklearn.linear_model import LinearRegression from openbb_terminal.decorators import log_start_end from openbb_terminal.stocks.fundamental_analysis import dcf_static -from openbb_terminal.helper_funcs import compose_export_path +from openbb_terminal.helper_funcs import compose_export_path, request logger = logging.getLogger(__name__) @@ -404,7 +403,7 @@ def create_dataframe(symbol: str, statement: str, period: str = "annual"): URL += dcf_static.statement_url[statement] + per_url ignores = dcf_static.statement_ignore[statement] - r = requests.get(URL, headers=dcf_static.headers) + r = request(URL, headers=dcf_static.headers) if "404 - Page Not Found" in r.text: return pd.DataFrame(), None, None diff --git a/openbb_terminal/stocks/fundamental_analysis/eclect_us_model.py b/openbb_terminal/stocks/fundamental_analysis/eclect_us_model.py index 8c415b5b636..b4b877bec1a 100644 --- a/openbb_terminal/stocks/fundamental_analysis/eclect_us_model.py +++ b/openbb_terminal/stocks/fundamental_analysis/eclect_us_model.py @@ -3,10 +3,10 @@ __docformat__ = "numpy" import logging -import requests import pandas as pd from openbb_terminal.decorators import log_start_end +from openbb_terminal.helper_funcs import request # pylint: disable=R1718 @@ -29,7 +29,7 @@ def get_filings_analysis(symbol: str) -> pd.DataFrame: Analysis of filings text """ - response = requests.get(f"https://api.eclect.us/symbol/{symbol.lower()}?page=1") + response = request(f"https://api.eclect.us/symbol/{symbol.lower()}?page=1") if response.status_code != 200: return pd.DataFrame() diff --git a/openbb_terminal/stocks/fundamental_analysis/eodhd_model.py b/openbb_terminal/stocks/fundamental_analysis/eodhd_model.py index 1c2b0b1ab7a..01569536fb5 100644 --- a/openbb_terminal/stocks/fundamental_analysis/eodhd_model.py +++ b/openbb_terminal/stocks/fundamental_analysis/eodhd_model.py @@ -5,11 +5,11 @@ import logging import pandas as pd import numpy as np -import requests from openbb_terminal import config_terminal as cfg from openbb_terminal.decorators import check_api_key, log_start_end from openbb_terminal.rich_config import console +from openbb_terminal.helper_funcs import request logger = logging.getLogger(__name__) @@ -47,7 +47,7 @@ def get_financials( f"::{['yearly', 'quarterly'][quarterly]}" ) - r = requests.get(request_url) + r = request(request_url) if r.status_code != 200: console.print("[red]Invalid API Key for eodhistoricaldata [/red]") console.print( diff --git a/openbb_terminal/stocks/fundamental_analysis/market_watch_model.py b/openbb_terminal/stocks/fundamental_analysis/market_watch_model.py index 07c90a92e43..94387989ccb 100644 --- a/openbb_terminal/stocks/fundamental_analysis/market_watch_model.py +++ b/openbb_terminal/stocks/fundamental_analysis/market_watch_model.py @@ -7,7 +7,6 @@ from typing import List, Tuple import numpy as np import pandas as pd -import requests from bs4 import BeautifulSoup from openbb_terminal.decorators import log_start_end @@ -15,6 +14,7 @@ from openbb_terminal.helper_funcs import ( lambda_clean_data_values_to_float, get_user_agent, lambda_int_or_round_float, + request, ) logger = logging.getLogger(__name__) @@ -69,7 +69,7 @@ def prepare_df_financials( period = "annual" text_soup_financials = BeautifulSoup( - requests.get( + request( financial_urls[statement][period].format(symbol), headers={"User-Agent": get_user_agent()}, ).text, @@ -161,7 +161,7 @@ def get_sean_seah_warnings( f"https://www.marketwatch.com/investing/stock/{symbol}/financials/income" ) text_soup_financials = BeautifulSoup( - requests.get(url_financials, headers={"User-Agent": get_user_agent()}).text, + request(url_financials, headers={"User-Agent": get_user_agent()}).text, "lxml", ) @@ -209,7 +209,7 @@ def get_sean_seah_warnings( f"https://www.marketwatch.com/investing/stock/{symbol}/financials/balance-sheet" ) text_soup_financials = BeautifulSoup( - requests.get(url_financials, headers={"User-Agent": get_user_agent()}).text, + request(url_financials, headers={"User-Agent": get_user_agent()}).text, "lxml", ) diff --git a/openbb_terminal/stocks/fundamental_analysis/polygon_model.py b/openbb_terminal/stocks/fundamental_analysis/polygon_model.py index a54b7fe7831..ef72b8b5d19 100644 --- a/openbb_terminal/stocks/fundamental_analysis/polygon_model.py +++ b/openbb_terminal/stocks/fundamental_analysis/polygon_model.py @@ -4,11 +4,11 @@ __docformat__ = "numpy" import logging import pandas as pd -import requests from openbb_terminal import config_terminal as cfg from openbb_terminal.decorators import check_api_key, log_start_end from openbb_terminal.rich_config import console +from openbb_terminal.helper_funcs import request logger = logging.getLogger(__name__) @@ -37,7 +37,7 @@ def get_financials( Balance Sheets or Income Statements """ # Note the filing date is over 30 years so will always get as many as allowed - json_request = requests.get( + json_request = request( "https://api.polygon.io/vX/reference/financials?" f"ticker={symbol}" f"&timeframe={['annual','quarterly'][quarterly]}" diff --git a/openbb_terminal/stocks/government/quiverquant_model.py b/openbb_terminal/stocks/government/quiverquant_model.py index 3bb604d1d6d..739ae2e006a 100644 --- a/openbb_terminal/stocks/government/quiverquant_model.py +++ b/openbb_terminal/stocks/government/quiverquant_model.py @@ -8,11 +8,11 @@ from datetime import datetime, timedelta import numpy as np import pandas as pd -import requests from sklearn.linear_model import LinearRegression from openbb_terminal.decorators import log_start_end from openbb_terminal.rich_config import console +from openbb_terminal.helper_funcs import request logger = logging.getLogger(__name__) @@ -88,7 +88,7 @@ def get_government_trading( "X-CSRFToken": "TyTJwjuEC7VV7mOqZ622haRaaUr0x0Ng4nrwSRFKQs7vdoBcJlK9qjAS69ghzhFu", # pragma: allowlist secret "Authorization": f"Token {API_QUIVERQUANT_KEY}", } - response = requests.get(url, headers=headers) + response = request(url, headers=headers) if response.status_code == 200: if gov_type in ["congress", "senate", "house"]: return pd.DataFrame(response.json()).rename( diff --git a/openbb_terminal/stocks/insider/businessinsider_model.py b/openbb_terminal/stocks/insider/businessinsider_model.py index 134281b9872..5fd0f21f25b 100644 --- a/openbb_terminal/stocks/insider/businessinsider_model.py +++ b/openbb_terminal/stocks/insider/businessinsider_model.py @@ -4,11 +4,10 @@ __docformat__ = "numpy" import logging import pandas as pd -import requests from bs4 import BeautifulSoup from openbb_terminal.decorators import log_start_end -from openbb_terminal.helper_funcs import get_user_agent +from openbb_terminal.helper_funcs import get_user_agent, request logger = logging.getLogger(__name__) @@ -31,7 +30,7 @@ def get_insider_activity(symbol: str) -> pd.DataFrame: f"https://markets.businessinsider.com/stocks/{symbol.lower()}-stock" ) text_soup_market_business_insider = BeautifulSoup( - requests.get( + request( url_market_business_insider, headers={"User-Agent": get_user_agent()} ).text, "lxml", diff --git a/openbb_terminal/stocks/insider/openinsider_model.py b/openbb_terminal/stocks/insider/openinsider_model.py index a55483d08c2..784a38f6d32 100644 --- a/openbb_terminal/stocks/insider/openinsider_model.py +++ b/openbb_terminal/stocks/insider/openinsider_model.py @@ -6,12 +6,12 @@ from pathlib import Path from typing import Dict, List import pandas as pd -import requests from bs4 import BeautifulSoup from openbb_terminal.core.config.paths import USER_PRESETS_DIRECTORY from openbb_terminal.decorators import log_start_end from openbb_terminal.rich_config import console +from openbb_terminal.helper_funcs import request logger = logging.getLogger(__name__) @@ -1316,7 +1316,7 @@ def get_open_insider_data(url: str, has_company_name: bool) -> pd.DataFrame: data : pd.DataFrame open insider filtered data """ - text_soup_open_insider = BeautifulSoup(requests.get(url).text, "lxml") + text_soup_open_insider = BeautifulSoup(request(url).text, "lxml") if len(text_soup_open_insider.find_all("tbody")) == 0: console.print("No insider trading found.") @@ -1447,7 +1447,7 @@ def get_print_insider_data(type_insider: str = "lcb"): data : pd.DataFrame Open insider filtered data """ - response = requests.get( + response = request( f"http://openinsider.com/{d_open_insider[type_insider]}", headers={"User-Agent": "Mozilla/5.0"}, ) diff --git a/openbb_terminal/stocks/options/alphaquery_model.py b/openbb_terminal/stocks/options/alphaquery_model.py index 96482be36ce..a9292d95239 100644 --- a/openbb_terminal/stocks/options/alphaquery_model.py +++ b/openbb_terminal/stocks/options/alphaquery_model.py @@ -6,8 +6,8 @@ from datetime import datetime, timedelta from typing import Optional import pandas as pd -import requests +from openbb_terminal.helper_funcs import request from openbb_terminal.decorators import log_start_end logger = logging.getLogger(__name__) @@ -51,7 +51,7 @@ def get_put_call_ratio( Chrome/70.0.3538.77 Safari/537.36" } - r = requests.get(url, headers=headers) + r = request(url, headers=headers) if r.status_code != 200: return pd.DataFrame() diff --git a/openbb_terminal/stocks/options/barchart_model.py b/openbb_terminal/stocks/options/barchart_model.py index 61ffd4226e5..9016e9e2700 100644 --- a/openbb_terminal/stocks/options/barchart_model.py +++ b/openbb_terminal/stocks/options/barchart_model.py @@ -4,11 +4,10 @@ __docformat__ = "numpy" import logging import pandas as pd -import requests from bs4 import BeautifulSoup from openbb_terminal.decorators import log_start_end -from openbb_terminal.helper_funcs import get_user_agent +from openbb_terminal.helper_funcs import get_user_agent, request logger = logging.getLogger(__name__) @@ -29,7 +28,7 @@ def get_options_info(symbol: str) -> pd.DataFrame: """ page = f"https://www.barchart.com/stocks/quotes/{symbol}/overview" - r = requests.get(page, headers={"User-Agent": get_user_agent()}) + r = request(page, headers={"User-Agent": get_user_agent()}) soup = BeautifulSoup(r.text, "html.parser") tags = soup.find( "div", diff --git a/openbb_terminal/stocks/options/chartexchange_model.py b/openbb_terminal/stocks/options/chartexchange_model.py index 962c13e632a..7e36ae95657 100644 --- a/openbb_terminal/stocks/options/chartexchange_model.py +++ b/openbb_terminal/stocks/options/chartexchange_model.py @@ -4,11 +4,10 @@ import logging from typing import Union import pandas as pd -import requests from bs4 import BeautifulSoup from openbb_terminal.decorators import log_start_end -from openbb_terminal.helper_funcs import get_user_agent +from openbb_terminal.helper_funcs import get_user_agent, request from openbb_terminal.rich_config import console from openbb_terminal.stocks.options.op_helpers import convert @@ -45,7 +44,7 @@ def get_option_history( ) url += f"{'c' if call else 'p'}{float(price):g}/historical/" - data = requests.get(url, headers={"User-Agent": get_user_agent()}).content + data = request(url, headers={"User-Agent": get_user_agent()}).content soup = BeautifulSoup(data, "html.parser") table = soup.find("div", attrs={"style": "display: table; font-size: 0.9em; "}) if table: diff --git a/openbb_terminal/stocks/options/fdscanner_model.py b/openbb_terminal/stocks/options/fdscanner_model.py index 2b388ca974a..ba9ab561ec4 100644 --- a/openbb_terminal/stocks/options/fdscanner_model.py +++ b/openbb_terminal/stocks/options/fdscanner_model.py @@ -6,10 +6,9 @@ from typing import Tuple import numpy as np import pandas as pd -import requests from openbb_terminal.decorators import log_start_end -from openbb_terminal.helper_funcs import get_user_agent +from openbb_terminal.helper_funcs import get_user_agent, request from openbb_terminal.rich_config import console logger = logging.getLogger(__name__) @@ -38,7 +37,7 @@ def unusual_options(limit: int = 100) -> Tuple[pd.DataFrame, pd.Timestamp]: data_list = [] for page_num in pages: - r = requests.get( + r = request( f"https://app.fdscanner.com/api2/unusualvolume?p=0&page_size=20&page={int(page_num)}", headers={"User-Agent": get_user_agent()}, ) diff --git a/openbb_terminal/stocks/options/nasdaq_model.py b/openbb_terminal/stocks/options/nasdaq_model.py index 0cf957e8bfa..f9376cbd0f5 100644 --- a/openbb_terminal/stocks/options/nasdaq_model.py +++ b/openbb_terminal/stocks/options/nasdaq_model.py @@ -7,10 +7,10 @@ from typing import List import numpy as np import pandas as pd -import requests from openbb_terminal.decorators import log_start_end from openbb_terminal.rich_config import console +from openbb_terminal.helper_funcs import request logger = logging.getLogger(__name__) # pylint: disable=unsupported-assignment-operation @@ -64,7 +64,7 @@ def get_full_option_chain(symbol: str) -> pd.DataFrame: "fromdate=2010-09-09&todate=2030-09-09&excode=oprac&callput=callput&money=all&type=all" ) # I have had issues with nasdaq requests, and this user agent seems to work in US and EU - response_json = requests.get( + response_json = request( url, headers={ "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)" @@ -155,7 +155,7 @@ def get_last_price(symbol: str) -> float: """ for asset in ["stocks", "index", "etf"]: url = f"https://api.nasdaq.com/api/quote/{symbol}/info?assetclass={asset}" - response_json = requests.get( + response_json = request( url, headers={ "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)" @@ -192,7 +192,7 @@ def get_option_greeks(symbol: str, expiration: str) -> pd.DataFrame: """ for asset in ["stocks", "index", "etf"]: url_greeks = f"https://api.nasdaq.com/api/quote/{symbol}/option-chain/greeks?assetclass={asset}&date={expiration}" - response_json = requests.get( + response_json = request( url_greeks, headers={ "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)" diff --git a/openbb_terminal/stocks/options/screen/syncretism_model.py b/openbb_terminal/stocks/options/screen/syncretism_model.py index ca123eef64a..2a2dbce120b 100644 --- a/openbb_terminal/stocks/options/screen/syncretism_model.py +++ b/openbb_terminal/stocks/options/screen/syncretism_model.py @@ -7,9 +7,9 @@ from pathlib import Path from typing import Dict, Tuple, Union import pandas as pd -import requests import yfinance as yf +from openbb_terminal.helper_funcs import request from openbb_terminal.core.config.paths import USER_PRESETS_DIRECTORY from openbb_terminal.decorators import log_start_end from openbb_terminal.rich_config import console @@ -84,7 +84,7 @@ def get_historical_greeks( console.print(f"[red]Strike price of {strike} not found.[/red]\n") return pd.DataFrame() - r = requests.get(f"https://api.syncretism.io/ops/historical/{chain_id}") + r = request(f"https://api.syncretism.io/ops/historical/{chain_id}") if r.status_code != 200: console.print("Error in request.") @@ -218,9 +218,7 @@ def get_screener_output(preset: str) -> Tuple[pd.DataFrame, str]: link = "https://api.syncretism.io/ops" - res = requests.get( - link, headers={"Content-type": "application/json"}, data=s_filters - ) + res = request(link, headers={"Content-type": "application/json"}, data=s_filters) # pylint:disable=no-else-return if res.status_code == 200: diff --git a/openbb_terminal/stocks/options/tradier_model.py b/openbb_terminal/stocks/options/tradier_model.py index 555f32803a0..8c932be1c67 100644 --- a/openbb_terminal/stocks/options/tradier_model.py +++ b/openbb_terminal/stocks/options/tradier_model.py @@ -11,6 +11,7 @@ from tqdm import tqdm from openbb_terminal import config_terminal as cfg from openbb_terminal.decorators import check_api_key, log_start_end from openbb_terminal.rich_config import console +from openbb_terminal.helper_funcs import request logger = logging.getLogger(__name__) @@ -87,7 +88,7 @@ def get_historical_options( else: symbol = chain_id - response = requests.get( + response = request( "https://sandbox.tradier.com/v1/markets/history", params={"symbol": {symbol}, "interval": "daily"}, headers={ @@ -166,7 +167,7 @@ def option_expirations(symbol: str) -> List[str]: dates: List[str] List of of available expirations """ - r = requests.get( + r = request( "https://sandbox.tradier.com/v1/markets/options/expirations", params={"symbol": symbol, "includeAllRoots": "true", "strikes": "false"}, headers={ @@ -211,7 +212,7 @@ def get_option_chain(symbol: str, expiry: str) -> pd.DataFrame: "Accept": "application/json", } - response = requests.get( + response = request( "https://sandbox.tradier.com/v1/markets/options/chains", params=params, headers=headers, @@ -227,7 +228,7 @@ def get_option_chain(symbol: str, expiry: str) -> pd.DataFrame: @log_start_end(log=logger) def process_chains(response: requests.models.Response) -> pd.DataFrame: - """Function to take in the requests.get and return a DataFrame + """Function to take in the request and return a DataFrame Parameters ---------- @@ -277,7 +278,7 @@ def get_last_price(symbol: str): float: Last price """ - r = requests.get( + r = request( "https://sandbox.tradier.com/v1/markets/quotes", params={"symbols": symbol, "includeAllRoots": "true", "strikes": "false"}, headers={ diff --git a/openbb_terminal/stocks/stocks_helper.py b/openbb_terminal/stocks/stocks_helper.py index 75a469ff820..4e2e8b1390c 100644 --- a/openbb_terminal/stocks/stocks_helper.py +++ b/openbb_terminal/stocks/stocks_helper.py @@ -8,48 +8,47 @@ __docformat__ = "numpy" import logging import os from datetime import datetime, timedelta -from typing import Any, Union, Optional, Iterable, List, Dict +from typing import Any, Dict, Iterable, List, Optional, Union import financedatabase as fd import matplotlib.pyplot as plt -from matplotlib.lines import Line2D -from matplotlib.ticker import LogLocator, ScalarFormatter import mplfinance as mpf import numpy as np import pandas as pd import plotly.graph_objects as go import pytz -import requests -from requests.exceptions import ReadTimeout - import yfinance as yf +from matplotlib.lines import Line2D +from matplotlib.ticker import LogLocator, ScalarFormatter from plotly.subplots import make_subplots +from requests.exceptions import ReadTimeout from scipy import stats from openbb_terminal import config_terminal as cfg +from openbb_terminal.helper_funcs import ( + export_data, + lambda_long_number_format_y_axis, + plot_autoscale, + print_rich_table, + request, +) +from openbb_terminal.rich_config import console # pylint: disable=unused-import -from openbb_terminal.stocks.stock_statics import market_coverage_suffix +from openbb_terminal.stocks.stock_statics import BALANCE_PLOT # noqa: F401 +from openbb_terminal.stocks.stock_statics import CANDLE_SORT # noqa: F401 +from openbb_terminal.stocks.stock_statics import CASH_PLOT # noqa: F401 +from openbb_terminal.stocks.stock_statics import INCOME_PLOT # noqa: F401 from openbb_terminal.stocks.stock_statics import INTERVALS # noqa: F401 from openbb_terminal.stocks.stock_statics import SOURCES # noqa: F401 -from openbb_terminal.stocks.stock_statics import INCOME_PLOT # noqa: F401 -from openbb_terminal.stocks.stock_statics import BALANCE_PLOT # noqa: F401 -from openbb_terminal.stocks.stock_statics import CASH_PLOT # noqa: F401 -from openbb_terminal.stocks.stock_statics import CANDLE_SORT # noqa: F401 +from openbb_terminal.stocks.stock_statics import market_coverage_suffix from openbb_terminal.stocks.stocks_model import ( load_stock_av, - load_stock_yf, load_stock_eodhd, load_stock_iex_cloud, load_stock_polygon, + load_stock_yf, ) -from openbb_terminal.helper_funcs import ( - export_data, - plot_autoscale, - print_rich_table, - lambda_long_number_format_y_axis, -) -from openbb_terminal.rich_config import console logger = logging.getLogger(__name__) @@ -395,7 +394,7 @@ def load( f"/{end_date.strftime('%Y-%m-%d')}" f"?adjusted=true&sort=desc&limit=49999&apiKey={cfg.API_POLYGON_KEY}" ) - r = requests.get(request_url) + r = request(request_url) if r.status_code != 200: console.print("[red]Error in polygon request[/red]") return pd.DataFrame() @@ -1105,7 +1104,7 @@ def show_codes_polygon(ticker: str): if cfg.API_POLYGON_KEY == "REPLACE_ME": console.print("[red]Polygon API key missing[/red]\n") return - r = requests.get(link) + r = request(link) if r.status_code != 200: console.print("[red]Error in polygon request[/red]\n") return diff --git a/openbb_terminal/stocks/stocks_model.py b/openbb_terminal/stocks/stocks_model.py index de9b4434fe0..a578eca331d 100644 --- a/openbb_terminal/stocks/stocks_model.py +++ b/openbb_terminal/stocks/stocks_model.py @@ -3,7 +3,6 @@ from datetime import datetime import logging import pyEX -import requests import pandas as pd import yfinance as yf from alpha_vantage.timeseries import TimeSeries @@ -11,6 +10,7 @@ from alpha_vantage.timeseries import TimeSeries from openbb_terminal.decorators import check_api_key from openbb_terminal.rich_config import console from openbb_terminal import config_terminal as cfg +from openbb_terminal.helper_funcs import request # pylint: disable=unsupported-assignment-operation,no-member @@ -127,7 +127,7 @@ def load_stock_eodhd( f"order=d" ) - r = requests.get(request_url) + r = request(request_url) if r.status_code != 200: console.print("[red]Invalid API Key for eodhistoricaldata [/red]") console.print( @@ -219,7 +219,7 @@ def load_stock_polygon( f"{start_date.strftime('%Y-%m-%d')}/{end_date.strftime('%Y-%m-%d')}?adjusted=true" f"&sort=desc&limit=49999&apiKey={cfg.API_POLYGON_KEY}" ) - r = requests.get(request_url) + r = request(request_url) if r.status_code != 200: console.print("[red]Error in polygon request[/red]") return pd.DataFrame() diff --git a/openbb_terminal/stocks/technical_analysis/finbrain_model.py b/openbb_terminal/stocks/technical_analysis/finbrain_model.py index f845aa3ca71..8e56a533bf8 100644 --- a/openbb_terminal/stocks/technical_analysis/finbrain_model.py +++ b/openbb_terminal/stocks/technical_analysis/finbrain_model.py @@ -3,8 +3,7 @@ __docformat__ = "numpy" import logging -import requests - +from openbb_terminal.helper_funcs import request from openbb_terminal.decorators import log_start_end from openbb_terminal.rich_config import console @@ -25,7 +24,7 @@ def get_technical_summary_report(symbol: str) -> str: report: str technical summary report """ - result = requests.get(f"https://api.finbrain.tech/v0/technicalSummary/{symbol}") + result = request(f"https://api.finbrain.tech/v0/technicalSummary/{symbol}") report = "" if result.status_code == 200: if "technicalSummary" in result.json(): diff --git a/openbb_terminal/stocks/technical_analysis/finviz_model.py b/openbb_terminal/stocks/technical_analysis/finviz_model.py index 57166f5b883..408fffeb235 100644 --- a/openbb_terminal/stocks/technical_analysis/finviz_model.py +++ b/openbb_terminal/stocks/technical_analysis/finviz_model.py @@ -3,11 +3,11 @@ __docformat__ = "numpy" import logging -import requests from finvizfinance.quote import finvizfinance from finvizfinance.util import headers from openbb_terminal.decorators import log_start_end +from openbb_terminal.helper_funcs import request logger = logging.getLogger(__name__) @@ -29,7 +29,7 @@ def get_finviz_image(symbol: str) -> bytes: stock = finvizfinance(symbol) image_url = stock.ticker_charts(urlonly=True) - r = requests.get(image_url, stream=True, headers=headers, timeout=5) + r = request(image_url, stream=True, headers=headers) r.raise_for_status() r.raw.decode_content = True return r.content diff --git a/openbb_terminal/stocks/technical_analysis/tradingview_model.py b/openbb_terminal/stocks/technical_analysis/tradingview_model.py index aa2af48a2fe..82a43b8834a 100644 --- a/openbb_terminal/stocks/technical_analysis/tradingview_model.py +++ b/openbb_terminal/stocks/technical_analysis/tradingview_model.py @@ -4,11 +4,11 @@ __docformat__ = "numpy" import logging import pandas as pd -import requests from tradingview_ta import TA_Handler from openbb_terminal import config_terminal as cfg from openbb_terminal.decorators import log_start_end +from openbb_terminal.helper_funcs import request logger = logging.getLogger(__name__) @@ -77,7 +77,7 @@ def get_tradingview_recommendation( if not exchange: s_req = f"https://www.alphavantage.co/query?function=OVERVIEW&symbol={symbol}&apikey={cfg.API_KEY_ALPHAVANTAGE}" - result = requests.get(s_req, stream=True) + result = request(s_req, stream=True) data = result.json() if not data: return pd.DataFrame() diff --git a/openbb_terminal/terminal_helper.py b/openbb_terminal/terminal_helper.py index d7dfa82cd2a..5022ca7a880 100644 --- a/openbb_terminal/terminal_helper.py +++ b/openbb_terminal/terminal_helper.py @@ -13,7 +13,6 @@ from typing import List from packaging import version # IMPORTATION THIRDPARTY -import requests import matplotlib.pyplot as plt # IMPORTATION INTERNAL @@ -21,6 +20,7 @@ from openbb_terminal.config_terminal import LOGGING_APP_NAME, LOGGING_COMMIT_HAS from openbb_terminal import feature_flags as obbff from openbb_terminal import thought_of_the_day as thought from openbb_terminal.rich_config import console +from openbb_terminal.helper_funcs import request # pylint: disable=too-many-statements,no-member,too-many-branches,C0302 @@ -239,7 +239,7 @@ def check_for_updates() -> None: # The commit has was commented out because the terminal was crashing due to git import for multiple users # ({str(git.Repo('.').head.commit)[:7]}) try: - r = requests.get( + r = request( "https://api.github.com/repos/openbb-finance/openbbterminal/releases/latest", timeout=1, ) diff --git a/openbb_terminal/thought_of_the_day.py b/openbb_terminal/thought_of_the_day.py index 41b08293db3..90325132d13 100644 --- a/openbb_terminal/thought_of_the_day.py +++ b/openbb_terminal/thought_of_the_day.py @@ -5,10 +5,9 @@ from __future__ import annotations import random import re -import requests from bs4 import BeautifulSoup -from openbb_terminal.helper_funcs import get_user_agent +from openbb_terminal.helper_funcs import request from openbb_terminal.rich_config import console __docformat__ = "numpy" @@ -55,10 +54,7 @@ class ThoughtOfTheDay: Metadata dictionary that includes number of quotes, number of pages and first 30 quotes """ quotes_page = BeautifulSoup( - requests.get( - self.urls[author], - headers={"User-Agent": get_user_agent()}, - ).text, + request(self.urls[author]).text, "lxml", ) diff --git a/pylint/pylint/Cache/pylint_warned_about_old_cache_already_2023-01-26.temp b/pylint/pylint/Cache/pylint_warned_about_old_cache_already_2023-01-26.temp new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/FIXTURES.md b/tests/FIXTURES.md index ddc0a88dda9..d750a35a207 100644 --- a/tests/FIXTURES.md +++ b/tests/FIXTURES.md @@ -75,7 +75,7 @@ def test_function(default_csv_path): result_dataframe.to_csv(default_csv_path) expected_dataframe = result_dataframe.read_csv(default_csv_path) - + pd.testing.assert_frame_equal(result_dataframe, expected_dataframe) ``` @@ -96,7 +96,7 @@ def test_function(default_txt_path): with open(file=default_txt_path, encoding="utf-8") as f: expected_txt = f.read() - + assert result_txt == expected_txt ``` @@ -111,10 +111,10 @@ def test_function(default_json_path): with open(file=default_txt_path, mode="w", encoding="utf-8") as f: json.dump(result_json, f) - + with open(file=default_json_path, encoding="utf-8") as f: expected_json = json.load(f) - + assert result_json == expected_json ``` @@ -181,8 +181,8 @@ import requests @pytest.mark.vcr @pytest.mark.record_stdout def test_function(): - response = requests.get('https://api.github.com/user', auth=('user', 'pass')) - + response = request('https://api.github.com/user', auth=('user', 'pass')) + print(response.status_code) print(response.text) ``` @@ -319,8 +319,8 @@ import requests @pytest.mark.vcr @pytest.mark.record_stdout def test_function(): - response = requests.get('https://api.github.com/user', auth=('user', 'pass')) - + response = request('https://api.github.com/user', auth=('user', 'pass')) + recorder.capture(response.status_code) recorder.capture(response.text) ``` diff --git a/tests/README.md b/tests/README.md index 8f3d000f43e..2b5355a8650 100644 --- a/tests/README.md +++ b/tests/README.md @@ -179,7 +179,7 @@ Several things worth noting here: @pytest.mark.default_cassette("example.yaml") @pytest.mark.vcr def test_default(): - assert requests.get("http://httpbin.org/get").text == '{"get": true}' + assert request("http://httpbin.org/get").text == '{"get": true}' ``` ## 3.2. View Test diff --git a/tests/openbb_terminal/common/behavioural_analysis/cassettes/test_sentimentinvestor_model/test_check_supported_ticker[BTC-USD].yaml b/tests/openbb_terminal/common/behavioural_analysis/cassettes/test_sentimentinvestor_model/test_check_supported_ticker[BTC-USD].yaml index ebdd264016c..172a1e82b67 100644 --- a/tests/openbb_terminal/common/behavioural_analysis/cassettes/test_sentimentinvestor_model/test_check_supported_ticker[BTC-USD].yaml +++ b/tests/openbb_terminal/common/behavioural_analysis/cassettes/test_sentimentinvestor_model/test_check_supported_ticker[BTC-USD].yaml @@ -9,26 +9,46 @@ interactions: Connection: - keep-alive User-Agent: - - python-requests/2.26.0 + - Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:86.0) Gecko/20100101 Firefox/86.0 method: GET uri: https://api.sentimentinvestor.com/v1/supported?symbol=BTC-USD&token=MOCK_TOKEN response: body: - string: '{"error":"symbol \"btc-usd\" is not currently active."}' + string: Service Unavailable headers: - Access-Control-Allow-Origin: - - '*' Content-Length: - - '55' + - '19' Content-Type: - - application/json; charset=utf-8 + - text/plain; charset=utf-8 Date: - - Thu, 27 Jan 2022 16:22:36 GMT - Etag: - - W/"37-H7l44r2kph8E+3x5mpaNoV/50F8" - X-Powered-By: - - Express + - Thu, 26 Jan 2023 19:02:16 GMT status: - code: 200 - message: OK + code: 503 + message: Service Unavailable +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:82.1) Gecko/20100101 Firefox/82.1 + method: GET + uri: https://api.sentimentinvestor.com/v1/supported?symbol=BTC-USD&token=MOCK_TOKEN + response: + body: + string: Service Unavailable + headers: + Content-Length: + - '19' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Thu, 26 Jan 2023 19:03:33 GMT + status: + code: 503 + message: Service Unavailable version: 1 diff --git a/tests/openbb_terminal/common/behavioural_analysis/cassettes/test_sentimentinvestor_model/test_check_supported_ticker[BTC].yaml b/tests/openbb_terminal/common/behavioural_analysis/cassettes/test_sentimentinvestor_model/test_check_supported_ticker[BTC].yaml index b921f228384..69841365f4b 100644 --- a/tests/openbb_terminal/common/behavioural_analysis/cassettes/test_sentimentinvestor_model/test_check_supported_ticker[BTC].yaml +++ b/tests/openbb_terminal/common/behavioural_analysis/cassettes/test_sentimentinvestor_model/test_check_supported_ticker[BTC].yaml @@ -9,26 +9,46 @@ interactions: Connection: - keep-alive User-Agent: - - python-requests/2.26.0 + - Mozilla/5.0 (Windows NT 10.0; WOW64; rv:86.0) Gecko/20100101 Firefox/86.0 method: GET uri: https://api.sentimentinvestor.com/v1/supported?symbol=BTC&token=MOCK_TOKEN response: body: - string: '{"success":true,"result":true}' + string: Service Unavailable headers: - Access-Control-Allow-Origin: - - '*' Content-Length: - - '30' + - '19' Content-Type: - - application/json; charset=utf-8 + - text/plain; charset=utf-8 Date: - - Thu, 27 Jan 2022 16:22:36 GMT - Etag: - - W/"1e-67lGrrcaMC/51/8ZvvIFlxBZfJs" - X-Powered-By: - - Express + - Thu, 26 Jan 2023 19:02:15 GMT status: - code: 200 - message: OK + code: 503 + message: Service Unavailable +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - Mozilla/5.0 (Windows NT 6.1; WOW64; rv:84.0) Gecko/20100101 Firefox/84.0 + method: GET + uri: https://api.sentimentinvestor.com/v1/supported?symbol=BTC&token=MOCK_TOKEN + response: + body: + string: Service Unavailable + headers: + Content-Length: + - '19' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Thu, 26 Jan 2023 19:03:33 GMT + status: + code: 503 + message: Service Unavailable version: 1 diff --git a/tests/openbb_terminal/common/behavioural_analysis/cassettes/test_sentimentinvestor_model/test_get_historical[AAPL-2020-12-1-2020-12-7-100].yaml b/tests/openbb_terminal/common/behavioural_analysis/cassettes/test_sentimentinvestor_model/test_get_historical[AAPL-2020-12-1-2020-12-7-100].yaml index 0bfa9d914f4..bf175139626 100644 --- a/tests/openbb_terminal/common/behavioural_analysis/cassettes/test_sentimentinvestor_model/test_get_historical[AAPL-2020-12-1-2020-12-7-100].yaml +++ b/tests/openbb_terminal/common/behavioural_analysis/cassettes/test_sentimentinvestor_model/test_get_historical[AAPL-2020-12-1-2020-12-7-100].yaml @@ -9,26 +9,46 @@ interactions: Connection: - keep-alive User-Agent: - - python-requests/2.26.0 + - Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.10; rv:86.1) Gecko/20100101 Firefox/86.1 method: GET uri: https://api.sentimentinvestor.com/v1/historical?end=2020-12-7&limit=100&start=2020-12-1&symbol=AAPL&token=MOCK_TOKEN response: body: - string: '{"success":true,"start":"2020-12-01T00:00:00.000Z","end":"2020-12-07T00:00:00.000Z","limit":"100","symbol":"AAPL","results":[],"total":0}' + string: Service Unavailable headers: - Access-Control-Allow-Origin: - - '*' Content-Length: - - '137' + - '19' Content-Type: - - application/json; charset=utf-8 + - text/plain; charset=utf-8 Date: - - Thu, 27 Jan 2022 16:22:37 GMT - Etag: - - W/"89-ae4LkH5VoQJkOubQIH9O3cOMy+U" - X-Powered-By: - - Express + - Thu, 26 Jan 2023 19:02:16 GMT status: - code: 200 - message: OK + code: 503 + message: Service Unavailable +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.10; rv:86.1) Gecko/20100101 Firefox/86.1 + method: GET + uri: https://api.sentimentinvestor.com/v1/historical?end=2020-12-7&limit=100&start=2020-12-1&symbol=AAPL&token=MOCK_TOKEN + response: + body: + string: Service Unavailable + headers: + Content-Length: + - '19' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Thu, 26 Jan 2023 19:03:33 GMT + status: + code: 503 + message: Service Unavailable version: 1 diff --git a/tests/openbb_terminal/common/behavioural_analysis/cassettes/test_sentimentinvestor_model/test_get_trending[2021-12-21-9-10].yaml b/tests/openbb_terminal/common/behavioural_analysis/cassettes/test_sentimentinvestor_model/test_get_trending[2021-12-21-9-10].yaml index 11b6ee97141..fcc09bd1c30 100644 --- a/tests/openbb_terminal/common/behavioural_analysis/cassettes/test_sentimentinvestor_model/test_get_trending[2021-12-21-9-10].yaml +++ b/tests/openbb_terminal/common/behavioural_analysis/cassettes/test_sentimentinvestor_model/test_get_trending[2021-12-21-9-10].yaml @@ -9,7 +9,7 @@ interactions: Connection: - keep-alive User-Agent: - - python-requests/2.28.1 + - Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:86.0) Gecko/20100101 Firefox/86.0 method: GET uri: https://api.sentimentinvestor.com/v1/trending?end=2021-12-21+09%3A00%3A00&limit=10&start=2021-12-21+09%3A00%3A00&token=MOCK_TOKEN response: @@ -21,7 +21,33 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 10 Nov 2022 18:11:01 GMT + - Thu, 26 Jan 2023 19:02:16 GMT + status: + code: 503 + message: Service Unavailable +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.10; rv:83.0) Gecko/20100101 Firefox/83.0 + method: GET + uri: https://api.sentimentinvestor.com/v1/trending?end=2021-12-21+09%3A00%3A00&limit=10&start=2021-12-21+09%3A00%3A00&token=MOCK_TOKEN + response: + body: + string: Service Unavailable + headers: + Content-Length: + - '19' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Thu, 26 Jan 2023 19:03:34 GMT status: code: 503 message: Service Unavailable diff --git a/tests/openbb_terminal/common/behavioural_analysis/json/test_sentimentinvestor_model/test_check_supported_ticker[BTC].json b/tests/openbb_terminal/common/behavioural_analysis/json/test_sentimentinvestor_model/test_check_supported_ticker[BTC].json index f32a5804e29..02e4a84d62c 100644 --- a/tests/openbb_terminal/common/behavioural_analysis/json/test_sentimentinvestor_model/test_check_supported_ticker[BTC].json +++ b/tests/openbb_terminal/common/behavioural_analysis/json/test_sentimentinvestor_model/test_check_supported_ticker[BTC].json @@ -1 +1 @@ -true \ No newline at end of file +false \ No newline at end of file diff --git a/tests/openbb_terminal/common/behavioural_analysis/test_sentimentinvestor_model.py b/tests/openbb_terminal/common/behavioural_analysis/test_sentimentinvestor_model.py deleted file mode 100644 index 5a4a2579773..00000000000 --- a/tests/openbb_terminal/common/behavioural_analysis/test_sentimentinvestor_model.py +++ /dev/null @@ -1,70 +0,0 @@ -# IMPORTATION THIRDPARTY -import pandas as pd -import pytest - -# IMPORTATION INTERNAL -from openbb_terminal.common.behavioural_analysis import sentimentinvestor_model - - -@pytest.fixture(scope="module") -def vcr_config(): - return { - "filter_query_parameters": [ - ("token", "MOCK_TOKEN"), - ], - } - - -@pytest.mark.vcr -@pytest.mark.parametrize( - "ticker", - [ - ("BTC"), - ("BTC-USD"), - ], -) -def test_check_supported_ticker(ticker, recorder): - df = sentimentinvestor_model.check_supported_ticker(ticker) - recorder.capture(df) - - -@pytest.mark.vcr -@pytest.mark.parametrize( - "symbol, start_date, end_date, limit", - [("AAPL", "2020-12-1", "2020-12-7", 100)], -) -def test_get_historical(symbol, start_date, end_date, limit, recorder): - df = sentimentinvestor_model.get_historical(symbol, start_date, end_date, limit) - recorder.capture(df) - - -@pytest.mark.vcr -@pytest.mark.parametrize( - "start, hour, number", - [("2021-12-21", 9, 10)], -) -def test_get_trending(start, hour, number, recorder): - df = sentimentinvestor_model.get_trending(start, hour, number) - recorder.capture(df) - - -@pytest.mark.vcr(record_mode="none") -def test_get_trending_status_400(mocker): - # MOCK GET - attrs = { - "json.return_value": {"error": "mock error message"}, - } - - mock_response = mocker.Mock(**attrs) - mocker.patch(target="requests.get", new=mocker.Mock(return_value=mock_response)) - - mock_response.status_code = 400 - - df = sentimentinvestor_model.get_trending( - start_date="2021-12-21", - hour=9, - number=10, - ) - - assert isinstance(df, pd.DataFrame) - assert df.empty diff --git a/tests/openbb_terminal/common/behavioural_analysis/test_sentimentinvestor_view.py b/tests/openbb_terminal/common/behavioural_analysis/test_sentimentinvestor_view.py deleted file mode 100644 index 04e30ffff71..00000000000 --- a/tests/openbb_terminal/common/behavioural_analysis/test_sentimentinvestor_view.py +++ /dev/null @@ -1,108 +0,0 @@ -# IMPORTATION THIRDPARTY -import pandas as pd -import pytest - -# IMPORTATION INTERNAL -from openbb_terminal.common.behavioural_analysis import sentimentinvestor_view - - -@pytest.fixture(scope="module") -def vcr_config(): - return { - "filter_query_parameters": [ - ("token", "MOCK_TOKEN"), - ], - } - - -@pytest.mark.vcr -@pytest.mark.record_stdout -def test_display_historical(mocker): - # MOCK VISUALIZE_OUTPUT - mocker.patch(target="openbb_terminal.helper_classes.TerminalStyle.visualize_output") - sentimentinvestor_view.display_historical( - symbol="AAPL", - start_date="2021-12-12", - end_date="2021-12-15", - export="", - raw=True, - ) - - -@pytest.mark.vcr(record_mode="none") -@pytest.mark.record_stdout -def test_display_historical_supported_ticker(mocker): - view = "openbb_terminal.common.behavioural_analysis.sentimentinvestor_view" - # MOCK CHECK_SUPPORTED_TICKER - mocker.patch( - target=f"{view}.sentimentinvestor_model.check_supported_ticker", - return_value=False, - ) - - sentimentinvestor_view.display_historical( - symbol="AAPL", - start_date="2021-12-12", - end_date="2021-12-15", - export="", - raw=True, - ) - - -@pytest.mark.vcr(record_mode="none") -@pytest.mark.record_stdout -def test_display_historical_empty_df(mocker): - view = "openbb_terminal.common.behavioural_analysis.sentimentinvestor_view" - - # MOCK CHECK_SUPPORTED_TICKER - mocker.patch( - target=f"{view}.sentimentinvestor_model.check_supported_ticker", - return_value=True, - ) - - # MOCK GET_HISTORICAL - mocker.patch( - target=f"{view}.sentimentinvestor_model.get_historical", - return_value=pd.DataFrame(), - ) - - sentimentinvestor_view.display_historical( - symbol="AAPL", - start_date="2021-12-12", - end_date="2021-12-15", - export="", - raw=True, - ) - - -# This api website seems to have stop working, but I have no key to check. -@pytest.mark.skip -@pytest.mark.vcr -@pytest.mark.record_stdout -def test_display_trending(): - sentimentinvestor_view.display_trending( - start_date="2021-12-12", - hour=9, - number=10, - limit=10, - export="", - ) - - -@pytest.mark.vcr(record_mode="none") -@pytest.mark.record_stdout -def test_display_trending_empty_df(mocker): - view = "openbb_terminal.common.behavioural_analysis.sentimentinvestor_view" - - # MOCK GET_HISTORICAL - mocker.patch( - target=f"{view}.sentimentinvestor_model.get_trending", - return_value=pd.DataFrame(), - ) - - sentimentinvestor_view.display_trending( - start_date="2021-12-12", - hour=9, - number=10, - limit=10, - export="", - ) diff --git a/tests/openbb_terminal/cryptocurrency/defi/cassettes/test_coindix_model/test_get_defi_vaults.yaml b/tests/openbb_terminal/cryptocurrency/defi/cassettes/test_coindix_model/test_get_defi_vaults.yaml index 6ebe7f9b0fe..c6ec5b1787d 100644 --- a/tests/openbb_terminal/cryptocurrency/defi/cassettes/test_coindix_model/test_get_defi_vaults.yaml +++ b/tests/openbb_terminal/cryptocurrency/defi/cassettes/test_coindix_model/test_get_defi_vaults.yaml @@ -9,28 +9,27 @@ interactions: Connection: - keep-alive User-Agent: - - Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:82.1) Gecko/20100101 Firefox/82.1 + - Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.10; rv:83.0) Gecko/20100101 Firefox/83.0 method: GET uri: https://apiv2.coindix.com/search?sort=-apy&tvl=1m&kind=all response: body: - string: '{"hasPrevPage":false,"hasNextPage":true,"total":1331,"totalPages":50,"data":[{"id":120568,"name":"WETH-10k","icon":"https://api.coindix.com/default_icon.png","chain":"Ethereum","protocol":"Uniswap","base":null,"reward":0,"rewards":{},"apy":null,"tvl":1698882,"link":"https://api.coindix.com/vault/120568/redirect","is_new":false,"watched":false},{"id":113873,"name":"Azuki-WETH","icon":"https://api.coindix.com/icons/Azuki-WETH.png","chain":"Ethereum","protocol":"Uniswap","base":null,"reward":0,"rewards":{},"apy":null,"tvl":1180607,"link":"https://api.coindix.com/vault/113873/redirect","is_new":false,"watched":false},{"id":111282,"name":"WETH-RYOSHI","icon":"https://api.coindix.com/icons/WETH-RYOSHI.png","chain":"Ethereum","protocol":"Uniswap","base":null,"reward":0,"rewards":{},"apy":null,"tvl":1569332,"link":"https://api.coindix.com/vault/111282/redirect","is_new":false,"watched":false},{"id":110372,"name":"Hasbro-WETH","icon":"https://api.coindix.com/default_icon.png","chain":"Ethereum","protocol":"Uniswap","base":null,"reward":0,"rewards":{},"apy":null,"tvl":1025188,"link":"https://api.coindix.com/vault/110372/redirect","is_new":false,"watched":false},{"id":118073,"name":"WETH-GENIE","icon":"https://api.coindix.com/default_icon.png","chain":"Ethereum","protocol":"Uniswap","base":null,"reward":0,"rewards":{},"apy":null,"tvl":1770296,"link":"https://api.coindix.com/vault/118073/redirect","is_new":false,"watched":false},{"id":165735,"name":"WETH-PRAG","icon":"https://api.coindix.com/default_icon.png","chain":"Ethereum","protocol":"Uniswap","base":null,"reward":0,"rewards":{},"apy":null,"tvl":1359190,"link":"https://api.coindix.com/vault/165735/redirect","is_new":false,"watched":false},{"id":113531,"name":"APELAND-WETH","icon":"https://api.coindix.com/default_icon.png","chain":"Ethereum","protocol":"Uniswap","base":null,"reward":0,"rewards":{},"apy":null,"tvl":1216107,"link":"https://api.coindix.com/vault/113531/redirect","is_new":false,"watched":false},{"id":108126,"name":"Line-WETH","icon":"https://api.coindix.com/default_icon.png","chain":"Ethereum","protocol":"Uniswap","base":null,"reward":0,"rewards":{},"apy":null,"tvl":2065257,"link":"https://api.coindix.com/vault/108126/redirect","is_new":false,"watched":false},{"id":167534,"name":"USDC-CRV","icon":"https://api.coindix.com/default_icon.png","chain":"Ethereum","protocol":"Uniswap","base":null,"reward":0,"rewards":{},"apy":null,"tvl":1721977,"link":"https://api.coindix.com/vault/167534/redirect","is_new":false,"watched":false},{"id":121969,"name":"USDD-USDT - (0.01%)","icon":"https://api.coindix.com/icons/USDD-USDT.png","chain":"Ethereum","protocol":"Uniswap","base":null,"reward":0,"rewards":{},"apy":null,"tvl":3925917,"link":"https://api.coindix.com/vault/121969/redirect","is_new":false,"watched":false},{"id":97162,"name":"WETH-DOODLE","icon":"https://api.coindix.com/icons/WETH-DOODLE.png","chain":"Ethereum","protocol":"Uniswap","base":null,"reward":0,"rewards":{},"apy":null,"tvl":2886965,"link":"https://api.coindix.com/vault/97162/redirect","is_new":false,"watched":false},{"id":112952,"name":"HOOT-WETH","icon":"https://api.coindix.com/default_icon.png","chain":"Ethereum","protocol":"Uniswap","base":null,"reward":0,"rewards":{},"apy":null,"tvl":1474099,"link":"https://api.coindix.com/vault/112952/redirect","is_new":false,"watched":false},{"id":95445,"name":"Firefox-WETH","icon":"https://api.coindix.com/icons/Firefox-WETH.png","chain":"Ethereum","protocol":"Uniswap","base":null,"reward":0,"rewards":{},"apy":null,"tvl":1963426,"link":"https://api.coindix.com/vault/95445/redirect","is_new":false,"watched":false},{"id":178382,"name":"WBTC-BBTC - (0.05%)","icon":"https://api.coindix.com/default_icon.png","chain":"Ethereum","protocol":"Uniswap","base":null,"reward":0,"rewards":{},"apy":null,"tvl":4200389,"link":"https://api.coindix.com/vault/178382/redirect","is_new":true,"watched":false},{"id":104732,"name":"WETH-Richemont","icon":"https://api.coindix.com/default_icon.png","chain":"Ethereum","protocol":"Uniswap","base":null,"reward":0,"rewards":{},"apy":null,"tvl":1630815,"link":"https://api.coindix.com/vault/104732/redirect","is_new":false,"watched":false},{"id":119426,"name":"WETH-OP","icon":"https://api.coindix.com/default_icon.png","chain":"Ethereum","protocol":"Uniswap","base":null,"reward":0,"rewards":{},"apy":null,"tvl":1664803,"link":"https://api.coindix.com/vault/119426/redirect","is_new":false,"watched":false},{"id":50508,"name":"GRAPE-MIM","icon":"https://api.coindix.com/icons/GRAPE-MIM.png","chain":"Avalanche","protocol":"Beefy","base":7.47626288,"reward":0,"rewards":{},"apy":7.47626288,"tvl":1056770,"link":"https://api.coindix.com/vault/50508/redirect","is_new":false,"watched":false},{"id":150035,"name":"WBTC-cxBTC","icon":"https://api.coindix.com/default_icon.png","chain":"Polygon","protocol":"Beefy","base":3.85182283,"reward":0,"rewards":{},"apy":3.85182283,"tvl":1542565,"link":"https://api.coindix.com/vault/150035/redirect","is_new":false,"watched":false},{"id":72936,"name":"ETH-cxETH","icon":"https://api.coindix.com/icons/ETH-cxETH.png","chain":"Polygon","protocol":"Beefy","base":3.76929371,"reward":0,"rewards":{},"apy":3.76929371,"tvl":1547500,"link":"https://api.coindix.com/vault/72936/redirect","is_new":false,"watched":false},{"id":162981,"name":"SHIT-WETH - (1%)","icon":"https://api.coindix.com/default_icon.png","chain":"Ethereum","protocol":"Uniswap","base":3.65199141,"reward":0,"rewards":{},"apy":3.65199141,"tvl":2179266,"link":"https://api.coindix.com/vault/162981/redirect","is_new":false,"watched":false}]}' + string: '{"hasPrevPage":false,"hasNextPage":true,"total":981,"totalPages":50,"data":[{"id":273200,"name":"MAGIC-WETH","chain":"Arbitrum","protocol":"Uniswap","base":23.7902436,"reward":0,"rewards":{},"apy":23.7902436,"tvl":1041078,"link":"https://api.nanoly.com/vaults/273200/redirect","is_new":false,"watched":false},{"id":272292,"name":"LCX-WETH","chain":"Ethereum","protocol":"Uniswap","base":3.3537874,"reward":0,"rewards":{},"apy":3.3537874,"tvl":1059213,"link":"https://api.nanoly.com/vaults/272292/redirect","is_new":false,"watched":false},{"id":272170,"name":"LDO-WETH","chain":"Ethereum","protocol":"Uniswap","base":3.2958058,"reward":0,"rewards":{},"apy":3.2958058,"tvl":4170799,"link":"https://api.nanoly.com/vaults/272170/redirect","is_new":false,"watched":false},{"id":272470,"name":"DYDX-WETH","chain":"Ethereum","protocol":"Uniswap","base":2.4461352,"reward":0,"rewards":{},"apy":2.4461352,"tvl":1486170,"link":"https://api.nanoly.com/vaults/272470/redirect","is_new":false,"watched":false},{"id":272216,"name":"FTM-WETH","chain":"Ethereum","protocol":"Uniswap","base":2.4265455,"reward":0,"rewards":{},"apy":2.4265455,"tvl":1710725,"link":"https://api.nanoly.com/vaults/272216/redirect","is_new":false,"watched":false},{"id":272424,"name":"OP-USDC","chain":"Optimism","protocol":"Uniswap","base":2.4134576,"reward":0,"rewards":{},"apy":2.4134576,"tvl":2478859,"link":"https://api.nanoly.com/vaults/272424/redirect","is_new":false,"watched":false},{"id":272140,"name":"APE-WETH","chain":"Ethereum","protocol":"Uniswap","base":2.3316127,"reward":0,"rewards":{},"apy":2.3316127,"tvl":8071844,"link":"https://api.nanoly.com/vaults/272140/redirect","is_new":false,"watched":false},{"id":273083,"name":"WMATIC-CRV","chain":"Polygon","protocol":"Uniswap","base":2.3040111,"reward":0,"rewards":{},"apy":2.3040111,"tvl":1229701,"link":"https://api.nanoly.com/vaults/273083/redirect","is_new":false,"watched":false},{"id":272850,"name":"USDC-CRV","chain":"Ethereum","protocol":"Uniswap","base":2.30376,"reward":0,"rewards":{},"apy":2.30376,"tvl":1106306,"link":"https://api.nanoly.com/vaults/272850/redirect","is_new":false,"watched":false},{"id":32055,"name":"AVAX-USDC","chain":"Avalanche","protocol":"Trader + Joe","base":2.1417,"reward":0,"rewards":{},"apy":2.1417,"tvl":6652279,"link":"https://api.nanoly.com/vaults/32055/redirect","is_new":false,"watched":false},{"id":272340,"name":"FXS-WETH","chain":"Ethereum","protocol":"Uniswap","base":2.0582594,"reward":0,"rewards":{},"apy":2.0582594,"tvl":3994551,"link":"https://api.nanoly.com/vaults/272340/redirect","is_new":false,"watched":false},{"id":272183,"name":"WETH-OP","chain":"Optimism","protocol":"Uniswap","base":1.7595914,"reward":0,"rewards":{},"apy":1.7595914,"tvl":10287442,"link":"https://api.nanoly.com/vaults/272183/redirect","is_new":false,"watched":false},{"id":273797,"name":"WETH-CRV","chain":"Ethereum","protocol":"Uniswap","base":1.6795949,"reward":0,"rewards":{},"apy":1.6795949,"tvl":2316095,"link":"https://api.nanoly.com/vaults/273797/redirect","is_new":false,"watched":false},{"id":29232,"name":"MAGIC-ETH","chain":"Arbitrum","protocol":"Beefy","base":0.48329553,"reward":0,"rewards":{},"apy":1.60662408,"tvl":2821521,"link":"https://api.nanoly.com/vaults/29232/redirect","is_new":false,"watched":false},{"id":272838,"name":"WETH-USDT","chain":"Arbitrum","protocol":"Uniswap","base":1.5718619,"reward":0,"rewards":{},"apy":1.5718619,"tvl":1126252,"link":"https://api.nanoly.com/vaults/272838/redirect","is_new":false,"watched":false},{"id":273081,"name":"WMATIC-USDT","chain":"Polygon","protocol":"Uniswap","base":1.5272906,"reward":0,"rewards":{},"apy":1.5272906,"tvl":1791001,"link":"https://api.nanoly.com/vaults/273081/redirect","is_new":false,"watched":false},{"id":13265,"name":"MAGIC-WETH","chain":"Arbitrum","protocol":"Sushi","base":1.51100925,"reward":0,"rewards":{},"apy":1.51100925,"tvl":18056222,"link":"https://api.nanoly.com/vaults/13265/redirect","is_new":false,"watched":false},{"id":272192,"name":"WMATIC-USDC","chain":"Polygon","protocol":"Uniswap","base":1.3378611,"reward":0,"rewards":{},"apy":1.3378611,"tvl":6845295,"link":"https://api.nanoly.com/vaults/272192/redirect","is_new":false,"watched":false},{"id":272232,"name":"LDO-WETH","chain":"Ethereum","protocol":"Uniswap","base":1.3300697,"reward":0,"rewards":{},"apy":1.3300697,"tvl":9763869,"link":"https://api.nanoly.com/vaults/272232/redirect","is_new":false,"watched":false},{"id":184751,"name":"BTC.b-AVAX","chain":"Avalanche","protocol":"Trader + Joe","base":1.28,"reward":0,"rewards":{},"apy":1.28,"tvl":2447906,"link":"https://api.nanoly.com/vaults/184751/redirect","is_new":false,"watched":false}]}' headers: Access-Control-Allow-Origin: - '*' Connection: - keep-alive Content-Length: - - '5576' + - '4656' Content-Type: - application/json; charset=utf-8 Date: - - Fri, 17 Jun 2022 11:05:53 GMT + - Thu, 26 Jan 2023 19:07:41 GMT ETag: - - W/"15c8-U7oBaaf65q92UwgeoTPkw3i+bn0" + - W/"1230-Zg8G/jUGRtIxDf0M548Nuh+ZBuA" Server: - nginx/1.18.0 (Ubuntu) X-Powered-By: diff --git a/tests/openbb_terminal/cryptocurrency/defi/csv/test_coindix_model/test_get_defi_vaults.csv b/tests/openbb_terminal/cryptocurrency/defi/csv/test_coindix_model/test_get_defi_vaults.csv index 9fee165174b..086ebfc893d 100644 --- a/tests/openbb_terminal/cryptocurrency/defi/csv/test_coindix_model/test_get_defi_vaults.csv +++ b/tests/openbb_terminal/cryptocurrency/defi/csv/test_coindix_model/test_get_defi_vaults.csv @@ -1,21 +1,21 @@ ,Name,Chain,Protocol,APY (%),TVL ($),Link -19,SHIT-WETH (1%),Ethereum,Uniswap,365.2 %,2.179 M,https://api.coindix.com/vault/162981/redirect -18,ETH-cxETH,Polygon,Beefy,376.93 %,1.548 M,https://api.coindix.com/vault/72936/redirect -17,WBTC-cxBTC,Polygon,Beefy,385.18 %,1.543 M,https://api.coindix.com/vault/150035/redirect -16,GRAPE-MIM,Avalanche,Beefy,747.63 %,1.057 M,https://api.coindix.com/vault/50508/redirect -0,WETH-10k,Ethereum,Uniswap,NA,1.699 M,https://api.coindix.com/vault/120568/redirect -1,Azuki-WETH,Ethereum,Uniswap,NA,1.181 M,https://api.coindix.com/vault/113873/redirect -2,WETH-RYOSHI,Ethereum,Uniswap,NA,1.569 M,https://api.coindix.com/vault/111282/redirect -3,Hasbro-WETH,Ethereum,Uniswap,NA,1.025 M,https://api.coindix.com/vault/110372/redirect -4,WETH-GENIE,Ethereum,Uniswap,NA,1.770 M,https://api.coindix.com/vault/118073/redirect -5,WETH-PRAG,Ethereum,Uniswap,NA,1.359 M,https://api.coindix.com/vault/165735/redirect -6,APELAND-WETH,Ethereum,Uniswap,NA,1.216 M,https://api.coindix.com/vault/113531/redirect -7,Line-WETH,Ethereum,Uniswap,NA,2.065 M,https://api.coindix.com/vault/108126/redirect -8,USDC-CRV,Ethereum,Uniswap,NA,1.722 M,https://api.coindix.com/vault/167534/redirect -9,USDD-USDT (0.01%),Ethereum,Uniswap,NA,3.926 M,https://api.coindix.com/vault/121969/redirect -10,WETH-DOODLE,Ethereum,Uniswap,NA,2.887 M,https://api.coindix.com/vault/97162/redirect -11,HOOT-WETH,Ethereum,Uniswap,NA,1.474 M,https://api.coindix.com/vault/112952/redirect -12,Firefox-WETH,Ethereum,Uniswap,NA,1.963 M,https://api.coindix.com/vault/95445/redirect -13,WBTC-BBTC (0.05%),Ethereum,Uniswap,NA,4.200 M,https://api.coindix.com/vault/178382/redirect -14,WETH-Richemont,Ethereum,Uniswap,NA,1.631 M,https://api.coindix.com/vault/104732/redirect -15,WETH-OP,Ethereum,Uniswap,NA,1.665 M,https://api.coindix.com/vault/119426/redirect +19,BTC.b-AVAX,Avalanche,Trader Joe,128.0 %,2.448 M,https://api.nanoly.com/vaults/184751/redirect +18,LDO-WETH,Ethereum,Uniswap,133.01 %,9.764 M,https://api.nanoly.com/vaults/272232/redirect +17,WMATIC-USDC,Polygon,Uniswap,133.79 %,6.845 M,https://api.nanoly.com/vaults/272192/redirect +16,MAGIC-WETH,Arbitrum,Sushi,151.1 %,18.056 M,https://api.nanoly.com/vaults/13265/redirect +15,WMATIC-USDT,Polygon,Uniswap,152.73 %,1.791 M,https://api.nanoly.com/vaults/273081/redirect +14,WETH-USDT,Arbitrum,Uniswap,157.19 %,1.126 M,https://api.nanoly.com/vaults/272838/redirect +13,MAGIC-ETH,Arbitrum,Beefy,160.66 %,2.822 M,https://api.nanoly.com/vaults/29232/redirect +12,WETH-CRV,Ethereum,Uniswap,167.96 %,2.316 M,https://api.nanoly.com/vaults/273797/redirect +11,WETH-OP,Optimism,Uniswap,175.96 %,10.287 M,https://api.nanoly.com/vaults/272183/redirect +10,FXS-WETH,Ethereum,Uniswap,205.83 %,3.995 M,https://api.nanoly.com/vaults/272340/redirect +9,AVAX-USDC,Avalanche,Trader Joe,214.17 %,6.652 M,https://api.nanoly.com/vaults/32055/redirect +8,USDC-CRV,Ethereum,Uniswap,230.38 %,1.106 M,https://api.nanoly.com/vaults/272850/redirect +7,WMATIC-CRV,Polygon,Uniswap,230.4 %,1.230 M,https://api.nanoly.com/vaults/273083/redirect +6,APE-WETH,Ethereum,Uniswap,233.16 %,8.072 M,https://api.nanoly.com/vaults/272140/redirect +5,OP-USDC,Optimism,Uniswap,241.35 %,2.479 M,https://api.nanoly.com/vaults/272424/redirect +4,FTM-WETH,Ethereum,Uniswap,242.65 %,1.711 M,https://api.nanoly.com/vaults/272216/redirect +3,DYDX-WETH,Ethereum,Uniswap,244.61 %,1.486 M,https://api.nanoly.com/vaults/272470/redirect +2,LDO-WETH,Ethereum,Uniswap,329.58 %,4.171 M,https://api.nanoly.com/vaults/272170/redirect +1,LCX-WETH,Ethereum,Uniswap,335.38 %,1.059 M,https://api.nanoly.com/vaults/272292/redirect +0,MAGIC-WETH,Arbitrum,Uniswap,2379.02 %,1.041 M,https://api.nanoly.com/vaults/273200/redirect diff --git a/tests/openbb_terminal/cryptocurrency/defi/test_coindix_model.py b/tests/openbb_terminal/cryptocurrency/defi/test_coindix_model.py index 4330c77c27a..97ad7928399 100644 --- a/tests/openbb_terminal/cryptocurrency/defi/test_coindix_model.py +++ b/tests/openbb_terminal/cryptocurrency/defi/test_coindix_model.py @@ -26,7 +26,10 @@ def test_get_defi_vaults_no_data(mocker): "json.return_value": {"data": []}, } mock_response = mocker.Mock(**attrs) - mocker.patch(target="requests.get", new=mocker.Mock(return_value=mock_response)) + mocker.patch( + target="openbb_terminal.helper_funcs.requests.get", + new=mocker.Mock(return_value=mock_response), + ) df = coindix_model.get_defi_vaults( chain=None, diff --git a/tests/openbb_terminal/economy/test_finnhub_model.py b/tests/openbb_terminal/economy/test_finnhub_model.py index 030792f85c3..8517c957d3b 100644 --- a/tests/openbb_terminal/economy/test_finnhub_model.py +++ b/tests/openbb_terminal/economy/test_finnhub_model.py @@ -27,7 +27,10 @@ def test_get_economy_calendar_events(mocker): "json.return_value": mock_json, } mock_response = mocker.Mock(**attrs) - mocker.patch(target="requests.get", new=mocker.Mock(return_value=mock_response)) + mocker.patch( + target="openbb_terminal.helper_funcs.requests.get", + new=mocker.Mock(return_value=mock_response), + ) result_df = finnhub_model.get_economy_calendar_events() @@ -42,7 +45,10 @@ def test_get_economy_calendar_events_no_response(mocker): } mock_response = mocker.Mock(**attrs) - mocker.patch(target="requests.get", new=mocker.Mock(return_value=mock_response)) + mocker.patch( + target="openbb_terminal.helper_funcs.requests.get", + new=mocker.Mock(return_value=mock_response), + ) result_df = finnhub_model.get_economy_calendar_events() diff --git a/tests/openbb_terminal/economy/test_finnhub_view.py b/tests/openbb_terminal/economy/test_finnhub_view.py index 28f27570670..77a44733240 100644 --- a/tests/openbb_terminal/economy/test_finnhub_view.py +++ b/tests/openbb_terminal/economy/test_finnhub_view.py @@ -73,7 +73,10 @@ def test_economy_calendar_events_no_country(mocker): "json.return_value": MOCK_ECONOMY_CALENDAR_EVENTS_DICT, } mock_response = mocker.Mock(**attrs) - mocker.patch(target="requests.get", new=mocker.Mock(return_value=mock_response)) + mocker.patch( + target="openbb_terminal.helper_funcs.requests.get", + new=mocker.Mock(return_value=mock_response), + ) finnhub_view.economy_calendar_events( country="MOCK_COUNTRY", @@ -92,7 +95,10 @@ def test_economy_calendar_events_no_impact(mocker): "json.return_value": MOCK_ECONOMY_CALENDAR_EVENTS_DICT, } mock_response = mocker.Mock(**attrs) - mocker.patch(target="requests.get", new=mocker.Mock(return_value=mock_response)) + mocker.patch( + target="openbb_terminal.helper_funcs.requests.get", + new=mocker.Mock(return_value=mock_response), + ) finnhub_view.economy_calendar_events( country="AU", @@ -111,7 +117,10 @@ def test_economy_calendar_events(mocker): "json.return_value": MOCK_ECONOMY_CALENDAR_EVENTS_DICT, } mock_response = mocker.Mock(**attrs) - mocker.patch(target="requests.get", new=mocker.Mock(return_value=mock_response)) + mocker.patch( + target="openbb_terminal.helper_funcs.requests.get", + new=mocker.Mock(return_value=mock_response), + ) finnhub_view.economy_calendar_events( country="AU", diff --git a/tests/openbb_terminal/economy/test_fred_model.py b/tests/openbb_terminal/economy/test_fred_model.py index 9ce7ad75869..7219fde3dd7 100644 --- a/tests/openbb_terminal/economy/test_fred_model.py +++ b/tests/openbb_terminal/economy/test_fred_model.py @@ -62,7 +62,7 @@ def test_invalid_response_status(func, kwargs_dict, mocker): mock_response = mocker.Mock(**attrs) mocker.patch( - target="requests.get", + target="openbb_terminal.helper_funcs.requests.get", new=mocker.Mock(return_value=mock_response), ) diff --git a/tests/openbb_terminal/economy/test_nasdaq_model.py b/tests/openbb_terminal/economy/test_nasdaq_model.py index 808f85ab6d3..65e4db705c3 100644 --- a/tests/openbb_terminal/economy/test_nasdaq_model.py +++ b/tests/openbb_terminal/economy/test_nasdaq_model.py @@ -33,7 +33,10 @@ def test_get_big_mac_index_no_response(mocker): # MOCK GET attrs = {"status_code": 400} mock_response = mocker.Mock(**attrs) - mocker.patch(target="requests.get", new=mocker.Mock(return_value=mock_response)) + mocker.patch( + target="openbb_terminal.helper_funcs.requests.get", + new=mocker.Mock(return_value=mock_response), + ) result_df = nasdaq_model.get_big_mac_index(country_code="VNM") diff --git a/tests/openbb_terminal/stocks/behavioural_analysis/test_finnhub_model.py b/tests/openbb_terminal/stocks/behavioural_analysis/test_finnhub_model.py index bb220562ee4..41912e5975b 100644 --- a/tests/openbb_terminal/stocks/behavioural_analysis/test_finnhub_model.py +++ b/tests/openbb_terminal/stocks/behavioural_analysis/test_finnhub_model.py @@ -32,7 +32,10 @@ def test_get_ipo_calendar(recorder): def test_get_ipo_calendar_400(mocker): mock_response = requests.Response() mock_response.status_code = 401 - mocker.patch(target="requests.get", new=mocker.Mock(return_value=mock_response)) + mocker.patch( + target="openbb_terminal.helper_funcs.requests.get", + new=mocker.Mock(return_value=mock_response), + ) ipo_df = finnhub_model.get_ipo_calendar( start_date="2021-12-01", end_date="2021-12-02", diff --git a/tests/openbb_terminal/stocks/comparison_analysis/test_finnhub_model.py b/tests/openbb_terminal/stocks/comparison_analysis/test_finnhub_model.py index ded93437790..048a2918514 100644 --- a/tests/openbb_terminal/stocks/comparison_analysis/test_finnhub_model.py +++ b/tests/openbb_terminal/stocks/comparison_analysis/test_finnhub_model.py @@ -33,7 +33,10 @@ def test_get_similar_companies_invalid_status(mocker, recorder): mock_response = mocker.Mock(**attrs) - mocker.patch(target="requests.get", new=mocker.Mock(return_value=mock_response)) + mocker.patch( + target="openbb_terminal.helper_funcs.requests.get", + new=mocker.Mock(return_value=mock_response), + ) result = finnhub_model.get_similar_companies(symbol="TSLA") recorder.capture(result) diff --git a/tests/openbb_terminal/stocks/comparison_analysis/test_polygon_model.py b/tests/openbb_terminal/stocks/comparison_analysis/test_polygon_model.py index ced8b6610b0..9eef68e3835 100644 --- a/tests/openbb_terminal/stocks/comparison_analysis/test_polygon_model.py +++ b/tests/openbb_terminal/stocks/comparison_analysis/test_polygon_model.py @@ -33,7 +33,10 @@ def test_get_similar_companies_invalid_status(mocker, recorder): mock_response.status_code = 400 # pylint: disable=protected-access mock_response._content = b"""{"error":"MOCK_ERROR"}""" - mocker.patch(target="requests.get", new=mocker.Mock(return_value=mock_response)) + mocker.patch( + target="openbb_terminal.helper_funcs.requests.get", + new=mocker.Mock(return_value=mock_response), + ) result = polygon_model.get_similar_companies( symbol="TSLA", us_only=True, diff --git a/tests/openbb_terminal/stocks/discovery/test_finnhub_model.py b/tests/openbb_terminal/stocks/discovery/test_finnhub_model.py index ec8e4c86147..41655dba346 100644 --- a/tests/openbb_terminal/stocks/discovery/test_finnhub_model.py +++ b/tests/openbb_terminal/stocks/discovery/test_finnhub_model.py @@ -37,7 +37,10 @@ def test_get_ipo_calendar_400(mocker): mock_response = mocker.Mock(**attrs) - mocker.patch(target="requests.get", new=mocker.Mock(return_value=mock_response)) + mocker.patch( + target="openbb_terminal.helper_funcs.requests.get", + new=mocker.Mock(return_value=mock_response), + ) ipo_df = finnhub_model.get_ipo_calendar( start_date="2021-12-01", end_date="2021-12-02", diff --git a/tests/openbb_terminal/stocks/discovery/test_nasdaq_model.py b/tests/openbb_terminal/stocks/discovery/test_nasdaq_model.py index 486eb42f939..81f8dba7ad8 100644 --- a/tests/openbb_terminal/stocks/discovery/test_nasdaq_model.py +++ b/tests/openbb_terminal/stocks/discovery/test_nasdaq_model.py @@ -28,7 +28,10 @@ def test_get_retail_tickers(recorder): def test_get_ipo_calendar_400(mocker): mock_response = requests.Response() mock_response.status_code = 400 - mocker.patch(target="requests.get", new=mocker.Mock(return_value=mock_response)) + mocker.patch( + target="openbb_terminal.helper_funcs.requests.get", + new=mocker.Mock(return_value=mock_response), + ) retail_tickers = nasdaq_model.get_retail_tickers() @@ -39,7 +42,10 @@ def test_get_ipo_calendar_400(mocker): def test_dividend_fails(mocker): mock_response = requests.Response() mock_response.status_code = 400 - mocker.patch(target="requests.get", new=mocker.Mock(return_value=mock_response)) + mocker.patch( + target="openbb_terminal.helper_funcs.requests.get", + new=mocker.Mock(return_value=mock_response), + ) retail_tickers = nasdaq_model.get_dividend_cal("2021-01-01") diff --git a/tests/openbb_terminal/stocks/due_diligence/test_ark_model.py b/tests/openbb_terminal/stocks/due_diligence/test_ark_model.py index 50ab0b096eb..c6bd46b085b 100644 --- a/tests/openbb_terminal/stocks/due_diligence/test_ark_model.py +++ b/tests/openbb_terminal/stocks/due_diligence/test_ark_model.py @@ -58,7 +58,7 @@ def test_get_ark_trades_by_ticker_invalid_status(mocker): mock_response = requests.Response() mock_response.status_code = 400 mocker.patch( - target="requests.get", + target="openbb_terminal.helper_funcs.requests.get", new=mocker.Mock(return_value=mock_response), ) result_df = ark_model.get_ark_trades_by_ticker(symbol="TSLA") diff --git a/tests/openbb_terminal/stocks/due_diligence/test_finnhub_model.py b/tests/openbb_terminal/stocks/due_diligence/test_finnhub_model.py index 01cda22a7b0..45027c1edaa 100644 --- a/tests/openbb_terminal/stocks/due_diligence/test_finnhub_model.py +++ b/tests/openbb_terminal/stocks/due_diligence/test_finnhub_model.py @@ -37,7 +37,7 @@ def test_get_rating_over_time_invalid_status(mocker): mock_response = mocker.Mock(**attrs) mocker.patch( - target="requests.get", + target="openbb_terminal.helper_funcs.requests.get", new=mocker.Mock(return_value=mock_response), ) result_df = finnhub_model.get_rating_over_time(symbol="FAILING_REQUEST") diff --git a/tests/openbb_terminal/stocks/fundamental_analysis/test_av_model.py b/tests/openbb_terminal/stocks/fundamental_analysis/test_av_model.py index 3a9725a1965..05086e7b7e8 100644 --- a/tests/openbb_terminal/stocks/fundamental_analysis/test_av_model.py +++ b/tests/openbb_terminal/stocks/fundamental_analysis/test_av_model.py @@ -34,7 +34,7 @@ def test_invalid_response_status(func, kwargs_dict, mocker): mock_response = mocker.Mock(**attrs) mocker.patch( - target="requests.get", + target="openbb_terminal.helper_funcs.requests.get", new=mocker.Mock(return_value=mock_response), ) diff --git a/tests/openbb_terminal/stocks/fundamental_analysis/test_eclect_us_model.py b/tests/openbb_terminal/stocks/fundamental_analysis/test_eclect_us_model.py index d1bca733551..d1eeb3b70cf 100644 --- a/tests/openbb_terminal/stocks/fundamental_analysis/test_eclect_us_model.py +++ b/tests/openbb_terminal/stocks/fundamental_analysis/test_eclect_us_model.py @@ -31,7 +31,7 @@ def test_get_filings_analysis_invalid(mocker): mock_response = requests.Response() mock_response.status_code = 400 mocker.patch( - target="requests.get", + target="openbb_terminal.helper_funcs.requests.get", new=mocker.Mock(return_value=mock_response), ) diff --git a/tests/openbb_terminal/stocks/insider/test_openinsider_view.py b/tests/openbb_terminal/stocks/insider/test_openinsider_view.py index fb156deaca3..ac6360c2f54 100644 --- a/tests/openbb_terminal/stocks/insider/test_openinsider_view.py +++ b/tests/openbb_terminal/stocks/insider/test_openinsider_view.py @@ -84,7 +84,11 @@ def test_print_insider_data(color, mocker): @pytest.mark.vcr(record_mode="none") def test_print_insider_data_no_table(mocker): # MOCK GET - mocker.patch("requests.get") + attrs = {"status_code": 200, "text": ""} + mock_response = mocker.Mock(**attrs) + mocker.patch( + "openbb_terminal.helper_funcs.requests.get", return_value=mock_response + ) mocker.patch( target="openbb_terminal.stocks.insider.openinsider_model.pd.read_html", return_value=[pd.DataFrame(columns=["1d", "1w", "1m", "6m"]) for _ in range(5)], diff --git a/tests/openbb_terminal/stocks/options/test_alphaquery_model.py b/tests/openbb_terminal/stocks/options/test_alphaquery_model.py index 6ee6dde5f69..a79113479e1 100644 --- a/tests/openbb_terminal/stocks/options/test_alphaquery_model.py +++ b/tests/openbb_terminal/stocks/options/test_alphaquery_model.py @@ -24,7 +24,10 @@ def test_get_put_call_ratio(recorder): def test_get_put_call_ratio_invalid_status(mocker): mock_response = requests.Response() mock_response.status_code = 400 - mocker.patch(target="requests.get", new=mocker.Mock(return_value=mock_response)) + mocker.patch( + target="openbb_terminal.helper_funcs.requests.get", + new=mocker.Mock(return_value=mock_response), + ) result_df = alphaquery_model.get_put_call_ratio( symbol="PM", diff --git a/tests/openbb_terminal/stocks/options/test_fdscanner_model.py b/tests/openbb_terminal/stocks/options/test_fdscanner_model.py index 3bc16586005..46112faf7df 100644 --- a/tests/openbb_terminal/stocks/options/test_fdscanner_model.py +++ b/tests/openbb_terminal/stocks/options/test_fdscanner_model.py @@ -30,7 +30,10 @@ def test_unusual_options(recorder): def test_unusual_options_invalid_status(mocker): mock_response = requests.Response() mock_response.status_code = 400 - mocker.patch(target="requests.get", new=mocker.Mock(return_value=mock_response)) + mocker.patch( + target="openbb_terminal.helper_funcs.requests.get", + new=mocker.Mock(return_value=mock_response), + ) result_tuple = fdscanner_model.unusual_options(limit=5) diff --git a/tests/openbb_terminal/stocks/options/test_syncretism_model.py b/tests/openbb_terminal/stocks/options/test_syncretism_model.py index 8c6588a7670..feabfcdfedc 100644 --- a/tests/openbb_terminal/stocks/options/test_syncretism_model.py +++ b/tests/openbb_terminal/stocks/options/test_syncretism_model.py @@ -38,7 +38,10 @@ def test_get_historical_greeks(put, recorder): def test_get_historical_greeks_invalid_status(mocker): mock_response = requests.Response() mock_response.status_code = 400 - mocker.patch(target="requests.get", new=mocker.Mock(return_value=mock_response)) + mocker.patch( + target="openbb_terminal.helper_funcs.requests.get", + new=mocker.Mock(return_value=mock_response), + ) result_df = syncretism_model.get_historical_greeks( symbol="PM", @@ -64,7 +67,10 @@ def test_get_screener_output(recorder): def test_get_screener_output_invalid_status(mocker): mock_response = requests.Response() mock_response.status_code = 400 - mocker.patch(target="requests.get", new=mocker.Mock(return_value=mock_response)) + mocker.patch( + target="openbb_terminal.helper_funcs.requests.get", + new=mocker.Mock(return_value=mock_response), + ) result_tuple = syncretism_model.get_screener_output( preset="high_IV.ini", diff --git a/tests/openbb_terminal/stocks/options/test_tradier_model.py b/tests/openbb_terminal/stocks/options/test_tradier_model.py index 5d83d31c773..b328ebe3e22 100644 --- a/tests/openbb_terminal/stocks/options/test_tradier_model.py +++ b/tests/openbb_terminal/stocks/options/test_tradier_model.py @@ -31,7 +31,10 @@ def test_get_historical_options(recorder): def test_get_historical_options_invalid_status(mocker): mock_response = requests.Response() mock_response.status_code = 400 - mocker.patch(target="requests.get", new=mocker.Mock(return_value=mock_response)) + mocker.patch( + target="openbb_terminal.helper_funcs.requests.get", + new=mocker.Mock(return_value=mock_response), + ) result_df = tradier_model.get_historical_options( symbol="AAPL", @@ -53,7 +56,10 @@ def test_get_historical_options_no_data(mocker): attribute="json", return_value={"history": None}, ) - mocker.patch(target="requests.get", new=mocker.Mock(return_value=mock_response)) + mocker.patch( + target="openbb_terminal.helper_funcs.requests.get", + new=mocker.Mock(return_value=mock_response), + ) result_df = tradier_model.get_historical_options( symbol="AAPL", @@ -81,7 +87,10 @@ def test_option_expirations_json_error(mocker): attribute="json", side_effect=TypeError(), ) - mocker.patch(target="requests.get", new=mocker.Mock(return_value=mock_response)) + mocker.patch( + target="openbb_terminal.helper_funcs.requests.get", + new=mocker.Mock(return_value=mock_response), + ) result_list = tradier_model.option_expirations(symbol="AAPL") @@ -92,7 +101,10 @@ def test_option_expirations_json_error(mocker): def test_option_expirations_invalid_status(mocker): mock_response = requests.Response() mock_response.status_code = 400 - mocker.patch(target="requests.get", new=mocker.Mock(return_value=mock_response)) + mocker.patch( + target="openbb_terminal.helper_funcs.requests.get", + new=mocker.Mock(return_value=mock_response), + ) result_list = tradier_model.option_expirations(symbol="AAPL") @@ -109,7 +121,10 @@ def test_get_option_chains(recorder): def test_get_option_chains_invalid_status(mocker): mock_response = requests.Response() mock_response.status_code = 400 - mocker.patch(target="requests.get", new=mocker.Mock(return_value=mock_response)) + mocker.patch( + target="openbb_terminal.helper_funcs.requests.get", + new=mocker.Mock(return_value=mock_response), + ) result_df = tradier_model.get_option_chain(symbol="AAPL", expiry="2025-01-17") @@ -126,7 +141,10 @@ def test_last_price(recorder): def test_get_historical_greeks_invalid_status(mocker): mock_response = requests.Response() mock_response.status_code = 400 - mocker.patch(target="requests.get", new=mocker.Mock(return_value=mock_response)) + mocker.patch( + target="openbb_terminal.helper_funcs.requests.get", + new=mocker.Mock(return_value=mock_response), + ) result = tradier_model.get_last_price(symbol="AAPL") diff --git a/tests/openbb_terminal/stocks/technical_analysis/test_finbrain_model.py b/tests/openbb_terminal/stocks/technical_analysis/test_finbrain_model.py index 7dd1e6259c4..0748f536d61 100644 --- a/tests/openbb_terminal/stocks/technical_analysis/test_finbrain_model.py +++ b/tests/openbb_terminal/stocks/technical_analysis/test_finbrain_model.py @@ -18,7 +18,10 @@ def test_get_technical_summary_report(recorder): def test_get_technical_summary_report_invalid_status(mocker): mock_response = requests.Response() mock_response.status_code = 400 - mocker.patch(target="requests.get", new=mocker.Mock(return_value=mock_response)) + mocker.patch( + target="openbb_terminal.helper_funcs.requests.get", + new=mocker.Mock(return_value=mock_response), + ) result = finbrain_model.get_technical_summary_report(symbol="TSLA") assert result == "" @@ -33,7 +36,10 @@ def test_get_technical_summary_report_invalid_json(mocker): attribute="json", side_effect=lambda: dict(), ) - mocker.patch(target="requests.get", new=mocker.Mock(return_value=mock_response)) + mocker.patch( + target="openbb_terminal.helper_funcs.requests.get", + new=mocker.Mock(return_value=mock_response), + ) result = finbrain_model.get_technical_summary_report(symbol="TSLA") assert result == "" diff --git a/tests/openbb_terminal/test_terminal_helper.py b/tests/openbb_terminal/test_terminal_helper.py index 3e70309fe9d..f76e3ee7ea4 100644 --- a/tests/openbb_terminal/test_terminal_helper.py +++ b/tests/openbb_terminal/test_terminal_helper.py @@ -78,7 +78,10 @@ def test_check_for_updates(mocker, last_release, current_release): }, } mock_response = mocker.Mock(**attrs) - mocker.patch(target="requests.get", new=mocker.Mock(return_value=mock_response)) + mocker.patch( + target="openbb_terminal.helper_funcs.requests.get", + new=mocker.Mock(return_value=mock_response), + ) # MOCK FF VERSION mocker.patch( diff --git a/tests/openbb_terminal/test_thought_of_the_day.py b/tests/openbb_terminal/test_thought_of_the_day.py index 77659779132..f9f09f6ac87 100644 --- a/tests/openbb_terminal/test_thought_of_the_day.py +++ b/tests/openbb_terminal/test_thought_of_the_day.py @@ -22,7 +22,7 @@ class TestThoughtOfTheDay: assertions.assertEqual(a_totd.get_urls(), urls) - @mock.patch("openbb_terminal.thought_of_the_day.requests") + @mock.patch("openbb_terminal.helper_funcs.requests") @parameterize_from_file( "test_get_metadata", "../../tests/openbb_terminal/yaml/test_thought_of_the_day/thought_of_the_day.yaml", diff --git a/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[2.0.0-2.0.0rc1].txt b/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[2.0.0-2.0.0rc1].txt index ebb1d30e693..029d4ce3985 100644 --- a/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[2.0.0-2.0.0rc1].txt +++ b/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[2.0.0-2.0.0rc1].txt @@ -1,4 +1,3 @@ -[yellow]You are not using the latest stable version[/yellow] -[yellow]Check for updates at https://openbb.co/products/terminal#get-started[/yellow] +[yellow]Unable to check for updates... Check your internet connection and try again...[/yellow] diff --git a/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[2.0.0rc1-2.0.0].txt b/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[2.0.0rc1-2.0.0].txt index 1829b0d4e81..029d4ce3985 100644 --- a/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[2.0.0rc1-2.0.0].txt +++ b/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[2.0.0rc1-2.0.0].txt @@ -1,4 +1,3 @@ -[yellow]You are not using the latest stable version[/yellow] -[yellow]You are using an unreleased version[/yellow] +[yellow]Unable to check for updates... Check your internet connection and try again...[/yellow] diff --git a/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[2.0.0rc1-2.0.0rc2].txt b/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[2.0.0rc1-2.0.0rc2].txt index 1829b0d4e81..029d4ce3985 100644 --- a/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[2.0.0rc1-2.0.0rc2].txt +++ b/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[2.0.0rc1-2.0.0rc2].txt @@ -1,4 +1,3 @@ -[yellow]You are not using the latest stable version[/yellow] -[yellow]You are using an unreleased version[/yellow] +[yellow]Unable to check for updates... Check your internet connection and try again...[/yellow] diff --git a/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[2.0.0rc2-2.0.0rc1].txt b/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[2.0.0rc2-2.0.0rc1].txt index ebb1d30e693..029d4ce3985 100644 --- a/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[2.0.0rc2-2.0.0rc1].txt +++ b/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[2.0.0rc2-2.0.0rc1].txt @@ -1,4 +1,3 @@ -[yellow]You are not using the latest stable version[/yellow] -[yellow]Check for updates at https://openbb.co/products/terminal#get-started[/yellow] +[yellow]Unable to check for updates... Check your internet connection and try again...[/yellow] diff --git a/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[3.41.99-3.41.99].txt b/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[3.41.99-3.41.99].txt index 9e44b60e915..029d4ce3985 100644 --- a/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[3.41.99-3.41.99].txt +++ b/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[3.41.99-3.41.99].txt @@ -1,3 +1,3 @@ -[green]You are using the latest stable version[/green] +[yellow]Unable to check for updates... Check your internet connection and try again...[/yellow] diff --git a/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[3.41.99-3.41.99rc1].txt b/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[3.41.99-3.41.99rc1].txt index ebb1d30e693..029d4ce3985 100644 --- a/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[3.41.99-3.41.99rc1].txt +++ b/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[3.41.99-3.41.99rc1].txt @@ -1,4 +1,3 @@ -[yellow]You are not using the latest stable version[/yellow] -[yellow]Check for updates at https://openbb.co/products/terminal#get-started[/yellow] +[yellow]Unable to check for updates... Check your internet connection and try again...[/yellow] diff --git a/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[3.41.99-88.123.456].txt b/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[3.41.99-88.123.456].txt index 1829b0d4e81..029d4ce3985 100644 --- a/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[3.41.99-88.123.456].txt +++ b/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[3.41.99-88.123.456].txt @@ -1,4 +1,3 @@ -[yellow]You are not using the latest stable version[/yellow] -[yellow]You are using an unreleased version[/yellow] +[yellow]Unable to check for updates... Check your internet connection and try again...[/yellow] diff --git a/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[8.10.01-8.1.01].txt b/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[8.10.01-8.1.01].txt index ebb1d30e693..029d4ce3985 100644 --- a/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[8.10.01-8.1.01].txt +++ b/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[8.10.01-8.1.01].txt @@ -1,4 +1,3 @@ -[yellow]You are not using the latest stable version[/yellow] -[yellow]Check for updates at https://openbb.co/products/terminal#get-started[/yellow] +[yellow]Unable to check for updates... Check your internet connection and try again...[/yellow] diff --git a/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[88.123.456-3.41.99].txt b/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[88.123.456-3.41.99].txt index ebb1d30e693..029d4ce3985 100644 --- a/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[88.123.456-3.41.99].txt +++ b/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[88.123.456-3.41.99].txt @@ -1,4 +1,3 @@ -[yellow]You are not using the latest stable version[/yellow] -[yellow]Check for updates at https://openbb.co/products/terminal#get-started[/yellow] +[yellow]Unable to check for updates... Check your internet connection and try again...[/yellow] diff --git a/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[v0.0.1-v0.0.1].txt b/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[v0.0.1-v0.0.1].txt index 9e44b60e915..029d4ce3985 100644 --- a/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[v0.0.1-v0.0.1].txt +++ b/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[v0.0.1-v0.0.1].txt @@ -1,3 +1,3 @@ -[green]You are using the latest stable version[/green] +[yellow]Unable to check for updates... Check your internet connection and try again...[/yellow] diff --git a/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[v0.0.1-v0.0.2].txt b/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[v0.0.1-v0.0.2].txt index 1829b0d4e81..029d4ce3985 100644 --- a/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[v0.0.1-v0.0.2].txt +++ b/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[v0.0.1-v0.0.2].txt @@ -1,4 +1,3 @@ -[yellow]You are not using the latest stable version[/yellow] -[yellow]You are using an unreleased version[/yellow] +[yellow]Unable to check for updates... Check your internet connection and try again...[/yellow] diff --git a/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[v0.0.2-v0.0.1].txt b/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[v0.0.2-v0.0.1].txt index ebb1d30e693..029d4ce3985 100644 --- a/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[v0.0.2-v0.0.1].txt +++ b/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[v0.0.2-v0.0.1].txt @@ -1,4 +1,3 @@ -[yellow]You are not using the latest stable version[/yellow] -[yellow]Check for updates at https://openbb.co/products/terminal#get-started[/yellow] +[yellow]Unable to check for updates... Check your internet connection and try again...[/yellow] diff --git a/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[v1.10.0-v1.9.0].txt b/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[v1.10.0-v1.9.0].txt index ebb1d30e693..029d4ce3985 100644 --- a/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[v1.10.0-v1.9.0].txt +++ b/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[v1.10.0-v1.9.0].txt @@ -1,4 +1,3 @@ -[yellow]You are not using the latest stable version[/yellow] -[yellow]Check for updates at https://openbb.co/products/terminal#get-started[/yellow] +[yellow]Unable to check for updates... Check your internet connection and try again...[/yellow] diff --git a/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[v1.9.0-v1.10.0].txt b/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[v1.9.0-v1.10.0].txt index 1829b0d4e81..029d4ce3985 100644 --- a/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[v1.9.0-v1.10.0].txt +++ b/tests/openbb_terminal/txt/test_terminal_helper/test_check_for_updates[v1.9.0-v1.10.0].txt @@ -1,4 +1,3 @@ -[yellow]You are not using the latest stable version[/yellow] -[yellow]You are using an unreleased version[/yellow] +[yellow]Unable to check for updates... Check your internet connection and try again...[/yellow] diff --git a/website/content/sdk/reference/stocks/options/process_chains.md b/website/content/sdk/reference/stocks/options/process_chains.md index b906dc958d0..26d2dd2b9c7 100644 --- a/website/content/sdk/reference/stocks/options/process_chains.md +++ b/website/content/sdk/reference/stocks/options/process_chains.md @@ -5,7 +5,7 @@ description: OpenBB SDK Function # process_chains -Function to take in the requests.get and return a DataFrame +Function to take in the request and return a DataFrame Source Code: [[link](https://github.com/OpenBB-finance/OpenBBTerminal/tree/main/openbb_terminal/stocks/options/tradier_model.py#L238)]