mirror of
https://github.com/OpenBB-finance/OpenBB.git
synced 2026-11-03 16:02:04 +00:00
Merge branch 'develop' into feature/real_estate
This commit is contained in:
4
CONTRIBUTING.md
vendored
4
CONTRIBUTING.md
vendored
@@ -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}"
|
||||
)
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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}",
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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}"
|
||||
)
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -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}",
|
||||
)
|
||||
@@ -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])
|
||||
|
||||
|
||||
@@ -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},
|
||||
|
||||
@@ -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 = {}
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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}")
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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}")
|
||||
|
||||
|
||||
@@ -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 {}
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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,
|
||||
)
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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]")
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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"]
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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()},
|
||||
)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -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={
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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}"
|
||||
)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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 = (
|
||||
[],
|
||||
[],
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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()},
|
||||
)
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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) "
|
||||
|
||||
@@ -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)"
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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}"
|
||||
)
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
)
|
||||
|
||||
@@ -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",
|
||||
)
|
||||
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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"])
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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__"}
|
||||
|
||||
@@ -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"(<span class=\"Fz\(0\)\">).*?(</span>)", "", html)
|
||||
dfs = pd.read_html(html_clean, header=header)
|
||||
|
||||
@@ -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 = []
|
||||
|
||||
@@ -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}"
|
||||
)
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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("</li>", "</li>\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
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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",
|
||||
)
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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",
|
||||
)
|
||||
|
||||
|
||||
@@ -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]}"
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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"},
|
||||
)
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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()},
|
||||
)
|
||||
|
||||
@@ -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)"
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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={
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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():
|
||||
|
||||
@@ -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
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user