Merge branch 'develop' into feature/real_estate

This commit is contained in:
kulbinderdio
2023-01-27 22:59:27 +00:00
committed by GitHub
152 changed files with 698 additions and 1128 deletions

4
CONTRIBUTING.md vendored
View File

@@ -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}"
)

View File

@@ -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)

View File

@@ -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}",

View File

@@ -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:

View File

@@ -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()

View File

@@ -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}"
)

View File

@@ -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

View File

@@ -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}",
)

View File

@@ -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])

View File

@@ -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},

View File

@@ -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 = {}

View File

@@ -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"

View File

@@ -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}")

View File

@@ -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:

View File

@@ -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:

View File

@@ -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}")

View File

@@ -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 {}

View File

@@ -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:

View File

@@ -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,
)

View File

@@ -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")

View File

@@ -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:

View File

@@ -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"

View File

@@ -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]")

View File

@@ -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:

View File

@@ -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:

View File

@@ -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()

View File

@@ -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(

View File

@@ -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"]

View File

@@ -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",

View File

@@ -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:

View File

@@ -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:

View File

@@ -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",

View File

@@ -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

View File

@@ -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,

View File

@@ -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")

View File

@@ -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()},
)

View File

@@ -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)

View File

@@ -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,

View File

@@ -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)

View File

@@ -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,

View File

@@ -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()

View File

@@ -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={

View File

@@ -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]

View File

@@ -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}"
)

View File

@@ -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

View File

@@ -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:

View File

@@ -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()

View File

@@ -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()

View File

@@ -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 = (
[],
[],

View File

@@ -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")

View File

@@ -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:

View File

@@ -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()},
)

View File

@@ -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()

View File

@@ -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")

View File

@@ -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:

View File

@@ -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

View File

@@ -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

View File

@@ -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) "

View File

@@ -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)"

View File

@@ -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()

View File

@@ -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}"
)

View File

@@ -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,

View File

@@ -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

View File

@@ -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,
)

View File

@@ -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",
)

View File

@@ -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",

View File

@@ -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"])

View File

@@ -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

View File

@@ -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__"}

View File

@@ -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)

View File

@@ -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 = []

View File

@@ -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}"
)

View File

@@ -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()

View File

@@ -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()

View File

@@ -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

View File

@@ -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()

View File

@@ -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",

View File

@@ -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()

View File

@@ -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",
)

View File

@@ -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()

View File

@@ -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",

View File

@@ -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

View File

@@ -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()

View File

@@ -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(

View File

@@ -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",
)

View File

@@ -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]}"

View File

@@ -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(

View File

@@ -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",

View File

@@ -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"},
)

View File

@@ -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()

View File

@@ -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",

View File

@@ -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:

View File

@@ -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()},
)

View File

@@ -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)"

View File

@@ -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:

View File

@@ -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={

View File

@@ -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

View File

@@ -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()

View File

@@ -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():

View File

@@ -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