diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index 82db52f90cf..720275b9122 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -49,7 +49,7 @@ jobs: pip install types-pytz types-requests types-termcolor types-tabulate types-PyYAML types-python-dateutil types-setuptools types-six - run: bandit -x ./tests -r . || true - run: black --diff --check . - - run: codespell --ignore-words-list=commun,statics,ro,zar,zlot,jewl,ba,buil,coo,ether,hist,hsi,mape,navagation,operatio,pres,ser,yeld,shold,ist,varian,datas,ake,creat,vie,hel,ket,toke,certi,buidl,ot,te,buda,shs,welp --quiet-level=2 --skip=./tests,.git,*.css,*.csv,*.html,*.ini,*.ipynb,*.js,*.json,*.lock,*.scss,*.txt,*.yaml,./build/pyinstaller,./website/config.toml + - run: codespell --ignore-words-list=gard,commun,statics,ro,zar,zlot,jewl,ba,buil,coo,ether,hist,hsi,mape,navagation,operatio,pres,ser,yeld,shold,ist,varian,datas,ake,creat,vie,hel,ket,toke,certi,buidl,ot,te,buda,shs,welp --quiet-level=2 --skip=./tests,.git,*.css,*.csv,*.html,*.ini,*.ipynb,*.js,*.json,*.lock,*.scss,*.txt,*.yaml,./build/pyinstaller,./website/config.toml - run: ruff . - run: mypy --ignore-missing-imports openbb_terminal - run: pylint terminal.py openbb_terminal tests diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 31efe745be3..cb9243c0062 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -24,7 +24,7 @@ repos: entry: codespell args: [ - "--ignore-words-list=te,commun,ro,zar,vie,hel,jewl,zlot,ba,buil,coo,ether,hist,hsi,mape,navagation,operatio,pres,ser,yeld,shold,ist,varian,datas,ake,creat,statics,ket,toke,certi,buidl,ot", + "--ignore-words-list=gard,te,commun,ro,zar,vie,hel,jewl,zlot,ba,buil,coo,ether,hist,hsi,mape,navagation,operatio,pres,ser,yeld,shold,ist,varian,datas,ake,creat,statics,ket,toke,certi,buidl,ot", "--quiet-level=2", "--skip=./tests,.git,*.css,*.csv,*.html,*.ini,*.ipynb,*.js,*.json,*.lock,*.scss,*.txt,*.yaml,build/pyinstaller/*,./website/config.toml", ] diff --git a/openbb_terminal/account/account_controller.py b/openbb_terminal/account/account_controller.py index e834e62bd5d..674d6fcd893 100644 --- a/openbb_terminal/account/account_controller.py +++ b/openbb_terminal/account/account_controller.py @@ -5,17 +5,20 @@ import os from pathlib import Path from typing import Dict, List, Optional -from openbb_terminal import ( - keys_model, +from openbb_terminal.account.account_model import ( + get_diff, + get_routines_info, ) -from openbb_terminal.account.account_model import get_diff, get_routines_info from openbb_terminal.account.account_view import display_routines_list from openbb_terminal.core.session import ( hub_model as Hub, local_model as Local, ) -from openbb_terminal.core.session.current_user import get_current_user, is_local -from openbb_terminal.core.session.preferences_handler import set_preference +from openbb_terminal.core.session.current_user import ( + get_current_user, + is_local, + set_preference, +) from openbb_terminal.core.session.session_model import logout from openbb_terminal.custom_prompt_toolkit import NestedCompleter from openbb_terminal.decorators import log_start_end @@ -156,16 +159,23 @@ class AccountController(BaseController): ns_parser = self.parse_known_args_and_warn(parser, other_args) if ns_parser: - current_user = get_current_user() if ns_parser.sync is None: - sync = "ON" if current_user.preferences.SYNC_ENABLED is True else "OFF" + sync = ( + "ON" + if get_current_user().preferences.SYNC_ENABLED is True + else "OFF" + ) console.print(f"sync is {sync}, use --on or --off to change.") else: set_preference( name="SYNC_ENABLED", value=ns_parser.sync, ) - sync = "ON" if current_user.preferences.SYNC_ENABLED is True else "OFF" + sync = ( + "ON" + if get_current_user().preferences.SYNC_ENABLED is True + else "OFF" + ) console.print(f"[info]sync:[/info] {sync}") @log_start_end(log=logger) @@ -489,17 +499,6 @@ class AccountController(BaseController): if token: console.print(f"\n[info]Token:[/info] {token}\n") - save_to_keys = False - if not ns_parser.save: - save_to_keys = console.input( - "Would you like to save the token to the keys? (y/n): " - ).lower() in ["y", "yes"] - - if save_to_keys or ns_parser.save: - keys_model.set_openbb_personal_access_token( - key=token, persist=True, show_output=True - ) - @log_start_end(log=logger) def call_show(self, other_args: List[str]) -> None: """Process show command.""" diff --git a/openbb_terminal/core/models/credentials_model.py b/openbb_terminal/core/models/credentials_model.py index 28f576564a6..24e78f9833f 100644 --- a/openbb_terminal/core/models/credentials_model.py +++ b/openbb_terminal/core/models/credentials_model.py @@ -64,9 +64,6 @@ class CredentialsModel: API_COINBASE_SECRET: str = "REPLACE_ME" API_COINBASE_PASS_PHRASE: str = "REPLACE_ME" - # Others - OPENBB_PERSONAL_ACCESS_TOKEN: str = "REPLACE_ME" - def __repr__(self) -> str: """Return string representation of model.""" dataclass_repr = "" diff --git a/openbb_terminal/core/models/preferences_model.py b/openbb_terminal/core/models/preferences_model.py index 3635e82dbdf..2f255cf9c25 100644 --- a/openbb_terminal/core/models/preferences_model.py +++ b/openbb_terminal/core/models/preferences_model.py @@ -40,14 +40,13 @@ class PreferencesModel: RETRY_WITH_LOAD: bool = False USE_TABULATE_DF: bool = True # Use interactive window to display dataframes with options to sort, filter, etc. - USE_INTERACTIVE_DF = True + USE_INTERACTIVE_DF: bool = True USE_CLEAR_AFTER_CMD: bool = False USE_COLOR: bool = True USE_DATETIME: bool = True # Enable interactive matplotlib mode: change variable name to be more descriptive and delete comment USE_ION: bool = True USE_WATERMARK: bool = True - # Enable command and source in the figures: change variable name to be more descriptive and delete comment USE_CMD_LOCATION_FIGURE: bool = True USE_PROMPT_TOOLKIT: bool = True USE_PLOT_AUTOSCALING: bool = False diff --git a/openbb_terminal/core/sdk/models/keys_sdk_model.py b/openbb_terminal/core/sdk/models/keys_sdk_model.py index 3bc746f1941..a216196b062 100644 --- a/openbb_terminal/core/sdk/models/keys_sdk_model.py +++ b/openbb_terminal/core/sdk/models/keys_sdk_model.py @@ -30,7 +30,6 @@ class KeysRoot(Category): `mykeys`: Get currently set API keys.\n `news`: Set News key\n `oanda`: Set Oanda key\n - `openbb`: Set OpenBB Personal Access Token.\n `polygon`: Set Polygon key\n `quandl`: Set Quandl key\n `reddit`: Set Reddit key\n @@ -71,7 +70,6 @@ class KeysRoot(Category): self.mykeys = lib.keys_model.get_keys self.news = lib.keys_model.set_news_key self.oanda = lib.keys_model.set_oanda_key - self.openbb = lib.keys_model.set_openbb_personal_access_token self.polygon = lib.keys_model.set_polygon_key self.quandl = lib.keys_model.set_quandl_key self.reddit = lib.keys_model.set_reddit_key diff --git a/openbb_terminal/core/session/credentials_handler.py b/openbb_terminal/core/session/credentials_handler.py deleted file mode 100644 index d643777a9a5..00000000000 --- a/openbb_terminal/core/session/credentials_handler.py +++ /dev/null @@ -1,73 +0,0 @@ -# IMPORTS STANDARD -import dataclasses - -# IMPORTS THIRDPARTY -from dotenv import set_key - -# IMPORTS INTERNAL -from openbb_terminal.core.config.paths import SETTINGS_ENV_FILE -from openbb_terminal.core.session.current_user import ( - get_current_user, - is_local, - set_current_user, -) -from openbb_terminal.core.session.hub_model import patch_user_configs - -LOCAL_KEYS = [ - "RH_USERNAME", - "RH_PASSWORD", - "DG_USERNAME", - "DG_PASSWORD", - "DG_TOTP_SECRET", - "OANDA_ACCOUNT_TYPE", - "OANDA_ACCOUNT", - "OANDA_TOKEN", - "API_BINANCE_KEY", - "API_BINANCE_SECRET", - "API_COINBASE_KEY", - "API_COINBASE_SECRET", - "API_COINBASE_PASS_PHRASE", -] - - -def set_credential( - name: str, - value: str, - persist: bool = False, - login: bool = False, -): - """Set credential - - Parameters - ---------- - name : str - Credential name - value : str - Credential value - persist : bool - Force saving to .env file - login : bool - If preference set during login - """ - - current_user = get_current_user() - sync_enabled = current_user.preferences.SYNC_ENABLED - local_user = is_local() - - # Set credential in current user - updated_credentials = dataclasses.replace(current_user.credentials, **{name: value}) - updated_user = dataclasses.replace(current_user, credentials=updated_credentials) - set_current_user(updated_user) - - # Set credential in local env file - if persist and local_user: - set_key(str(SETTINGS_ENV_FILE), "OPENBB_" + name, str(value)) - - # Send credential to cloud - if not local_user and sync_enabled and name not in LOCAL_KEYS and not login: - patch_user_configs( - key=name, - value=str(value), - type_="keys", - auth_header=current_user.profile.get_auth_header(), - ) diff --git a/openbb_terminal/core/session/current_user.py b/openbb_terminal/core/session/current_user.py index 9798963d1b2..e606c968ec5 100644 --- a/openbb_terminal/core/session/current_user.py +++ b/openbb_terminal/core/session/current_user.py @@ -1,6 +1,8 @@ # IMPORTS STANDARD +import dataclasses from copy import deepcopy -from typing import Optional +from pathlib import Path +from typing import Optional, Union # IMPORTS INTERNAL from openbb_terminal.core.models import ( @@ -9,7 +11,10 @@ from openbb_terminal.core.models import ( ProfileModel, UserModel, ) -from openbb_terminal.core.session.env_handler import load_env_to_model, reading_env +from openbb_terminal.core.session.env_handler import ( + load_env_to_model, + reading_env, +) __env_dict = reading_env() __credentials = load_env_to_model(__env_dict, CredentialsModel) @@ -36,6 +41,21 @@ def set_current_user(user: UserModel): __current_user = user +def get_local_user() -> UserModel: + """Get local user.""" + return deepcopy(__local_user) + + +def get_env_dict() -> dict: + """Get env dict.""" + return deepcopy(__env_dict) + + +def get_local_preferences() -> PreferencesModel: + """Get preferences.""" + return deepcopy(__preferences) # type: ignore + + def is_local() -> bool: """Check if user is guest. @@ -65,3 +85,38 @@ def copy_user( ) return user_copy + + +def set_preference( + name: str, + value: Union[bool, Path, str], +): + """Set preference + + Parameters + ---------- + name : str + Preference name + value : Union[bool, Path, str] + Preference value + """ + current_user = get_current_user() + updated_preferences = dataclasses.replace(current_user.preferences, **{name: value}) + updated_user = dataclasses.replace(current_user, preferences=updated_preferences) + set_current_user(updated_user) + + +def set_credential(name: str, value: str): + """Set credential + + Parameters + ---------- + name : str + Credential name + value : str + Credential value + """ + current_user = get_current_user() + updated_credentials = dataclasses.replace(current_user.credentials, **{name: value}) + updated_user = dataclasses.replace(current_user, credentials=updated_credentials) + set_current_user(updated_user) diff --git a/openbb_terminal/core/session/env_handler.py b/openbb_terminal/core/session/env_handler.py index a25a30e4cb1..8ab5eaf67a8 100644 --- a/openbb_terminal/core/session/env_handler.py +++ b/openbb_terminal/core/session/env_handler.py @@ -2,7 +2,7 @@ from typing import Any, Dict, Optional, Type, Union # IMPORTS THIRDPARTY -from dotenv import dotenv_values +from dotenv import dotenv_values, set_key from pydantic import ValidationError # IMPORTS INTERNAL @@ -53,10 +53,10 @@ def load_env_to_model( Union[Type[CredentialsModel], Type[PreferencesModel]] Model with environment variables. """ + model_name = model.__name__.strip("Model").lower() try: return model(**env_dict) # type: ignore except ValidationError as error: - model_name = model.__name__.strip("Model").lower() print(f"Error loading {model_name}:") for err in error.errors(): loc = err.get("loc", None) @@ -69,3 +69,19 @@ def load_env_to_model( print(f" {var_name}: {msg}, using default -> {default}") return model(**env_dict) # type: ignore + except Exception: + print(f"Error loading {model_name}, using defaults.") + return model() # type: ignore + + +def write_to_dotenv(name: str, value: str) -> None: + """Write to .env file. + + Parameters + ---------- + name : str + Name of the variable. + value : str + Value of the variable. + """ + set_key(str(SETTINGS_ENV_FILE), name, str(value)) diff --git a/openbb_terminal/core/session/hub_model.py b/openbb_terminal/core/session/hub_model.py index e1fc818e57d..103f1afb9e6 100644 --- a/openbb_terminal/core/session/hub_model.py +++ b/openbb_terminal/core/session/hub_model.py @@ -232,7 +232,7 @@ def fetch_user_configs( return None -def patch_user_configs( +def upload_config( key: str, value: str, type_: str, @@ -565,7 +565,7 @@ def generate_personal_access_token( Optional[requests.Response] """ - url = f"{base_url}/sdk/token" + url = f"{base_url}sdk/token" payload = json.dumps({"days": days}) headers = { @@ -612,7 +612,7 @@ def get_personal_access_token( Optional[requests.Response] """ - url = f"{base_url}/sdk/token" + url = f"{base_url}sdk/token" headers = {"Authorization": auth_header} @@ -655,7 +655,7 @@ def revoke_personal_access_token( Optional[requests.Response] """ - url = f"{base_url}/sdk/token" + url = f"{base_url}sdk/token" headers = {"Authorization": auth_header} diff --git a/openbb_terminal/core/session/local_model.py b/openbb_terminal/core/session/local_model.py index 39ae92d4417..61ab5a4e76d 100644 --- a/openbb_terminal/core/session/local_model.py +++ b/openbb_terminal/core/session/local_model.py @@ -7,9 +7,11 @@ from openbb_terminal.core.config.paths import ( HIST_FILE_PATH, SETTINGS_DIRECTORY, ) -from openbb_terminal.core.session.credentials_handler import set_credential -from openbb_terminal.core.session.current_user import get_current_user -from openbb_terminal.core.session.preferences_handler import set_preference +from openbb_terminal.core.session.current_user import ( + get_current_user, + get_local_user, + set_credential, +) from openbb_terminal.rich_config import console SESSION_FILE_PATH = SETTINGS_DIRECTORY / "session.json" @@ -110,38 +112,12 @@ def apply_configs(configs: dict): configs : dict The configurations. """ - if configs: - settings = configs.get("features_settings", {}) - sync = update_sync_flag(settings) - if sync: - if settings: - for k, v in settings.items(): - set_preference(k, v, login=True) + if configs and get_local_user().preferences.SYNC_ENABLED: + credentials = configs.get("features_keys", {}) or {} + for k, v in credentials.items(): + set_credential(k, v) - keys = configs.get("features_keys", {}) - if keys: - for k, v in keys.items(): - set_credential(k, v, login=True) - - -def update_sync_flag(settings: dict) -> bool: - """Update the sync flag. - - Parameters - ---------- - settings : dict - The settings. - - Returns - ------- - bool - The sync flag. - """ - sync = not (settings and settings.get("SYNC_ENABLED", "true").lower() == "false") - - set_preference("SYNC_ENABLED", sync, login=True) - - return sync + # TODO: apply other configs here def get_routine(file_name: str, folder: Optional[Path] = None) -> Optional[str]: diff --git a/openbb_terminal/core/session/preferences_handler.py b/openbb_terminal/core/session/preferences_handler.py deleted file mode 100644 index 67903b73d43..00000000000 --- a/openbb_terminal/core/session/preferences_handler.py +++ /dev/null @@ -1,56 +0,0 @@ -# IMPORTS STANDARD -import dataclasses -from pathlib import Path -from typing import Union - -# IMPORTS THIRDPARTY -from dotenv import set_key - -# IMPORTS INTERNAL -from openbb_terminal.core.config.paths import SETTINGS_ENV_FILE -from openbb_terminal.core.session.current_user import ( - get_current_user, - is_local, - set_current_user, -) -from openbb_terminal.core.session.hub_model import patch_user_configs - - -def set_preference( - name: str, - value: Union[bool, Path, str], - login: bool = False, -): - """Set preference - - Parameters - ---------- - name : str - Preference name - value : Union[bool, Path, str] - Preference value - login : bool - If the preference is set during login - """ - - current_user = get_current_user() - sync_enabled = current_user.preferences.SYNC_ENABLED - local_user = is_local() - - # Set preference in current user - updated_preferences = dataclasses.replace(current_user.preferences, **{name: value}) - updated_user = dataclasses.replace(current_user, preferences=updated_preferences) - set_current_user(updated_user) - - # Set preference in local env file - if local_user: - set_key(str(SETTINGS_ENV_FILE), "OPENBB_" + name, str(value)) - - # Send preference to cloud - if not login and not local_user and (sync_enabled or name == "SYNC_ENABLED"): - patch_user_configs( - key=name, - value=str(value), - type_="settings", - auth_header=current_user.profile.get_auth_header(), - ) diff --git a/openbb_terminal/core/session/session_model.py b/openbb_terminal/core/session/session_model.py index 4312803c2a5..773e6cf3eca 100644 --- a/openbb_terminal/core/session/session_model.py +++ b/openbb_terminal/core/session/session_model.py @@ -11,14 +11,15 @@ from openbb_terminal.base_helpers import ( ) from openbb_terminal.core.models.user_model import ( CredentialsModel, - PreferencesModel, ProfileModel, UserModel, ) from openbb_terminal.core.session.current_user import ( + get_env_dict, + get_local_preferences, set_current_user, + set_preference, ) -from openbb_terminal.core.session.preferences_handler import set_preference from openbb_terminal.helper_funcs import system_clear from openbb_terminal.rich_config import console @@ -76,26 +77,24 @@ def login(session: dict) -> LoginStatus: session : dict The session info. """ - # create a new user hub_user = UserModel( # type: ignore credentials=CredentialsModel(), profile=ProfileModel(), - preferences=PreferencesModel(), + preferences=get_local_preferences(), ) response = Hub.fetch_user_configs(session) if response is not None: if response.status_code == 200: configs = json.loads(response.content) email = configs.get("email", "") - feature_settings = configs.get("features_settings", {}) or {} hub_user.profile.load_user_info(session, email) set_current_user(hub_user) Local.apply_configs(configs=configs) - if feature_settings.get("FLAIR", None) is None: + if "FLAIR" not in get_env_dict(): MAX_FLAIR_LEN = 20 flair = "[" + hub_user.profile.username[:MAX_FLAIR_LEN] + "]" + " 🦋" - set_preference("FLAIR", flair, login=True) + set_preference("FLAIR", flair) return LoginStatus.SUCCESS if response.status_code == 401: return LoginStatus.UNAUTHORIZED diff --git a/openbb_terminal/featflags_controller.py b/openbb_terminal/featflags_controller.py index 53a8426808d..ccda80753dd 100644 --- a/openbb_terminal/featflags_controller.py +++ b/openbb_terminal/featflags_controller.py @@ -3,13 +3,17 @@ __docformat__ = "numpy" # IMPORTATION STANDARD import logging -from typing import List, Optional +from pathlib import Path +from typing import List, Optional, Union # IMPORTATION THIRDPARTY -from openbb_terminal.core.session.current_user import get_current_user +from openbb_terminal.core.session.current_user import ( + get_current_user, + set_preference, +) +from openbb_terminal.core.session.env_handler import write_to_dotenv # IMPORTATION INTERNAL -from openbb_terminal.core.session.preferences_handler import set_preference from openbb_terminal.custom_prompt_toolkit import NestedCompleter from openbb_terminal.decorators import log_start_end from openbb_terminal.menu import session @@ -22,12 +26,27 @@ from openbb_terminal.rich_config import MenuText, console logger = logging.getLogger(__name__) +def set_and_save_preference(name: str, value: Union[bool, Path, str]): + """Set preference and write to .env + + Parameters + ---------- + name : str + Preference name + value : Union[bool, Path, str] + Preference value + """ + set_preference(name, value) + write_to_dotenv("OPENBB_" + name, str(value)) + + class FeatureFlagsController(BaseController): """Feature Flags Controller class""" CHOICES_COMMANDS: List[str] = [ "retryload", "tab", + "interactive", "cls", "color", "ion", @@ -63,6 +82,7 @@ class FeatureFlagsController(BaseController): mt.add_raw("\n") mt.add_setting("retryload", current_user.preferences.RETRY_WITH_LOAD) mt.add_setting("tab", current_user.preferences.USE_TABULATE_DF) + mt.add_setting("interactive", current_user.preferences.USE_INTERACTIVE_DF) mt.add_setting("cls", current_user.preferences.USE_CLEAR_AFTER_CMD) mt.add_setting("color", current_user.preferences.USE_COLOR) mt.add_setting("promptkit", current_user.preferences.USE_PROMPT_TOOLKIT) @@ -83,7 +103,7 @@ class FeatureFlagsController(BaseController): def call_overwrite(self, _): """Process overwrite command""" - set_preference( + set_and_save_preference( "FILE_OVERWITE", not get_current_user().preferences.FILE_OVERWRITE ) @@ -93,21 +113,28 @@ class FeatureFlagsController(BaseController): def call_retryload(self, _): """Process retryload command""" - set_preference( + set_and_save_preference( "RETRY_WITH_LOAD", not get_current_user().preferences.RETRY_WITH_LOAD ) @log_start_end(log=logger) def call_tab(self, _): """Process tab command""" - set_preference( + set_and_save_preference( "USE_TABULATE_DF", not get_current_user().preferences.USE_TABULATE_DF ) + @log_start_end(log=logger) + def call_interactive(self, _): + """Process interactive command""" + set_and_save_preference( + "USE_INTERACTIVE_DF", not get_current_user().preferences.USE_INTERACTIVE_DF + ) + @log_start_end(log=logger) def call_cls(self, _): """Process cls command""" - set_preference( + set_and_save_preference( "USE_CLEAR_AFTER_CMD", not get_current_user().preferences.USE_CLEAR_AFTER_CMD, ) @@ -115,12 +142,14 @@ class FeatureFlagsController(BaseController): @log_start_end(log=logger) def call_color(self, _): """Process color command""" - set_preference("USE_COLOR", not get_current_user().preferences.USE_COLOR) + set_and_save_preference( + "USE_COLOR", not get_current_user().preferences.USE_COLOR + ) @log_start_end(log=logger) def call_promptkit(self, _): """Process promptkit command""" - set_preference( + set_and_save_preference( "USE_PROMPT_TOOLKIT", not get_current_user().preferences.USE_PROMPT_TOOLKIT, ) @@ -128,7 +157,7 @@ class FeatureFlagsController(BaseController): @log_start_end(log=logger) def call_thoughts(self, _): """Process thoughts command""" - set_preference( + set_and_save_preference( "ENABLE_THOUGHTS_DAY", not get_current_user().preferences.ENABLE_THOUGHTS_DAY, ) @@ -136,7 +165,7 @@ class FeatureFlagsController(BaseController): @log_start_end(log=logger) def call_reporthtml(self, _): """Process reporthtml command""" - set_preference( + set_and_save_preference( "OPEN_REPORT_AS_HTML", not get_current_user().preferences.OPEN_REPORT_AS_HTML, ) @@ -144,7 +173,7 @@ class FeatureFlagsController(BaseController): @log_start_end(log=logger) def call_exithelp(self, _): """Process exithelp command""" - set_preference( + set_and_save_preference( "ENABLE_EXIT_AUTO_HELP", not get_current_user().preferences.ENABLE_EXIT_AUTO_HELP, ) @@ -152,7 +181,7 @@ class FeatureFlagsController(BaseController): @log_start_end(log=logger) def call_rcontext(self, _): """Process rcontext command""" - set_preference( + set_and_save_preference( "REMEMBER_CONTEXTS", not get_current_user().preferences.REMEMBER_CONTEXTS, ) @@ -160,17 +189,21 @@ class FeatureFlagsController(BaseController): @log_start_end(log=logger) def call_dt(self, _): """Process dt command""" - set_preference("USE_DATETIME", not get_current_user().preferences.USE_DATETIME) + set_and_save_preference( + "USE_DATETIME", not get_current_user().preferences.USE_DATETIME + ) @log_start_end(log=logger) def call_rich(self, _): """Process rich command""" - set_preference("ENABLE_RICH", not get_current_user().preferences.ENABLE_RICH) + set_and_save_preference( + "ENABLE_RICH", not get_current_user().preferences.ENABLE_RICH + ) @log_start_end(log=logger) def call_richpanel(self, _): """Process richpanel command""" - set_preference( + set_and_save_preference( "ENABLE_RICH_PANEL", not get_current_user().preferences.ENABLE_RICH_PANEL, ) @@ -178,19 +211,19 @@ class FeatureFlagsController(BaseController): @log_start_end(log=logger) def call_ion(self, _): """Process ion command""" - set_preference("USE_ION", not get_current_user().preferences.USE_ION) + set_and_save_preference("USE_ION", not get_current_user().preferences.USE_ION) @log_start_end(log=logger) def call_watermark(self, _): """Process watermark command""" - set_preference( + set_and_save_preference( "USE_WATERMARK", not get_current_user().preferences.USE_WATERMARK ) @log_start_end(log=logger) def call_cmdloc(self, _): """Process cmdloc command""" - set_preference( + set_and_save_preference( "USE_CMD_LOCATION_FIGURE", not get_current_user().preferences.USE_CMD_LOCATION_FIGURE, ) @@ -200,4 +233,6 @@ class FeatureFlagsController(BaseController): """Process tbhint command""" if get_current_user().preferences.TOOLBAR_HINT: console.print("Will take effect when running terminal next.") - set_preference("TOOLBAR_HINT", not get_current_user().preferences.TOOLBAR_HINT) + set_and_save_preference( + "TOOLBAR_HINT", not get_current_user().preferences.TOOLBAR_HINT + ) diff --git a/openbb_terminal/helper_funcs.py b/openbb_terminal/helper_funcs.py index b85d1d9a9c0..f1ac3ed9447 100644 --- a/openbb_terminal/helper_funcs.py +++ b/openbb_terminal/helper_funcs.py @@ -1214,26 +1214,29 @@ def str_to_bool(value) -> bool: def get_screeninfo(): """Get screeninfo.""" screens = get_monitors() # Get all available monitors - current_user = get_current_user() - if ( - len(screens) - 1 < current_user.preferences.MONITOR - ): # Check to see if chosen monitor is detected - monitor = 0 - console.print( - f"Could not locate monitor {current_user.preferences.MONITOR}, using primary monitor." - ) - else: - monitor = current_user.preferences.MONITOR - main_screen = screens[monitor] # Choose what monitor to get + if screens: + current_user = get_current_user() + if ( + len(screens) - 1 < current_user.preferences.MONITOR + ): # Check to see if chosen monitor is detected + monitor = 0 + console.print( + f"Could not locate monitor {current_user.preferences.MONITOR}, using primary monitor." + ) + else: + monitor = current_user.preferences.MONITOR + main_screen = screens[monitor] # Choose what monitor to get - return (main_screen.width, main_screen.height) + return (main_screen.width, main_screen.height) + return None def plot_autoscale(): """Autoscale plot.""" current_user = get_current_user() - if current_user.preferences.USE_PLOT_AUTOSCALING: - x, y = get_screeninfo() # Get screen size + screen_info = get_screeninfo() + if current_user.preferences.USE_PLOT_AUTOSCALING and screen_info: + x, y = screen_info # Get screen size # account for ultrawide monitors if x / y > 1.5: x = x * 0.4 diff --git a/openbb_terminal/keys_controller.py b/openbb_terminal/keys_controller.py index 6b4985c7cbf..106578edd73 100644 --- a/openbb_terminal/keys_controller.py +++ b/openbb_terminal/keys_controller.py @@ -53,14 +53,7 @@ class KeysController(BaseController): # pylint: disable=too-many-public-methods def check_keys_status(self) -> None: """Check keys status""" for api in optional_rich_track(self.API_LIST, desc="Checking keys status"): - if api == "openbb": - self.status_dict[api] = getattr( - keys_model, "check_" + str(api) + "_personal_access_token" - )() - else: - self.status_dict[api] = getattr( - keys_model, "check_" + str(api) + "_key" - )() + self.status_dict[api] = getattr(keys_model, "check_" + str(api) + "_key")() def print_help(self): """Print help""" @@ -1167,31 +1160,3 @@ class KeysController(BaseController): # pylint: disable=too-many-public-methods self.status_dict["databento"] = keys_model.set_databento_key( key=ns_parser.key, persist=True, show_output=True ) - - @log_start_end(log=logger) - def call_openbb(self, other_args: List[str]): - """Process openbb command""" - parser = argparse.ArgumentParser( - add_help=False, - formatter_class=argparse.ArgumentDefaultsHelpFormatter, - prog="openbb", - description="Set OpenBB Personal Access Token. ", - ) - parser.add_argument( - "-k", - "--key", - type=str, - dest="key", - help="key", - ) - if not other_args: - console.print("For your Personal Access Token, visit: https://openbb.co/") - return - - if other_args and "-" not in other_args[0][0]: - other_args.insert(0, "-k") - ns_parser = self.parse_simple_args(parser, other_args) - if ns_parser: - self.status_dict["openbb"] = keys_model.set_openbb_personal_access_token( - key=ns_parser.key, persist=True, show_output=True - ) diff --git a/openbb_terminal/keys_model.py b/openbb_terminal/keys_model.py index 47ba54b6f47..847f4d2c8a4 100644 --- a/openbb_terminal/keys_model.py +++ b/openbb_terminal/keys_model.py @@ -5,9 +5,7 @@ __docformat__ = "numpy" import contextlib import io -import json import logging -import os import sys from enum import Enum from typing import Dict, List, Union @@ -25,10 +23,13 @@ from oandapyV20 import API as oanda_API from prawcore.exceptions import ResponseException from tokenterminal import TokenTerminal -from openbb_terminal.core.session.credentials_handler import set_credential -from openbb_terminal.core.session.current_user import get_current_user -from openbb_terminal.core.session.hub_model import BASE_URL -from openbb_terminal.core.session.local_model import SESSION_FILE_PATH +from openbb_terminal.core.session.current_user import ( + get_current_user, + is_local, + set_credential, +) +from openbb_terminal.core.session.env_handler import write_to_dotenv +from openbb_terminal.core.session.hub_model import upload_config from openbb_terminal.cryptocurrency.coinbase_helpers import ( CoinbaseApiException, CoinbaseProAuth, @@ -67,7 +68,6 @@ API_DICT: Dict = { "rh": "ROBINHOOD", "degiro": "DEGIRO", "oanda": "OANDA", - "openbb": "OPENBB", "binance": "BINANCE", "bitquery": "BITQUERY", "coinbase": "COINBASE", @@ -89,6 +89,22 @@ API_DICT: Dict = { # sorting api key section by name API_DICT = dict(sorted(API_DICT.items())) +LOCAL_KEYS = [ + "RH_USERNAME", + "RH_PASSWORD", + "DG_USERNAME", + "DG_PASSWORD", + "DG_TOTP_SECRET", + "OANDA_ACCOUNT_TYPE", + "OANDA_ACCOUNT", + "OANDA_TOKEN", + "API_BINANCE_KEY", + "API_BINANCE_SECRET", + "API_COINBASE_KEY", + "API_COINBASE_SECRET", + "API_COINBASE_PASS_PHRASE", +] + class KeyStatus(str, Enum): """Class to handle status messages and colors""" @@ -230,7 +246,7 @@ def get_keys(show: bool = False) -> pd.DataFrame: for k, _ in current_user.credentials.get_fields().items(): field_value = current_user.credentials.get_field_value(field=k) - if field_value != "REPLACE_ME": + if field_value and field_value != "REPLACE_ME": current_keys[k] = field_value if current_keys: @@ -245,6 +261,35 @@ def get_keys(show: bool = False) -> pd.DataFrame: return pd.DataFrame() +def handle_credential(name: str, value: str, persist: bool = False): + """Handle credential + + Parameters + ---------- + name: str + Name of credential + value: str + Value of credential + persist: bool, optional + Write to .env file. By default, False. + """ + current_user = get_current_user() + sync_enabled = current_user.preferences.SYNC_ENABLED + local_user = is_local() + + set_credential(name, value) + + if local_user and persist: + write_to_dotenv("OPENBB_" + name, value) + elif not local_user and sync_enabled and name not in LOCAL_KEYS: + upload_config( + key=name, + value=str(value), + type_="keys", + auth_header=current_user.profile.get_auth_header(), + ) + + def set_av_key(key: str, persist: bool = False, show_output: bool = False) -> str: """Set Alpha Vantage key @@ -270,7 +315,7 @@ def set_av_key(key: str, persist: bool = False, show_output: bool = False) -> st >>> openbb.keys.av(key="example_key") """ - set_credential("API_KEY_ALPHAVANTAGE", key, persist) + handle_credential("API_KEY_ALPHAVANTAGE", key, persist) return check_av_key(show_output) @@ -337,7 +382,7 @@ def set_fmp_key(key: str, persist: bool = False, show_output: bool = False) -> s >>> openbb.keys.fmp(key="example_key") """ - set_credential("API_KEY_FINANCIALMODELINGPREP", key, persist) + handle_credential("API_KEY_FINANCIALMODELINGPREP", key, persist) return check_fmp_key(show_output) @@ -408,7 +453,7 @@ def set_quandl_key(key: str, persist: bool = False, show_output: bool = False) - >>> openbb.keys.quandl(key="example_key") """ - set_credential("API_KEY_QUANDL", key, persist) + handle_credential("API_KEY_QUANDL", key, persist) return check_quandl_key(show_output) @@ -474,7 +519,7 @@ def set_polygon_key(key: str, persist: bool = False, show_output: bool = False) >>> openbb.keys.polygon(key="example_key") """ - set_credential("API_POLYGON_KEY", key, persist) + handle_credential("API_POLYGON_KEY", key, persist) return check_polygon_key(show_output) @@ -543,7 +588,7 @@ def set_fred_key(key: str, persist: bool = False, show_output: bool = False) -> >>> openbb.keys.fred(key="example_key") """ - set_credential("API_FRED_KEY", key, persist) + handle_credential("API_FRED_KEY", key, persist) return check_fred_key(show_output) @@ -611,7 +656,7 @@ def set_news_key(key: str, persist: bool = False, show_output: bool = False) -> >>> openbb.keys.news(key="example_key") """ - set_credential("API_NEWS_TOKEN", key, persist) + handle_credential("API_NEWS_TOKEN", key, persist) return check_news_key(show_output) @@ -679,7 +724,7 @@ def set_tradier_key(key: str, persist: bool = False, show_output: bool = False) >>> openbb.keys.tradier(key="example_key") """ - set_credential("API_TRADIER_TOKEN", key, persist) + handle_credential("API_TRADIER_TOKEN", key, persist) return check_tradier_key(show_output) @@ -752,7 +797,7 @@ def set_cmc_key(key: str, persist: bool = False, show_output: bool = False) -> s >>> openbb.keys.cmc(key="example_key") """ - set_credential("API_CMC_KEY", key, persist) + handle_credential("API_CMC_KEY", key, persist) return check_cmc_key(show_output) @@ -816,7 +861,7 @@ def set_finnhub_key(key: str, persist: bool = False, show_output: bool = False) >>> openbb.keys.finnhub(key="example_key") """ - set_credential("API_FINNHUB_KEY", key, persist) + handle_credential("API_FINNHUB_KEY", key, persist) return check_finnhub_key(show_output) @@ -906,11 +951,11 @@ def set_reddit_key( ) """ - set_credential("API_REDDIT_CLIENT_ID", client_id, persist) - set_credential("API_REDDIT_CLIENT_SECRET", client_secret, persist) - set_credential("API_REDDIT_PASSWORD", password, persist) - set_credential("API_REDDIT_USERNAME", username, persist) - set_credential("API_REDDIT_USER_AGENT", useragent, persist) + handle_credential("API_REDDIT_CLIENT_ID", client_id, persist) + handle_credential("API_REDDIT_CLIENT_SECRET", client_secret, persist) + handle_credential("API_REDDIT_PASSWORD", password, persist) + handle_credential("API_REDDIT_USERNAME", username, persist) + handle_credential("API_REDDIT_USER_AGENT", useragent, persist) return check_reddit_key(show_output) @@ -1002,7 +1047,7 @@ def set_bitquery_key(key: str, persist: bool = False, show_output: bool = False) >>> openbb.keys.bitquery(key="example_key") """ - set_credential("API_BITQUERY_KEY", key, persist) + handle_credential("API_BITQUERY_KEY", key, persist) return check_bitquery_key(show_output) @@ -1092,7 +1137,7 @@ def set_twitter_key( ) """ - set_credential("API_TWITTER_BEARER_TOKEN", access_token, persist) + handle_credential("API_TWITTER_BEARER_TOKEN", access_token, persist) return check_twitter_key(show_output) @@ -1180,8 +1225,8 @@ def set_rh_key( ) """ - set_credential("RH_USERNAME", username, persist) - set_credential("RH_PASSWORD", password, persist) + handle_credential("RH_USERNAME", username, persist) + handle_credential("RH_PASSWORD", password, persist) return check_rh_key(show_output) @@ -1257,9 +1302,9 @@ def set_degiro_key( ) """ - set_credential("DG_USERNAME", username, persist) - set_credential("DG_PASSWORD", password, persist) - set_credential("DG_TOTP_SECRET", secret, persist) + handle_credential("DG_USERNAME", username, persist) + handle_credential("DG_PASSWORD", password, persist) + handle_credential("DG_TOTP_SECRET", secret, persist) return check_degiro_key(show_output) @@ -1355,9 +1400,9 @@ def set_oanda_key( ) """ - set_credential("OANDA_ACCOUNT", account, persist) - set_credential("OANDA_TOKEN", access_token, persist) - set_credential("OANDA_ACCOUNT_TYPE", account_type, persist) + handle_credential("OANDA_ACCOUNT", account, persist) + handle_credential("OANDA_TOKEN", access_token, persist) + handle_credential("OANDA_ACCOUNT_TYPE", account_type, persist) return check_oanda_key(show_output) @@ -1442,8 +1487,8 @@ def set_binance_key( ) """ - set_credential("API_BINANCE_KEY", key, persist) - set_credential("API_BINANCE_SECRET", secret, persist) + handle_credential("API_BINANCE_KEY", key, persist) + handle_credential("API_BINANCE_SECRET", secret, persist) return check_binance_key(show_output) @@ -1529,9 +1574,9 @@ def set_coinbase_key( ) """ - set_credential("API_COINBASE_KEY", key, persist) - set_credential("API_COINBASE_SECRET", secret, persist) - set_credential("API_COINBASE_PASS_PHRASE", passphrase, persist) + handle_credential("API_COINBASE_KEY", key, persist) + handle_credential("API_COINBASE_SECRET", secret, persist) + handle_credential("API_COINBASE_PASS_PHRASE", passphrase, persist) return check_coinbase_key(show_output) @@ -1606,7 +1651,7 @@ def set_walert_key(key: str, persist: bool = False, show_output: bool = False) - >>> openbb.keys.walert(key="example_key") """ - set_credential("API_WHALE_ALERT_KEY", key, persist) + handle_credential("API_WHALE_ALERT_KEY", key, persist) return check_walert_key(show_output) @@ -1679,7 +1724,7 @@ def set_glassnode_key( >>> openbb.keys.glassnode(key="example_key") """ - set_credential("API_GLASSNODE_KEY", key, persist) + handle_credential("API_GLASSNODE_KEY", key, persist) return check_glassnode_key(show_output) @@ -1754,7 +1799,7 @@ def set_coinglass_key( >>> openbb.keys.coinglass(key="example_key") """ - set_credential("API_COINGLASS_KEY", key, persist) + handle_credential("API_COINGLASS_KEY", key, persist) return check_coinglass_key(show_output) @@ -1825,7 +1870,7 @@ def set_cpanic_key(key: str, persist: bool = False, show_output: bool = False) - >>> openbb.keys.cpanic(key="example_key") """ - set_credential("API_CRYPTO_PANIC_KEY", key, persist) + handle_credential("API_CRYPTO_PANIC_KEY", key, persist) return check_cpanic_key(show_output) @@ -1895,7 +1940,7 @@ def set_ethplorer_key( >>> openbb.keys.ethplorer(key="example_key") """ - set_credential("API_ETHPLORER_KEY", key, persist) + handle_credential("API_ETHPLORER_KEY", key, persist) return check_ethplorer_key(show_output) @@ -1972,8 +2017,8 @@ def set_smartstake_key( ) """ - set_credential("API_SMARTSTAKE_KEY", key, persist) - set_credential("API_SMARTSTAKE_TOKEN", access_token, persist) + handle_credential("API_SMARTSTAKE_KEY", key, persist) + handle_credential("API_SMARTSTAKE_TOKEN", access_token, persist) return check_smartstake_key(show_output) @@ -2058,7 +2103,7 @@ def set_github_key(key: str, persist: bool = False, show_output: bool = False) - >>> openbb.keys.github(key="example_key") """ - set_credential("API_GITHUB_KEY", key, persist) + handle_credential("API_GITHUB_KEY", key, persist) return check_github_key(show_output) @@ -2119,7 +2164,7 @@ def set_messari_key(key: str, persist: bool = False, show_output: bool = False) >>> openbb.keys.messari(key="example_key") """ - set_credential("API_MESSARI_KEY", key, persist) + handle_credential("API_MESSARI_KEY", key, persist) return check_messari_key(show_output) @@ -2189,7 +2234,7 @@ def set_eodhd_key(key: str, persist: bool = False, show_output: bool = False) -> >>> openbb.keys.eodhd(key="example_key") """ - set_credential("API_EODHD_KEY", key, persist) + handle_credential("API_EODHD_KEY", key, persist) return check_eodhd_key(show_output) @@ -2258,7 +2303,7 @@ def set_santiment_key( >>> openbb.keys.santiment(key="example_key") """ - set_credential("API_SANTIMENT_KEY", key, persist) + handle_credential("API_SANTIMENT_KEY", key, persist) return check_santiment_key(show_output) @@ -2338,7 +2383,7 @@ def set_shroom_key(key: str, persist: bool = False, show_output: bool = False) - >>> openbb.keys.shroom(key="example_key") """ - set_credential("API_SHROOM_KEY", key, persist) + handle_credential("API_SHROOM_KEY", key, persist) return check_shroom_key(show_output) @@ -2413,7 +2458,7 @@ def set_tokenterminal_key( >>> from openbb_terminal.sdk import openbb >>> openbb.keys.tokenterminal(key="example_key") """ - set_credential("API_TOKEN_TERMINAL_KEY", key, persist) + handle_credential("API_TOKEN_TERMINAL_KEY", key, persist) return check_tokenterminal_key(show_output) @@ -2478,7 +2523,7 @@ def set_stocksera_key(key: str, persist: bool = False, show_output: bool = False >>> from openbb_terminal.sdk import openbb >>> openbb.keys.stocksera(key="example_key") """ - set_credential("API_STOCKSERA_KEY", key, persist) + handle_credential("API_STOCKSERA_KEY", key, persist) return check_stocksera_key(show_output) @@ -2517,89 +2562,6 @@ def check_stocksera_key(show_output: bool = False): return str(status) -def set_openbb_personal_access_token( - key: str, persist: bool = False, show_output: bool = False -): - """Set OpenBB Personal Access Token. - - Parameters - ---------- - key: str - Personal Access Token - persist: bool, optional - If False, api key change will be contained to where it was changed. For example, a Jupyter notebook session. - If True, api key change will be global, i.e. it will affect terminal environment variables. - By default, False. - show_output: bool, optional - Display status string or not. By default, False. - - Returns - ------- - str - Status of key set - - Examples - -------- - >>> from openbb_terminal.sdk import openbb - >>> openbb.keys.openbb(key="example_key") - """ - set_credential("OPENBB_PERSONAL_ACCESS_TOKEN", key, persist) - return check_openbb_personal_access_token(show_output) - - -def check_openbb_personal_access_token(show_output: bool = False): - """Check OpenBB Personal Access Token - - Returns - ------- - str - Status of key set - """ - - current_user = get_current_user() - - if current_user.credentials.OPENBB_PERSONAL_ACCESS_TOKEN == "REPLACE_ME": - logger.info("OpenBB Personal Access Token not defined") - status = KeyStatus.NOT_DEFINED - else: - try: - access_token = "" - - # TODO: is there a better way to test the key? - # This requires a valid session file - - if os.path.isfile(SESSION_FILE_PATH): - with open(SESSION_FILE_PATH) as f: - access_token = json.load(f).get("access_token") - - headers = { - "Authorization": f"Bearer {access_token}", - "Content-Type": "application/json", - } - response = request( - url=f"{BASE_URL}sdk/token", method="GET", headers=headers - ) - - token = response.json().get("token") - - if ( - response.status_code == 200 - and token == current_user.credentials.OPENBB_PERSONAL_ACCESS_TOKEN - ): - logger.info("OpenBB Personal Access Token defined, test passed") - status = KeyStatus.DEFINED_TEST_PASSED - else: - logger.warning("OpenBB Personal Access Token. defined, test failed") - status = KeyStatus.DEFINED_TEST_FAILED - except requests.exceptions.RequestException: - logger.warning("OpenBB Personal Access Token. defined, test failed") - status = KeyStatus.DEFINED_TEST_FAILED - - if show_output: - console.print(status.colorize()) - return str(status) - - def set_intrinio_key(key: str, persist: bool = False, show_output: bool = False) -> str: """Set Intrinio key @@ -2625,7 +2587,7 @@ def set_intrinio_key(key: str, persist: bool = False, show_output: bool = False) >>> openbb.keys.intrinio(key="example_key") """ - set_credential("API_INTRINIO_KEY", key, persist) + handle_credential("API_INTRINIO_KEY", key, persist) return check_intrinio_key(show_output) @@ -2695,7 +2657,7 @@ def set_databento_key( >>> openbb.keys.databento(key="example_key") """ - set_credential("API_DATABENTO_KEY", key, persist) + handle_credential("API_DATABENTO_KEY", key, persist) return check_databento_key(show_output) diff --git a/openbb_terminal/miscellaneous/i18n/en.yml b/openbb_terminal/miscellaneous/i18n/en.yml index db2f5f66ac2..7b617b05c69 100644 --- a/openbb_terminal/miscellaneous/i18n/en.yml +++ b/openbb_terminal/miscellaneous/i18n/en.yml @@ -47,6 +47,7 @@ en: featflags/_info_: Feature flags through environment variables featflags/retryload: retry misspelled commands with load first featflags/tab: use tabulate to print dataframes + featflags/interactive: open dataframes in interactive window featflags/cls: clear console after each command featflags/color: use coloring features featflags/promptkit: enable prompt toolkit (autocomplete and history) @@ -155,8 +156,6 @@ en: stocks/options/vsurf: show 3D volatility surface stocks/options/grhist: plot option greek history stocks/options/plot: plot variables provided by the user - stocks/options/parity: shows whether options are above or below expected price - stocks/options/binom: shows the value of an option using binomial options pricing stocks/options/greeks: shows the greeks for a given option stocks/options/eodchain: gets option chain at a specific date stocks/options/pricing: shows options pricing and risk neutral valuation @@ -167,12 +166,6 @@ en: stocks/options/screen/scr: screen data from this preset stocks/options/screen/_screened_tickers: Last screened tickers stocks/options/screen/ca: take these to comparison analysis menu - stocks/options/pricing/_ticker: Ticker - stocks/options/pricing/_expiry: Expiry - stocks/options/pricing/add: add an expected price to the list - stocks/options/pricing/rmv: remove an expected price from the list - stocks/options/pricing/show: show the listed of expected prices - stocks/options/pricing/rnval: risk neutral valuation for an option stocks/options/hedge/_ticker: Ticker stocks/options/hedge/_expiry: Expiry stocks/options/hedge/pick: pick the underlying asset position @@ -1000,7 +993,6 @@ en: portfolio/var: display value at risk portfolio/es: display expected shortfall portfolio/om: display omega ratio - portfolio/bro/ally: Ally Invest Menu portfolio/bro/degiro: Degiro Menu portfolio/bro/rh: Robinhood Menu portfolio/bro/cb: Coinbase Pro Menu diff --git a/openbb_terminal/portfolio/brokers/ally/ally_controller.py b/openbb_terminal/portfolio/brokers/ally/ally_controller.py deleted file mode 100644 index 8657e6adc77..00000000000 --- a/openbb_terminal/portfolio/brokers/ally/ally_controller.py +++ /dev/null @@ -1,191 +0,0 @@ -"""Ally Controller""" -__docformat__ = "numpy" - -import argparse -import logging -from typing import List, Optional - -from openbb_terminal.core.session.current_user import get_current_user -from openbb_terminal.custom_prompt_toolkit import NestedCompleter -from openbb_terminal.decorators import log_start_end -from openbb_terminal.helper_funcs import EXPORT_ONLY_RAW_DATA_ALLOWED -from openbb_terminal.menu import session -from openbb_terminal.parent_classes import BaseController -from openbb_terminal.portfolio.brokers.ally import ally_view -from openbb_terminal.rich_config import MenuText, console - -logger = logging.getLogger(__name__) - - -class AllyController(BaseController): - """Ally Controller class""" - - CHOICES_COMMANDS = ["holdings", "history", "balances", "quote", "movers"] - - list_choices = [ - "toplosers", - "toppctlosers", - "topvolume", - "topactive", - "topgainers", - "toppctgainers", - ] - list_exchanges = ["A", "N", "Q", "U", "V"] - PATH = "/portfolio/bro/ally/" - CHOICES_GENERATION = True - - def __init__(self, queue: Optional[List[str]] = None): - """Constructor""" - super().__init__(queue) - - if session and get_current_user().preferences.USE_PROMPT_TOOLKIT: - choices: dict = self.choices_default - self.choices = choices - self.completer = NestedCompleter.from_nested_dict(choices) - - def print_help(self): - """Print help""" - mt = MenuText("portfolio/bro/ally/") - mt.add_cmd("holdings") - mt.add_cmd("history") - mt.add_cmd("balances") - mt.add_raw("\n") - mt.add_info("_info_") - mt.add_cmd("quote") - mt.add_cmd("movers") - console.print(text=mt.menu_text, menu="Portfolio - Brokers - Ally") - - @log_start_end(log=logger) - def call_holdings(self, other_args: List[str]): - """Process holdings command""" - parser = argparse.ArgumentParser( - prog="holdings", - add_help=False, - formatter_class=argparse.ArgumentDefaultsHelpFormatter, - description="Display info about your trading accounts on Ally", - ) - ns_parser = self.parse_known_args_and_warn( - parser, other_args, export_allowed=EXPORT_ONLY_RAW_DATA_ALLOWED - ) - if ns_parser: - ally_view.display_holdings( - export=ns_parser.export, - sheet_name=" ".join(ns_parser.sheet_name) - if ns_parser.sheet_name - else None, - ) - - @log_start_end(log=logger) - def call_history(self, other_args: List[str]): - """Process history command""" - parser = argparse.ArgumentParser( - add_help=False, - formatter_class=argparse.ArgumentDefaultsHelpFormatter, - prog="history", - description="""Account transaction history""", - ) - parser.add_argument( - "-l", - "--limit", - dest="limit", - default=15, - type=int, - help="Number of recent transactions to show", - ) - ns_parser = self.parse_known_args_and_warn( - parser, other_args, export_allowed=EXPORT_ONLY_RAW_DATA_ALLOWED - ) - if ns_parser: - ally_view.display_history( - n_to_show=ns_parser.limit, export=ns_parser.export - ) - - @log_start_end(log=logger) - def call_balances(self, other_args: List[str]): - """Process balances command""" - parser = argparse.ArgumentParser( - add_help=False, - formatter_class=argparse.ArgumentDefaultsHelpFormatter, - prog="balances", - description="""Account balance details""", - ) - ns_parser = self.parse_known_args_and_warn( - parser, other_args, export_allowed=EXPORT_ONLY_RAW_DATA_ALLOWED - ) - if ns_parser: - ally_view.display_balances( - export=ns_parser.export, - sheet_name=" ".join(ns_parser.sheet_name) - if ns_parser.sheet_name - else None, - ) - - @log_start_end(log=logger) - def call_quote(self, other_args: List[str]): - """Process balances command""" - parser = argparse.ArgumentParser( - add_help=False, - formatter_class=argparse.ArgumentDefaultsHelpFormatter, - prog="quote", - description="""Get stock quote""", - ) - if other_args and "-" not in other_args[0][0]: - other_args.insert(0, "-t") - parser.add_argument( - "-t", - "--ticker", - help="Ticker to get quote for. Can be in form of 'tick1,tick2...'", - type=str, - dest="ticker", - ) - - ns_parser = self.parse_known_args_and_warn(parser, other_args) - if ns_parser: - ally_view.display_stock_quote(ns_parser.ticker) - - @log_start_end(log=logger) - def call_movers(self, other_args: List[str]): - """Process movers command""" - parser = argparse.ArgumentParser( - add_help=False, - formatter_class=argparse.ArgumentDefaultsHelpFormatter, - prog="movers", - description="""Get stock movers""", - ) - parser.add_argument( - "-t", - "--type", - help="List to get movers of", - choices=self.list_choices, - default="topactive", - dest="list_type", - ) - parser.add_argument( - "-e", - "--exchange", - help="""Exchange to look at. Can be - A:American Stock Exchange. - N:New York Stock Exchange. - Q:NASDAQ - U:NASDAQ Bulletin Board - V:NASDAQ OTC Other""", - choices=self.list_exchanges, - default="N", - dest="exchange", - ) - parser.add_argument( - "-l", "--limit", help="Number to show", type=int, default=15, dest="limit" - ) - ns_parser = self.parse_known_args_and_warn( - parser, other_args, export_allowed=EXPORT_ONLY_RAW_DATA_ALLOWED - ) - if ns_parser: - ally_view.display_top_lists( - list_type=ns_parser.list_type, - exchange=ns_parser.exchange, - num_to_show=ns_parser.limit, - export=ns_parser.export, - sheet_name=" ".join(ns_parser.sheet_name) - if ns_parser.sheet_name - else None, - ) diff --git a/openbb_terminal/portfolio/brokers/ally/ally_model.py b/openbb_terminal/portfolio/brokers/ally/ally_model.py deleted file mode 100644 index 25cbda34f4e..00000000000 --- a/openbb_terminal/portfolio/brokers/ally/ally_model.py +++ /dev/null @@ -1,132 +0,0 @@ -"""Ally Model""" -__docformat__ = "numpy" - -import logging - -import ally -import pandas as pd - -from openbb_terminal.decorators import log_start_end - -logger = logging.getLogger(__name__) - - -@log_start_end(log=logger) -def get_holdings() -> pd.DataFrame: - """Get holdings from Ally account in pandas df - - Returns - ------- - pd.DataFrame - Dataframe of positions - """ - a = ally.Ally() - return ally_positions_to_df(a.holdings(dataframe=True)) - - -@log_start_end(log=logger) -def ally_positions_to_df(df: pd.DataFrame) -> pd.DataFrame: - """Clean up ally holdings dataframe - - Parameters - ---------- - df : pd.DataFrame - Input dataframe of holdings - - Returns - ------- - pd.DataFrame - Processed holdings - """ - names = { - "costbasis": "CostBasis", - "marketvalue": "MarketValue", - "sym": "Symbol", - "qty": "Quantity", - } - df = df.loc[:, ["qty", "costbasis", "marketvalue", "sym"]] - df[["qty", "costbasis", "marketvalue"]] = df[ - ["qty", "costbasis", "marketvalue"] - ].astype(float) - df = df.rename(columns=names) - df["PnL"] = df["MarketValue"] - df["CostBasis"] - return df - - -@log_start_end(log=logger) -def get_history(limit: int = 50) -> pd.DataFrame: - """Gets transaction history for the account." - - Parameters - ---------- - limit : pd.DataFrame - Number of entries to return - - Returns - ------- - pd.DataFrame - Dataframe of transaction history - """ - a = ally.Ally() - df = a.history(dataframe=True) - return df.tail(limit) - - -@log_start_end(log=logger) -def get_balances() -> pd.DataFrame: - """Gets balance details for the account." - - Returns - ------- - pd.DataFrame - Dataframe of transaction history - """ - a = ally.Ally() - return a.balances(dataframe=True) - - -@log_start_end(log=logger) -def get_stock_quote(symbol: str) -> pd.DataFrame: - """Gets quote for stock ticker - - Parameters - ---------- - symbol : str - Ticker to get. Can be in form of 'tick1,tick2...' - Returns - ------- - pd.DataFrame - Dataframe of ticker quote - """ - a = ally.Ally() - return a.quote( - symbol, - fields=["last", "bid", "ask", "opn", "dollar_value", "chg", "vl"], - dataframe=True, - ) - - -@log_start_end(log=logger) -def get_top_movers( - list_type: str = "", exchange: str = "", limit: int = 50 -) -> pd.DataFrame: - """ - Gets top lists from ally Invest API. Documentation for parameters below: - https://www.ally.com/api/invest/documentation/market-toplists-get/ - - Parameters - ---------- - list_type : str - Which list to get data for - exchange : str - Which exchange to look at - limit: int - Number of top rows to return - Returns - ------- - pd.DataFrame - DataFrame of top movers - """ - a = ally.Ally() - df = a.toplists(list_type, exchange, dataframe=True) - return df.tail(limit) diff --git a/openbb_terminal/portfolio/brokers/ally/ally_view.py b/openbb_terminal/portfolio/brokers/ally/ally_view.py deleted file mode 100644 index 8c200dd6e93..00000000000 --- a/openbb_terminal/portfolio/brokers/ally/ally_view.py +++ /dev/null @@ -1,156 +0,0 @@ -"""Ally View""" -__docformat__ = "numpy" - -import logging -import os -from typing import Optional - -from openbb_terminal.decorators import log_start_end -from openbb_terminal.helper_funcs import export_data, print_rich_table -from openbb_terminal.portfolio.brokers.ally import ally_model - -logger = logging.getLogger(__name__) - - -@log_start_end(log=logger) -def display_history( - limit: int = 15, export: str = "", sheet_name: Optional[str] = None -) -> None: - history = ally_model.get_history(limit) - show_history = history[["amount", "date", "symbol", "transactiontype", "quantity"]] - print_rich_table( - show_history, - headers=list(show_history.columns), - show_index=False, - title="Ally History", - export=bool(export), - ) - - export_data( - export, - os.path.dirname(os.path.abspath(__file__)), - "ally_history", - history, - sheet_name, - ) - - -@log_start_end(log=logger) -def display_holdings(export: str = "", sheet_name: Optional[str] = None) -> None: - """Display holdings from ally account - - Parameters - ---------- - export : str, optional - Format to export data, by default "" - """ - holdings = ally_model.get_holdings() - holdings = holdings.set_index("Symbol") - print_rich_table( - holdings, - headers=list(holdings.columns), - show_index=True, - title="Ally Holdings", - export=bool(export), - ) - - export_data( - export, - os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))), - "ally_holdings", - holdings, - sheet_name, - ) - - -@log_start_end(log=logger) -def display_balances(export: str = "", sheet_name: Optional[str] = None) -> None: - """Display balances from ally account - - Parameters - ---------- - export : str, optional - Format to export data, by default "" - """ - balances = ally_model.get_balances() - # Export data here before picking out certain columns - export_data( - export, - os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))), - "ally_balances", - balances, - sheet_name, - ) - # Pick which balances to show - balances = balances[ - [ - "accountvalue", - "buyingpower.stock", - "money.cash", - "securities.stocks", - "securities.total", - ] - ] - print_rich_table( - balances, - headers=list(balances.columns), - show_index=False, - title="Ally Balances", - export=bool(export), - ) - - -@log_start_end(log=logger) -def display_stock_quote(symbol: str) -> None: - """Displays stock quote for ticker/tickers - - Parameters - ---------- - ticker : str - Ticker to get. Can be in form of 'tick1,tick2...' - """ - quote = ally_model.get_stock_quote(symbol) - print_rich_table( - quote, headers=list(quote.columns), show_index=True, title="Stock Quote" - ) - - -@log_start_end(log=logger) -def display_top_lists( - list_type: str = "", - exchange: str = "", - limit: int = 20, - export: str = "", - sheet_name: Optional[str] = None, -): - """ - Display top lists from ally Invest API. Documentation for parameters below: - https://www.ally.com/api/invest/documentation/market-toplists-get/ - - Parameters - ---------- - list_type : str - Which list to get data for - exchange : str - Which exchange to look at - limit : int, optional - Number of top rows to show, by default 20 - export : str, optional - Format to export data, by default "" - """ - movers = ally_model.get_top_movers(list_type, exchange, limit) - print_rich_table( - movers, - headers=list(movers.columns), - show_index=True, - title="Ally Top Lists", - export=bool(export), - ) - - export_data( - export, - os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))), - "ally_movers", - movers, - sheet_name, - ) diff --git a/openbb_terminal/portfolio/brokers/bro_controller.py b/openbb_terminal/portfolio/brokers/bro_controller.py index 57488e98c49..b6d6caf3cd1 100644 --- a/openbb_terminal/portfolio/brokers/bro_controller.py +++ b/openbb_terminal/portfolio/brokers/bro_controller.py @@ -10,7 +10,6 @@ from openbb_terminal.custom_prompt_toolkit import NestedCompleter from openbb_terminal.decorators import log_start_end from openbb_terminal.menu import session from openbb_terminal.parent_classes import BaseController -from openbb_terminal.portfolio.brokers.ally import ally_controller from openbb_terminal.portfolio.brokers.coinbase import coinbase_controller from openbb_terminal.portfolio.brokers.degiro import degiro_controller from openbb_terminal.portfolio.brokers.robinhood import robinhood_controller @@ -42,7 +41,6 @@ class BrokersController(BaseController): def print_help(self): """Print help""" mt = MenuText("portfolio/bro/") - mt.add_menu("ally") mt.add_menu("degiro") mt.add_menu("rh") mt.add_menu("cb") @@ -53,11 +51,6 @@ class BrokersController(BaseController): """Process degiro command.""" self.queue = self.load_class(degiro_controller.DegiroController, self.queue) - @log_start_end(log=logger) - def call_ally(self, _): - """Process ally command.""" - self.queue = self.load_class(ally_controller.AllyController, self.queue) - @log_start_end(log=logger) def call_rh(self, _): """Process rh command.""" diff --git a/openbb_terminal/reports/templates/etf.ipynb b/openbb_terminal/reports/templates/etf.ipynb index 2b5484ff71e..470ce9b2a17 100644 --- a/openbb_terminal/reports/templates/etf.ipynb +++ b/openbb_terminal/reports/templates/etf.ipynb @@ -19,8 +19,8 @@ "import numpy as np\n", "import datetime\n", "\n", - "from IPython.display import HTML \n", - " \n", + "from IPython.display import HTML\n", + "\n", "import openbb_terminal.config_terminal as cfg\n", "from openbb_terminal.reports import widget_helpers as widgets\n", "from openbb_terminal.sdk import openbb\n", diff --git a/openbb_terminal/sdk.py b/openbb_terminal/sdk.py index 405c9034ef3..8779f27c106 100644 --- a/openbb_terminal/sdk.py +++ b/openbb_terminal/sdk.py @@ -351,7 +351,6 @@ class OpenBBSDK: `mykeys`: Get currently set API keys.\n `news`: Set News key\n `oanda`: Set Oanda key\n - `openbb`: Set OpenBB Personal Access Token.\n `polygon`: Set Polygon key\n `quandl`: Set Quandl key\n `reddit`: Set Reddit key\n diff --git a/openbb_terminal/settings_controller.py b/openbb_terminal/settings_controller.py index d3e64e5f595..82610d7898f 100644 --- a/openbb_terminal/settings_controller.py +++ b/openbb_terminal/settings_controller.py @@ -7,7 +7,7 @@ import logging import os import os.path from pathlib import Path -from typing import List, Optional +from typing import List, Optional, Union # IMPORTATION THIRDPARTY import pytz @@ -19,8 +19,11 @@ from openbb_terminal.core.config.paths import ( SETTINGS_ENV_FILE, USER_DATA_SOURCES_DEFAULT_FILE, ) -from openbb_terminal.core.session.current_user import get_current_user -from openbb_terminal.core.session.preferences_handler import set_preference +from openbb_terminal.core.session.current_user import ( + get_current_user, + set_preference, +) +from openbb_terminal.core.session.env_handler import write_to_dotenv from openbb_terminal.custom_prompt_toolkit import NestedCompleter from openbb_terminal.decorators import log_start_end from openbb_terminal.helper_funcs import ( @@ -193,6 +196,20 @@ class SettingsController(BaseController): mt.add_param("_tk", current_user.preferences.TOOLBAR_TWEET_NEWS_KEYWORDS) console.print(text=mt.menu_text, menu="Settings") + @staticmethod + def set_and_save_preference(name: str, value: Union[bool, Path, str]): + """Set preference and write to .env + + Parameters + ---------- + name : str + Preference name + value : Union[bool, Path, str] + Preference value + """ + set_preference(name, value) + write_to_dotenv("OPENBB_" + name, str(value)) + @log_start_end(log=logger) def call_colors(self, other_args: List[str]): """Process colors command""" @@ -227,7 +244,7 @@ class SettingsController(BaseController): ) ns_parser = self.parse_simple_args(parser, other_args) if ns_parser: - set_preference( + self.set_and_save_preference( "USE_DATETIME", not get_current_user().preferences.USE_DATETIME ) @@ -253,7 +270,9 @@ class SettingsController(BaseController): ns_parser = self.parse_simple_args(parser, other_args) if ns_parser: if os.path.exists(ns_parser.file): - set_preference("PREFERRED_DATA_SOURCE_FILE", ns_parser.file) + self.set_and_save_preference( + "PREFERRED_DATA_SOURCE_FILE", ns_parser.file + ) console.print("[green]Sources file changed successfully![/green]") else: console.print("[red]Couldn't find the sources file![/red]") @@ -269,7 +288,7 @@ class SettingsController(BaseController): ) ns_parser = self.parse_simple_args(parser, other_args) if ns_parser: - set_preference( + self.set_and_save_preference( "USE_PLOT_AUTOSCALING", not get_current_user().preferences.USE_PLOT_AUTOSCALING, ) @@ -295,7 +314,7 @@ class SettingsController(BaseController): other_args.insert(0, "-v") ns_parser = self.parse_simple_args(parser, other_args) if ns_parser and ns_parser.value: - set_preference("PLOT_DPI", ns_parser.value) + self.set_and_save_preference("PLOT_DPI", ns_parser.value) @log_start_end(log=logger) def call_height(self, other_args: List[str]): @@ -318,7 +337,7 @@ class SettingsController(BaseController): other_args.insert(0, "-v") ns_parser = self.parse_simple_args(parser, other_args) if ns_parser: - set_preference("PLOT_HEIGHT", ns_parser.value) + self.set_and_save_preference("PLOT_HEIGHT", ns_parser.value) @log_start_end(log=logger) def call_width(self, other_args: List[str]): @@ -341,7 +360,7 @@ class SettingsController(BaseController): other_args.insert(0, "-v") ns_parser = self.parse_simple_args(parser, other_args) if ns_parser: - set_preference("PLOT_WIDTH", ns_parser.value) + self.set_and_save_preference("PLOT_WIDTH", ns_parser.value) @log_start_end(log=logger) def call_pheight(self, other_args: List[str]): @@ -363,7 +382,7 @@ class SettingsController(BaseController): other_args.insert(0, "-v") ns_parser = self.parse_simple_args(parser, other_args) if ns_parser: - set_preference("PLOT_HEIGHT_PERCENTAGE", ns_parser.value) + self.set_and_save_preference("PLOT_HEIGHT_PERCENTAGE", ns_parser.value) @log_start_end(log=logger) def call_pwidth(self, other_args: List[str]): @@ -385,7 +404,7 @@ class SettingsController(BaseController): other_args.insert(0, "-v") ns_parser = self.parse_simple_args(parser, other_args) if ns_parser: - set_preference("PLOT_WIDTH_PERCENTAGE", ns_parser.value) + self.set_and_save_preference("PLOT_WIDTH_PERCENTAGE", ns_parser.value) @log_start_end(log=logger) def call_monitor(self, other_args: List[str]): @@ -407,7 +426,7 @@ class SettingsController(BaseController): other_args.insert(0, "-v") ns_parser = self.parse_simple_args(parser, other_args) if ns_parser: - set_preference("MONITOR", ns_parser.value) + self.set_and_save_preference("MONITOR", ns_parser.value) @log_start_end(log=logger) def call_backend(self, other_args: List[str]): @@ -429,7 +448,7 @@ class SettingsController(BaseController): other_args.insert(0, "-v") ns_parser = self.parse_simple_args(parser, other_args) if ns_parser: - set_preference("BACKEND", ns_parser.value) + self.set_and_save_preference("BACKEND", ns_parser.value) @log_start_end(log=logger) def call_lang(self, other_args: List[str]): @@ -454,7 +473,7 @@ class SettingsController(BaseController): ns_parser = self.parse_simple_args(parser, other_args) if ns_parser: if ns_parser.value: - set_preference("USE_LANGUAGE", ns_parser.value) + self.set_and_save_preference("USE_LANGUAGE", ns_parser.value) else: console.print( f"Languages available: {', '.join(self.languages_available)}" @@ -484,7 +503,7 @@ class SettingsController(BaseController): ns_parser = self.parse_simple_args(parser, other_args) if ns_parser and ns_parser.timezone: - set_preference("TIMEZONE", ns_parser.timezone) + self.set_and_save_preference("TIMEZONE", ns_parser.timezone) @log_start_end(log=logger) def call_flair(self, other_args: List[str]): @@ -512,7 +531,7 @@ class SettingsController(BaseController): else: ns_parser.emoji = " ".join(ns_parser.emoji) - set_preference("FLAIR", ns_parser.emoji) + self.set_and_save_preference("FLAIR", ns_parser.emoji) @log_start_end(log=logger) def call_userdata(self, other_args: List[str]): @@ -550,7 +569,7 @@ class SettingsController(BaseController): console.print( f"User data to be saved in the default folder: '{default_path}'" ) - set_preference("USER_DATA_DIRECTORY", default_path) + self.set_and_save_preference("USER_DATA_DIRECTORY", default_path) success_userdata = True else: # If the path selected does not start from the user root, give relative location from root @@ -564,7 +583,9 @@ class SettingsController(BaseController): console.print( f"User data to be saved in the selected folder: '{userdata_path}'" ) - set_preference("USER_DATA_DIRECTORY", userdata_path) + self.set_and_save_preference( + "USER_DATA_DIRECTORY", userdata_path + ) success_userdata = True else: console.print( @@ -581,7 +602,9 @@ class SettingsController(BaseController): console.print( f"[green]Folder '{userdata_path}' successfully created.[/green]" ) - set_preference("USER_DATA_DIRECTORY", userdata_path) + self.set_and_save_preference( + "USER_DATA_DIRECTORY", userdata_path + ) else: # Do not update userdata_folder path since we will keep the same as before console.print( @@ -607,7 +630,7 @@ class SettingsController(BaseController): current_user = get_current_user() if current_user.preferences.TOOLBAR_TWEET_NEWS: console.print("Will take effect when running terminal next.") - set_preference( + self.set_and_save_preference( "TOOLBAR_TWEET_NEWS", not get_current_user().preferences.TOOLBAR_TWEET_NEWS, ) @@ -659,25 +682,25 @@ class SettingsController(BaseController): ns_parser = self.parse_known_args_and_warn(parser, other_args) if ns_parser: if ns_parser.time: - set_preference( + self.set_and_save_preference( "TOOLBAR_TWEET_NEWS_SECONDS_BETWEEN_UPDATES", str(ns_parser.time), ) if ns_parser.number: - set_preference( + self.set_and_save_preference( "TOOLBAR_TWEET_NEWS_NUM_LAST_TWEETS_TO_READ", str(ns_parser.number), ) if ns_parser.accounts: - set_preference( + self.set_and_save_preference( "TOOLBAR_TWEET_NEWS_ACCOUNTS_TO_TRACK", str(ns_parser.accounts), ) if ns_parser.keywords: - set_preference( + self.set_and_save_preference( "TOOLBAR_TWEET_NEWS_KEYWORDS", str(" ".join(ns_parser.keywords)), ) diff --git a/openbb_terminal/stocks/behavioural_analysis/ba_controller.py b/openbb_terminal/stocks/behavioural_analysis/ba_controller.py index 273381614d0..a7db3230885 100644 --- a/openbb_terminal/stocks/behavioural_analysis/ba_controller.py +++ b/openbb_terminal/stocks/behavioural_analysis/ba_controller.py @@ -28,7 +28,7 @@ from openbb_terminal.helper_funcs import ( from openbb_terminal.menu import session from openbb_terminal.parent_classes import StockBaseController from openbb_terminal.rich_config import MenuText, console -from openbb_terminal.stocks.behavioural_analysis import cramer_view, finnhub_view +from openbb_terminal.stocks.behavioural_analysis import finnhub_view # pylint:disable=R0904,C0302 @@ -827,57 +827,3 @@ class BehaviouralAnalysisController(StockBaseController): ) else: console.print("No ticker loaded. Please load using 'load '\n") - - def call_jcdr(self, other_args: List[str]): - """Process jcdr command.""" - parser = argparse.ArgumentParser( - add_help=False, - formatter_class=argparse.ArgumentDefaultsHelpFormatter, - prog="jcdr", - description=""" - Show daily cramer recommendation - """, - ) - parser.add_argument( - "-i", - "--inverse", - default=False, - action="store_true", - help="Show inverse recommendation", - dest="inverse", - ) - - ns_parser = self.parse_known_args_and_warn( - parser, other_args, export_allowed=EXPORT_ONLY_RAW_DATA_ALLOWED - ) - - if ns_parser: - cramer_view.display_cramer_daily(inverse=ns_parser.inverse) - - @log_start_end(log=logger) - def call_jctr(self, other_args: List[str]): - """Process jctr command.""" - parser = argparse.ArgumentParser( - add_help=False, - formatter_class=argparse.ArgumentDefaultsHelpFormatter, - prog="jctr", - description=""" - Show cramer recommendation for loaded ticker - """, - ) - ns_parser = self.parse_known_args_and_warn( - parser, - other_args, - export_allowed=EXPORT_BOTH_RAW_DATA_AND_FIGURES, - raw=True, - ) - - if ns_parser: - if self.ticker: - cramer_view.display_cramer_ticker( - symbol=self.ticker, raw=ns_parser.raw, export=ns_parser.export - ) - else: - console.print( - "[red]No ticker loaded. Please use load first.\n[/red]" - ) diff --git a/openbb_terminal/stocks/behavioural_analysis/cramer_model.py b/openbb_terminal/stocks/behavioural_analysis/cramer_model.py deleted file mode 100644 index 0ea0a71be96..00000000000 --- a/openbb_terminal/stocks/behavioural_analysis/cramer_model.py +++ /dev/null @@ -1,119 +0,0 @@ -"""Cramer Model""" -__docformat__ = "numpy" - -import logging -import os -import re - -import certifi -import numpy as np -import pandas as pd -import yfinance as yf -from bs4 import BeautifulSoup - -from openbb_terminal.decorators import log_start_end -from openbb_terminal.helper_funcs import request - -logger = logging.getLogger(__name__) - -# Necessary only for installer to identify where SSL certs are -os.environ["REQUESTS_CA_BUNDLE"] = certifi.where() -os.environ["SSL_CERT_FILE"] = certifi.where() - - -@log_start_end(log=logger) -def get_cramer_daily(inverse: bool = True) -> pd.DataFrame: - """Scrape the daily recommendations of Jim Cramer - - Parameters - ---------- - inverse: bool - Whether to include inverse - - Returns - ------- - pd.DataFrame - Datafreme of daily Cramer recommendations - """ - - link = ( - "https://madmoney.thestreet.com/screener/index.cfm?showview=stocks&showrows=500" - ) - 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) " - "AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.3 Safari/605.1.15", - }, - ) - if r.status_code != 200: - return pd.DataFrame() - soup = BeautifulSoup(r.text, "html.parser") - table = soup.find_all("table")[0] - trs = table.find_all("tr") - recs = { - "1": "Sell", - "2": "Sell", - "3": "Hold", - "4": "Buy", - "5": "Buy", - } - - rec = [recs[tr.find_all("td")[3].find("img")["src"][-5]] for tr in trs[1:]] - - df = pd.read_html(r.text)[0] - df["Symbol"] = df.Company.apply(lambda x: re.findall(r"[\w]+", x)[-1]) - last_price = [ - round( - yf.download(ticker, period="1d", interval="1h", progress=False)["Close"][ - -1 - ], - 2, - ) - for ticker in df.Symbol - ] - - df["LastPrice"] = last_price - df["Price"] = df.Price.apply(lambda x: float(x.strip("$"))) - df = df.drop(columns=["Segment", "Call", "Portfolio"]) - df["Change (%)"] = 100 * np.round((df["LastPrice"] - df["Price"]) / df.LastPrice, 4) - df["Recommendation"] = rec - df["Company"] = df.apply(lambda x: x.Company.replace(f"({x.Symbol})", ""), axis=1) - cols = [ - "Date", - "Company", - "Symbol", - "Price", - "LastPrice", - "Change (%)", - "Recommendation", - ] - if inverse: - df["InverseCramer"] = df["Recommendation"].apply( - lambda x: ["Buy", "Sell"][x == "Buy"] - ) - cols.append("InverseCramer") - return df[cols] - - -@log_start_end(log=logger) -def get_cramer_ticker(symbol: str) -> pd.DataFrame: - """Get cramer recommendations from beginning of year for given ticker - - Parameters - ---------- - symbol: str - Ticker to get recommendations for - - Returns - ------- - pd.DataFrame - Dataframe with dates and recommendations - """ - - link = "https://raw.githubusercontent.com/jmaslek/InverseCramer/main/AllRecommendations.csv" - df = pd.read_csv(link, index_col=0) - df["Date"] = pd.to_datetime(df["Date"].apply(lambda x: x + "/2022")) - return df[df.Symbol == symbol].reset_index(drop=True) diff --git a/openbb_terminal/stocks/behavioural_analysis/cramer_view.py b/openbb_terminal/stocks/behavioural_analysis/cramer_view.py deleted file mode 100644 index 0e40bcae238..00000000000 --- a/openbb_terminal/stocks/behavioural_analysis/cramer_view.py +++ /dev/null @@ -1,136 +0,0 @@ -"""Cramer View""" -__docformat__ = "numpy" - -import logging -import os -from datetime import datetime -from typing import Optional, Union - -import yfinance - -from openbb_terminal import OpenBBFigure, theme -from openbb_terminal.decorators import log_start_end -from openbb_terminal.helper_funcs import export_data, print_rich_table -from openbb_terminal.rich_config import console -from openbb_terminal.stocks.behavioural_analysis import cramer_model - -logger = logging.getLogger(__name__) - - -@log_start_end(log=logger) -def display_cramer_daily( - inverse: bool = True, export: str = "", sheet_name: Optional[str] = None -): - """Display Jim Cramer daily recommendations - - Parameters - ---------- - inverse: bool - Include inverse recommendation - sheet_name: str - Optionally specify the name of the sheet the data is exported to. - export: str - Format to export data - """ - - recs = cramer_model.get_cramer_daily(inverse) - if recs.empty: - console.print("[red]Error getting request.\n[/red]") - return - date = recs.Date[0] - recs = recs.drop(columns=["Date"]) - - if datetime.today().strftime("%m-%d") != datetime.strptime( - date.replace("/", "-"), "%m-%d" - ): - console.print( - """ - \n[yellow]Warning[/yellow]: We noticed Jim Crammer recommendation data has not been updated for a while, \ -and we're investigating on finding a replacement. - """, - ) - - print_rich_table( - recs, title=f"Jim Cramer Recommendations for {date}", export=bool(export) - ) - - export_data( - export, - os.path.dirname(os.path.abspath(__file__)), - "cramer", - recs, - sheet_name, - ) - - -@log_start_end(log=logger) -def display_cramer_ticker( - symbol: str, - raw: bool = False, - export: str = "", - sheet_name: Optional[str] = None, - external_axes: bool = False, -) -> Union[None, OpenBBFigure]: - """Display ticker close with Cramer recommendations - - Parameters - ---------- - symbol: str - Stock ticker - raw: bool - Display raw data - sheet_name: str - Optionally specify the name of the sheet the data is exported to. - export: str - Format to export data - external_axes : bool, optional - Whether to return the figure object or not, by default False - """ - - df = cramer_model.get_cramer_ticker(symbol) - if df.empty: - return console.print(f"No recommendations found for {symbol}.\n") - - fig = OpenBBFigure(xaxis_title="Date", yaxis_title="Price") - fig.set_title(f"{symbol.upper()} Close With Cramer Recommendations") - - close_prices = yfinance.download(symbol, start="2022-01-01", progress=False)[ - "Adj Close" - ] - - fig.add_scatter( - x=close_prices.index, - y=close_prices, - mode="lines", - name="Close", - showlegend=False, - line=dict(color=theme.line_color), - ) - color_map = {"Buy": theme.up_color, "Sell": theme.down_color} - for name, group in df.groupby("Recommendation"): - fig.add_scatter( - x=group.Date, - y=group.Price, - mode="markers", - name=name, - marker=dict(color=color_map[name], size=10), - ) - - if raw: - df["Date"] = df["Date"].apply(lambda x: x.strftime("%Y-%m-%d")) - print_rich_table( - df, title=f"Jim Cramer Recommendations for {symbol}", export=bool(export) - ) - - export_data( - export, - os.path.dirname(os.path.abspath(__file__)), - "jctr", - df, - sheet_name, - fig, - ) - - fig.update_layout(legend=dict(yanchor="top", y=1, xanchor="right", x=1)) - - return fig.show(external=external_axes) diff --git a/openbb_terminal/stocks/options/options_controller.py b/openbb_terminal/stocks/options/options_controller.py index 5b76cd65576..345d86beb98 100644 --- a/openbb_terminal/stocks/options/options_controller.py +++ b/openbb_terminal/stocks/options/options_controller.py @@ -43,7 +43,6 @@ from openbb_terminal.stocks.options.options_view import ( plot_voi, plot_vol, ) -from openbb_terminal.stocks.options.pricing import pricing_controller from openbb_terminal.stocks.options.screen import ( screener_controller, syncretism_model, @@ -80,8 +79,6 @@ class OptionsController(BaseController): "grhist", "unu", "plot", - "parity", - "binom", "vsurf", "greeks", "eodchain", @@ -232,8 +229,6 @@ class OptionsController(BaseController): self.choices["grhist"]["-s"] = "--strike" self.choices["grhist"]["--strike"] = {str(c): {} for c in strike} self.choices["grhist"]["-s"] = "--strike" - self.choices["binom"]["--strike"] = {str(c): {} for c in strike} - self.choices["binom"]["-s"] = "--strike" self.choices["chains"]["--display"] = { str(c): {} for c in self.chain.columns @@ -284,12 +279,9 @@ class OptionsController(BaseController): mt.add_cmd("vsurf", self.ticker and self.selected_date) mt.add_cmd("grhist", self.ticker and self.selected_date) mt.add_cmd("plot", self.ticker and self.selected_date) - mt.add_cmd("parity", self.ticker and self.selected_date) - mt.add_cmd("binom", self.ticker and self.selected_date) mt.add_cmd("greeks", self.ticker and self.selected_date) mt.add_cmd("eodchain", self.ticker and self.selected_date) mt.add_raw("\n") - mt.add_menu("pricing", self.ticker and self.selected_date) mt.add_menu("hedge", self.ticker and self.selected_date) console.print(text=mt.menu_text, menu="Stocks - Options") @@ -1415,162 +1407,6 @@ class OptionsController(BaseController): show_all=ns_parser.all, ) - @log_start_end(log=logger) - def call_parity(self, other_args: List[str]): - """Process parity command""" - parser = argparse.ArgumentParser( - add_help=False, - formatter_class=argparse.ArgumentDefaultsHelpFormatter, - prog="parity", - description="Shows whether options are over or under valued", - ) - parser.add_argument( - "-p", - "--put", - action="store_true", - default=False, - dest="put", - help="Shows puts instead of calls", - ) - parser.add_argument( - "-a", - "--ask", - action="store_true", - default=False, - dest="ask", - help="Use ask price instead of lastPrice", - ) - parser.add_argument( - "-m", - "--min", - type=float, - default=None, - dest="mini", - help="Minimum strike price shown", - ) - parser.add_argument( - "-M", - "--max", - type=float, - default=None, - dest="maxi", - help="Maximum strike price shown", - ) - ns_parser = self.parse_known_args_and_warn( - parser, other_args, EXPORT_ONLY_RAW_DATA_ALLOWED - ) - if ns_parser: - if self.ticker: - if self.selected_date: - yfinance_view.show_parity( - self.ticker, - self.selected_date, - ns_parser.put, - ns_parser.ask, - ns_parser.mini, - ns_parser.maxi, - ns_parser.export, - ) - else: - console.print("No expiry loaded. First use `exp {expiry date}`") - else: - console.print("No ticker loaded. First use `load `") - - @log_start_end(log=logger) - def call_binom(self, other_args: List[str]): - """Process binom command""" - parser = argparse.ArgumentParser( - add_help=False, - formatter_class=argparse.ArgumentDefaultsHelpFormatter, - prog="binom", - description="Gives the option value using binomial option valuation", - ) - parser.add_argument( - "-s", - "--strike", - type=float, - default=0, - dest="strike", - help="Strike price for option shown", - ) - parser.add_argument( - "-p", - "--put", - action="store_true", - default=False, - dest="put", - help="Value a put instead of a call", - ) - parser.add_argument( - "-e", - "--european", - action="store_true", - default=False, - dest="europe", - help="Value a European option instead of an American one", - ) - parser.add_argument( - "-x", - "--xlsx", - action="store_true", - default=False, - dest="export", - help="Export an excel spreadsheet with binomial pricing data", - ) - parser.add_argument( - "--plot", - action="store_true", - default=False, - dest="plot", - help="Plot expected ending values", - ) - parser.add_argument( - "-v", - "--volatility", - type=float, - default=None, - dest="volatility", - help="Underlying asset annualized volatility. Historical volatility used if not supplied.", - ) - if other_args and "-" not in other_args[0][0]: - other_args.insert(0, "-s") - ns_parser = self.parse_known_args_and_warn(parser, other_args) - if ns_parser: - if self.ticker: - if self.selected_date: - yfinance_view.show_binom( - self.ticker, - self.selected_date, - ns_parser.strike, - ns_parser.put, - ns_parser.europe, - ns_parser.export, - ns_parser.plot, - ns_parser.volatility, - ) - else: - console.print("No expiry loaded. First use `exp {expiry date}`") - else: - console.print("No ticker loaded. First use `load `") - - @log_start_end(log=logger) - def call_pricing(self, _): - """Process pricing command""" - if self.ticker: - if self.selected_date: - self.queue = self.load_class( - pricing_controller.PricingController, - self.ticker, - self.selected_date, - self.prices, - self.queue, - ) - else: - console.print("No expiry loaded. First use `exp {expiry date}`") - - else: - console.print("No ticker loaded. First use `load `") - @log_start_end(log=logger) def call_hedge(self, _): """Process hedge command""" diff --git a/openbb_terminal/stocks/options/pricing/pricing_controller.py b/openbb_terminal/stocks/options/pricing/pricing_controller.py deleted file mode 100644 index 53778a1c213..00000000000 --- a/openbb_terminal/stocks/options/pricing/pricing_controller.py +++ /dev/null @@ -1,228 +0,0 @@ -""" Pricing Controller Module """ -__docformat__ = "numpy" - -import argparse -import logging -from typing import List, Optional - -import pandas as pd - -from openbb_terminal.core.session.current_user import get_current_user -from openbb_terminal.custom_prompt_toolkit import NestedCompleter -from openbb_terminal.decorators import log_start_end -from openbb_terminal.helper_funcs import print_rich_table -from openbb_terminal.menu import session -from openbb_terminal.parent_classes import BaseController -from openbb_terminal.rich_config import MenuText, console -from openbb_terminal.stocks.options import yfinance_view - -logger = logging.getLogger(__name__) - - -class PricingController(BaseController): - """Pricing Controller class""" - - CHOICES_COMMANDS = [ - "add", - "rmv", - "show", - "rnval", - ] - PATH = "/stocks/options/pricing/" - CHOICES_GENERATION = True - - def __init__( - self, - ticker: str, - selected_date: str, - prices: pd.DataFrame, - queue: Optional[List[str]] = None, - ): - """Constructor""" - super().__init__(queue) - - self.ticker = ticker - self.selected_date = selected_date - self.prices = prices - - if session and get_current_user().preferences.USE_PROMPT_TOOLKIT: - choices: dict = self.choices_default - self.completer = NestedCompleter.from_nested_dict(choices) - - def print_help(self): - """Print help""" - mt = MenuText("stocks/options/pricing/") - mt.add_param("_ticker", self.ticker or "") - mt.add_param("_expiry", self.selected_date or "") - mt.add_raw("\n") - mt.add_cmd("add") - mt.add_cmd("rmv") - mt.add_raw("\n") - mt.add_cmd("show") - mt.add_cmd("rnval") - console.print(text=mt.menu_text, menu="Stocks - Options - Pricing") - - def custom_reset(self): - """Class specific component of reset command""" - if self.ticker: - if self.selected_date: - return [ - "stocks", - f"load {self.ticker}", - "options", - f"exp -d {self.selected_date}", - "pricing", - ] - return ["stocks", f"load {self.ticker}", "options", "payoff"] - return [] - - @log_start_end(log=logger) - def call_add(self, other_args: List[str]): - """Process add command""" - parser = argparse.ArgumentParser( - add_help=False, - formatter_class=argparse.ArgumentDefaultsHelpFormatter, - prog="add", - description="Adds a price to the list", - ) - parser.add_argument( - "-p", - "--price", - type=float, - required="-h" not in other_args, - dest="price", - help="Projected price of the stock at the expiration date", - ) - parser.add_argument( - "-c", - "--chance", - type=float, - required="-h" not in other_args, - dest="chance", - help="Chance that the stock is at a given projected price", - ) - if other_args and "-" not in other_args[0][0]: - other_args.insert(0, "-p") - ns_parser = self.parse_known_args_and_warn(parser, other_args) - if ns_parser: - if ns_parser.price in self.prices["Price"].to_list(): - df = self.prices[(self.prices["Price"] != ns_parser.price)] - else: - df = self.prices - - new = {"Price": ns_parser.price, "Chance": ns_parser.chance} - df = df.append(new, ignore_index=True) - self.prices = df.sort_values("Price") - - @log_start_end(log=logger) - def call_rmv(self, other_args: List[str]): - """Process rmv command""" - parser = argparse.ArgumentParser( - add_help=False, - formatter_class=argparse.ArgumentDefaultsHelpFormatter, - prog="rmv", - description="Removes a price from the list", - ) - parser.add_argument( - "-p", - "--price", - type=float, - required="-h" not in other_args and "-a" not in other_args, - dest="price", - help="Price you want to remove from the list", - ) - parser.add_argument( - "-a", - "--all", - action="store_true", - default=False, - dest="all", - help="Remove all prices from the list", - ) - if other_args and "-" not in other_args[0][0]: - other_args.insert(0, "-p") - ns_parser = self.parse_known_args_and_warn(parser, other_args) - if ns_parser: - if ns_parser.all: - self.prices = pd.DataFrame(columns=["Price", "Chance"]) - else: - self.prices = self.prices[(self.prices["Price"] != ns_parser.price)] - - @log_start_end(log=logger) - def call_show(self, other_args): - """Process show command""" - parser = argparse.ArgumentParser( - add_help=False, - formatter_class=argparse.ArgumentDefaultsHelpFormatter, - prog="show", - description="Display prices", - ) - ns_parser = self.parse_known_args_and_warn(parser, other_args) - if ns_parser: - print_rich_table( - self.prices, - headers=list(self.prices.columns), - show_index=False, - title=f"Estimated price(s) of {self.ticker} at {self.selected_date}", - ) - - @log_start_end(log=logger) - def call_rnval(self, other_args: List[str]): - """Process rnval command""" - parser = argparse.ArgumentParser( - add_help=False, - formatter_class=argparse.ArgumentDefaultsHelpFormatter, - prog="rnval", - description="The risk neutral value of the options", - ) - parser.add_argument( - "-p", - "--put", - action="store_true", - default=False, - help="Show puts instead of calls", - ) - parser.add_argument( - "-m", - "--min", - type=float, - default=None, - dest="mini", - help="Minimum strike price shown", - ) - parser.add_argument( - "-M", - "--max", - type=float, - default=None, - dest="maxi", - help="Maximum strike price shown", - ) - parser.add_argument( - "-r", - "--risk", - type=float, - default=None, - dest="risk", - help="The risk-free rate to use", - ) - ns_parser = self.parse_known_args_and_warn(parser, other_args) - if ns_parser: - if self.ticker: - if self.selected_date: - if sum(self.prices["Chance"]) == 1: - yfinance_view.risk_neutral_vals( - self.ticker, - self.selected_date, - self.prices, - ns_parser.put, - ns_parser.mini, - ns_parser.maxi, - ns_parser.risk, - ) - else: - console.print("Total chances must equal one\n") - else: - console.print("No expiry loaded. First use `exp {expiry date}`\n") - else: - console.print("No ticker loaded. First use `load `\n") diff --git a/openbb_terminal/stocks/options/yfinance_model.py b/openbb_terminal/stocks/options/yfinance_model.py index 1e5bdd251e0..55e20767572 100644 --- a/openbb_terminal/stocks/options/yfinance_model.py +++ b/openbb_terminal/stocks/options/yfinance_model.py @@ -2,15 +2,13 @@ __docformat__ = "numpy" import logging -import math -from datetime import date, datetime, timedelta -from typing import Any, Dict, List, Optional, Tuple +from datetime import datetime +from typing import Any, Dict, List, Tuple import pandas as pd import yfinance as yf from openbb_terminal.decorators import log_start_end -from openbb_terminal.helper_funcs import get_rf from openbb_terminal.rich_config import console, optional_rich_track logger = logging.getLogger(__name__) @@ -288,102 +286,6 @@ def get_iv_surface(symbol: str) -> pd.DataFrame: return vol_df -@log_start_end(log=logger) -def get_binom( - symbol: str, - expiry: str, - strike: float = 0, - put: bool = False, - europe: bool = False, - vol: Optional[float] = None, -): - """Gets binomial pricing for options - - Parameters - ---------- - symbol : str - The ticker symbol of the option's underlying asset - expiry : str - The expiration for the option - strike : float - The strike price for the option - put : bool - Value a put instead of a call - europe : bool - Value a European option instead of an American option - vol : float - The annualized volatility for the underlying asset - """ - # Base variables to calculate values - info = get_info(symbol) - price = yf.Ticker(symbol).fast_info.last_price - if vol is None: - closings = get_closing(symbol) - vol = (closings / closings.shift()).std() * (252**0.5) - div_yield = ( - info["trailingAnnualDividendYield"] - if info["trailingAnnualDividendYield"] is not None - else 0 - ) - delta_t = 1 / 252 - rf = get_rf() - exp_date = datetime.strptime(expiry, "%Y-%m-%d").date() - today = date.today() - days = (exp_date - today).days - - # Binomial pricing specific variables - up = math.exp(vol * (delta_t**0.5)) - down = 1 / up - prob_up = (math.exp((rf - div_yield) * delta_t) - down) / (up - down) - prob_down = 1 - prob_up - discount = math.exp(delta_t * rf) - - und_vals: List[List[float]] = [[price]] - - # Binomial tree for underlying values - for i in range(days): - cur_date = today + timedelta(days=i + 1) - if cur_date.weekday() < 5: - last = und_vals[-1] - new = [x * up for x in last] - new.append(last[-1] * down) - und_vals.append(new) - - # Binomial tree for option values - opt_vals = ( - [[max(strike - x, 0) for x in und_vals[-1]]] - if put - else [[max(x - strike, 0) for x in und_vals[-1]]] - ) - - j = 2 - while len(opt_vals[0]) > 1: - new_vals = [] - for i in range(len(opt_vals[0]) - 1): - if europe: - value = ( - opt_vals[0][i] * prob_up + opt_vals[0][i + 1] * prob_down - ) / discount - else: - if put: - value = max( - (opt_vals[0][i] * prob_up + opt_vals[0][i + 1] * prob_down) - / discount, - strike - und_vals[-j][i], - ) - else: - value = max( - (opt_vals[0][i] * prob_up + opt_vals[0][i + 1] * prob_down) - / discount, - und_vals[-j][i] - strike, - ) - new_vals.append(value) - opt_vals.insert(0, new_vals) - j += 1 - - return up, prob_up, discount, und_vals, opt_vals, days - - @log_start_end(log=logger) def get_last_price(symbol: str) -> float: """Get the last price from nasdaq diff --git a/openbb_terminal/stocks/options/yfinance_view.py b/openbb_terminal/stocks/options/yfinance_view.py index 7c67ff1c94d..32980ff6e24 100644 --- a/openbb_terminal/stocks/options/yfinance_view.py +++ b/openbb_terminal/stocks/options/yfinance_view.py @@ -4,17 +4,13 @@ __docformat__ = "numpy" import logging import os import re -from datetime import date, datetime, timedelta from typing import Any, Dict, List, Optional, Union import numpy as np -import pandas as pd -from openpyxl import Workbook from scipy.spatial import Delaunay from scipy.stats import binom from openbb_terminal import OpenBBFigure -from openbb_terminal.core.config.paths import MISCELLANEOUS_DIRECTORY from openbb_terminal.core.plots.config.openbb_styles import ( PLT_3DMESH_COLORSCALE, PLT_3DMESH_HOVERLABEL, @@ -22,9 +18,7 @@ from openbb_terminal.core.plots.config.openbb_styles import ( ) from openbb_terminal.decorators import log_start_end from openbb_terminal.helper_funcs import ( - excel_columns, export_data, - get_rf, print_rich_table, ) from openbb_terminal.rich_config import console @@ -188,189 +182,6 @@ def plot_payoff( return plot.show(external=external_axes) -@log_start_end(log=logger) -def show_parity( - symbol: str, - expiry: str, - put: bool = False, - ask: bool = False, - mini: Optional[float] = None, - maxi: Optional[float] = None, - export: str = "", - sheet_name: Optional[str] = None, -) -> None: - """Prints options and whether they are under or over priced [Source: Yahoo Finance] - - Parameters - ---------- - symbol : str - Ticker symbol to get expirations for - expiration : str - Expiration to use for options - put : bool - Whether to use puts or calls - ask : bool - Whether to use ask or lastPrice - mini : float - Minimum strike price to show - maxi : float - Maximum strike price to show - export : str - Export data - """ - r_date = datetime.strptime(expiry, "%Y-%m-%d").date() - delta = (r_date - date.today()).days - rate = ((1 + get_rf()) ** (delta / 365)) - 1 - stock = get_price(symbol) - - div_info = yfinance_model.get_dividend(symbol) - div_dts = div_info.index.values.tolist() - - if div_dts: - last_div = pd.to_datetime(div_dts[-1]) - - avg_div = ( - np.mean(div_info.to_list()[-4:]) - if len(div_dts) > 3 - else np.mean(div_info.to_list()) - ) - - next_div = last_div + timedelta(days=91) - dividends = [] - while next_div < datetime.strptime(expiry, "%Y-%m-%d"): - day_dif = (next_div - datetime.now()).days - dividends.append((avg_div, day_dif)) - next_div += timedelta(days=91) - div_pvs = [x[0] / ((1 + get_rf()) ** (x[1] / 365)) for x in dividends] - pv_dividend = sum(div_pvs) - else: - pv_dividend = 0 - - chain = get_option_chain(symbol, expiry) - name = "ask" if ask else "lastPrice" - o_type = "put" if put else "call" - - calls = chain.calls[["strike", name]].copy() - calls = calls.rename(columns={name: "callPrice"}) - puts = chain.puts[["strike", name]].copy() - puts = puts.rename(columns={name: "putPrice"}) - - opts = pd.merge(calls, puts, on="strike") - opts = opts.dropna() - opts = opts.loc[opts["callPrice"] * opts["putPrice"] != 0] - - opts["callParity"] = ( - opts["putPrice"] + stock - (opts["strike"] / (1 + rate)) - pv_dividend - ) - opts["putParity"] = ( - (opts["strike"] / (1 + rate)) + opts["callPrice"] - stock + pv_dividend - ) - - diff = o_type + " Difference" - opts[diff] = opts[o_type + "Price"] - opts[o_type + "Parity"] - opts["distance"] = abs(stock - opts["strike"]) - filtered = opts.copy() - - if mini is None: - mini = filtered.strike.quantile(0.25) - if maxi is None: - maxi = filtered.strike.quantile(0.75) - - filtered = filtered.loc[filtered["strike"] >= mini] - filtered = filtered.loc[filtered["strike"] <= maxi] - - show = filtered[["strike", diff]].copy() - - if ask: - console.print("Warning: Options with no current ask price not shown.\n") - - print_rich_table( - show, - headers=[x.title() for x in show.columns], - show_index=False, - title=f"{symbol} Parity", - export=bool(export), - ) - console.print( - "[yellow]Warning: Low volume options may be difficult to trade.[/yellow]" - ) - - export_data( - export, - os.path.dirname(os.path.abspath(__file__)), - "parity", - show, - sheet_name, - ) - - -@log_start_end(log=logger) -def risk_neutral_vals( - symbol: str, - expiry: str, - data: pd.DataFrame, - put: bool = False, - mini: Optional[float] = None, - maxi: Optional[float] = None, - risk: Optional[float] = None, -) -> None: - """Prints current options prices and risk neutral values [Source: Yahoo Finance] - - Parameters - ---------- - symbol: str - Ticker symbol to get expirations for - expiry: str - Expiration to use for options - put: bool - Whether to use puts or calls - data: pd.DataFrame - Estimates for stocks prices and probabilities - mini: float - Minimum strike price to show - maxi: float - Maximum strike price to show - risk: float - The risk-free rate for the asset - """ - chain = ( - get_option_chain(symbol, expiry).puts - if put - else get_option_chain(symbol, expiry).calls - ) - - r_date = datetime.strptime(expiry, "%Y-%m-%d").date() - delta = (r_date - date.today()).days - vals = [] - if risk is None: - risk = get_rf() - for _, row in chain.iterrows(): - vals.append( - [ - row["strike"], - row["lastPrice"], - op_helpers.rn_payoff(row["strike"], data, put, delta, risk), - ] - ) - new_df = pd.DataFrame(vals, columns=["Strike", "Last Price", "Value"], dtype=float) - new_df["Difference"] = new_df["Last Price"] - new_df["Value"] - - if mini is None: - mini = new_df.Strike.quantile(0.25) - if maxi is None: - maxi = new_df.Strike.quantile(0.75) - - new_df = new_df[new_df["Strike"] >= mini] - new_df = new_df[new_df["Strike"] <= maxi] - - print_rich_table( - new_df, - headers=[x.title() for x in new_df.columns], - show_index=False, - title="Risk Neutral Values", - ) - - @log_start_end(log=logger) def plot_expected_prices( und_vals: List[List[float]], @@ -418,129 +229,6 @@ def plot_expected_prices( return fig.show(external=external_axes) -@log_start_end(log=logger) -def export_binomial_calcs( - up: float, - prob_up: float, - discount: float, - und_vals: List[List[float]], - opt_vals: List[List[float]], - days: int, - symbol: str, -) -> None: - """Create an excel spreadsheet with binomial tables for underlying asset value and option value - - Parameters - ---------- - up : float - The stock's increase on an upward move - prob_up : float - The probability of an upward move - discount : float - The daily discount rate - und_vals : List[List[float]] - The underlying asset values at each step - opt_vals : List[List[float]] - The values for the option at each step - days : int - The number of days until the option expires - symbol : str - The ticker symbol for the company - """ - - opts = excel_columns() - wb = Workbook() - ws = wb.active - - ws["A1"] = "Up Move" - ws["B1"] = up - ws["A2"] = "Down Move" - ws["B2"] = 1 / up - ws["D1"] = "Prob Up" - ws["E1"] = prob_up - ws["D2"] = "Prob Down" - ws["E2"] = 1 - prob_up - ws["D3"] = "Discount" - ws["E3"] = discount - ws["A4"] = "Binomial Tree for Underlying Values" - for i, _ in enumerate(und_vals): - for j, _ in enumerate(und_vals[i]): - ws[f"{opts[i]}{j+5}"] = und_vals[i][j] - - ws[f"A{days+7}"] = "Binomial Tree for Option Values" - for i, _ in enumerate(opt_vals): - for j, _ in enumerate(opt_vals[i]): - ws[f"{opts[i]}{j+8+days}"] = opt_vals[i][j] - - trypath = str( - MISCELLANEOUS_DIRECTORY - / "exports" - / "stocks" - / "options" - / f"{symbol} {datetime.now()}.xlsx" - ) - wb.save(trypath) - console.print( - f"Analysis ran for {symbol}\nPlease look in {trypath} for the file.\n" - ) - - -@log_start_end(log=logger) -def show_binom( - symbol: str, - expiry: str, - strike: float = 0, - put: bool = False, - europe: bool = False, - export: str = "", - plot: bool = False, - vol: Optional[float] = None, -) -> None: - """Get binomial pricing for option - - Parameters - ---------- - symbol : str - The ticker symbol of the option's underlying asset - expiry : str - The expiration for the option - strike : float - The strike price for the option - put : bool - Value a put instead of a call - europe : bool - Value a European option instead of an American option - export : str - Export the options data to an excel spreadsheet - plot : bool - Show a graph of expected ending prices - vol : float - The annualized volatility for the underlying asset - """ - fig = OpenBBFigure() - - up, prob_up, discount, und_vals, opt_vals, days = yfinance_model.get_binom( - symbol, expiry, strike, put, europe, vol - ) - - if plot or fig.is_image_export(export): - fig = plot_expected_prices(und_vals, prob_up, symbol, expiry, True) - export_data( - export, - os.path.dirname(os.path.abspath(__file__)), - "binomial", - figure=fig, - ) - - if export: - export_binomial_calcs(up, prob_up, discount, und_vals, opt_vals, days, symbol) - - option = "put" if put else "call" - console.print( - f"{symbol} {option} at ${strike:.2f} expiring on {expiry} is worth ${opt_vals[0][0]:.2f}\n" - ) - - @log_start_end(log=logger) def display_vol_surface( symbol: str, diff --git a/openbb_terminal/stocks/stocks_controller.py b/openbb_terminal/stocks/stocks_controller.py index fb4738f9d0e..e590808696b 100644 --- a/openbb_terminal/stocks/stocks_controller.py +++ b/openbb_terminal/stocks/stocks_controller.py @@ -90,8 +90,6 @@ class StocksController(StockBaseController): if session and get_current_user().preferences.USE_PROMPT_TOOLKIT: choices: dict = self.choices_default - choices["load"]["--file"] = {c: None for c in self.USER_IMPORT_FILES} - choices["load"]["-f"] = "--file" self.completer = NestedCompleter.from_nested_dict(choices) def print_help(self): diff --git a/openbb_terminal/stocks/stocks_view.py b/openbb_terminal/stocks/stocks_view.py index 9719e320d88..5e0e4af3a1f 100644 --- a/openbb_terminal/stocks/stocks_view.py +++ b/openbb_terminal/stocks/stocks_view.py @@ -28,15 +28,15 @@ def display_quote(symbol: str, export: str = "", sheet_name: Optional[str] = Non quote = stocks_model.get_quote(symbol) if quote.empty: console.print("[red]Data not found[/red]\n") - else: - print_rich_table( - quote, - headers=["Value"], - title=f"{symbol.upper()} Quote", - index_name="Info", - show_index=True, - export=bool(export), - ) + return + print_rich_table( + quote, + headers=["Value"], + title=f"{symbol.upper()} Quote", + index_name="Info", + show_index=True, + export=bool(export), + ) export_data( export, diff --git a/openbb_terminal/stocks/technical_analysis/ta_controller.py b/openbb_terminal/stocks/technical_analysis/ta_controller.py index 0c267d12db5..4d7e3e92838 100644 --- a/openbb_terminal/stocks/technical_analysis/ta_controller.py +++ b/openbb_terminal/stocks/technical_analysis/ta_controller.py @@ -137,7 +137,6 @@ class TechnicalAnalysisController(StockBaseController): mt.add_raw("\n") mt.add_cmd("recom") mt.add_cmd("summary") - mt.add_cmd("tv") mt.add_cmd("view") mt.add_raw("\n") mt.add_info("_overlap_") diff --git a/openbb_terminal/terminal_helper.py b/openbb_terminal/terminal_helper.py index af0aad54e24..2f5d1001f61 100644 --- a/openbb_terminal/terminal_helper.py +++ b/openbb_terminal/terminal_helper.py @@ -6,6 +6,7 @@ import logging import os import subprocess # nosec import sys +import webbrowser # IMPORTATION STANDARD from contextlib import contextmanager @@ -24,8 +25,11 @@ from openbb_terminal.config_terminal import LOGGING_COMMIT_HASH, VERSION # IMPORTATION INTERNAL from openbb_terminal.core.config.paths import SETTINGS_ENV_FILE from openbb_terminal.core.plots.backend import plots_backend -from openbb_terminal.core.session.current_user import get_current_user -from openbb_terminal.core.session.preferences_handler import set_preference +from openbb_terminal.core.session.current_user import ( + get_current_user, + set_preference, +) +from openbb_terminal.core.session.env_handler import write_to_dotenv from openbb_terminal.helper_funcs import request from openbb_terminal.rich_config import console @@ -125,60 +129,60 @@ def update_terminal(): def open_openbb_documentation( - path, url="https://docs.openbb.co/terminal", command=None, arg_type="" + path, url="http://localhost/app/terminal", command=None, arg_type="" ): """Opens the documentation page based on your current location within the terminal. Make exceptions for menus that are considered 'common' by adjusting the path accordingly.""" if path == "/" and command is None: - path = "/" + path = "/how-to" command = "" elif "keys" in path: - path = "/quickstart/api-keys" + path = "/guides?full=1&path=/quickstart/api-keys" command = "" elif "settings" in path: - path = "/usage/guides/customizing-the-terminal" + path = "/guides?path=/advanced/customizing-the-terminal" command = "" elif "featflags" in path: - path = "/usage/guides/customizing-the-terminal" + path = "/guides?path=/advanced/customizing-the-terminal" command = "" elif "sources" in path: - path = "/usage/guides/changing-sources" + path = "/guides?path=/advanced/changing-sources" command = "" elif "params" in path: - path = "/usage/intros/portfolio/po" + path = "/guides?path=/intros/portfolio/po" command = "" else: if arg_type == "command": # user passed a command name - path = f"/reference/{path}" + path = f"/reference?path={path}" elif arg_type == "menu": # user passed a menu name if command in ["ta", "ba", "qa"]: menu = path.split("/")[-2] - path = f"/usage/intros/common/{menu}" + path = f"/guides?path=/intros/common/{menu}" elif command == "forecast": command = "" - path = "/usage/intros/forecast" + path = "/guides?path=/intros/forecast" else: - path = f"/usage/intros/{path}" + path = f"/guides?path=/intros/{path}" else: # user didn't pass argument and is in a menu menu = path.split("/")[-2] path = ( - f"/usage/intros/common/{menu}" + f"/guides?path=/intros/common/{menu}" if menu in ["ta", "ba", "qa"] - else f"/usage/intros/{path}" + else f"/guides?path=/intros/{path}" ) if command: if command == "keys": - path = "/quickstart/api-keys" + path = "/guides?full=1&path=/quickstart/api-keys" command = "" elif "settings" in path or "featflags" in path: - path = "/usage/guides/customizing-the-terminal" + path = "/guides?path=/advanced/customizing-the-terminal" command = "" elif "sources" in path: - path = "/usage/guides/changing-sources" + path = "/guides?path=/advanced/changing-sources" command = "" elif command in ["record", "stop", "exe"]: - path = "/usage/guides/scripts-and-routines" + path = "/guides?path=/advanced/scripts-and-routines" command = "" elif command in [ "intro", @@ -192,7 +196,7 @@ def open_openbb_documentation( path = "" command = "" elif command in ["ta", "ba", "qa"]: - path = f"/usage/intros/common/{command}" + path = f"/guides?path=/intros/common/{command}" command = "" path += command @@ -202,7 +206,7 @@ def open_openbb_documentation( if full_url[-1] == "/": full_url = full_url[:-1] - plots_backend().send_url(full_url) + webbrowser.open(full_url) def hide_splashscreen(): @@ -412,5 +416,6 @@ def first_time_user() -> bool: """ if SETTINGS_ENV_FILE.stat().st_size == 0: set_preference("PREVIOUS_USE", True) + write_to_dotenv("OPENBB_PREVIOUS_USE", "True") return True return False diff --git a/poetry.lock b/poetry.lock index af8a1d8b660..9067abb3436 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.4.0 and should not be changed by hand. +# This file is automatically @generated by Poetry and should not be changed by hand. [[package]] name = "absl-py" @@ -643,25 +643,26 @@ tzdata = ["tzdata"] [[package]] name = "bandit" -version = "1.7.4" +version = "1.7.5" description = "Security oriented static analyser for python code." category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "bandit-1.7.4-py3-none-any.whl", hash = "sha256:412d3f259dab4077d0e7f0c11f50f650cc7d10db905d98f6520a95a18049658a"}, - {file = "bandit-1.7.4.tar.gz", hash = "sha256:2d63a8c573417bae338962d4b9b06fbc6080f74ecd955a092849e1e65c717bd2"}, + {file = "bandit-1.7.5-py3-none-any.whl", hash = "sha256:75665181dc1e0096369112541a056c59d1c5f66f9bb74a8d686c3c362b83f549"}, + {file = "bandit-1.7.5.tar.gz", hash = "sha256:bdfc739baa03b880c2d15d0431b31c658ffc348e907fe197e54e0389dd59e11e"}, ] [package.dependencies] colorama = {version = ">=0.3.9", markers = "platform_system == \"Windows\""} GitPython = ">=1.0.1" PyYAML = ">=5.3.1" +rich = "*" stevedore = ">=1.20.0" [package.extras] -test = ["beautifulsoup4 (>=4.8.0)", "coverage (>=4.5.4)", "fixtures (>=3.0.0)", "flake8 (>=4.0.0)", "pylint (==1.9.4)", "stestr (>=2.5.0)", "testscenarios (>=0.5.0)", "testtools (>=2.3.0)", "toml"] -toml = ["toml"] +test = ["beautifulsoup4 (>=4.8.0)", "coverage (>=4.5.4)", "fixtures (>=3.0.0)", "flake8 (>=4.0.0)", "pylint (==1.9.4)", "stestr (>=2.5.0)", "testscenarios (>=0.5.0)", "testtools (>=2.3.0)", "tomli (>=1.1.0)"] +toml = ["tomli (>=1.1.0)"] yaml = ["PyYAML"] [[package]] @@ -1018,14 +1019,14 @@ exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} [[package]] name = "ccxt" -version = "2.8.78" +version = "2.9.16" description = "A JavaScript / Python / PHP cryptocurrency trading library with support for 130+ exchanges" category = "main" optional = false python-versions = "*" files = [ - {file = "ccxt-2.8.78-py2.py3-none-any.whl", hash = "sha256:4c00c0b053001e71128212e4ea6f1a08efab5c191602f77d4c62cf5af307f15c"}, - {file = "ccxt-2.8.78.tar.gz", hash = "sha256:d175b1a1f03f01cdcadc32c363fae70007847ec3ceff2396177db9c52c067f2f"}, + {file = "ccxt-2.9.16-py2.py3-none-any.whl", hash = "sha256:f12cf0b31f4f987dec4cb6f9afac88e428c69de6555a6af57e8b4d2dd433acea"}, + {file = "ccxt-2.9.16.tar.gz", hash = "sha256:5d5f3979db20473fc3a70b109684f07fb0c39e0856edcd7f02723d02e4364580"}, ] [package.dependencies] @@ -1144,100 +1145,87 @@ files = [ [[package]] name = "charset-normalizer" -version = "3.0.1" +version = "3.1.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." category = "main" optional = false -python-versions = "*" +python-versions = ">=3.7.0" files = [ - {file = "charset-normalizer-3.0.1.tar.gz", hash = "sha256:ebea339af930f8ca5d7a699b921106c6e29c617fe9606fa7baa043c1cdae326f"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:88600c72ef7587fe1708fd242b385b6ed4b8904976d5da0893e31df8b3480cb6"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c75ffc45f25324e68ab238cb4b5c0a38cd1c3d7f1fb1f72b5541de469e2247db"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:db72b07027db150f468fbada4d85b3b2729a3db39178abf5c543b784c1254539"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62595ab75873d50d57323a91dd03e6966eb79c41fa834b7a1661ed043b2d404d"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ff6f3db31555657f3163b15a6b7c6938d08df7adbfc9dd13d9d19edad678f1e8"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:772b87914ff1152b92a197ef4ea40efe27a378606c39446ded52c8f80f79702e"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70990b9c51340e4044cfc394a81f614f3f90d41397104d226f21e66de668730d"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:292d5e8ba896bbfd6334b096e34bffb56161c81408d6d036a7dfa6929cff8783"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:2edb64ee7bf1ed524a1da60cdcd2e1f6e2b4f66ef7c077680739f1641f62f555"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:31a9ddf4718d10ae04d9b18801bd776693487cbb57d74cc3458a7673f6f34639"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:44ba614de5361b3e5278e1241fda3dc1838deed864b50a10d7ce92983797fa76"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:12db3b2c533c23ab812c2b25934f60383361f8a376ae272665f8e48b88e8e1c6"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c512accbd6ff0270939b9ac214b84fb5ada5f0409c44298361b2f5e13f9aed9e"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-win32.whl", hash = "sha256:502218f52498a36d6bf5ea77081844017bf7982cdbe521ad85e64cabee1b608b"}, - {file = "charset_normalizer-3.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:601f36512f9e28f029d9481bdaf8e89e5148ac5d89cffd3b05cd533eeb423b59"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0298eafff88c99982a4cf66ba2efa1128e4ddaca0b05eec4c456bbc7db691d8d"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a8d0fc946c784ff7f7c3742310cc8a57c5c6dc31631269876a88b809dbeff3d3"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:87701167f2a5c930b403e9756fab1d31d4d4da52856143b609e30a1ce7160f3c"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14e76c0f23218b8f46c4d87018ca2e441535aed3632ca134b10239dfb6dadd6b"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0c0a590235ccd933d9892c627dec5bc7511ce6ad6c1011fdf5b11363022746c1"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c7fe7afa480e3e82eed58e0ca89f751cd14d767638e2550c77a92a9e749c317"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79909e27e8e4fcc9db4addea88aa63f6423ebb171db091fb4373e3312cb6d603"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ac7b6a045b814cf0c47f3623d21ebd88b3e8cf216a14790b455ea7ff0135d18"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:72966d1b297c741541ca8cf1223ff262a6febe52481af742036a0b296e35fa5a"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:f9d0c5c045a3ca9bedfc35dca8526798eb91a07aa7a2c0fee134c6c6f321cbd7"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:5995f0164fa7df59db4746112fec3f49c461dd6b31b841873443bdb077c13cfc"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4a8fcf28c05c1f6d7e177a9a46a1c52798bfe2ad80681d275b10dcf317deaf0b"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:761e8904c07ad053d285670f36dd94e1b6ab7f16ce62b9805c475b7aa1cffde6"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-win32.whl", hash = "sha256:71140351489970dfe5e60fc621ada3e0f41104a5eddaca47a7acb3c1b851d6d3"}, - {file = "charset_normalizer-3.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:9ab77acb98eba3fd2a85cd160851816bfce6871d944d885febf012713f06659c"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:84c3990934bae40ea69a82034912ffe5a62c60bbf6ec5bc9691419641d7d5c9a"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74292fc76c905c0ef095fe11e188a32ebd03bc38f3f3e9bcb85e4e6db177b7ea"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c95a03c79bbe30eec3ec2b7f076074f4281526724c8685a42872974ef4d36b72"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4c39b0e3eac288fedc2b43055cfc2ca7a60362d0e5e87a637beac5d801ef478"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df2c707231459e8a4028eabcd3cfc827befd635b3ef72eada84ab13b52e1574d"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93ad6d87ac18e2a90b0fe89df7c65263b9a99a0eb98f0a3d2e079f12a0735837"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:59e5686dd847347e55dffcc191a96622f016bc0ad89105e24c14e0d6305acbc6"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:cd6056167405314a4dc3c173943f11249fa0f1b204f8b51ed4bde1a9cd1834dc"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:083c8d17153ecb403e5e1eb76a7ef4babfc2c48d58899c98fcaa04833e7a2f9a"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:f5057856d21e7586765171eac8b9fc3f7d44ef39425f85dbcccb13b3ebea806c"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:7eb33a30d75562222b64f569c642ff3dc6689e09adda43a082208397f016c39a"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-win32.whl", hash = "sha256:95dea361dd73757c6f1c0a1480ac499952c16ac83f7f5f4f84f0658a01b8ef41"}, - {file = "charset_normalizer-3.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:eaa379fcd227ca235d04152ca6704c7cb55564116f8bc52545ff357628e10602"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3e45867f1f2ab0711d60c6c71746ac53537f1684baa699f4f668d4c6f6ce8e14"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cadaeaba78750d58d3cc6ac4d1fd867da6fc73c88156b7a3212a3cd4819d679d"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:911d8a40b2bef5b8bbae2e36a0b103f142ac53557ab421dc16ac4aafee6f53dc"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:503e65837c71b875ecdd733877d852adbc465bd82c768a067badd953bf1bc5a3"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a60332922359f920193b1d4826953c507a877b523b2395ad7bc716ddd386d866"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:16a8663d6e281208d78806dbe14ee9903715361cf81f6d4309944e4d1e59ac5b"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:a16418ecf1329f71df119e8a65f3aa68004a3f9383821edcb20f0702934d8087"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:9d9153257a3f70d5f69edf2325357251ed20f772b12e593f3b3377b5f78e7ef8"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:02a51034802cbf38db3f89c66fb5d2ec57e6fe7ef2f4a44d070a593c3688667b"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:2e396d70bc4ef5325b72b593a72c8979999aa52fb8bcf03f701c1b03e1166918"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:11b53acf2411c3b09e6af37e4b9005cba376c872503c8f28218c7243582df45d"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-win32.whl", hash = "sha256:0bf2dae5291758b6f84cf923bfaa285632816007db0330002fa1de38bfcb7154"}, - {file = "charset_normalizer-3.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:2c03cc56021a4bd59be889c2b9257dae13bf55041a3372d3295416f86b295fb5"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:024e606be3ed92216e2b6952ed859d86b4cfa52cd5bc5f050e7dc28f9b43ec42"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4b0d02d7102dd0f997580b51edc4cebcf2ab6397a7edf89f1c73b586c614272c"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:358a7c4cb8ba9b46c453b1dd8d9e431452d5249072e4f56cfda3149f6ab1405e"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81d6741ab457d14fdedc215516665050f3822d3e56508921cc7239f8c8e66a58"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8b8af03d2e37866d023ad0ddea594edefc31e827fee64f8de5611a1dbc373174"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9cf4e8ad252f7c38dd1f676b46514f92dc0ebeb0db5552f5f403509705e24753"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e696f0dd336161fca9adbb846875d40752e6eba585843c768935ba5c9960722b"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c22d3fe05ce11d3671297dc8973267daa0f938b93ec716e12e0f6dee81591dc1"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:109487860ef6a328f3eec66f2bf78b0b72400280d8f8ea05f69c51644ba6521a"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:37f8febc8ec50c14f3ec9637505f28e58d4f66752207ea177c1d67df25da5aed"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:f97e83fa6c25693c7a35de154681fcc257c1c41b38beb0304b9c4d2d9e164479"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a152f5f33d64a6be73f1d30c9cc82dfc73cec6477ec268e7c6e4c7d23c2d2291"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:39049da0ffb96c8cbb65cbf5c5f3ca3168990adf3551bd1dee10c48fce8ae820"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-win32.whl", hash = "sha256:4457ea6774b5611f4bed5eaa5df55f70abde42364d498c5134b7ef4c6958e20e"}, - {file = "charset_normalizer-3.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:e62164b50f84e20601c1ff8eb55620d2ad25fb81b59e3cd776a1902527a788af"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8eade758719add78ec36dc13201483f8e9b5d940329285edcd5f70c0a9edbd7f"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8499ca8f4502af841f68135133d8258f7b32a53a1d594aa98cc52013fff55678"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3fc1c4a2ffd64890aebdb3f97e1278b0cc72579a08ca4de8cd2c04799a3a22be"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00d3ffdaafe92a5dc603cb9bd5111aaa36dfa187c8285c543be562e61b755f6b"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c2ac1b08635a8cd4e0cbeaf6f5e922085908d48eb05d44c5ae9eabab148512ca"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f6f45710b4459401609ebebdbcfb34515da4fc2aa886f95107f556ac69a9147e"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ae1de54a77dc0d6d5fcf623290af4266412a7c4be0b1ff7444394f03f5c54e3"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3b590df687e3c5ee0deef9fc8c547d81986d9a1b56073d82de008744452d6541"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab5de034a886f616a5668aa5d098af2b5385ed70142090e2a31bcbd0af0fdb3d"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9cb3032517f1627cc012dbc80a8ec976ae76d93ea2b5feaa9d2a5b8882597579"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:608862a7bf6957f2333fc54ab4399e405baad0163dc9f8d99cb236816db169d4"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0f438ae3532723fb6ead77e7c604be7c8374094ef4ee2c5e03a3a17f1fca256c"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:356541bf4381fa35856dafa6a965916e54bed415ad8a24ee6de6e37deccf2786"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-win32.whl", hash = "sha256:39cf9ed17fe3b1bc81f33c9ceb6ce67683ee7526e65fde1447c772afc54a1bb8"}, - {file = "charset_normalizer-3.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:0a11e971ed097d24c534c037d298ad32c6ce81a45736d31e0ff0ad37ab437d59"}, - {file = "charset_normalizer-3.0.1-py3-none-any.whl", hash = "sha256:7e189e2e1d3ed2f4aebabd2d5b0f931e883676e51c7624826e0a4e5fe8a0bf24"}, + {file = "charset-normalizer-3.1.0.tar.gz", hash = "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-win32.whl", hash = "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-win32.whl", hash = "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-win32.whl", hash = "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-win32.whl", hash = "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-win32.whl", hash = "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b"}, + {file = "charset_normalizer-3.1.0-py3-none-any.whl", hash = "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d"}, ] [[package]] @@ -1291,20 +1279,21 @@ tests = ["flake8", "mypy", "pylint", "pytest", "pytest-cov", "pytest-order", "tq [[package]] name = "codespell" -version = "2.2.2" +version = "2.2.4" description = "Codespell" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "codespell-2.2.2-py3-none-any.whl", hash = "sha256:87dfcd9bdc9b3cb8b067b37f0af22044d7a84e28174adfc8eaa203056b7f9ecc"}, - {file = "codespell-2.2.2.tar.gz", hash = "sha256:c4d00c02b5a2a55661f00d5b4b3b5a710fa803ced9a9d7e45438268b099c319c"}, + {file = "codespell-2.2.4-py3-none-any.whl", hash = "sha256:7d984b8130108e6f82524b7d09f8b7bf2fb1e398c5d4b37d9e2bd310145b3e29"}, + {file = "codespell-2.2.4.tar.gz", hash = "sha256:0b4620473c257d9cde1ff8998b26b2bb209a35c2b7489f5dc3436024298ce83a"}, ] [package.extras] -dev = ["check-manifest", "flake8", "pytest", "pytest-cov", "pytest-dependency", "tomli"] +dev = ["Pygments", "build", "chardet", "flake8", "flake8-pyproject", "pytest", "pytest-cov", "pytest-dependency", "tomli"] hard-encoding-detection = ["chardet"] toml = ["tomli"] +types = ["chardet (>=5.1.0)", "mypy", "pytest", "pytest-cov", "pytest-dependency"] [[package]] name = "colorama" @@ -1448,63 +1437,63 @@ tests = ["coverage"] [[package]] name = "coverage" -version = "7.2.1" +version = "7.2.2" description = "Code coverage measurement for Python" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "coverage-7.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:49567ec91fc5e0b15356da07a2feabb421d62f52a9fff4b1ec40e9e19772f5f8"}, - {file = "coverage-7.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d2ef6cae70168815ed91388948b5f4fcc69681480a0061114db737f957719f03"}, - {file = "coverage-7.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3004765bca3acd9e015794e5c2f0c9a05587f5e698127ff95e9cfba0d3f29339"}, - {file = "coverage-7.2.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cca7c0b7f5881dfe0291ef09ba7bb1582cb92ab0aeffd8afb00c700bf692415a"}, - {file = "coverage-7.2.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2167d116309f564af56f9aa5e75ef710ef871c5f9b313a83050035097b56820"}, - {file = "coverage-7.2.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:cb5f152fb14857cbe7f3e8c9a5d98979c4c66319a33cad6e617f0067c9accdc4"}, - {file = "coverage-7.2.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:87dc37f16fb5e3a28429e094145bf7c1753e32bb50f662722e378c5851f7fdc6"}, - {file = "coverage-7.2.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e191a63a05851f8bce77bc875e75457f9b01d42843f8bd7feed2fc26bbe60833"}, - {file = "coverage-7.2.1-cp310-cp310-win32.whl", hash = "sha256:e3ea04b23b114572b98a88c85379e9e9ae031272ba1fb9b532aa934c621626d4"}, - {file = "coverage-7.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:0cf557827be7eca1c38a2480484d706693e7bb1929e129785fe59ec155a59de6"}, - {file = "coverage-7.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:570c21a29493b350f591a4b04c158ce1601e8d18bdcd21db136fbb135d75efa6"}, - {file = "coverage-7.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9e872b082b32065ac2834149dc0adc2a2e6d8203080501e1e3c3c77851b466f9"}, - {file = "coverage-7.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fac6343bae03b176e9b58104a9810df3cdccd5cfed19f99adfa807ffbf43cf9b"}, - {file = "coverage-7.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abacd0a738e71b20e224861bc87e819ef46fedba2fb01bc1af83dfd122e9c319"}, - {file = "coverage-7.2.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9256d4c60c4bbfec92721b51579c50f9e5062c21c12bec56b55292464873508"}, - {file = "coverage-7.2.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:80559eaf6c15ce3da10edb7977a1548b393db36cbc6cf417633eca05d84dd1ed"}, - {file = "coverage-7.2.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:0bd7e628f6c3ec4e7d2d24ec0e50aae4e5ae95ea644e849d92ae4805650b4c4e"}, - {file = "coverage-7.2.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:09643fb0df8e29f7417adc3f40aaf379d071ee8f0350ab290517c7004f05360b"}, - {file = "coverage-7.2.1-cp311-cp311-win32.whl", hash = "sha256:1b7fb13850ecb29b62a447ac3516c777b0e7a09ecb0f4bb6718a8654c87dfc80"}, - {file = "coverage-7.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:617a94ada56bbfe547aa8d1b1a2b8299e2ec1ba14aac1d4b26a9f7d6158e1273"}, - {file = "coverage-7.2.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8649371570551d2fd7dee22cfbf0b61f1747cdfb2b7587bb551e4beaaa44cb97"}, - {file = "coverage-7.2.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d2b9b5e70a21474c105a133ba227c61bc95f2ac3b66861143ce39a5ea4b3f84"}, - {file = "coverage-7.2.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae82c988954722fa07ec5045c57b6d55bc1a0890defb57cf4a712ced65b26ddd"}, - {file = "coverage-7.2.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:861cc85dfbf55a7a768443d90a07e0ac5207704a9f97a8eb753292a7fcbdfcfc"}, - {file = "coverage-7.2.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0339dc3237c0d31c3b574f19c57985fcbe494280153bbcad33f2cdf469f4ac3e"}, - {file = "coverage-7.2.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:5928b85416a388dd557ddc006425b0c37e8468bd1c3dc118c1a3de42f59e2a54"}, - {file = "coverage-7.2.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8d3843ca645f62c426c3d272902b9de90558e9886f15ddf5efe757b12dd376f5"}, - {file = "coverage-7.2.1-cp37-cp37m-win32.whl", hash = "sha256:6a034480e9ebd4e83d1aa0453fd78986414b5d237aea89a8fdc35d330aa13bae"}, - {file = "coverage-7.2.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6fce673f79a0e017a4dc35e18dc7bb90bf6d307c67a11ad5e61ca8d42b87cbff"}, - {file = "coverage-7.2.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7f099da6958ddfa2ed84bddea7515cb248583292e16bb9231d151cd528eab657"}, - {file = "coverage-7.2.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:97a3189e019d27e914ecf5c5247ea9f13261d22c3bb0cfcfd2a9b179bb36f8b1"}, - {file = "coverage-7.2.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a81dbcf6c6c877986083d00b834ac1e84b375220207a059ad45d12f6e518a4e3"}, - {file = "coverage-7.2.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78d2c3dde4c0b9be4b02067185136b7ee4681978228ad5ec1278fa74f5ca3e99"}, - {file = "coverage-7.2.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a209d512d157379cc9ab697cbdbb4cfd18daa3e7eebaa84c3d20b6af0037384"}, - {file = "coverage-7.2.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f3d07edb912a978915576a776756069dede66d012baa503022d3a0adba1b6afa"}, - {file = "coverage-7.2.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8dca3c1706670297851bca1acff9618455122246bdae623be31eca744ade05ec"}, - {file = "coverage-7.2.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b1991a6d64231a3e5bbe3099fb0dd7c9aeaa4275ad0e0aeff4cb9ef885c62ba2"}, - {file = "coverage-7.2.1-cp38-cp38-win32.whl", hash = "sha256:22c308bc508372576ffa3d2dbc4824bb70d28eeb4fcd79d4d1aed663a06630d0"}, - {file = "coverage-7.2.1-cp38-cp38-win_amd64.whl", hash = "sha256:b0c0d46de5dd97f6c2d1b560bf0fcf0215658097b604f1840365296302a9d1fb"}, - {file = "coverage-7.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4dd34a935de268a133e4741827ae951283a28c0125ddcdbcbba41c4b98f2dfef"}, - {file = "coverage-7.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0f8318ed0f3c376cfad8d3520f496946977abde080439d6689d7799791457454"}, - {file = "coverage-7.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:834c2172edff5a08d78e2f53cf5e7164aacabeb66b369f76e7bb367ca4e2d993"}, - {file = "coverage-7.2.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e4d70c853f0546855f027890b77854508bdb4d6a81242a9d804482e667fff6e6"}, - {file = "coverage-7.2.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a6450da4c7afc4534305b2b7d8650131e130610cea448ff240b6ab73d7eab63"}, - {file = "coverage-7.2.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:99f4dd81b2bb8fc67c3da68b1f5ee1650aca06faa585cbc6818dbf67893c6d58"}, - {file = "coverage-7.2.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bdd3f2f285ddcf2e75174248b2406189261a79e7fedee2ceeadc76219b6faa0e"}, - {file = "coverage-7.2.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f29351393eb05e6326f044a7b45ed8e38cb4dcc38570d12791f271399dc41431"}, - {file = "coverage-7.2.1-cp39-cp39-win32.whl", hash = "sha256:e2b50ebc2b6121edf352336d503357321b9d8738bb7a72d06fc56153fd3f4cd8"}, - {file = "coverage-7.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:bd5a12239c0006252244f94863f1c518ac256160cd316ea5c47fb1a11b25889a"}, - {file = "coverage-7.2.1-pp37.pp38.pp39-none-any.whl", hash = "sha256:436313d129db7cf5b4ac355dd2bd3f7c7e5294af077b090b85de75f8458b8616"}, - {file = "coverage-7.2.1.tar.gz", hash = "sha256:c77f2a9093ccf329dd523a9b2b3c854c20d2a3d968b6def3b820272ca6732242"}, + {file = "coverage-7.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c90e73bdecb7b0d1cea65a08cb41e9d672ac6d7995603d6465ed4914b98b9ad7"}, + {file = "coverage-7.2.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e2926b8abedf750c2ecf5035c07515770944acf02e1c46ab08f6348d24c5f94d"}, + {file = "coverage-7.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57b77b9099f172804e695a40ebaa374f79e4fb8b92f3e167f66facbf92e8e7f5"}, + {file = "coverage-7.2.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:efe1c0adad110bf0ad7fb59f833880e489a61e39d699d37249bdf42f80590169"}, + {file = "coverage-7.2.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2199988e0bc8325d941b209f4fd1c6fa007024b1442c5576f1a32ca2e48941e6"}, + {file = "coverage-7.2.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:81f63e0fb74effd5be736cfe07d710307cc0a3ccb8f4741f7f053c057615a137"}, + {file = "coverage-7.2.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:186e0fc9cf497365036d51d4d2ab76113fb74f729bd25da0975daab2e107fd90"}, + {file = "coverage-7.2.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:420f94a35e3e00a2b43ad5740f935358e24478354ce41c99407cddd283be00d2"}, + {file = "coverage-7.2.2-cp310-cp310-win32.whl", hash = "sha256:38004671848b5745bb05d4d621526fca30cee164db42a1f185615f39dc997292"}, + {file = "coverage-7.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:0ce383d5f56d0729d2dd40e53fe3afeb8f2237244b0975e1427bfb2cf0d32bab"}, + {file = "coverage-7.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3eb55b7b26389dd4f8ae911ba9bc8c027411163839dea4c8b8be54c4ee9ae10b"}, + {file = "coverage-7.2.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d2b96123a453a2d7f3995ddb9f28d01fd112319a7a4d5ca99796a7ff43f02af5"}, + {file = "coverage-7.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:299bc75cb2a41e6741b5e470b8c9fb78d931edbd0cd009c58e5c84de57c06731"}, + {file = "coverage-7.2.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5e1df45c23d4230e3d56d04414f9057eba501f78db60d4eeecfcb940501b08fd"}, + {file = "coverage-7.2.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:006ed5582e9cbc8115d2e22d6d2144a0725db542f654d9d4fda86793832f873d"}, + {file = "coverage-7.2.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d683d230b5774816e7d784d7ed8444f2a40e7a450e5720d58af593cb0b94a212"}, + {file = "coverage-7.2.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:8efb48fa743d1c1a65ee8787b5b552681610f06c40a40b7ef94a5b517d885c54"}, + {file = "coverage-7.2.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4c752d5264053a7cf2fe81c9e14f8a4fb261370a7bb344c2a011836a96fb3f57"}, + {file = "coverage-7.2.2-cp311-cp311-win32.whl", hash = "sha256:55272f33da9a5d7cccd3774aeca7a01e500a614eaea2a77091e9be000ecd401d"}, + {file = "coverage-7.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:92ebc1619650409da324d001b3a36f14f63644c7f0a588e331f3b0f67491f512"}, + {file = "coverage-7.2.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5afdad4cc4cc199fdf3e18088812edcf8f4c5a3c8e6cb69127513ad4cb7471a9"}, + {file = "coverage-7.2.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0484d9dd1e6f481b24070c87561c8d7151bdd8b044c93ac99faafd01f695c78e"}, + {file = "coverage-7.2.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d530191aa9c66ab4f190be8ac8cc7cfd8f4f3217da379606f3dd4e3d83feba69"}, + {file = "coverage-7.2.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ac0f522c3b6109c4b764ffec71bf04ebc0523e926ca7cbe6c5ac88f84faced0"}, + {file = "coverage-7.2.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ba279aae162b20444881fc3ed4e4f934c1cf8620f3dab3b531480cf602c76b7f"}, + {file = "coverage-7.2.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:53d0fd4c17175aded9c633e319360d41a1f3c6e352ba94edcb0fa5167e2bad67"}, + {file = "coverage-7.2.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c99cb7c26a3039a8a4ee3ca1efdde471e61b4837108847fb7d5be7789ed8fd9"}, + {file = "coverage-7.2.2-cp37-cp37m-win32.whl", hash = "sha256:5cc0783844c84af2522e3a99b9b761a979a3ef10fb87fc4048d1ee174e18a7d8"}, + {file = "coverage-7.2.2-cp37-cp37m-win_amd64.whl", hash = "sha256:817295f06eacdc8623dc4df7d8b49cea65925030d4e1e2a7c7218380c0072c25"}, + {file = "coverage-7.2.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6146910231ece63facfc5984234ad1b06a36cecc9fd0c028e59ac7c9b18c38c6"}, + {file = "coverage-7.2.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:387fb46cb8e53ba7304d80aadca5dca84a2fbf6fe3faf6951d8cf2d46485d1e5"}, + {file = "coverage-7.2.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:046936ab032a2810dcaafd39cc4ef6dd295df1a7cbead08fe996d4765fca9fe4"}, + {file = "coverage-7.2.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e627dee428a176ffb13697a2c4318d3f60b2ccdde3acdc9b3f304206ec130ccd"}, + {file = "coverage-7.2.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4fa54fb483decc45f94011898727802309a109d89446a3c76387d016057d2c84"}, + {file = "coverage-7.2.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3668291b50b69a0c1ef9f462c7df2c235da3c4073f49543b01e7eb1dee7dd540"}, + {file = "coverage-7.2.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:7c20b731211261dc9739bbe080c579a1835b0c2d9b274e5fcd903c3a7821cf88"}, + {file = "coverage-7.2.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5764e1f7471cb8f64b8cda0554f3d4c4085ae4b417bfeab236799863703e5de2"}, + {file = "coverage-7.2.2-cp38-cp38-win32.whl", hash = "sha256:4f01911c010122f49a3e9bdc730eccc66f9b72bd410a3a9d3cb8448bb50d65d3"}, + {file = "coverage-7.2.2-cp38-cp38-win_amd64.whl", hash = "sha256:c448b5c9e3df5448a362208b8d4b9ed85305528313fca1b479f14f9fe0d873b8"}, + {file = "coverage-7.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bfe7085783cda55e53510482fa7b5efc761fad1abe4d653b32710eb548ebdd2d"}, + {file = "coverage-7.2.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9d22e94e6dc86de981b1b684b342bec5e331401599ce652900ec59db52940005"}, + {file = "coverage-7.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:507e4720791977934bba016101579b8c500fb21c5fa3cd4cf256477331ddd988"}, + {file = "coverage-7.2.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bc4803779f0e4b06a2361f666e76f5c2e3715e8e379889d02251ec911befd149"}, + {file = "coverage-7.2.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db8c2c5ace167fd25ab5dd732714c51d4633f58bac21fb0ff63b0349f62755a8"}, + {file = "coverage-7.2.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4f68ee32d7c4164f1e2c8797535a6d0a3733355f5861e0f667e37df2d4b07140"}, + {file = "coverage-7.2.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d52f0a114b6a58305b11a5cdecd42b2e7f1ec77eb20e2b33969d702feafdd016"}, + {file = "coverage-7.2.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:797aad79e7b6182cb49c08cc5d2f7aa7b2128133b0926060d0a8889ac43843be"}, + {file = "coverage-7.2.2-cp39-cp39-win32.whl", hash = "sha256:db45eec1dfccdadb179b0f9ca616872c6f700d23945ecc8f21bb105d74b1c5fc"}, + {file = "coverage-7.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:8dbe2647bf58d2c5a6c5bcc685f23b5f371909a5624e9f5cd51436d6a9f6c6ef"}, + {file = "coverage-7.2.2-pp37.pp38.pp39-none-any.whl", hash = "sha256:872d6ce1f5be73f05bea4df498c140b9e7ee5418bfa2cc8204e7f9b817caa968"}, + {file = "coverage-7.2.2.tar.gz", hash = "sha256:36dd42da34fe94ed98c39887b86db9d06777b1c8f860520e21126a75507024f2"}, ] [package.dependencies] @@ -1515,35 +1504,35 @@ toml = ["tomli"] [[package]] name = "cryptography" -version = "39.0.1" +version = "39.0.2" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." category = "main" optional = false python-versions = ">=3.6" files = [ - {file = "cryptography-39.0.1-cp36-abi3-macosx_10_12_universal2.whl", hash = "sha256:6687ef6d0a6497e2b58e7c5b852b53f62142cfa7cd1555795758934da363a965"}, - {file = "cryptography-39.0.1-cp36-abi3-macosx_10_12_x86_64.whl", hash = "sha256:706843b48f9a3f9b9911979761c91541e3d90db1ca905fd63fee540a217698bc"}, - {file = "cryptography-39.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:5d2d8b87a490bfcd407ed9d49093793d0f75198a35e6eb1a923ce1ee86c62b41"}, - {file = "cryptography-39.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83e17b26de248c33f3acffb922748151d71827d6021d98c70e6c1a25ddd78505"}, - {file = "cryptography-39.0.1-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e124352fd3db36a9d4a21c1aa27fd5d051e621845cb87fb851c08f4f75ce8be6"}, - {file = "cryptography-39.0.1-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:5aa67414fcdfa22cf052e640cb5ddc461924a045cacf325cd164e65312d99502"}, - {file = "cryptography-39.0.1-cp36-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:35f7c7d015d474f4011e859e93e789c87d21f6f4880ebdc29896a60403328f1f"}, - {file = "cryptography-39.0.1-cp36-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f24077a3b5298a5a06a8e0536e3ea9ec60e4c7ac486755e5fb6e6ea9b3500106"}, - {file = "cryptography-39.0.1-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:f0c64d1bd842ca2633e74a1a28033d139368ad959872533b1bab8c80e8240a0c"}, - {file = "cryptography-39.0.1-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:0f8da300b5c8af9f98111ffd512910bc792b4c77392a9523624680f7956a99d4"}, - {file = "cryptography-39.0.1-cp36-abi3-win32.whl", hash = "sha256:fe913f20024eb2cb2f323e42a64bdf2911bb9738a15dba7d3cce48151034e3a8"}, - {file = "cryptography-39.0.1-cp36-abi3-win_amd64.whl", hash = "sha256:ced4e447ae29ca194449a3f1ce132ded8fcab06971ef5f618605aacaa612beac"}, - {file = "cryptography-39.0.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:807ce09d4434881ca3a7594733669bd834f5b2c6d5c7e36f8c00f691887042ad"}, - {file = "cryptography-39.0.1-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c5caeb8188c24888c90b5108a441c106f7faa4c4c075a2bcae438c6e8ca73cef"}, - {file = "cryptography-39.0.1-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:4789d1e3e257965e960232345002262ede4d094d1a19f4d3b52e48d4d8f3b885"}, - {file = "cryptography-39.0.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:96f1157a7c08b5b189b16b47bc9db2332269d6680a196341bf30046330d15388"}, - {file = "cryptography-39.0.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e422abdec8b5fa8462aa016786680720d78bdce7a30c652b7fadf83a4ba35336"}, - {file = "cryptography-39.0.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:b0afd054cd42f3d213bf82c629efb1ee5f22eba35bf0eec88ea9ea7304f511a2"}, - {file = "cryptography-39.0.1-pp39-pypy39_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:6f8ba7f0328b79f08bdacc3e4e66fb4d7aab0c3584e0bd41328dce5262e26b2e"}, - {file = "cryptography-39.0.1-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:ef8b72fa70b348724ff1218267e7f7375b8de4e8194d1636ee60510aae104cd0"}, - {file = "cryptography-39.0.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:aec5a6c9864be7df2240c382740fcf3b96928c46604eaa7f3091f58b878c0bb6"}, - {file = "cryptography-39.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fdd188c8a6ef8769f148f88f859884507b954cc64db6b52f66ef199bb9ad660a"}, - {file = "cryptography-39.0.1.tar.gz", hash = "sha256:d1f6198ee6d9148405e49887803907fe8962a23e6c6f83ea7d98f1c0de375695"}, + {file = "cryptography-39.0.2-cp36-abi3-macosx_10_12_universal2.whl", hash = "sha256:2725672bb53bb92dc7b4150d233cd4b8c59615cd8288d495eaa86db00d4e5c06"}, + {file = "cryptography-39.0.2-cp36-abi3-macosx_10_12_x86_64.whl", hash = "sha256:23df8ca3f24699167daf3e23e51f7ba7334d504af63a94af468f468b975b7dd7"}, + {file = "cryptography-39.0.2-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:eb40fe69cfc6f5cdab9a5ebd022131ba21453cf7b8a7fd3631f45bbf52bed612"}, + {file = "cryptography-39.0.2-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc0521cce2c1d541634b19f3ac661d7a64f9555135e9d8af3980965be717fd4a"}, + {file = "cryptography-39.0.2-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffd394c7896ed7821a6d13b24657c6a34b6e2650bd84ae063cf11ccffa4f1a97"}, + {file = "cryptography-39.0.2-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:e8a0772016feeb106efd28d4a328e77dc2edae84dfbac06061319fdb669ff828"}, + {file = "cryptography-39.0.2-cp36-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:8f35c17bd4faed2bc7797d2a66cbb4f986242ce2e30340ab832e5d99ae60e011"}, + {file = "cryptography-39.0.2-cp36-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:b49a88ff802e1993b7f749b1eeb31134f03c8d5c956e3c125c75558955cda536"}, + {file = "cryptography-39.0.2-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:5f8c682e736513db7d04349b4f6693690170f95aac449c56f97415c6980edef5"}, + {file = "cryptography-39.0.2-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:d7d84a512a59f4412ca8549b01f94be4161c94efc598bf09d027d67826beddc0"}, + {file = "cryptography-39.0.2-cp36-abi3-win32.whl", hash = "sha256:c43ac224aabcbf83a947eeb8b17eaf1547bce3767ee2d70093b461f31729a480"}, + {file = "cryptography-39.0.2-cp36-abi3-win_amd64.whl", hash = "sha256:788b3921d763ee35dfdb04248d0e3de11e3ca8eb22e2e48fef880c42e1f3c8f9"}, + {file = "cryptography-39.0.2-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:d15809e0dbdad486f4ad0979753518f47980020b7a34e9fc56e8be4f60702fac"}, + {file = "cryptography-39.0.2-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:50cadb9b2f961757e712a9737ef33d89b8190c3ea34d0fb6675e00edbe35d074"}, + {file = "cryptography-39.0.2-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:103e8f7155f3ce2ffa0049fe60169878d47a4364b277906386f8de21c9234aa1"}, + {file = "cryptography-39.0.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:6236a9610c912b129610eb1a274bdc1350b5df834d124fa84729ebeaf7da42c3"}, + {file = "cryptography-39.0.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e944fe07b6f229f4c1a06a7ef906a19652bdd9fd54c761b0ff87e83ae7a30354"}, + {file = "cryptography-39.0.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:35d658536b0a4117c885728d1a7032bdc9a5974722ae298d6c533755a6ee3915"}, + {file = "cryptography-39.0.2-pp39-pypy39_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:30b1d1bfd00f6fc80d11300a29f1d8ab2b8d9febb6ed4a38a76880ec564fae84"}, + {file = "cryptography-39.0.2-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:e029b844c21116564b8b61216befabca4b500e6816fa9f0ba49527653cae2108"}, + {file = "cryptography-39.0.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:fa507318e427169ade4e9eccef39e9011cdc19534f55ca2f36ec3f388c1f70f3"}, + {file = "cryptography-39.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:8bc0008ef798231fac03fe7d26e82d601d15bd16f3afaad1c6113771566570f3"}, + {file = "cryptography-39.0.2.tar.gz", hash = "sha256:bc5b871e977c8ee5a1bbc42fa8d19bcc08baf0c51cbf1586b0e87a2694dde42f"}, ] [package.dependencies] @@ -1688,14 +1677,14 @@ files = [ [[package]] name = "dash" -version = "2.8.1" +version = "2.9.0" description = "A Python framework for building reactive web-apps. Developed by Plotly." category = "main" optional = true python-versions = ">=3.6" files = [ - {file = "dash-2.8.1-py3-none-any.whl", hash = "sha256:3a9eea30f83733df1b7631fc5248eb87445e7458394558d784c91d072b7f41aa"}, - {file = "dash-2.8.1.tar.gz", hash = "sha256:a71dd81d167fa5e0ad41f356a221357d92724ae84f9faedb6f7ffa1fddfd4969"}, + {file = "dash-2.9.0-py3-none-any.whl", hash = "sha256:f57507643d2e7f150a8067f3bbcabedaf5b33029b6a9a9915787e1526e74e460"}, + {file = "dash-2.9.0.tar.gz", hash = "sha256:d729fc6751e8e537dee700ced82255419789b8fe44226906be742ebe951e5906"}, ] [package.dependencies] @@ -1711,7 +1700,7 @@ ci = ["black (==21.6b0)", "black (==22.3.0)", "dash-dangerously-set-inner-html", compress = ["flask-compress"] dev = ["PyYAML (>=5.4.1)", "coloredlogs (>=15.0.1)", "fire (>=0.4.0)"] diskcache = ["diskcache (>=5.2.1)", "multiprocess (>=0.70.12)", "psutil (>=5.8.0)"] -testing = ["beautifulsoup4 (>=4.8.2)", "cryptography (<3.4)", "lxml (>=4.6.2)", "multiprocess (>=0.70.12)", "percy (>=2.0.2)", "psutil (>=5.8.0)", "pytest (>=6.0.2)", "requests[security] (>=2.21.0)", "selenium (>=3.141.0,<=4.2.0)", "waitress (>=1.4.4)"] +testing = ["beautifulsoup4 (>=4.8.2)", "cryptography (<3.4)", "dash-testing-stub (>=0.0.2)", "lxml (>=4.6.2)", "multiprocess (>=0.70.12)", "percy (>=2.0.2)", "psutil (>=5.8.0)", "pytest (>=6.0.2)", "requests[security] (>=2.21.0)", "selenium (>=3.141.0,<=4.2.0)", "waitress (>=1.4.4)"] [[package]] name = "dash-core-components" @@ -1774,14 +1763,14 @@ langdetect = ["langdetect"] [[package]] name = "datetime" -version = "5.0" +version = "5.1" description = "This package provides a DateTime data type, as known from Zope. Unless you need to communicate with Zope APIs, you're probably better off using Python's built-in datetime module." category = "main" optional = false -python-versions = "*" +python-versions = ">=3.7" files = [ - {file = "DateTime-5.0-py3-none-any.whl", hash = "sha256:22d3622eec9cfe73b16e5c5ff5f05d8c1154e32f01e56560f3d20b834ceea2d7"}, - {file = "DateTime-5.0.tar.gz", hash = "sha256:20e4e0ff01e07d2e8de863e7e2b63b1bde6ec049098e244ab89a2c4bc4342ac1"}, + {file = "DateTime-5.1-py3-none-any.whl", hash = "sha256:97f5ec489e75e26c2e7b4e4b37dc001389814dca1f14ec046c7f9270cf3cee9e"}, + {file = "DateTime-5.1.tar.gz", hash = "sha256:a4191a3193c1ca4dbbaad5c958f940b9256864ba2613a53038d1613d3f63262d"}, ] [package.dependencies] @@ -2077,14 +2066,14 @@ files = [ [[package]] name = "exceptiongroup" -version = "1.1.0" +version = "1.1.1" description = "Backport of PEP 654 (exception groups)" category = "main" optional = true python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.1.0-py3-none-any.whl", hash = "sha256:327cbda3da756e2de031a3107b81ab7b3770a602c4d16ca618298c526f4bec1e"}, - {file = "exceptiongroup-1.1.0.tar.gz", hash = "sha256:bcb67d800a4497e1b404c2dd44fca47d3b7a5e5433dbab67f96c1a685cdfdf23"}, + {file = "exceptiongroup-1.1.1-py3-none-any.whl", hash = "sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e"}, + {file = "exceptiongroup-1.1.1.tar.gz", hash = "sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785"}, ] [package.extras] @@ -2220,19 +2209,19 @@ dev = ["black (>=20.8b1)", "codecov", "coverage", "flake8", "flake8-black", "fut [[package]] name = "filelock" -version = "3.9.0" +version = "3.10.0" description = "A platform independent file lock." category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "filelock-3.9.0-py3-none-any.whl", hash = "sha256:f58d535af89bb9ad5cd4df046f741f8553a418c01a7856bf0d173bbc9f6bd16d"}, - {file = "filelock-3.9.0.tar.gz", hash = "sha256:7b319f24340b51f55a2bf7a12ac0755a9b03e718311dac567a0f4f7fabd2f5de"}, + {file = "filelock-3.10.0-py3-none-any.whl", hash = "sha256:e90b34656470756edf8b19656785c5fea73afa1953f3e1b0d645cef11cab3182"}, + {file = "filelock-3.10.0.tar.gz", hash = "sha256:3199fd0d3faea8b911be52b663dfccceb84c95949dd13179aa21436d1a79c4ce"}, ] [package.extras] -docs = ["furo (>=2022.12.7)", "sphinx (>=5.3)", "sphinx-autodoc-typehints (>=1.19.5)"] -testing = ["covdefaults (>=2.2.2)", "coverage (>=7.0.1)", "pytest (>=7.2)", "pytest-cov (>=4)", "pytest-timeout (>=2.1)"] +docs = ["furo (>=2022.12.7)", "sphinx (>=6.1.3)", "sphinx-autodoc-typehints (>=1.22,!=1.23.4)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.2.1)", "pytest (>=7.2.2)", "pytest-cov (>=4)", "pytest-timeout (>=2.1)"] [[package]] name = "financedatabase" @@ -2345,36 +2334,20 @@ Werkzeug = ">=2.2.2" async = ["asgiref (>=3.2)"] dotenv = ["python-dotenv"] -[[package]] -name = "flask-cors" -version = "3.0.10" -description = "A Flask extension adding a decorator for CORS support" -category = "main" -optional = true -python-versions = "*" -files = [ - {file = "Flask-Cors-3.0.10.tar.gz", hash = "sha256:b60839393f3b84a0f3746f6cdca56c1ad7426aa738b70d6c61375857823181de"}, - {file = "Flask_Cors-3.0.10-py2.py3-none-any.whl", hash = "sha256:74efc975af1194fc7891ff5cd85b0f7478be4f7f59fe158102e91abb72bb4438"}, -] - -[package.dependencies] -Flask = ">=0.9" -Six = "*" - [[package]] name = "fonttools" -version = "4.38.0" +version = "4.39.2" description = "Tools to manipulate font files" category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "fonttools-4.38.0-py3-none-any.whl", hash = "sha256:820466f43c8be8c3009aef8b87e785014133508f0de64ec469e4efb643ae54fb"}, - {file = "fonttools-4.38.0.zip", hash = "sha256:2bb244009f9bf3fa100fc3ead6aeb99febe5985fa20afbfbaa2f8946c2fbdaf1"}, + {file = "fonttools-4.39.2-py3-none-any.whl", hash = "sha256:85245aa2fd4cf502a643c9a9a2b5a393703e150a6eaacc3e0e84bb448053f061"}, + {file = "fonttools-4.39.2.zip", hash = "sha256:e2d9f10337c9e3b17f9bce17a60a16a885a7d23b59b7f45ce07ea643e5580439"}, ] [package.extras] -all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0,<5)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=14.0.0)", "xattr", "zopfli (>=0.1.4)"] +all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0,<5)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.0.0)", "xattr", "zopfli (>=0.1.4)"] graphite = ["lz4 (>=1.7.4.2)"] interpolatable = ["munkres", "scipy"] lxml = ["lxml (>=4.0,<5)"] @@ -2384,7 +2357,7 @@ repacker = ["uharfbuzz (>=0.23.0)"] symfont = ["sympy"] type1 = ["xattr"] ufo = ["fs (>=2.2.0,<3)"] -unicode = ["unicodedata2 (>=14.0.0)"] +unicode = ["unicodedata2 (>=15.0.0)"] woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] [[package]] @@ -2572,14 +2545,14 @@ scandir = ["scandir (>=1.5,<2.0)"] [[package]] name = "fsspec" -version = "2023.1.0" +version = "2023.3.0" description = "File-system specification" category = "main" optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "fsspec-2023.1.0-py3-none-any.whl", hash = "sha256:b833e2e541e9e8cde0ab549414187871243177feb3d344f9d27b25a93f5d8139"}, - {file = "fsspec-2023.1.0.tar.gz", hash = "sha256:fbae7f20ff801eb5f7d0bedf81f25c787c0dfac5e982d98fa3884a9cde2b5411"}, + {file = "fsspec-2023.3.0-py3-none-any.whl", hash = "sha256:bf57215e19dbfa4fe7edae53040cc1deef825e3b1605cca9a8d2c2fadd2328a0"}, + {file = "fsspec-2023.3.0.tar.gz", hash = "sha256:24e635549a590d74c6c18274ddd3ffab4753341753e923408b1904eaabafe04d"}, ] [package.dependencies] @@ -2592,7 +2565,6 @@ adl = ["adlfs"] arrow = ["pyarrow (>=1)"] dask = ["dask", "distributed"] dropbox = ["dropbox", "dropboxdrivefs", "requests"] -entrypoints = ["importlib-metadata"] fuse = ["fusepy"] gcs = ["gcsfs"] git = ["pygit2"] @@ -2717,14 +2689,14 @@ gitdb = ">=4.0.1,<5" [[package]] name = "google-auth" -version = "2.16.1" +version = "2.16.2" description = "Google Authentication Library" category = "main" optional = true python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*" files = [ - {file = "google-auth-2.16.1.tar.gz", hash = "sha256:5fd170986bce6bfd7bb5c845c4b8362edb1e0cba901e062196e83f8bb5d5d32c"}, - {file = "google_auth-2.16.1-py2.py3-none-any.whl", hash = "sha256:75d76ea857df65938e1f71dcbcd7d0cd48e3f80b34b8870ba229c9292081f7ef"}, + {file = "google-auth-2.16.2.tar.gz", hash = "sha256:07e14f34ec288e3f33e00e2e3cc40c8942aa5d4ceac06256a28cd8e786591420"}, + {file = "google_auth-2.16.2-py2.py3-none-any.whl", hash = "sha256:2fef3cf94876d1a0e204afece58bb4d83fb57228aaa366c64045039fda6770a2"}, ] [package.dependencies] @@ -2962,14 +2934,14 @@ lxml = ["lxml"] [[package]] name = "huggingface-hub" -version = "0.12.1" +version = "0.13.2" description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub" category = "main" optional = true python-versions = ">=3.7.0" files = [ - {file = "huggingface_hub-0.12.1-py3-none-any.whl", hash = "sha256:867586cc8543fe1bd43a219fedbea7d71690021ad80f0c46f35c4751069278d7"}, - {file = "huggingface_hub-0.12.1.tar.gz", hash = "sha256:6f960f6246ef9c3446d0d6275e853485515682c350917fdaf2a59705f8b9ebb3"}, + {file = "huggingface_hub-0.13.2-py3-none-any.whl", hash = "sha256:745c4cbd97a27fc5c1c6c89cb477662004c88bc3dd89bafc1a27ef24af77f944"}, + {file = "huggingface_hub-0.13.2.tar.gz", hash = "sha256:246e8eb39b6e6e9d9d5846e4b56c265cdf1872f48ba5a13a1321295d371626f5"}, ] [package.dependencies] @@ -2981,26 +2953,26 @@ tqdm = ">=4.42.1" typing-extensions = ">=3.7.4.3" [package.extras] -all = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "black (==22.3)", "flake8 (>=3.8.3)", "flake8-bugbear", "isort (>=5.5.4)", "jedi", "mypy (==0.982)", "pytest", "pytest-cov", "pytest-env", "pytest-xdist", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3"] +all = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "black (>=23.1,<24.0)", "jedi", "mypy (==0.982)", "pytest", "pytest-cov", "pytest-env", "pytest-xdist", "ruff (>=0.0.241)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3"] cli = ["InquirerPy (==0.3.4)"] -dev = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "black (==22.3)", "flake8 (>=3.8.3)", "flake8-bugbear", "isort (>=5.5.4)", "jedi", "mypy (==0.982)", "pytest", "pytest-cov", "pytest-env", "pytest-xdist", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3"] +dev = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "black (>=23.1,<24.0)", "jedi", "mypy (==0.982)", "pytest", "pytest-cov", "pytest-env", "pytest-xdist", "ruff (>=0.0.241)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3"] fastai = ["fastai (>=2.4)", "fastcore (>=1.3.27)", "toml"] -quality = ["black (==22.3)", "flake8 (>=3.8.3)", "flake8-bugbear", "isort (>=5.5.4)", "mypy (==0.982)"] +quality = ["black (>=23.1,<24.0)", "mypy (==0.982)", "ruff (>=0.0.241)"] tensorflow = ["graphviz", "pydot", "tensorflow"] -testing = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "isort (>=5.5.4)", "jedi", "pytest", "pytest-cov", "pytest-env", "pytest-xdist", "soundfile"] +testing = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "jedi", "pytest", "pytest-cov", "pytest-env", "pytest-xdist", "soundfile"] torch = ["torch"] typing = ["types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3"] [[package]] name = "identify" -version = "2.5.18" +version = "2.5.21" description = "File identification library for Python" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "identify-2.5.18-py2.py3-none-any.whl", hash = "sha256:93aac7ecf2f6abf879b8f29a8002d3c6de7086b8c28d88e1ad15045a15ab63f9"}, - {file = "identify-2.5.18.tar.gz", hash = "sha256:89e144fa560cc4cffb6ef2ab5e9fb18ed9f9b3cb054384bab4b95c12f6c309fe"}, + {file = "identify-2.5.21-py2.py3-none-any.whl", hash = "sha256:69edcaffa8e91ae0f77d397af60f148b6b45a8044b2cc6d99cafa5b04793ff00"}, + {file = "identify-2.5.21.tar.gz", hash = "sha256:7671a05ef9cfaf8ff63b15d45a91a1147a03aaccb2976d4e9bd047cbbc508471"}, ] [package.extras] @@ -3126,14 +3098,14 @@ urllib3 = ">=1.15" [[package]] name = "ipykernel" -version = "6.21.2" +version = "6.21.3" description = "IPython Kernel for Jupyter" category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "ipykernel-6.21.2-py3-none-any.whl", hash = "sha256:430d00549b6aaf49bd0f5393150691edb1815afa62d457ee6b1a66b25cb17874"}, - {file = "ipykernel-6.21.2.tar.gz", hash = "sha256:6e9213484e4ce1fb14267ee435e18f23cc3a0634e635b9fb4ed4677b84e0fdf8"}, + {file = "ipykernel-6.21.3-py3-none-any.whl", hash = "sha256:24ebd9715e317c185e37156ab3a87382410185230dde7aeffce389d6c7d4428a"}, + {file = "ipykernel-6.21.3.tar.gz", hash = "sha256:c8ff581905d70e7299bc1473a2f7c113bec1744fb3746d58e5b4b93bd8ee7001"}, ] [package.dependencies] @@ -3438,19 +3410,19 @@ test = ["codecov", "coverage", "ipykernel (>=6.5)", "ipython", "mypy", "pre-comm [[package]] name = "jupyter-core" -version = "5.2.0" +version = "5.3.0" description = "Jupyter core package. A base package on which Jupyter projects rely." category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "jupyter_core-5.2.0-py3-none-any.whl", hash = "sha256:4bdc2928c37f6917130c667d8b8708f20aee539d8283c6be72aabd2a4b4c83b0"}, - {file = "jupyter_core-5.2.0.tar.gz", hash = "sha256:1407cdb4c79ee467696c04b76633fc1884015fa109323365a6372c8e890cc83f"}, + {file = "jupyter_core-5.3.0-py3-none-any.whl", hash = "sha256:d4201af84559bc8c70cead287e1ab94aeef3c512848dde077b7684b54d67730d"}, + {file = "jupyter_core-5.3.0.tar.gz", hash = "sha256:6db75be0c83edbf1b7c9f91ec266a9a24ef945da630f3120e1a0046dc13713fc"}, ] [package.dependencies] platformdirs = ">=2.5" -pywin32 = {version = ">=1.0", markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\""} +pywin32 = {version = ">=300", markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\""} traitlets = ">=5.3" [package.extras] @@ -3484,18 +3456,18 @@ dev = ["jupyter-server-proxy", "jupyterlab (>=2.0)", "notebook (>=6.0)"] [[package]] name = "jupyter-lsp" -version = "1.5.1" +version = "2.0.0" description = "Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server" category = "main" optional = true -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "jupyter-lsp-1.5.1.tar.gz", hash = "sha256:751abd35413be99a4331f3597b09341adc755589ed32091ac2f686db3d61267e"}, - {file = "jupyter_lsp-1.5.1-py3-none-any.whl", hash = "sha256:28bb4c44f0c78b4fe55041b2209a8a1f33b1719f39e5e280d8c4d689dc44ca31"}, + {file = "jupyter-lsp-2.0.0.tar.gz", hash = "sha256:f3d9f599d48e093a4babfbdac194c30332e6248ce4a03d73fa712f88c779e519"}, + {file = "jupyter_lsp-2.0.0-py3-none-any.whl", hash = "sha256:d9322a00211276aec9fb9ad6de17872771946e3fb745808f641d5ca53b38e54c"}, ] [package.dependencies] -entrypoints = "*" +importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} jupyter-server = ">=1.1.2" [[package]] @@ -3603,14 +3575,14 @@ files = [ [[package]] name = "jupyterlab-server" -version = "2.19.0" +version = "2.20.0" description = "A set of server components for JupyterLab and JupyterLab like applications." category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "jupyterlab_server-2.19.0-py3-none-any.whl", hash = "sha256:51f6922e34f9f3db875051f4f7b57539a04ddd030f42d9ce6062dedf67bf7f2f"}, - {file = "jupyterlab_server-2.19.0.tar.gz", hash = "sha256:9aec21a2183bbedd9f91a86628355449575f1862d88b28ad5f905019d31e6c21"}, + {file = "jupyterlab_server-2.20.0-py3-none-any.whl", hash = "sha256:0203f96913187a9e7a6c8cef3556b499d2be67f014ad4ce9b76c8dcdcadb2367"}, + {file = "jupyterlab_server-2.20.0.tar.gz", hash = "sha256:75e81a8ef23f561b70f5c9a76de2ab9ebb291358b371d6260f51af7e347da719"}, ] [package.dependencies] @@ -3625,8 +3597,8 @@ requests = ">=2.28" [package.extras] docs = ["autodoc-traits", "docutils (<0.20)", "jinja2 (<3.2.0)", "mistune (<3)", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinxcontrib-openapi"] -openapi = ["openapi-core (>=0.16.1)", "ruamel-yaml"] -test = ["codecov", "ipykernel", "jupyterlab-server[openapi]", "openapi-spec-validator (>=0.5.1)", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] +openapi = ["openapi-core (>=0.16.1,<0.17.0)", "ruamel-yaml"] +test = ["codecov", "ipykernel", "jupyterlab-server[openapi]", "openapi-spec-validator (>=0.5.1,<0.6.0)", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] [[package]] name = "jupyterlab-widgets" @@ -3899,14 +3871,14 @@ dev = ["Sphinx (>=4.1.1)", "black (>=19.10b0)", "colorama (>=0.3.4)", "docutils [[package]] name = "lsprotocol" -version = "2022.0.0a10" +version = "2023.0.0a1" description = "Python implementation of the Language Server Protocol." category = "main" optional = true python-versions = ">=3.7" files = [ - {file = "lsprotocol-2022.0.0a10-py3-none-any.whl", hash = "sha256:ef516aec43c2b3c8debc06e84558ea9a64c36d635422d1614fd7fd2a45b1d291"}, - {file = "lsprotocol-2022.0.0a10.tar.gz", hash = "sha256:2cd78770b7a4ec979f3ee3761265effd50ea0f5e858ce21bf2fba972e1783c50"}, + {file = "lsprotocol-2023.0.0a1-py3-none-any.whl", hash = "sha256:133c339a7cccb299a5b357f9b8ef6aebe27616e0daf4ba54e63476afe0e12e47"}, + {file = "lsprotocol-2023.0.0a1.tar.gz", hash = "sha256:32edfd4856abba1349bf5a070567445b3d7286951afba3644b472629796f82d0"}, ] [package.dependencies] @@ -4141,53 +4113,53 @@ files = [ [[package]] name = "matplotlib" -version = "3.7.0" +version = "3.7.1" description = "Python plotting package" category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "matplotlib-3.7.0-cp310-cp310-macosx_10_12_universal2.whl", hash = "sha256:3da8b9618188346239e51f1ea6c0f8f05c6e218cfcc30b399dd7dd7f52e8bceb"}, - {file = "matplotlib-3.7.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:c0592ba57217c22987b7322df10f75ef95bc44dce781692b4b7524085de66019"}, - {file = "matplotlib-3.7.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:21269450243d6928da81a9bed201f0909432a74e7d0d65db5545b9fa8a0d0223"}, - {file = "matplotlib-3.7.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb2e76cd429058d8954121c334dddfcd11a6186c6975bca61f3f248c99031b05"}, - {file = "matplotlib-3.7.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de20eb1247725a2f889173d391a6d9e7e0f2540feda24030748283108b0478ec"}, - {file = "matplotlib-3.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c5465735eaaafd1cfaec3fed60aee776aeb3fd3992aa2e49f4635339c931d443"}, - {file = "matplotlib-3.7.0-cp310-cp310-win32.whl", hash = "sha256:092e6abc80cdf8a95f7d1813e16c0e99ceda8d5b195a3ab859c680f3487b80a2"}, - {file = "matplotlib-3.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:4f640534ec2760e270801056bc0d8a10777c48b30966eef78a7c35d8590915ba"}, - {file = "matplotlib-3.7.0-cp311-cp311-macosx_10_12_universal2.whl", hash = "sha256:f336e7014889c38c59029ebacc35c59236a852e4b23836708cfd3f43d1eaeed5"}, - {file = "matplotlib-3.7.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:3a10428d4f8d1a478ceabd652e61a175b2fdeed4175ab48da4a7b8deb561e3fa"}, - {file = "matplotlib-3.7.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:46ca923e980f76d34c1c633343a72bb042d6ba690ecc649aababf5317997171d"}, - {file = "matplotlib-3.7.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c849aa94ff2a70fb71f318f48a61076d1205c6013b9d3885ade7f992093ac434"}, - {file = "matplotlib-3.7.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:827e78239292e561cfb70abf356a9d7eaf5bf6a85c97877f254009f20b892f89"}, - {file = "matplotlib-3.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:691ef1f15360e439886186d0db77b5345b24da12cbc4fc57b26c4826db4d6cab"}, - {file = "matplotlib-3.7.0-cp311-cp311-win32.whl", hash = "sha256:21a8aeac39b4a795e697265d800ce52ab59bdeb6bb23082e2d971f3041074f02"}, - {file = "matplotlib-3.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:01681566e95b9423021b49dea6a2395c16fa054604eacb87f0f4c439750f9114"}, - {file = "matplotlib-3.7.0-cp38-cp38-macosx_10_12_universal2.whl", hash = "sha256:cf119eee4e57389fba5ac8b816934e95c256535e55f0b21628b4205737d1de85"}, - {file = "matplotlib-3.7.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:21bd4033c40b95abd5b8453f036ed5aa70856e56ecbd887705c37dce007a4c21"}, - {file = "matplotlib-3.7.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:111ef351f28fd823ed7177632070a6badd6f475607122bc9002a526f2502a0b5"}, - {file = "matplotlib-3.7.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f91d35b3ef51d29d9c661069b9e4ba431ce283ffc533b981506889e144b5b40e"}, - {file = "matplotlib-3.7.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0a776462a4a63c0bfc9df106c15a0897aa2dbab6795c693aa366e8e283958854"}, - {file = "matplotlib-3.7.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0dfd4a0cbd151f6439e6d7f8dca5292839ca311e7e650596d073774847ca2e4f"}, - {file = "matplotlib-3.7.0-cp38-cp38-win32.whl", hash = "sha256:56b7b79488209041a9bf7ddc34f1b069274489ce69e34dc63ae241d0d6b4b736"}, - {file = "matplotlib-3.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:8665855f3919c80551f377bc16df618ceabf3ef65270bc14b60302dce88ca9ab"}, - {file = "matplotlib-3.7.0-cp39-cp39-macosx_10_12_universal2.whl", hash = "sha256:f910d924da8b9fb066b5beae0b85e34ed1b6293014892baadcf2a51da1c65807"}, - {file = "matplotlib-3.7.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:cf6346644e8fe234dc847e6232145dac199a650d3d8025b3ef65107221584ba4"}, - {file = "matplotlib-3.7.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3d1e52365d8d5af699f04581ca191112e1d1220a9ce4386b57d807124d8b55e6"}, - {file = "matplotlib-3.7.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c869b646489c6a94375714032e5cec08e3aa8d3f7d4e8ef2b0fb50a52b317ce6"}, - {file = "matplotlib-3.7.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4ddac5f59e78d04b20469bc43853a8e619bb6505c7eac8ffb343ff2c516d72f"}, - {file = "matplotlib-3.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb0304c1cd802e9a25743414c887e8a7cd51d96c9ec96d388625d2cd1c137ae3"}, - {file = "matplotlib-3.7.0-cp39-cp39-win32.whl", hash = "sha256:a06a6c9822e80f323549c6bc9da96d4f233178212ad9a5f4ab87fd153077a507"}, - {file = "matplotlib-3.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:cb52aa97b92acdee090edfb65d1cb84ea60ab38e871ba8321a10bbcebc2a3540"}, - {file = "matplotlib-3.7.0-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3493b48e56468c39bd9c1532566dff3b8062952721b7521e1f394eb6791495f4"}, - {file = "matplotlib-3.7.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d0dcd1a0bf8d56551e8617d6dc3881d8a1c7fb37d14e5ec12cbb293f3e6170a"}, - {file = "matplotlib-3.7.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51fb664c37714cbaac69c16d6b3719f517a13c96c3f76f4caadd5a0aa7ed0329"}, - {file = "matplotlib-3.7.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:4497d88c559b76da320b7759d64db442178beeea06a52dc0c629086982082dcd"}, - {file = "matplotlib-3.7.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:9d85355c48ef8b9994293eb7c00f44aa8a43cad7a297fbf0770a25cdb2244b91"}, - {file = "matplotlib-3.7.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:03eb2c8ff8d85da679b71e14c7c95d16d014c48e0c0bfa14db85f6cdc5c92aad"}, - {file = "matplotlib-3.7.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:71b751d06b2ed1fd017de512d7439c0259822864ea16731522b251a27c0b2ede"}, - {file = "matplotlib-3.7.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:b51ab8a5d5d3bbd4527af633a638325f492e09e45e78afdf816ef55217a09664"}, - {file = "matplotlib-3.7.0.tar.gz", hash = "sha256:8f6efd313430d7ef70a38a3276281cb2e8646b3a22b3b21eb227da20e15e6813"}, + {file = "matplotlib-3.7.1-cp310-cp310-macosx_10_12_universal2.whl", hash = "sha256:95cbc13c1fc6844ab8812a525bbc237fa1470863ff3dace7352e910519e194b1"}, + {file = "matplotlib-3.7.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:08308bae9e91aca1ec6fd6dda66237eef9f6294ddb17f0d0b3c863169bf82353"}, + {file = "matplotlib-3.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:544764ba51900da4639c0f983b323d288f94f65f4024dc40ecb1542d74dc0500"}, + {file = "matplotlib-3.7.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56d94989191de3fcc4e002f93f7f1be5da476385dde410ddafbb70686acf00ea"}, + {file = "matplotlib-3.7.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e99bc9e65901bb9a7ce5e7bb24af03675cbd7c70b30ac670aa263240635999a4"}, + {file = "matplotlib-3.7.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb7d248c34a341cd4c31a06fd34d64306624c8cd8d0def7abb08792a5abfd556"}, + {file = "matplotlib-3.7.1-cp310-cp310-win32.whl", hash = "sha256:ce463ce590f3825b52e9fe5c19a3c6a69fd7675a39d589e8b5fbe772272b3a24"}, + {file = "matplotlib-3.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:3d7bc90727351fb841e4d8ae620d2d86d8ed92b50473cd2b42ce9186104ecbba"}, + {file = "matplotlib-3.7.1-cp311-cp311-macosx_10_12_universal2.whl", hash = "sha256:770a205966d641627fd5cf9d3cb4b6280a716522cd36b8b284a8eb1581310f61"}, + {file = "matplotlib-3.7.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:f67bfdb83a8232cb7a92b869f9355d677bce24485c460b19d01970b64b2ed476"}, + {file = "matplotlib-3.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2bf092f9210e105f414a043b92af583c98f50050559616930d884387d0772aba"}, + {file = "matplotlib-3.7.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89768d84187f31717349c6bfadc0e0d8c321e8eb34522acec8a67b1236a66332"}, + {file = "matplotlib-3.7.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:83111e6388dec67822e2534e13b243cc644c7494a4bb60584edbff91585a83c6"}, + {file = "matplotlib-3.7.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a867bf73a7eb808ef2afbca03bcdb785dae09595fbe550e1bab0cd023eba3de0"}, + {file = "matplotlib-3.7.1-cp311-cp311-win32.whl", hash = "sha256:fbdeeb58c0cf0595efe89c05c224e0a502d1aa6a8696e68a73c3efc6bc354304"}, + {file = "matplotlib-3.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:c0bd19c72ae53e6ab979f0ac6a3fafceb02d2ecafa023c5cca47acd934d10be7"}, + {file = "matplotlib-3.7.1-cp38-cp38-macosx_10_12_universal2.whl", hash = "sha256:6eb88d87cb2c49af00d3bbc33a003f89fd9f78d318848da029383bfc08ecfbfb"}, + {file = "matplotlib-3.7.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:cf0e4f727534b7b1457898c4f4ae838af1ef87c359b76dcd5330fa31893a3ac7"}, + {file = "matplotlib-3.7.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:46a561d23b91f30bccfd25429c3c706afe7d73a5cc64ef2dfaf2b2ac47c1a5dc"}, + {file = "matplotlib-3.7.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8704726d33e9aa8a6d5215044b8d00804561971163563e6e6591f9dcf64340cc"}, + {file = "matplotlib-3.7.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4cf327e98ecf08fcbb82685acaf1939d3338548620ab8dfa02828706402c34de"}, + {file = "matplotlib-3.7.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:617f14ae9d53292ece33f45cba8503494ee199a75b44de7717964f70637a36aa"}, + {file = "matplotlib-3.7.1-cp38-cp38-win32.whl", hash = "sha256:7c9a4b2da6fac77bcc41b1ea95fadb314e92508bf5493ceff058e727e7ecf5b0"}, + {file = "matplotlib-3.7.1-cp38-cp38-win_amd64.whl", hash = "sha256:14645aad967684e92fc349493fa10c08a6da514b3d03a5931a1bac26e6792bd1"}, + {file = "matplotlib-3.7.1-cp39-cp39-macosx_10_12_universal2.whl", hash = "sha256:81a6b377ea444336538638d31fdb39af6be1a043ca5e343fe18d0f17e098770b"}, + {file = "matplotlib-3.7.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:28506a03bd7f3fe59cd3cd4ceb2a8d8a2b1db41afede01f66c42561b9be7b4b7"}, + {file = "matplotlib-3.7.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8c587963b85ce41e0a8af53b9b2de8dddbf5ece4c34553f7bd9d066148dc719c"}, + {file = "matplotlib-3.7.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8bf26ade3ff0f27668989d98c8435ce9327d24cffb7f07d24ef609e33d582439"}, + {file = "matplotlib-3.7.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:def58098f96a05f90af7e92fd127d21a287068202aa43b2a93476170ebd99e87"}, + {file = "matplotlib-3.7.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f883a22a56a84dba3b588696a2b8a1ab0d2c3d41be53264115c71b0a942d8fdb"}, + {file = "matplotlib-3.7.1-cp39-cp39-win32.whl", hash = "sha256:4f99e1b234c30c1e9714610eb0c6d2f11809c9c78c984a613ae539ea2ad2eb4b"}, + {file = "matplotlib-3.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:3ba2af245e36990facf67fde840a760128ddd71210b2ab6406e640188d69d136"}, + {file = "matplotlib-3.7.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3032884084f541163f295db8a6536e0abb0db464008fadca6c98aaf84ccf4717"}, + {file = "matplotlib-3.7.1-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a2cb34336110e0ed8bb4f650e817eed61fa064acbefeb3591f1b33e3a84fd96"}, + {file = "matplotlib-3.7.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b867e2f952ed592237a1828f027d332d8ee219ad722345b79a001f49df0936eb"}, + {file = "matplotlib-3.7.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:57bfb8c8ea253be947ccb2bc2d1bb3862c2bccc662ad1b4626e1f5e004557042"}, + {file = "matplotlib-3.7.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:438196cdf5dc8d39b50a45cb6e3f6274edbcf2254f85fa9b895bf85851c3a613"}, + {file = "matplotlib-3.7.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:21e9cff1a58d42e74d01153360de92b326708fb205250150018a52c70f43c290"}, + {file = "matplotlib-3.7.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75d4725d70b7c03e082bbb8a34639ede17f333d7247f56caceb3801cb6ff703d"}, + {file = "matplotlib-3.7.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:97cc368a7268141afb5690760921765ed34867ffb9655dd325ed207af85c7529"}, + {file = "matplotlib-3.7.1.tar.gz", hash = "sha256:7b73305f25eab4541bd7ee0b96d87e53ae9c9f1823be5659b806cd85786fe882"}, ] [package.dependencies] @@ -4433,42 +4405,42 @@ files = [ [[package]] name = "mypy" -version = "1.0.1" +version = "1.1.1" description = "Optional static typing for Python" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "mypy-1.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:71a808334d3f41ef011faa5a5cd8153606df5fc0b56de5b2e89566c8093a0c9a"}, - {file = "mypy-1.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:920169f0184215eef19294fa86ea49ffd4635dedfdea2b57e45cb4ee85d5ccaf"}, - {file = "mypy-1.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27a0f74a298769d9fdc8498fcb4f2beb86f0564bcdb1a37b58cbbe78e55cf8c0"}, - {file = "mypy-1.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:65b122a993d9c81ea0bfde7689b3365318a88bde952e4dfa1b3a8b4ac05d168b"}, - {file = "mypy-1.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:5deb252fd42a77add936b463033a59b8e48eb2eaec2976d76b6878d031933fe4"}, - {file = "mypy-1.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2013226d17f20468f34feddd6aae4635a55f79626549099354ce641bc7d40262"}, - {file = "mypy-1.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:48525aec92b47baed9b3380371ab8ab6e63a5aab317347dfe9e55e02aaad22e8"}, - {file = "mypy-1.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c96b8a0c019fe29040d520d9257d8c8f122a7343a8307bf8d6d4a43f5c5bfcc8"}, - {file = "mypy-1.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:448de661536d270ce04f2d7dddaa49b2fdba6e3bd8a83212164d4174ff43aa65"}, - {file = "mypy-1.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:d42a98e76070a365a1d1c220fcac8aa4ada12ae0db679cb4d910fabefc88b994"}, - {file = "mypy-1.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e64f48c6176e243ad015e995de05af7f22bbe370dbb5b32bd6988438ec873919"}, - {file = "mypy-1.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fdd63e4f50e3538617887e9aee91855368d9fc1dea30da743837b0df7373bc4"}, - {file = "mypy-1.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:dbeb24514c4acbc78d205f85dd0e800f34062efcc1f4a4857c57e4b4b8712bff"}, - {file = "mypy-1.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a2948c40a7dd46c1c33765718936669dc1f628f134013b02ff5ac6c7ef6942bf"}, - {file = "mypy-1.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5bc8d6bd3b274dd3846597855d96d38d947aedba18776aa998a8d46fabdaed76"}, - {file = "mypy-1.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:17455cda53eeee0a4adb6371a21dd3dbf465897de82843751cf822605d152c8c"}, - {file = "mypy-1.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e831662208055b006eef68392a768ff83596035ffd6d846786578ba1714ba8f6"}, - {file = "mypy-1.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e60d0b09f62ae97a94605c3f73fd952395286cf3e3b9e7b97f60b01ddfbbda88"}, - {file = "mypy-1.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:0af4f0e20706aadf4e6f8f8dc5ab739089146b83fd53cb4a7e0e850ef3de0bb6"}, - {file = "mypy-1.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:24189f23dc66f83b839bd1cce2dfc356020dfc9a8bae03978477b15be61b062e"}, - {file = "mypy-1.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:93a85495fb13dc484251b4c1fd7a5ac370cd0d812bbfc3b39c1bafefe95275d5"}, - {file = "mypy-1.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f546ac34093c6ce33f6278f7c88f0f147a4849386d3bf3ae193702f4fe31407"}, - {file = "mypy-1.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c6c2ccb7af7154673c591189c3687b013122c5a891bb5651eca3db8e6c6c55bd"}, - {file = "mypy-1.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:15b5a824b58c7c822c51bc66308e759243c32631896743f030daf449fe3677f3"}, - {file = "mypy-1.0.1-py3-none-any.whl", hash = "sha256:eda5c8b9949ed411ff752b9a01adda31afe7eae1e53e946dbdf9db23865e66c4"}, - {file = "mypy-1.0.1.tar.gz", hash = "sha256:28cea5a6392bb43d266782983b5a4216c25544cd7d80be681a155ddcdafd152d"}, + {file = "mypy-1.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39c7119335be05630611ee798cc982623b9e8f0cff04a0b48dfc26100e0b97af"}, + {file = "mypy-1.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:61bf08362e93b6b12fad3eab68c4ea903a077b87c90ac06c11e3d7a09b56b9c1"}, + {file = "mypy-1.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dbb19c9f662e41e474e0cff502b7064a7edc6764f5262b6cd91d698163196799"}, + {file = "mypy-1.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:315ac73cc1cce4771c27d426b7ea558fb4e2836f89cb0296cbe056894e3a1f78"}, + {file = "mypy-1.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:5cb14ff9919b7df3538590fc4d4c49a0f84392237cbf5f7a816b4161c061829e"}, + {file = "mypy-1.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:26cdd6a22b9b40b2fd71881a8a4f34b4d7914c679f154f43385ca878a8297389"}, + {file = "mypy-1.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5b5f81b40d94c785f288948c16e1f2da37203c6006546c5d947aab6f90aefef2"}, + {file = "mypy-1.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21b437be1c02712a605591e1ed1d858aba681757a1e55fe678a15c2244cd68a5"}, + {file = "mypy-1.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d809f88734f44a0d44959d795b1e6f64b2bbe0ea4d9cc4776aa588bb4229fc1c"}, + {file = "mypy-1.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:a380c041db500e1410bb5b16b3c1c35e61e773a5c3517926b81dfdab7582be54"}, + {file = "mypy-1.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b7c7b708fe9a871a96626d61912e3f4ddd365bf7f39128362bc50cbd74a634d5"}, + {file = "mypy-1.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1c10fa12df1232c936830839e2e935d090fc9ee315744ac33b8a32216b93707"}, + {file = "mypy-1.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0a28a76785bf57655a8ea5eb0540a15b0e781c807b5aa798bd463779988fa1d5"}, + {file = "mypy-1.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:ef6a01e563ec6a4940784c574d33f6ac1943864634517984471642908b30b6f7"}, + {file = "mypy-1.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d64c28e03ce40d5303450f547e07418c64c241669ab20610f273c9e6290b4b0b"}, + {file = "mypy-1.1.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:64cc3afb3e9e71a79d06e3ed24bb508a6d66f782aff7e56f628bf35ba2e0ba51"}, + {file = "mypy-1.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce61663faf7a8e5ec6f456857bfbcec2901fbdb3ad958b778403f63b9e606a1b"}, + {file = "mypy-1.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2b0c373d071593deefbcdd87ec8db91ea13bd8f1328d44947e88beae21e8d5e9"}, + {file = "mypy-1.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:2888ce4fe5aae5a673386fa232473014056967f3904f5abfcf6367b5af1f612a"}, + {file = "mypy-1.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:19ba15f9627a5723e522d007fe708007bae52b93faab00f95d72f03e1afa9598"}, + {file = "mypy-1.1.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:59bbd71e5c58eed2e992ce6523180e03c221dcd92b52f0e792f291d67b15a71c"}, + {file = "mypy-1.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9401e33814cec6aec8c03a9548e9385e0e228fc1b8b0a37b9ea21038e64cdd8a"}, + {file = "mypy-1.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4b398d8b1f4fba0e3c6463e02f8ad3346f71956b92287af22c9b12c3ec965a9f"}, + {file = "mypy-1.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:69b35d1dcb5707382810765ed34da9db47e7f95b3528334a3c999b0c90fe523f"}, + {file = "mypy-1.1.1-py3-none-any.whl", hash = "sha256:4e4e8b362cdf99ba00c2b218036002bdcdf1e0de085cdb296a49df03fb31dfc4"}, + {file = "mypy-1.1.1.tar.gz", hash = "sha256:ae9ceae0f5b9059f33dbc62dea087e942c0ccab4b7a003719cb70f9b8abfa32f"}, ] [package.dependencies] -mypy-extensions = ">=0.4.3" +mypy-extensions = ">=1.0.0" tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} typing-extensions = ">=3.10" @@ -4518,14 +4490,14 @@ testing = ["beautifulsoup4", "coverage", "docutils (>=0.17.0,<0.18.0)", "pytest [[package]] name = "nbclassic" -version = "0.5.2" +version = "0.5.3" description = "Jupyter Notebook as a Jupyter Server extension." category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "nbclassic-0.5.2-py3-none-any.whl", hash = "sha256:6403a996562dadefa7fee9c49e17b663b5fd508241de5df655b90011cf3342d9"}, - {file = "nbclassic-0.5.2.tar.gz", hash = "sha256:40f11bbcc59e8956c3d5ef132dec8e5a853e893ecf831e791d54da0d8a50d79d"}, + {file = "nbclassic-0.5.3-py3-none-any.whl", hash = "sha256:e849277872d9ffd8fe4b39a8038d01ba82d6a1def9ce11b1b3c26c9546ed5131"}, + {file = "nbclassic-0.5.3.tar.gz", hash = "sha256:889772a7ba524eb781d2901f396540bcad41151e1f7e043f12ebc14a6540d342"}, ] [package.dependencies] @@ -4576,14 +4548,14 @@ test = ["black", "check-manifest", "flake8", "ipykernel", "ipython", "ipywidgets [[package]] name = "nbconvert" -version = "7.2.9" +version = "7.2.10" description = "Converting Jupyter Notebooks" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "nbconvert-7.2.9-py3-none-any.whl", hash = "sha256:495638c5e06005f4a5ce828d8a81d28e34f95c20f4384d5d7a22254b443836e7"}, - {file = "nbconvert-7.2.9.tar.gz", hash = "sha256:a42c3ac137c64f70cbe4d763111bf358641ea53b37a01a5c202ed86374af5234"}, + {file = "nbconvert-7.2.10-py3-none-any.whl", hash = "sha256:e41118f81698d3d59b3c7c2887937446048f741aba6c367c1c1a77810b3e2d08"}, + {file = "nbconvert-7.2.10.tar.gz", hash = "sha256:8eed67bd8314f3ec87c4351c2f674af3a04e5890ab905d6bd927c05aec1cf27d"}, ] [package.dependencies] @@ -4720,14 +4692,14 @@ setuptools = "*" [[package]] name = "notebook" -version = "6.5.2" +version = "6.5.3" description = "A web-based notebook environment for interactive computing" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "notebook-6.5.2-py3-none-any.whl", hash = "sha256:e04f9018ceb86e4fa841e92ea8fb214f8d23c1cedfde530cc96f92446924f0e4"}, - {file = "notebook-6.5.2.tar.gz", hash = "sha256:c1897e5317e225fc78b45549a6ab4b668e4c996fd03a04e938fe5e7af2bfffd0"}, + {file = "notebook-6.5.3-py3-none-any.whl", hash = "sha256:50a334ad9d60b30cb759405168ef6fc3d60350ab5439fb1631544bb09dcb2cce"}, + {file = "notebook-6.5.3.tar.gz", hash = "sha256:b12bee3292211d85dd7e588a790ddce30cb3e8fbcfa1e803522a207f60819e05"}, ] [package.dependencies] @@ -4919,14 +4891,14 @@ dev = ["pytest"] [[package]] name = "openpyxl" -version = "3.1.1" +version = "3.1.2" description = "A Python library to read/write Excel 2010 xlsx/xlsm files" category = "main" optional = false python-versions = ">=3.6" files = [ - {file = "openpyxl-3.1.1-py2.py3-none-any.whl", hash = "sha256:a0266e033e65f33ee697254b66116a5793c15fc92daf64711080000df4cfe0a8"}, - {file = "openpyxl-3.1.1.tar.gz", hash = "sha256:f06d44e2c973781068bce5ecf860a09bcdb1c7f5ce1facd5e9aa82c92c93ae72"}, + {file = "openpyxl-3.1.2-py2.py3-none-any.whl", hash = "sha256:f91456ead12ab3c6c2e9491cf33ba6d08357d802192379bb482f1033ade496f5"}, + {file = "openpyxl-3.1.2.tar.gz", hash = "sha256:a6f5977418eff3b2d5500d54d9db50c8277a368436f4e4f8ddb1be3422870184"}, ] [package.dependencies] @@ -5203,14 +5175,14 @@ testing = ["docopt", "pytest (<6.0.0)"] [[package]] name = "pathspec" -version = "0.11.0" +version = "0.11.1" description = "Utility library for gitignore style pattern matching of file paths." category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "pathspec-0.11.0-py3-none-any.whl", hash = "sha256:3a66eb970cbac598f9e5ccb5b2cf58930cd8e3ed86d393d541eaf2d8b1705229"}, - {file = "pathspec-0.11.0.tar.gz", hash = "sha256:64d338d4e0914e91c1792321e6907b5a593f1ab1851de7fc269557a21b30ebbc"}, + {file = "pathspec-0.11.1-py3-none-any.whl", hash = "sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293"}, + {file = "pathspec-0.11.1.tar.gz", hash = "sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687"}, ] [[package]] @@ -5388,14 +5360,14 @@ files = [ [[package]] name = "platformdirs" -version = "3.0.0" +version = "3.1.1" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "platformdirs-3.0.0-py3-none-any.whl", hash = "sha256:b1d5eb14f221506f50d6604a561f4c5786d9e80355219694a1b244bcd96f4567"}, - {file = "platformdirs-3.0.0.tar.gz", hash = "sha256:8a1228abb1ef82d788f74139988b137e78692984ec7b08eaa6c65f1723af28f9"}, + {file = "platformdirs-3.1.1-py3-none-any.whl", hash = "sha256:e5986afb596e4bb5bde29a79ac9061aa955b94fca2399b7aaac4090860920dd8"}, + {file = "platformdirs-3.1.1.tar.gz", hash = "sha256:024996549ee88ec1a9aa99ff7f8fc819bb59e2c3477b410d90a16d32d6e707aa"}, ] [package.extras] @@ -5419,27 +5391,28 @@ tenacity = ">=6.2.0" [[package]] name = "plotly-resampler" -version = "0.8.1" +version = "0.8.3.2" description = "Visualizing large time series with plotly" category = "main" optional = true -python-versions = ">=3.7.1,<3.11" +python-versions = ">=3.7.1,<4.0.0" files = [ - {file = "plotly-resampler-0.8.1.tar.gz", hash = "sha256:774940a64bf6e6d9fe0eafff42f12ca1f3df7a3603efbcfcea5ed901fdc6b35a"}, - {file = "plotly_resampler-0.8.1-cp310-cp310-manylinux_2_35_x86_64.whl", hash = "sha256:185a5ef18675245690ca752f86a987b820daf13d822c09af7bf17255e16576a4"}, - {file = "plotly_resampler-0.8.1-cp38-cp38-manylinux_2_31_x86_64.whl", hash = "sha256:cc4d11bc7e339fe13000dba19497586d0e3e6b12de98d8f84a8e219398ee54b0"}, + {file = "plotly_resampler-0.8.3.2-cp310-cp310-manylinux_2_35_x86_64.whl", hash = "sha256:c3de2cef735e68fce5c64033cd725b650a9af25e56629bca81d12475c689e58b"}, + {file = "plotly_resampler-0.8.3.2.tar.gz", hash = "sha256:5cac870d6d269cdd71d28def4cae310c609c02aac636c0831176188f16021f44"}, ] [package.dependencies] dash = ">=2.2.0,<3.0.0" -Flask-Cors = ">=3.0.10,<4.0.0" jupyter-dash = ">=0.4.2" -numpy = ">=1.14" -orjson = ">=3.7.7,<4.0.0" +numpy = {version = ">=1.14", markers = "python_version < \"3.11\""} +orjson = ">=3.8.0,<4.0.0" pandas = ">=1.3.5,<2.0.0" plotly = ">=5.5.0,<6.0.0" trace-updater = ">=0.0.8" +[package.extras] +inline-persistent = ["Flask-Cors (>=3.0.10,<4.0.0)", "kaleido (==0.2.1)"] + [[package]] name = "pluggy" version = "1.0.0" @@ -5474,37 +5447,37 @@ requests = "*" [[package]] name = "pmdarima" -version = "2.0.2" +version = "2.0.3" description = "Python's forecast::auto.arima equivalent" category = "main" optional = true python-versions = ">=3.7" files = [ - {file = "pmdarima-2.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e54f1d9a01bac815e461c9a4089ea67e976a87c17d5770388d833820bbbe4362"}, - {file = "pmdarima-2.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:81b03950d65cbc3c758567db82b603416f341ff2ced8f344079401d8c0d7046a"}, - {file = "pmdarima-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:853c0a3b9565e37ed3982a0a238a75487b399a08ea91aa0c58c86427445b899a"}, - {file = "pmdarima-2.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7f20d79097b31ab6bf032b319c88874b38360f55b0463da2c8094aa316249a5f"}, - {file = "pmdarima-2.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:4746f4dcba743109576a9a7afe5da96a44ae5f7fd1dfd876bbca68b5871b8d30"}, - {file = "pmdarima-2.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:80ccf9dea20ee264aa2f18db3e6b1e38c3248424db579712d60c57cf2768fb5f"}, - {file = "pmdarima-2.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8b20c207f546b1ddb02cc5d97e5759789615da6aa8c8ee32ee2710a5fe1183c4"}, - {file = "pmdarima-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ea64c8fc00343e9fdfd9d4e303d8fb2f60449071e638a45f68352a06ee204ce"}, - {file = "pmdarima-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d7b9220a607e07708a322447c6e3a594c4f7b58df193251ef090608438d621e9"}, - {file = "pmdarima-2.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:cc48882962f757d53b74cf16ec4706d006c40ae25fc4a509dadc65ac7c96fb6c"}, - {file = "pmdarima-2.0.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fc4b38de2d0e816d075777c2082591fe38db715ffb01e1637e46553f9323e60e"}, - {file = "pmdarima-2.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba36d38bdd69a0c41095cb784370f52041498fb4c8a088ff83fd6349e75c2029"}, - {file = "pmdarima-2.0.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e6800acca7e3343d60d8197cec1f3c194748128663a379287f03cfc4bba6a541"}, - {file = "pmdarima-2.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:e94901c9d2a8c8f5b299ddb51a4133d688277ac4a282bf34d577235c283eaaa2"}, - {file = "pmdarima-2.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9882af95f30a3676711014f24191dbf37a6d027c10d729c0cae882474dfc9c29"}, - {file = "pmdarima-2.0.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e089c4304fc87505084d263ac6c51fb5610782162eb460857377af09e9e7cd04"}, - {file = "pmdarima-2.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e50c538bf7e21deb3eff63fdbde61ee801566ccb821233d67c36666d3082b8e"}, - {file = "pmdarima-2.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:34a06fa0cb996416784e7abf66ef068bd6e2774f2c59b8ede5e547b5c5c2c404"}, - {file = "pmdarima-2.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:ffd983738509194b612362449914e4997d07a3b087559e34e16ea78b230986f5"}, - {file = "pmdarima-2.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d13623b511554b2de48e5f03d9ae98636d8e4b2021285c05673da90144ccf5ff"}, - {file = "pmdarima-2.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b23e133ba306aa7c10ec185e5ad47b3702fbe4a99f4118a141677f7c46a46a2f"}, - {file = "pmdarima-2.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:678a307c97b4549ebd4f86500d4c1166b171413b81228527425fc671cdcd4527"}, - {file = "pmdarima-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fc612a700546a1b2d1e18a9670c7687779e1b5225ef59eabb89efaf28ed316b0"}, - {file = "pmdarima-2.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:09462430b363fbb7074ec97705b33fe02f2e979dec869652356e0f3489f3af49"}, - {file = "pmdarima-2.0.2.tar.gz", hash = "sha256:1c86897632dd105532d7e92c5d8681d43ae763c40bd3fffef43e740ce0b6b5d5"}, + {file = "pmdarima-2.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6091a48a9e7eb3e48fdcd748bb7bdfa90635cfde110c2a5fd1ebc0c30f6c8ef5"}, + {file = "pmdarima-2.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a9da525af80651e9d44e71c7483052e6bc68eb741768a15fb0142dbffdf50f42"}, + {file = "pmdarima-2.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14b606363f777b4ab17821c989637aa11f209ec8285d46666a7744236995798c"}, + {file = "pmdarima-2.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:68be6ce7f4f66247236c44f20ac27d7252a096bd61971cd766cd7b01c34f38b4"}, + {file = "pmdarima-2.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:95e2e4629932b7b657ea7e6f9db610a71cafce704d8f44d51b7643853a78c2fe"}, + {file = "pmdarima-2.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8749730e7911715de6e4087011c5d5bcd93b4b5f6ae150e6ff615d29ca0bf49d"}, + {file = "pmdarima-2.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fe5f3ed46eadb72f66fc295983331a8e25a84c7873f06b292ed0bad196007b56"}, + {file = "pmdarima-2.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d90729d8574966dbfc198ec1e3d7f30604e5b899fff0f8683b8160ee0bc24654"}, + {file = "pmdarima-2.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ffa898354370612df043c9ea12b536cf31ef88eb9f2558a4a73983420362fd06"}, + {file = "pmdarima-2.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:d74124f5eac7a273bc03a04bdffe3ed59f4960b5ada85fdfc5c6d5fe4a56dcc2"}, + {file = "pmdarima-2.0.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e89c69b5908777789fb20efe9202ab8ea8a2c7a19b6a9d3f65102483bdb3e4a1"}, + {file = "pmdarima-2.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77258305437a235c890bacb0a847e1cfbbc670ca8f92a7feab67f03088d3d3ef"}, + {file = "pmdarima-2.0.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cce9784abe6b4742b6c557432342585de4236a29978df037d17a6c3116a16940"}, + {file = "pmdarima-2.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:076f4904865f43510f8a82b3bdcd9d5e0f54de67217a9898d633ef6f625825c4"}, + {file = "pmdarima-2.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b4b0840080fbbbdc0eaaa988f268b8471087ca5f16047d3a95363418da1544b2"}, + {file = "pmdarima-2.0.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a9b0f49f36dc85b6b8fec2a8d1c56d5b6d2706ca478d1d90c95e37688bed4a01"}, + {file = "pmdarima-2.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47522b466e3894bfbbd58a39150a89ccf75ef0cb661e3ecb96c199e749e5f60b"}, + {file = "pmdarima-2.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0914aab1dfd840e49b67964c664db7439f2a59b10af3c8635eac32061707f436"}, + {file = "pmdarima-2.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:09d24b4bae78b04c496c9f99bd6bd050813bdda38e149b57bfa0fe1642613b93"}, + {file = "pmdarima-2.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d941ee5940f4a9796d7bd19e720b58a44eaa5331b28ccd7194f2bf6fc2d5ee1e"}, + {file = "pmdarima-2.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:849bc7d1ec929df538698f3eca752a5526090cbe5d625c11c28bf1885bd6509a"}, + {file = "pmdarima-2.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8ba53a952e374747e5be1263d74e10c9f780503fbd1a1e6156417a7d8e67507"}, + {file = "pmdarima-2.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d3cfaeaf31ff5c89ab60b4fc2e671c5ecd5d1bba99f3cd93c4a2bb19cba79d51"}, + {file = "pmdarima-2.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:e53685f08e971cdb1bf077418af55e7aae8397fcdefb3a335b7293d420245c62"}, + {file = "pmdarima-2.0.3.tar.gz", hash = "sha256:91acb3f7c12f3cfd6263efe323d3b8f94b58dcd242d68f11560a6c717001b01f"}, ] [package.dependencies] @@ -5776,23 +5749,6 @@ files = [ {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, ] -[[package]] -name = "pyally" -version = "1.1.2" -description = "Ally Invest API Wrapper" -category = "main" -optional = false -python-versions = "*" -files = [ - {file = "pyally-1.1.2-py3-none-any.whl", hash = "sha256:eeb128befcec02e0aac942f1700584f43ff8194955d19ff7a1f96d55de50db36"}, - {file = "pyally-1.1.2.tar.gz", hash = "sha256:d5dba065ddbf18261b83e29e5fffff731d9b03a4278eb9a9333a17f2d1772d4d"}, -] - -[package.dependencies] -pytz = "*" -requests = "*" -requests-oauthlib = "*" - [[package]] name = "pyarrow" version = "11.0.0" @@ -6053,48 +6009,48 @@ files = [ [[package]] name = "pydantic" -version = "1.10.5" +version = "1.10.6" description = "Data validation and settings management using python type hints" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "pydantic-1.10.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5920824fe1e21cbb3e38cf0f3dd24857c8959801d1031ce1fac1d50857a03bfb"}, - {file = "pydantic-1.10.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3bb99cf9655b377db1a9e47fa4479e3330ea96f4123c6c8200e482704bf1eda2"}, - {file = "pydantic-1.10.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2185a3b3d98ab4506a3f6707569802d2d92c3a7ba3a9a35683a7709ea6c2aaa2"}, - {file = "pydantic-1.10.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f582cac9d11c227c652d3ce8ee223d94eb06f4228b52a8adaafa9fa62e73d5c9"}, - {file = "pydantic-1.10.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c9e5b778b6842f135902e2d82624008c6a79710207e28e86966cd136c621bfee"}, - {file = "pydantic-1.10.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:72ef3783be8cbdef6bca034606a5de3862be6b72415dc5cb1fb8ddbac110049a"}, - {file = "pydantic-1.10.5-cp310-cp310-win_amd64.whl", hash = "sha256:45edea10b75d3da43cfda12f3792833a3fa70b6eee4db1ed6aed528cef17c74e"}, - {file = "pydantic-1.10.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:63200cd8af1af2c07964546b7bc8f217e8bda9d0a2ef0ee0c797b36353914984"}, - {file = "pydantic-1.10.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:305d0376c516b0dfa1dbefeae8c21042b57b496892d721905a6ec6b79494a66d"}, - {file = "pydantic-1.10.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fd326aff5d6c36f05735c7c9b3d5b0e933b4ca52ad0b6e4b38038d82703d35b"}, - {file = "pydantic-1.10.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6bb0452d7b8516178c969d305d9630a3c9b8cf16fcf4713261c9ebd465af0d73"}, - {file = "pydantic-1.10.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:9a9d9155e2a9f38b2eb9374c88f02fd4d6851ae17b65ee786a87d032f87008f8"}, - {file = "pydantic-1.10.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f836444b4c5ece128b23ec36a446c9ab7f9b0f7981d0d27e13a7c366ee163f8a"}, - {file = "pydantic-1.10.5-cp311-cp311-win_amd64.whl", hash = "sha256:8481dca324e1c7b715ce091a698b181054d22072e848b6fc7895cd86f79b4449"}, - {file = "pydantic-1.10.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:87f831e81ea0589cd18257f84386bf30154c5f4bed373b7b75e5cb0b5d53ea87"}, - {file = "pydantic-1.10.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ce1612e98c6326f10888df951a26ec1a577d8df49ddcaea87773bfbe23ba5cc"}, - {file = "pydantic-1.10.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58e41dd1e977531ac6073b11baac8c013f3cd8706a01d3dc74e86955be8b2c0c"}, - {file = "pydantic-1.10.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:6a4b0aab29061262065bbdede617ef99cc5914d1bf0ddc8bcd8e3d7928d85bd6"}, - {file = "pydantic-1.10.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:36e44a4de37b8aecffa81c081dbfe42c4d2bf9f6dff34d03dce157ec65eb0f15"}, - {file = "pydantic-1.10.5-cp37-cp37m-win_amd64.whl", hash = "sha256:261f357f0aecda005934e413dfd7aa4077004a174dafe414a8325e6098a8e419"}, - {file = "pydantic-1.10.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b429f7c457aebb7fbe7cd69c418d1cd7c6fdc4d3c8697f45af78b8d5a7955760"}, - {file = "pydantic-1.10.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:663d2dd78596c5fa3eb996bc3f34b8c2a592648ad10008f98d1348be7ae212fb"}, - {file = "pydantic-1.10.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51782fd81f09edcf265823c3bf43ff36d00db246eca39ee765ef58dc8421a642"}, - {file = "pydantic-1.10.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c428c0f64a86661fb4873495c4fac430ec7a7cef2b8c1c28f3d1a7277f9ea5ab"}, - {file = "pydantic-1.10.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:76c930ad0746c70f0368c4596020b736ab65b473c1f9b3872310a835d852eb19"}, - {file = "pydantic-1.10.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3257bd714de9db2102b742570a56bf7978e90441193acac109b1f500290f5718"}, - {file = "pydantic-1.10.5-cp38-cp38-win_amd64.whl", hash = "sha256:f5bee6c523d13944a1fdc6f0525bc86dbbd94372f17b83fa6331aabacc8fd08e"}, - {file = "pydantic-1.10.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:532e97c35719f137ee5405bd3eeddc5c06eb91a032bc755a44e34a712420daf3"}, - {file = "pydantic-1.10.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ca9075ab3de9e48b75fa8ccb897c34ccc1519177ad8841d99f7fd74cf43be5bf"}, - {file = "pydantic-1.10.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd46a0e6296346c477e59a954da57beaf9c538da37b9df482e50f836e4a7d4bb"}, - {file = "pydantic-1.10.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3353072625ea2a9a6c81ad01b91e5c07fa70deb06368c71307529abf70d23325"}, - {file = "pydantic-1.10.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:3f9d9b2be177c3cb6027cd67fbf323586417868c06c3c85d0d101703136e6b31"}, - {file = "pydantic-1.10.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b473d00ccd5c2061fd896ac127b7755baad233f8d996ea288af14ae09f8e0d1e"}, - {file = "pydantic-1.10.5-cp39-cp39-win_amd64.whl", hash = "sha256:5f3bc8f103b56a8c88021d481410874b1f13edf6e838da607dcb57ecff9b4594"}, - {file = "pydantic-1.10.5-py3-none-any.whl", hash = "sha256:7c5b94d598c90f2f46b3a983ffb46ab806a67099d118ae0da7ef21a2a4033b28"}, - {file = "pydantic-1.10.5.tar.gz", hash = "sha256:9e337ac83686645a46db0e825acceea8e02fca4062483f40e9ae178e8bd1103a"}, + {file = "pydantic-1.10.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f9289065611c48147c1dd1fd344e9d57ab45f1d99b0fb26c51f1cf72cd9bcd31"}, + {file = "pydantic-1.10.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8c32b6bba301490d9bb2bf5f631907803135e8085b6aa3e5fe5a770d46dd0160"}, + {file = "pydantic-1.10.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd9b9e98068fa1068edfc9eabde70a7132017bdd4f362f8b4fd0abed79c33083"}, + {file = "pydantic-1.10.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c84583b9df62522829cbc46e2b22e0ec11445625b5acd70c5681ce09c9b11c4"}, + {file = "pydantic-1.10.6-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:b41822064585fea56d0116aa431fbd5137ce69dfe837b599e310034171996084"}, + {file = "pydantic-1.10.6-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:61f1f08adfaa9cc02e0cbc94f478140385cbd52d5b3c5a657c2fceb15de8d1fb"}, + {file = "pydantic-1.10.6-cp310-cp310-win_amd64.whl", hash = "sha256:32937835e525d92c98a1512218db4eed9ddc8f4ee2a78382d77f54341972c0e7"}, + {file = "pydantic-1.10.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bbd5c531b22928e63d0cb1868dee76123456e1de2f1cb45879e9e7a3f3f1779b"}, + {file = "pydantic-1.10.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e277bd18339177daa62a294256869bbe84df1fb592be2716ec62627bb8d7c81d"}, + {file = "pydantic-1.10.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f15277d720aa57e173954d237628a8d304896364b9de745dcb722f584812c7"}, + {file = "pydantic-1.10.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b243b564cea2576725e77aeeda54e3e0229a168bc587d536cd69941e6797543d"}, + {file = "pydantic-1.10.6-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3ce13a558b484c9ae48a6a7c184b1ba0e5588c5525482681db418268e5f86186"}, + {file = "pydantic-1.10.6-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3ac1cd4deed871dfe0c5f63721e29debf03e2deefa41b3ed5eb5f5df287c7b70"}, + {file = "pydantic-1.10.6-cp311-cp311-win_amd64.whl", hash = "sha256:b1eb6610330a1dfba9ce142ada792f26bbef1255b75f538196a39e9e90388bf4"}, + {file = "pydantic-1.10.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4ca83739c1263a044ec8b79df4eefc34bbac87191f0a513d00dd47d46e307a65"}, + {file = "pydantic-1.10.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea4e2a7cb409951988e79a469f609bba998a576e6d7b9791ae5d1e0619e1c0f2"}, + {file = "pydantic-1.10.6-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:53de12b4608290992a943801d7756f18a37b7aee284b9ffa794ee8ea8153f8e2"}, + {file = "pydantic-1.10.6-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:60184e80aac3b56933c71c48d6181e630b0fbc61ae455a63322a66a23c14731a"}, + {file = "pydantic-1.10.6-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:415a3f719ce518e95a92effc7ee30118a25c3d032455d13e121e3840985f2efd"}, + {file = "pydantic-1.10.6-cp37-cp37m-win_amd64.whl", hash = "sha256:72cb30894a34d3a7ab6d959b45a70abac8a2a93b6480fc5a7bfbd9c935bdc4fb"}, + {file = "pydantic-1.10.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3091d2eaeda25391405e36c2fc2ed102b48bac4b384d42b2267310abae350ca6"}, + {file = "pydantic-1.10.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:751f008cd2afe812a781fd6aa2fb66c620ca2e1a13b6a2152b1ad51553cb4b77"}, + {file = "pydantic-1.10.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:12e837fd320dd30bd625be1b101e3b62edc096a49835392dcf418f1a5ac2b832"}, + {file = "pydantic-1.10.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:587d92831d0115874d766b1f5fddcdde0c5b6c60f8c6111a394078ec227fca6d"}, + {file = "pydantic-1.10.6-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:476f6674303ae7965730a382a8e8d7fae18b8004b7b69a56c3d8fa93968aa21c"}, + {file = "pydantic-1.10.6-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3a2be0a0f32c83265fd71a45027201e1278beaa82ea88ea5b345eea6afa9ac7f"}, + {file = "pydantic-1.10.6-cp38-cp38-win_amd64.whl", hash = "sha256:0abd9c60eee6201b853b6c4be104edfba4f8f6c5f3623f8e1dba90634d63eb35"}, + {file = "pydantic-1.10.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6195ca908045054dd2d57eb9c39a5fe86409968b8040de8c2240186da0769da7"}, + {file = "pydantic-1.10.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:43cdeca8d30de9a897440e3fb8866f827c4c31f6c73838e3a01a14b03b067b1d"}, + {file = "pydantic-1.10.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c19eb5163167489cb1e0161ae9220dadd4fc609a42649e7e84a8fa8fff7a80f"}, + {file = "pydantic-1.10.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:012c99a9c0d18cfde7469aa1ebff922e24b0c706d03ead96940f5465f2c9cf62"}, + {file = "pydantic-1.10.6-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:528dcf7ec49fb5a84bf6fe346c1cc3c55b0e7603c2123881996ca3ad79db5bfc"}, + {file = "pydantic-1.10.6-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:163e79386c3547c49366e959d01e37fc30252285a70619ffc1b10ede4758250a"}, + {file = "pydantic-1.10.6-cp39-cp39-win_amd64.whl", hash = "sha256:189318051c3d57821f7233ecc94708767dd67687a614a4e8f92b4a020d4ffd06"}, + {file = "pydantic-1.10.6-py3-none-any.whl", hash = "sha256:acc6783751ac9c9bc4680379edd6d286468a1dc8d7d9906cd6f1186ed682b2b0"}, + {file = "pydantic-1.10.6.tar.gz", hash = "sha256:cf95adb0d1671fc38d8c43dd921ad5814a735e7d9b4d9e437c088002863854fd"}, ] [package.dependencies] @@ -6419,13 +6375,13 @@ pyobjc-core = ">=9.0.1" [[package]] name = "pyod" -version = "1.0.7" +version = "1.0.8" description = "A Comprehensive and Scalable Python Library for Outlier Detection (Anomaly Detection)" category = "main" optional = true python-versions = "*" files = [ - {file = "pyod-1.0.7.tar.gz", hash = "sha256:4f3875bbd2ea07584459f54a23469246137db79da844f83210d12050f7cc5694"}, + {file = "pyod-1.0.8.tar.gz", hash = "sha256:a15929b77858d49798e12925dfb32f2ede7c97df2ee96977dcafad25bae616b6"}, ] [package.dependencies] @@ -6436,7 +6392,6 @@ numpy = ">=1.19" scikit_learn = ">=0.20.0" scipy = ">=1.5.1" six = "*" -statsmodels = "*" [[package]] name = "pyotp" @@ -6610,14 +6565,14 @@ pytest = ">=5.0.0" [[package]] name = "pytest-xdist" -version = "3.2.0" +version = "3.2.1" description = "pytest xdist plugin for distributed testing, most importantly across multiple CPUs" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "pytest-xdist-3.2.0.tar.gz", hash = "sha256:fa10f95a2564cd91652f2d132725183c3b590d9fdcdec09d3677386ecf4c1ce9"}, - {file = "pytest_xdist-3.2.0-py3-none-any.whl", hash = "sha256:336098e3bbd8193276867cc87db8b22903c3927665dff9d1ac8684c02f597b68"}, + {file = "pytest-xdist-3.2.1.tar.gz", hash = "sha256:1849bd98d8b242b948e472db7478e090bf3361912a8fed87992ed94085f54727"}, + {file = "pytest_xdist-3.2.1-py3-none-any.whl", hash = "sha256:37290d161638a20b672401deef1cba812d110ac27e35d213f091d15b8beb40c9"}, ] [package.dependencies] @@ -6946,89 +6901,89 @@ files = [ [[package]] name = "pyzmq" -version = "25.0.0" +version = "25.0.1" description = "Python bindings for 0MQ" category = "main" optional = false python-versions = ">=3.6" files = [ - {file = "pyzmq-25.0.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:2d05d904f03ddf1e0d83d97341354dfe52244a619b5a1440a5f47a5b3451e84e"}, - {file = "pyzmq-25.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a154ef810d44f9d28868be04641f837374a64e7449df98d9208e76c260c7ef1"}, - {file = "pyzmq-25.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:487305c2a011fdcf3db1f24e8814bb76d23bc4d2f46e145bc80316a59a9aa07d"}, - {file = "pyzmq-25.0.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e7b87638ee30ab13230e37ce5331b3e730b1e0dda30120b9eeec3540ed292c8"}, - {file = "pyzmq-25.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75243e422e85a62f0ab7953dc315452a56b2c6a7e7d1a3c3109ac3cc57ed6b47"}, - {file = "pyzmq-25.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:31e523d067ce44a04e876bed3ff9ea1ff8d1b6636d16e5fcace9d22f8c564369"}, - {file = "pyzmq-25.0.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8539216173135e9e89f6b1cc392e74e6b935b91e8c76106cf50e7a02ab02efe5"}, - {file = "pyzmq-25.0.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:2754fa68da08a854f4816e05160137fa938a2347276471103d31e04bcee5365c"}, - {file = "pyzmq-25.0.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4a1bc30f0c18444d51e9b0d0dd39e3a4e7c53ee74190bebef238cd58de577ea9"}, - {file = "pyzmq-25.0.0-cp310-cp310-win32.whl", hash = "sha256:01d53958c787cfea34091fcb8ef36003dbb7913b8e9f8f62a0715234ebc98b70"}, - {file = "pyzmq-25.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:58fc3ad5e1cfd2e6d24741fbb1e216b388115d31b0ca6670f894187f280b6ba6"}, - {file = "pyzmq-25.0.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:e4bba04ea779a3d7ef25a821bb63fd0939142c88e7813e5bd9c6265a20c523a2"}, - {file = "pyzmq-25.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:af1fbfb7ad6ac0009ccee33c90a1d303431c7fb594335eb97760988727a37577"}, - {file = "pyzmq-25.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85456f0d8f3268eecd63dede3b99d5bd8d3b306310c37d4c15141111d22baeaf"}, - {file = "pyzmq-25.0.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0645b5a2d2a06fd8eb738018490c514907f7488bf9359c6ee9d92f62e844b76f"}, - {file = "pyzmq-25.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f72ea279b2941a5203e935a4588b9ba8a48aeb9a926d9dfa1986278bd362cb8"}, - {file = "pyzmq-25.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:4e295f7928a31ae0f657e848c5045ba6d693fe8921205f408ca3804b1b236968"}, - {file = "pyzmq-25.0.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ac97e7d647d5519bcef48dd8d3d331f72975afa5c4496c95f6e854686f45e2d9"}, - {file = "pyzmq-25.0.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:656281d496aaf9ca4fd4cea84e6d893e3361057c4707bd38618f7e811759103c"}, - {file = "pyzmq-25.0.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1f6116991568aac48b94d6d8aaed6157d407942ea385335a6ed313692777fb9d"}, - {file = "pyzmq-25.0.0-cp311-cp311-win32.whl", hash = "sha256:0282bba9aee6e0346aa27d6c69b5f7df72b5a964c91958fc9e0c62dcae5fdcdc"}, - {file = "pyzmq-25.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:526f884a27e8bba62fe1f4e07c62be2cfe492b6d432a8fdc4210397f8cf15331"}, - {file = "pyzmq-25.0.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:ccb3e1a863222afdbda42b7ca8ac8569959593d7abd44f5a709177d6fa27d266"}, - {file = "pyzmq-25.0.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4046d03100aca266e70d54a35694cb35d6654cfbef633e848b3c4a8d64b9d187"}, - {file = "pyzmq-25.0.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3100dddcada66ec5940ed6391ebf9d003cc3ede3d320748b2737553019f58230"}, - {file = "pyzmq-25.0.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7877264aa851c19404b1bb9dbe6eed21ea0c13698be1eda3784aab3036d1c861"}, - {file = "pyzmq-25.0.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:5049e75cc99db65754a3da5f079230fb8889230cf09462ec972d884d1704a3ed"}, - {file = "pyzmq-25.0.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:81f99fb1224d36eb91557afec8cdc2264e856f3464500b55749020ce4c848ef2"}, - {file = "pyzmq-25.0.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:a1cd4a95f176cdc0ee0a82d49d5830f13ae6015d89decbf834c273bc33eeb3d3"}, - {file = "pyzmq-25.0.0-cp36-cp36m-win32.whl", hash = "sha256:926236ca003aec70574754f39703528947211a406f5c6c8b3e50eca04a9e87fc"}, - {file = "pyzmq-25.0.0-cp36-cp36m-win_amd64.whl", hash = "sha256:94f0a7289d0f5c80807c37ebb404205e7deb737e8763eb176f4770839ee2a287"}, - {file = "pyzmq-25.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f3f96d452e9580cb961ece2e5a788e64abaecb1232a80e61deffb28e105ff84a"}, - {file = "pyzmq-25.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:930e6ad4f2eaac31a3d0c2130619d25db754b267487ebc186c6ad18af2a74018"}, - {file = "pyzmq-25.0.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e1081d7030a1229c8ff90120346fb7599b54f552e98fcea5170544e7c6725aab"}, - {file = "pyzmq-25.0.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:531866c491aee5a1e967c286cfa470dffac1e2a203b1afda52d62b58782651e9"}, - {file = "pyzmq-25.0.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:fc7c1421c5b1c916acf3128bf3cc7ea7f5018b58c69a6866d70c14190e600ce9"}, - {file = "pyzmq-25.0.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:9a2d5e419bd39a1edb6cdd326d831f0120ddb9b1ff397e7d73541bf393294973"}, - {file = "pyzmq-25.0.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:183e18742be3621acf8908903f689ec520aee3f08449bfd29f583010ca33022b"}, - {file = "pyzmq-25.0.0-cp37-cp37m-win32.whl", hash = "sha256:02f5cb60a7da1edd5591a15efa654ffe2303297a41e1b40c3c8942f8f11fc17c"}, - {file = "pyzmq-25.0.0-cp37-cp37m-win_amd64.whl", hash = "sha256:cac602e02341eaaf4edfd3e29bd3fdef672e61d4e6dfe5c1d065172aee00acee"}, - {file = "pyzmq-25.0.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:e14df47c1265356715d3d66e90282a645ebc077b70b3806cf47efcb7d1d630cb"}, - {file = "pyzmq-25.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:293a7c2128690f496057f1f1eb6074f8746058d13588389981089ec45d8fdc77"}, - {file = "pyzmq-25.0.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:731b208bc9412deeb553c9519dca47136b5a01ca66667cafd8733211941b17e4"}, - {file = "pyzmq-25.0.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b055a1cddf8035966ad13aa51edae5dc8f1bba0b5d5e06f7a843d8b83dc9b66b"}, - {file = "pyzmq-25.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17e1cb97d573ea84d7cd97188b42ca6f611ab3ee600f6a75041294ede58e3d20"}, - {file = "pyzmq-25.0.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:60ecbfe7669d3808ffa8a7dd1487d6eb8a4015b07235e3b723d4b2a2d4de7203"}, - {file = "pyzmq-25.0.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4c25c95416133942280faaf068d0fddfd642b927fb28aaf4ab201a738e597c1e"}, - {file = "pyzmq-25.0.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:be05504af0619d1cffa500af1e0ede69fb683f301003851f5993b5247cc2c576"}, - {file = "pyzmq-25.0.0-cp38-cp38-win32.whl", hash = "sha256:6bf3842af37af43fa953e96074ebbb5315f6a297198f805d019d788a1021dbc8"}, - {file = "pyzmq-25.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:b90bb8dfbbd138558f1f284fecfe328f7653616ff9a972433a00711d9475d1a9"}, - {file = "pyzmq-25.0.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:62b9e80890c0d2408eb42d5d7e1fc62a5ce71be3288684788f74cf3e59ffd6e2"}, - {file = "pyzmq-25.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:484c2c4ee02c1edc07039f42130bd16e804b1fe81c4f428e0042e03967f40c20"}, - {file = "pyzmq-25.0.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9ca6db34b26c4d3e9b0728841ec9aa39484eee272caa97972ec8c8e231b20c7e"}, - {file = "pyzmq-25.0.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:610d2d112acd4e5501fac31010064a6c6efd716ceb968e443cae0059eb7b86de"}, - {file = "pyzmq-25.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3594c0ff604e685d7e907860b61d0e10e46c74a9ffca168f6e9e50ea934ee440"}, - {file = "pyzmq-25.0.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c21a5f4e54a807df5afdef52b6d24ec1580153a6bcf0607f70a6e1d9fa74c5c3"}, - {file = "pyzmq-25.0.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:4725412e27612f0d7d7c2f794d89807ad0227c2fc01dd6146b39ada49c748ef9"}, - {file = "pyzmq-25.0.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4d3d604fe0a67afd1aff906e54da557a5203368a99dcc50a70eef374f1d2abef"}, - {file = "pyzmq-25.0.0-cp39-cp39-win32.whl", hash = "sha256:3670e8c5644768f214a3b598fe46378a4a6f096d5fb82a67dfd3440028460565"}, - {file = "pyzmq-25.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:e99629a976809fe102ef73e856cf4b2660acd82a412a51e80ba2215e523dfd0a"}, - {file = "pyzmq-25.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:66509c48f7446b640eeae24b60c9c1461799a27b1b0754e438582e36b5af3315"}, - {file = "pyzmq-25.0.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a9c464cc508177c09a5a6122b67f978f20e2954a21362bf095a0da4647e3e908"}, - {file = "pyzmq-25.0.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:28bcb2e66224a7ac2843eb632e4109d6b161479e7a2baf24e37210461485b4f1"}, - {file = "pyzmq-25.0.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0e7ef9ac807db50b4eb6f534c5dcc22f998f5dae920cc28873d2c1d080a4fc9"}, - {file = "pyzmq-25.0.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:5050f5c50b58a6e38ccaf9263a356f74ef1040f5ca4030225d1cb1a858c5b7b6"}, - {file = "pyzmq-25.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2a73af6504e0d2805e926abf136ebf536735a13c22f709be7113c2ec65b4bec3"}, - {file = "pyzmq-25.0.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0e8d00228db627ddd1b418c7afd81820b38575f237128c9650365f2dd6ac3443"}, - {file = "pyzmq-25.0.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5605621f2181f20b71f13f698944deb26a0a71af4aaf435b34dd90146092d530"}, - {file = "pyzmq-25.0.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6136bfb0e5a9cf8c60c6ac763eb21f82940a77e6758ea53516c8c7074f4ff948"}, - {file = "pyzmq-25.0.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:0a90b2480a26aef7c13cff18703ba8d68e181facb40f78873df79e6d42c1facc"}, - {file = "pyzmq-25.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:00c94fd4c9dd3c95aace0c629a7fa713627a5c80c1819326b642adf6c4b8e2a2"}, - {file = "pyzmq-25.0.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20638121b0bdc80777ce0ec8c1f14f1ffec0697a1f88f0b564fa4a23078791c4"}, - {file = "pyzmq-25.0.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b6f75b4b8574f3a8a0d6b4b52606fc75b82cb4391471be48ab0b8677c82f9ed4"}, - {file = "pyzmq-25.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cbb885f347eba7ab7681c450dee5b14aed9f153eec224ec0c3f299273d9241f"}, - {file = "pyzmq-25.0.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c48f257da280b3be6c94e05bd575eddb1373419dbb1a72c3ce64e88f29d1cd6d"}, - {file = "pyzmq-25.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:866eabf7c1315ef2e93e34230db7cbf672e0d7c626b37c11f7e870c8612c3dcc"}, - {file = "pyzmq-25.0.0.tar.gz", hash = "sha256:f330a1a2c7f89fd4b0aa4dcb7bf50243bf1c8da9a2f1efc31daf57a2046b31f2"}, + {file = "pyzmq-25.0.1-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:94f65e13e6df035b0ae90d49adfe7891aa4e7bdeaa65265729fecc04ab3eb0fe"}, + {file = "pyzmq-25.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f0399450d970990705ce47ed65f5efed3e4627dfc80628c3798100e7b72e023b"}, + {file = "pyzmq-25.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f29709b0431668a967d7ff0394b00a865e7b7dde827ee0a47938b705b7c4aec3"}, + {file = "pyzmq-25.0.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4fee9420b34c0ab426f105926a701a3d73f878fe77f07a1b92e0b78d1e2c795c"}, + {file = "pyzmq-25.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57be375c6bc66b0f685cd298e5c1c3d7ee34a254145b8087aed6e25db372b0f3"}, + {file = "pyzmq-25.0.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a3309b2c5a5be3d48c9ade77b340361764449aa22854ac65935b1e6c0cdabe2c"}, + {file = "pyzmq-25.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7574d24579e83ee8c5d3b14769e7ba895161c43a601e911dd89d449e545e00ad"}, + {file = "pyzmq-25.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:041d617091258133e602919b28fdce4d3e2f8aedcd1e8b34c599653bc288d59e"}, + {file = "pyzmq-25.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7897ba8c3fedc6b3023bad676ceb69dbf90c077ff18ae3133ba43db47417cc72"}, + {file = "pyzmq-25.0.1-cp310-cp310-win32.whl", hash = "sha256:c462f70dadbd4649e572ca7cd1e7cf3305a8c2afc53b84214c0a7c0c3af8a657"}, + {file = "pyzmq-25.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:e3a721710992cf0e213bbb7be48fb0f32202e8d01f556c196c870373bb9ad4f4"}, + {file = "pyzmq-25.0.1-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:b0a0fcf56279b9f3acc9b36a83feb7640c51b0db444b6870e4406d002be1d514"}, + {file = "pyzmq-25.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:95aff52fc847ea5755d2370f86e379ba2ed6eb67a0a6f90f0e8e99c553693b81"}, + {file = "pyzmq-25.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b55366e6c11e1ef7403d072b9867b62cf63eebd31dd038ef65bc8d65572854f6"}, + {file = "pyzmq-25.0.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:64a2bc72bcad705ee42a8fe877478ddadb7e260e806562833d3d814125e28a44"}, + {file = "pyzmq-25.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ca66aa24422d7f324acd5cb7fc7df616eb6f0205e059393fb108702e33e90c7"}, + {file = "pyzmq-25.0.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:58d5dfec2e2befd09b04c4683b3c984d2203cf6e054d0f9786be3826737ad612"}, + {file = "pyzmq-25.0.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3549292d65987e422e2c9f105b1485448381f489d8a6b6b040fc8b8f497bd578"}, + {file = "pyzmq-25.0.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:5b1ca8b0df50d1ac88857ffe9ebd1347e0a5bb5f6e1d99940fdd7df0ffdefb49"}, + {file = "pyzmq-25.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a1a107e89cdcf799060ba4fa85fd3c942e19df7b24eb2600618b2406cc73c18e"}, + {file = "pyzmq-25.0.1-cp311-cp311-win32.whl", hash = "sha256:0f22ba4e9041549a5a3f5a545169dda52fa0aa7b5ef46b336cbe6679c4c3c134"}, + {file = "pyzmq-25.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:0644c0d5c73e4bfeee8148f638ab16ad783df1c4d6c2f968552a26a43fb002a1"}, + {file = "pyzmq-25.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:c5eb4b17d73b1fc208a4faa6b5918983ccc961770aa37741891f61db302dae4e"}, + {file = "pyzmq-25.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:649dd55948144a108041397f07c1299086ce1c85c2e166831db3a33dac1d0c7f"}, + {file = "pyzmq-25.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c99fd8d3efc138d6a7fb1e822133f62bb18ffec66dc6d398dcb2ac2ab8eb2cb0"}, + {file = "pyzmq-25.0.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d72d69d4bb37c05a446d10bc40b391cf8fb7572654fb73fa69e7d2a395197e65"}, + {file = "pyzmq-25.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:036dbf8373aed4ccf56d58c561b23601b8f33919ec1093d8c77b37ac1259702d"}, + {file = "pyzmq-25.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:861c37649c75a2ecfc2034a32b9d5ca744e1e0cddcbf65afbd8027cf7d9755be"}, + {file = "pyzmq-25.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:92f04d63aecbb71d41f7db5f988167ef429f96d8197fd46684688cdb513e8a2e"}, + {file = "pyzmq-25.0.1-cp36-cp36m-win32.whl", hash = "sha256:866a4e918f1f4b2f83e9982b817df257910e3e50e456ffa74f141a10adcd11d1"}, + {file = "pyzmq-25.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:ec29c880b82cd38a63810a93b77e13f167e05732049101947772eed9ae805097"}, + {file = "pyzmq-25.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0241a334e39aa74e4ba0ae5f9e29521f1b48b8d56bf707f25f322c04eb423e99"}, + {file = "pyzmq-25.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3b7032f55b1ed2cd8c349a89e467dca2338b7765fab82cb64c3504e49adaf51"}, + {file = "pyzmq-25.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:960f98f562ee6a50ecf283bc62479d00f5ee10e9068a21683b9e961cd87c9261"}, + {file = "pyzmq-25.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:835da498b71570d56e5526de4d5b36fa10dd9b8a82e2c405f963afeb51ff5bdc"}, + {file = "pyzmq-25.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:21de2ef6099fa8d6a3c2dc15aaca58e9f9ffdcc7b82a246590aa9564815699d9"}, + {file = "pyzmq-25.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1e448a5a294958e915a7e1b664e6fbfcd3814989d381fb068673317f6f3ea3f8"}, + {file = "pyzmq-25.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:40d909bdc8a2d64ad260925154712602ee6a0425ae0b08bce78a19adfdc2f05b"}, + {file = "pyzmq-25.0.1-cp37-cp37m-win32.whl", hash = "sha256:6ff37f2b818df25c887fd40bb434569db7ff66b35f5dfff6f40cc476aee92e3f"}, + {file = "pyzmq-25.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:f66ee27a0221771bbaa2cce456e8ca890569c3d18b08b955eb6420c12516537c"}, + {file = "pyzmq-25.0.1-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:1003bbae89435eadec03b4fa3bb6516dd1529fb09ae5704284f7400cc77009ba"}, + {file = "pyzmq-25.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:dde7a65a8bfa88aa1721add504320f8344272542291ce4e7c77993fa32901567"}, + {file = "pyzmq-25.0.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:20b6155429d3b57e9e7bd11f1680985ef8b5b0868f1a64073fb8c01326c7c80c"}, + {file = "pyzmq-25.0.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e37a764cbf91c1ed9a02e4fede79a414284aca2a0b7d92d82a3c7b82d678ec2d"}, + {file = "pyzmq-25.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa56a362066b3a853a64d35693a08046f640961efcc0e7643768916403e72e70"}, + {file = "pyzmq-25.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c4bdf1241886d39d816535d3ef9fc325bbf02470c9fd5f2cb62706eeb834f7f2"}, + {file = "pyzmq-25.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:446acbac24427ef42bff61a807ddcad8d03df78fb976184a4d7d6f4b1e7d8a67"}, + {file = "pyzmq-25.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b39847501d229e5fab155d88a565edfb182cdd3f7046f15a7f2df9c77cdc422d"}, + {file = "pyzmq-25.0.1-cp38-cp38-win32.whl", hash = "sha256:cba6b81b653d789d76e438c2e77b49f610b23e84b3bb43b99100f08a0a5d637b"}, + {file = "pyzmq-25.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:6eca6b90c4fb290efd27582780b5eaf048887a32b2c5fcd6330819192cb07b38"}, + {file = "pyzmq-25.0.1-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:58207a6709e53b723105bac6bb3c6795ee134f7e71351f39c09d52ac235c6b0d"}, + {file = "pyzmq-25.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c62084f37682e7ee4064e8310078be4f6f7687bf528ae5761e2ba7216c5b8949"}, + {file = "pyzmq-25.0.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9c44e9f04f8ed99c6f2e9e49f29d400d7557dd9e9e3f64e1e8a595aedc4258a2"}, + {file = "pyzmq-25.0.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c635d1c40d341835066931a018e378428dfbe0347ed4bb45a6b57f7d8c34196e"}, + {file = "pyzmq-25.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eef93b5574c9ff36b4be376555efd369bd55b99bcc7be72f23bd38102dd9392b"}, + {file = "pyzmq-25.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:44bc81099ab33388f6c061c1b194307d877428cb2b18282d0385584d5c73ed72"}, + {file = "pyzmq-25.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6d988844ed6caa21b0076b64671e83a136d93c57f1ae5a72b915661af55d313b"}, + {file = "pyzmq-25.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9d5eb6e88ae8a8734f239ffe1ed90559a426cf5b859b8ee66e0cd43fc5daf5c9"}, + {file = "pyzmq-25.0.1-cp39-cp39-win32.whl", hash = "sha256:f6b45db9de4c8adbf5fda58e827a32315d282cfb01e54dc74e7c7ccc0988c010"}, + {file = "pyzmq-25.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:47eeb94b78aa442568b85ad28f85bd37a9c3c34d052cbf8ebf8622c45f23a9cd"}, + {file = "pyzmq-25.0.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0ed7475f3adf0c7750d75740b3267947b501a33f4625ceae709fda2e75ec9ed7"}, + {file = "pyzmq-25.0.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6d09c22ed4d0afcc662d17c2429a03fc1fae7fe7e3bc1f413e744bccfeaabdc3"}, + {file = "pyzmq-25.0.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:703ec5f5a8369c09d8f3eb626358bdb590a2b1375bcce8b7da01b3a03f8b8668"}, + {file = "pyzmq-25.0.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20aea31cc0d1f6c3fb4685db08b4c771545cf3fed3c4b4c8942c0a4e97042ec8"}, + {file = "pyzmq-25.0.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:b1c03b942557bb366fd3dc377a15763d5d688de1328228136c75e50f968333cc"}, + {file = "pyzmq-25.0.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4e8a5ced9d92837f52ccdae6351c627b5012669727bc3eede2dc0f581eca1d0e"}, + {file = "pyzmq-25.0.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d78f840d88244272fb7252e47522b1179833aff7ec64583bda3d21259c9c2c20"}, + {file = "pyzmq-25.0.1-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c3f78fa80780e24d294f9421123cb3bd3b68677953c53da85273a22d1c983298"}, + {file = "pyzmq-25.0.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f6de4305e02560111a5d4555758faa85d44a5bff70cccff58dbf30c81a079f0"}, + {file = "pyzmq-25.0.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:34a1b1a8ce9b20e01aba71b9279d9b1d4e5980a6a4e42092180e16628a444ca1"}, + {file = "pyzmq-25.0.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:625759a0112af7c3fb560de5724d749729f00b901f7625d1a3f3fb38897544b1"}, + {file = "pyzmq-25.0.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8cff159b21438c24476a49865f3d5700c9cc5833600661bc0e672decec2ff357"}, + {file = "pyzmq-25.0.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4cc47652d990de9ef967c494c526d73920ef064fef0444355a7cebec6fc50542"}, + {file = "pyzmq-25.0.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44db5162a6881f7d740dec65917f38f9bfbc5ad9a10e06d7d5deebb27eb63939"}, + {file = "pyzmq-25.0.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f38bf2c60a3f7b87cf5177043eb7a331a4f53bc9305a2452decbd42ad0c98741"}, + {file = "pyzmq-25.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:b1cf4becd15669bc62a41c1b1bb742e22ac25965134e4254cde82a4dc2554b1b"}, + {file = "pyzmq-25.0.1.tar.gz", hash = "sha256:44a24f7ce44e70d20e2a4c9ba5af70b4611df7a4b920eed2c8e0bdd5a5af225f"}, ] [package.dependencies] @@ -7583,8 +7538,6 @@ files = [ {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:045e0626baf1c52e5527bd5db361bc83180faaba2ff586e763d3d5982a876a9e"}, {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-macosx_12_6_arm64.whl", hash = "sha256:721bc4ba4525f53f6a611ec0967bdcee61b31df5a56801281027a3a6d1c2daf5"}, {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:41d0f1fa4c6830176eef5b276af04c89320ea616655d01327d5ce65e50575c94"}, - {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-win32.whl", hash = "sha256:f6d3d39611ac2e4f62c3128a9eed45f19a6608670c5a2f4f07f24e8de3441d38"}, - {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-win_amd64.whl", hash = "sha256:da538167284de58a52109a9b89b8f6a53ff8437dd6dc26d33b57bf6699153122"}, {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:4b3a93bb9bc662fc1f99c5c3ea8e623d8b23ad22f861eb6fce9377ac07ad6072"}, {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-macosx_12_0_arm64.whl", hash = "sha256:a234a20ae07e8469da311e182e70ef6b199d0fbeb6c6cc2901204dd87fb867e8"}, {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:15910ef4f3e537eea7fe45f8a5d19997479940d9196f357152a09031c5be59f3"}, @@ -7641,33 +7594,33 @@ files = [ [[package]] name = "scikit-learn" -version = "1.2.1" +version = "1.2.2" description = "A set of python modules for machine learning and data mining" category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "scikit-learn-1.2.1.tar.gz", hash = "sha256:fbf8a5c893c9b4b99bcc7ed8fb3e8500957a113f4101860386d06635520f7cfb"}, - {file = "scikit_learn-1.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bed9f75763bd392c094bf474c7ab75a01d68b15146ea7a20c0f9ff6fb3063dad"}, - {file = "scikit_learn-1.2.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:c9285275a435d1f8f47bbe3500346ab9ead2499e0e090518404d318ea90d1c1c"}, - {file = "scikit_learn-1.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc838b5a4057c55ba81b82316ea8bf443af445f96eb21500b0e40618017e0923"}, - {file = "scikit_learn-1.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8bcd303dd982494842a3f482f844d539484c6043b4eed896b43ea8e5f609a21"}, - {file = "scikit_learn-1.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:a9abf17d177df54e529154f26acfd42930e19117d045e8a9a8e893ca82dd94ec"}, - {file = "scikit_learn-1.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:70fa30d146b7e9d0c256e73e271b3e17f23123b7c4adcbde1a385031adf59090"}, - {file = "scikit_learn-1.2.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:5a8111f3c7a314017ebf90d6feab861c11d1ca14f3dbafb39abcc31aa4c54ba6"}, - {file = "scikit_learn-1.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cba0c7c6bf1493f8ce670bab69f9317874826ee838988de377ae355abd4d74cf"}, - {file = "scikit_learn-1.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:479aedd0abedbda6b8b4529145fe4cd8622f69f726a72cef8f75548a93eeb1e1"}, - {file = "scikit_learn-1.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:5523e21ab2b4d52b2bd41bedd335dbe8f3c1b5f6dd7c9c001b2e17ec9818af8d"}, - {file = "scikit_learn-1.2.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:dcfab6a19b236194af88771d8e6e778a60c3339248ab0018696ebf2b7c8bed4b"}, - {file = "scikit_learn-1.2.1-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:559f66e12f93b34c8c85c0a5728c3b8af98f04eb12f2c9ee18ea3c82c3d2fad1"}, - {file = "scikit_learn-1.2.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dbb7831b2308c67bb6dd83c5ea3cdaf8e8cafd2de4000b93d78bb689126bd2cf"}, - {file = "scikit_learn-1.2.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b2c5d9930ced2b7821ad936b9940706ccb5471d89b8a516bb641cec87257d1c"}, - {file = "scikit_learn-1.2.1-cp38-cp38-win_amd64.whl", hash = "sha256:54731e2c2fbff40da6d76cbb9022ace5f44a4020a10bd5cd92107e86882bad15"}, - {file = "scikit_learn-1.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d00e46a2a7fce6e118ed0f4c6263785bf6c297a94ffd0cd7b32455043c508cc8"}, - {file = "scikit_learn-1.2.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:da0e2d50a8435ea8dc5cd21f1fc1a45d329bae03dcca92087ebed859d22d184e"}, - {file = "scikit_learn-1.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:61bb9c654b5d2e6cdd4b1c7e6048fc66270c1682bda1b0f7d2726fdae09010f4"}, - {file = "scikit_learn-1.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e0ee4d4d32c94e082344308528f7b3c9294b60ab19c84eb37a2d9c88bdffd9d1"}, - {file = "scikit_learn-1.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:c722f3446ad8c4f1a93b2399fe1a188635b94709a3f25e6f4d61efbe75fe8eaa"}, + {file = "scikit-learn-1.2.2.tar.gz", hash = "sha256:8429aea30ec24e7a8c7ed8a3fa6213adf3814a6efbea09e16e0a0c71e1a1a3d7"}, + {file = "scikit_learn-1.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:99cc01184e347de485bf253d19fcb3b1a3fb0ee4cea5ee3c43ec0cc429b6d29f"}, + {file = "scikit_learn-1.2.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:e6e574db9914afcb4e11ade84fab084536a895ca60aadea3041e85b8ac963edb"}, + {file = "scikit_learn-1.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fe83b676f407f00afa388dd1fdd49e5c6612e551ed84f3b1b182858f09e987d"}, + {file = "scikit_learn-1.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e2642baa0ad1e8f8188917423dd73994bf25429f8893ddbe115be3ca3183584"}, + {file = "scikit_learn-1.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:ad66c3848c0a1ec13464b2a95d0a484fd5b02ce74268eaa7e0c697b904f31d6c"}, + {file = "scikit_learn-1.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dfeaf8be72117eb61a164ea6fc8afb6dfe08c6f90365bde2dc16456e4bc8e45f"}, + {file = "scikit_learn-1.2.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:fe0aa1a7029ed3e1dcbf4a5bc675aa3b1bc468d9012ecf6c6f081251ca47f590"}, + {file = "scikit_learn-1.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:065e9673e24e0dc5113e2dd2b4ca30c9d8aa2fa90f4c0597241c93b63130d233"}, + {file = "scikit_learn-1.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf036ea7ef66115e0d49655f16febfa547886deba20149555a41d28f56fd6d3c"}, + {file = "scikit_learn-1.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:8b0670d4224a3c2d596fd572fb4fa673b2a0ccfb07152688ebd2ea0b8c61025c"}, + {file = "scikit_learn-1.2.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9c710ff9f9936ba8a3b74a455ccf0dcf59b230caa1e9ba0223773c490cab1e51"}, + {file = "scikit_learn-1.2.2-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:2dd3ffd3950e3d6c0c0ef9033a9b9b32d910c61bd06cb8206303fb4514b88a49"}, + {file = "scikit_learn-1.2.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:44b47a305190c28dd8dd73fc9445f802b6ea716669cfc22ab1eb97b335d238b1"}, + {file = "scikit_learn-1.2.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:953236889928d104c2ef14027539f5f2609a47ebf716b8cbe4437e85dce42744"}, + {file = "scikit_learn-1.2.2-cp38-cp38-win_amd64.whl", hash = "sha256:7f69313884e8eb311460cc2f28676d5e400bd929841a2c8eb8742ae78ebf7c20"}, + {file = "scikit_learn-1.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8156db41e1c39c69aa2d8599ab7577af53e9e5e7a57b0504e116cc73c39138dd"}, + {file = "scikit_learn-1.2.2-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:fe175ee1dab589d2e1033657c5b6bec92a8a3b69103e3dd361b58014729975c3"}, + {file = "scikit_learn-1.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7d5312d9674bed14f73773d2acf15a3272639b981e60b72c9b190a0cffed5bad"}, + {file = "scikit_learn-1.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea061bf0283bf9a9f36ea3c5d3231ba2176221bbd430abd2603b1c3b2ed85c89"}, + {file = "scikit_learn-1.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:6477eed40dbce190f9f9e9d0d37e020815825b300121307942ec2110302b66a3"}, ] [package.dependencies] @@ -8178,53 +8131,53 @@ test = ["pytest"] [[package]] name = "sqlalchemy" -version = "2.0.4" +version = "2.0.6" description = "Database Abstraction Library" category = "main" optional = true python-versions = ">=3.7" files = [ - {file = "SQLAlchemy-2.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b67d6e626caa571fb53accaac2fba003ef4f7317cb3481e9ab99dad6e89a70d6"}, - {file = "SQLAlchemy-2.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b01dce097cf6f145da131a53d4cce7f42e0bfa9ae161dd171a423f7970d296d0"}, - {file = "SQLAlchemy-2.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:738c80705e11c1268827dbe22c01162a9cdc98fc6f7901b429a1459db2593060"}, - {file = "SQLAlchemy-2.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6363697c938b9a13e07f1bc2cd433502a7aa07efd55b946b31d25b9449890621"}, - {file = "SQLAlchemy-2.0.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a42e6831e82dfa6d16b45f0c98c69e7b0defc64d76213173456355034450c414"}, - {file = "SQLAlchemy-2.0.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:011ef3c33f30bae5637c575f30647e0add98686642d237f0c3a1e3d9b35747fa"}, - {file = "SQLAlchemy-2.0.4-cp310-cp310-win32.whl", hash = "sha256:c1e8edc49b32483cd5d2d015f343e16be7dfab89f4aaf66b0fa6827ab356880d"}, - {file = "SQLAlchemy-2.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:77a380bf8721b416782c763e0ff66f80f3b05aee83db33ddfc0eac20bcb6791f"}, - {file = "SQLAlchemy-2.0.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2a2f9120eb32190bdba31d1022181ef08f257aed4f984f3368aa4e838de72bc0"}, - {file = "SQLAlchemy-2.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:679b9bd10bb32b8d3befed4aad4356799b6ec1bdddc0f930a79e41ba5b084124"}, - {file = "SQLAlchemy-2.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:582053571125895d008d4b8d9687d12d4bd209c076cdbab3504da307e2a0a2bd"}, - {file = "SQLAlchemy-2.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c82395e2925639e6d320592943608070678e7157bd1db2672a63be9c7889434"}, - {file = "SQLAlchemy-2.0.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:25e4e54575f9d2af1eab82d3a470fca27062191c48ee57b6386fe09a3c0a6a33"}, - {file = "SQLAlchemy-2.0.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9946ee503962859f1a9e1ad17dff0859269b0cb453686747fe87f00b0e030b34"}, - {file = "SQLAlchemy-2.0.4-cp311-cp311-win32.whl", hash = "sha256:c621f05859caed5c0aab032888a3d3bde2cae3988ca151113cbecf262adad976"}, - {file = "SQLAlchemy-2.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:662a79e80f3e9fe33b7861c19fedf3d8389fab2413c04bba787e3f1139c22188"}, - {file = "SQLAlchemy-2.0.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3f927340b37fe65ec42e19af7ce15260a73e11c6b456febb59009bfdfec29a35"}, - {file = "SQLAlchemy-2.0.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67901b91bf5821482fcbe9da988cb16897809624ddf0fde339cd62365cc50032"}, - {file = "SQLAlchemy-2.0.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1644c603558590f465b3fa16e4557d87d3962bc2c81fd7ea85b582ecf4676b31"}, - {file = "SQLAlchemy-2.0.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:9a7ecaf90fe9ec8e45c86828f4f183564b33c9514e08667ca59e526fea63893a"}, - {file = "SQLAlchemy-2.0.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8a88b32ce5b69d18507ffc9f10401833934ebc353c7b30d1e056023c64f0a736"}, - {file = "SQLAlchemy-2.0.4-cp37-cp37m-win32.whl", hash = "sha256:2267c004e78e291bba0dc766a9711c389649cf3e662cd46eec2bc2c238c637bd"}, - {file = "SQLAlchemy-2.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:59cf0cdb29baec4e074c7520d7226646a8a8f856b87d8300f3e4494901d55235"}, - {file = "SQLAlchemy-2.0.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:dd801375f19a6e1f021dabd8b1714f2fdb91cbc835cd13b5dd0bd7e9860392d7"}, - {file = "SQLAlchemy-2.0.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d8efdda920988bcade542f53a2890751ff680474d548f32df919a35a21404e3f"}, - {file = "SQLAlchemy-2.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:918c2b553e3c78268b187f70983c9bc6f91e451a4f934827e9c919e03d258bd7"}, - {file = "SQLAlchemy-2.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77d05773d5c79f2d3371d81697d54ee1b2c32085ad434ce9de4482e457ecb018"}, - {file = "SQLAlchemy-2.0.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:fdb2686eb01f670cdc6c43f092e333ff08c1cf0b646da5256c1237dc4ceef4ae"}, - {file = "SQLAlchemy-2.0.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8ff0a7c669ec7cdb899eae7e622211c2dd8725b82655db2b41740d39e3cda466"}, - {file = "SQLAlchemy-2.0.4-cp38-cp38-win32.whl", hash = "sha256:57dcd9eed52413f7270b22797aa83c71b698db153d1541c1e83d45ecdf8e95e7"}, - {file = "SQLAlchemy-2.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:54aa9f40d88728dd058e951eeb5ecc55241831ba4011e60c641738c1da0146b7"}, - {file = "SQLAlchemy-2.0.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:817aab80f7e8fe581696dae7aaeb2ceb0b7ea70ad03c95483c9115970d2a9b00"}, - {file = "SQLAlchemy-2.0.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:dc7b9f55c2f72c13b2328b8a870ff585c993ba1b5c155ece5c9d3216fa4b18f6"}, - {file = "SQLAlchemy-2.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f696828784ab2c07b127bfd2f2d513f47ec58924c29cff5b19806ac37acee31c"}, - {file = "SQLAlchemy-2.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce54965a94673a0ebda25e7c3a05bf1aa74fd78cc452a1a710b704bf73fb8402"}, - {file = "SQLAlchemy-2.0.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f342057422d6bcfdd4996e34cd5c7f78f7e500112f64b113f334cdfc6a0c593d"}, - {file = "SQLAlchemy-2.0.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b5deafb4901618b3f98e8df7099cd11edd0d1e6856912647e28968b803de0dae"}, - {file = "SQLAlchemy-2.0.4-cp39-cp39-win32.whl", hash = "sha256:81f1ea264278fcbe113b9a5840f13a356cb0186e55b52168334124f1cd1bc495"}, - {file = "SQLAlchemy-2.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:954f1ad73b78ea5ba5a35c89c4a5dfd0f3a06c17926503de19510eb9b3857bde"}, - {file = "SQLAlchemy-2.0.4-py3-none-any.whl", hash = "sha256:0adca8a3ca77234a142c5afed29322fb501921f13d1d5e9fa4253450d786c160"}, - {file = "SQLAlchemy-2.0.4.tar.gz", hash = "sha256:95a18e1a6af2114dbd9ee4f168ad33070d6317e11bafa28d983cc7b585fe900b"}, + {file = "SQLAlchemy-2.0.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6987f658389ad8bb6257db91551e7fde3e904974eef6f323856260907ef311d7"}, + {file = "SQLAlchemy-2.0.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:bfcadfb8f0a9d26a76a5e2488cedd2e7cf8e70fe76d58aeb1c85eb83b33cbc5c"}, + {file = "SQLAlchemy-2.0.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d653962da384a1d99795dbd8aac4a7516071b2f2984ed2aa25545fae670b808"}, + {file = "SQLAlchemy-2.0.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:edc16c8e24605d0a7925afaf99dbcbdc3f98a2cdda4622f1ea34482cb3b91940"}, + {file = "SQLAlchemy-2.0.6-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3be54b3825512b3de5698ae04bf4aad6ea60442ac0f6b91ee4b8fa4db5c2dccd"}, + {file = "SQLAlchemy-2.0.6-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1df00f280fcf7628379c6838d47ac6abd2319848cb02984af313de9243994db8"}, + {file = "SQLAlchemy-2.0.6-cp310-cp310-win32.whl", hash = "sha256:ff10ad2d74a9a79c2984a2c709943e5362a1c898d8f3414815ea57515ae80c84"}, + {file = "SQLAlchemy-2.0.6-cp310-cp310-win_amd64.whl", hash = "sha256:ca147d9cde38b481085408e1d4277ee834cb88bcc31bc01933bc6513340071bc"}, + {file = "SQLAlchemy-2.0.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2ad44f45526411bebbf427cf858955a35f3a6bfd7db8f4314b12da4c0d1a4fd2"}, + {file = "SQLAlchemy-2.0.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5c35175b74cbcfe9af077bd13e87cfab13239e075c0e1e920095082f9377f0ed"}, + {file = "SQLAlchemy-2.0.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20f36bff3b6c9fa94e40114fda4dc5048d40fd665390f5547b456a28e8059ee8"}, + {file = "SQLAlchemy-2.0.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61abff42e44e5daf17372cb8baa90e970dc647fc5f747e2caa9f9768acf17be8"}, + {file = "SQLAlchemy-2.0.6-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:48824b989a0e4340cd099dd4539702ddb1a5ce449f8a7355124e40a4935a95fa"}, + {file = "SQLAlchemy-2.0.6-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f47709c98544384d390aed34046f0573df5725d22861c0cd0a5c151bc22eedff"}, + {file = "SQLAlchemy-2.0.6-cp311-cp311-win32.whl", hash = "sha256:bfce790746d059af6d0bc68b578ba20d50a63c71a3db16edce7aa8eccdd73796"}, + {file = "SQLAlchemy-2.0.6-cp311-cp311-win_amd64.whl", hash = "sha256:82691d3539023c3cee5ae055c47bf873728cd6b33bfaa7b916bea5a99b92f700"}, + {file = "SQLAlchemy-2.0.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d7bd001a40997f0c9a9ac10a57663a9397959966a5a365bb24a4d1a17aa60175"}, + {file = "SQLAlchemy-2.0.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3625a52fae744cff6f9beb6ed0775468b9eb7e6e8f6730676dfc49aa77d98b4e"}, + {file = "SQLAlchemy-2.0.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac6274dd530b684cca8cbb774e348afac6846f15d1694a56954413be6e2e8dcd"}, + {file = "SQLAlchemy-2.0.6-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:db91fe985f2264ab49b3450ab7e2a59c34f7eaf3bf283d6b9e2f9ee02b29e533"}, + {file = "SQLAlchemy-2.0.6-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:47e96be3e8c9c0f2c71ec87599be4bb8409d61841b66964a36b2447bec510b3b"}, + {file = "SQLAlchemy-2.0.6-cp37-cp37m-win32.whl", hash = "sha256:709f1ecb5dcea59f36fa0f485e09e41ff313b2d62c83a6f99b36870b0d6e42fa"}, + {file = "SQLAlchemy-2.0.6-cp37-cp37m-win_amd64.whl", hash = "sha256:e0e270a4f5b42c67362d9c6af648cb86f6a00b20767553cfd734c914e1e2a5e0"}, + {file = "SQLAlchemy-2.0.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bea2c1341abe9bc6f30071b8ada1a3c44f24ec0fe1b9418e9c1112ed32057c9e"}, + {file = "SQLAlchemy-2.0.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:81d4fc8f5c966677a3a2f39eb8e496442269d8c7d285b28145f7745fcc089d63"}, + {file = "SQLAlchemy-2.0.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7be0e6a4061d28b66ca4b4eb24558dd8c6386d3bcd2d6d7ef247be27cf1281b"}, + {file = "SQLAlchemy-2.0.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed714b864349704a7a719ec7199eec3f9cd15c190ecf6e10c34b5a0c549c5c18"}, + {file = "SQLAlchemy-2.0.6-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c76caced0c8e9129810895f71954c72f478e30bea7d0bba7130bade396be5048"}, + {file = "SQLAlchemy-2.0.6-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4100c80070a66b042f1010b29b29a88d1d151c27a5e522c95ec07518b361a7a3"}, + {file = "SQLAlchemy-2.0.6-cp38-cp38-win32.whl", hash = "sha256:9310666251385e4374c6f0bae6d69e62bc422021298ceb8669bf6ff56957ff37"}, + {file = "SQLAlchemy-2.0.6-cp38-cp38-win_amd64.whl", hash = "sha256:5b067b2eaf3d97a49f3f6217981efa7b45d5726c2142f103712b020dd250fd98"}, + {file = "SQLAlchemy-2.0.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1fd154847f2c77128e16757e3fd2028151aa8208dd3b9a5978918ea786a15312"}, + {file = "SQLAlchemy-2.0.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7635cd38e3ea8522729b14451157104fce2117c44e7ba6a14684ed153d71b567"}, + {file = "SQLAlchemy-2.0.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:483712fce53e2f7ec95ed7d106cd463f9fc122c28a7df4aaf2bc873d0d2a901f"}, + {file = "SQLAlchemy-2.0.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:778db814cc21eff200c8bd42b4ffe976fa3378d10fb84d2c164d3c6a30bb38ee"}, + {file = "SQLAlchemy-2.0.6-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2c4c64f321080c83a3f0eed11cc9b73fe2a574f6b8339c402861274165c24cf6"}, + {file = "SQLAlchemy-2.0.6-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bfde1d7cf8b9aa6bbd0d53946cd508d76db7689afd442e2289642cdc8908b7b7"}, + {file = "SQLAlchemy-2.0.6-cp39-cp39-win32.whl", hash = "sha256:8ef7c56c74f4420b2c4a148d2531ba7f99b946cbf438a2bbcb2435fb4938a08d"}, + {file = "SQLAlchemy-2.0.6-cp39-cp39-win_amd64.whl", hash = "sha256:224c817e880359d344a462fc4dd94a233804f371aa290b024b6b976a2f5ade36"}, + {file = "SQLAlchemy-2.0.6-py3-none-any.whl", hash = "sha256:c5d754665edea1ecdc79e3023659cb5594372e10776f3b3734d75c2c3ce95013"}, + {file = "SQLAlchemy-2.0.6.tar.gz", hash = "sha256:c343f0b546495f5d7a239c70bf50a99a48d7321c165b82afafa8483b9ebebf6e"}, ] [package.dependencies] @@ -8256,14 +8209,14 @@ sqlcipher = ["sqlcipher3-binary"] [[package]] name = "sqlglot" -version = "11.2.3" +version = "11.3.7" description = "An easily customizable SQL parser and transpiler" category = "main" optional = true python-versions = "*" files = [ - {file = "sqlglot-11.2.3-py3-none-any.whl", hash = "sha256:1633d81d22ba34e328b583e569aef67ea4dbcdea6f8853350f7f594364a34bd8"}, - {file = "sqlglot-11.2.3.tar.gz", hash = "sha256:1d07e05536123471545f751d961927b3476e063e71e7c22f138cec9d540a57e2"}, + {file = "sqlglot-11.3.7-py3-none-any.whl", hash = "sha256:49743223f175dd2843aaaed45009cc3ec67a09cb272c7b42db1debee1a45f5f9"}, + {file = "sqlglot-11.3.7.tar.gz", hash = "sha256:7c23fe7d253f51df0508f3b9c0406063bdaa2506f6025756d31b0aa2c9a0d9da"}, ] [package.extras] @@ -8414,7 +8367,54 @@ numpy = {version = ">=1.17", markers = "python_version != \"3.10\" or platform_s packaging = ">=21.3" pandas = ">=0.25" patsy = ">=0.5.2" -scipy = {version = ">=1.3", markers = "python_version > \"3.7\" and python_version < \"3.12\" or platform_system != \"Windows\" and python_version < \"3.12\" or platform_machine != \"x86\" and python_version < \"3.12\""} +scipy = {version = ">=1.3", markers = "(python_version > \"3.7\" or platform_system != \"Windows\" or platform_machine != \"x86\") and python_version < \"3.12\""} + +[package.extras] +build = ["cython (>=0.29.32)"] +develop = ["Jinja2", "colorama", "cython (>=0.29.32)", "cython (>=0.29.32,<3.0.0)", "flake8", "isort", "joblib", "matplotlib (>=3)", "oldest-supported-numpy (>=2022.4.18)", "pytest (>=7.0.1,<7.1.0)", "pytest-randomly", "pytest-xdist", "pywinpty", "setuptools-scm[toml] (>=7.0.0,<7.1.0)"] +docs = ["ipykernel", "jupyter-client", "matplotlib", "nbconvert", "nbformat", "numpydoc", "pandas-datareader", "sphinx"] + +[[package]] +name = "statsmodels" +version = "0.13.4" +description = "Statistical computations and models for Python" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "statsmodels-0.13.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:41b94ae84f1bf77a0dfadf88d153189735c96218bc72e2b8309bc74393f026bb"}, + {file = "statsmodels-0.13.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e5d7b16cbfae069effeda91ba713f36300b2afcb1ccd0c6d2617771910d97e0f"}, + {file = "statsmodels-0.13.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57b4c90ccf776c6848aca94b7bd7e0d79f4b161baca179a8e2fbc727e2ff613b"}, + {file = "statsmodels-0.13.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef075faad0a4ca9972dca7e2f3ed5538923c97639aa2ef7dcc6bff2398e15a24"}, + {file = "statsmodels-0.13.4-cp310-cp310-win_amd64.whl", hash = "sha256:aa1c157c7fae3f7be5daed308cb928bba320005de51cfb59681bec157a6fca99"}, + {file = "statsmodels-0.13.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:33dc53eda31ac4f0d06ab4b30d4877f8f09d417a1120f0b919b0258b95335f44"}, + {file = "statsmodels-0.13.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b5e37fd711f7436c92c9e24a6fc0cb9f22d87fc0d2ce0f3ee47c11d75983f28a"}, + {file = "statsmodels-0.13.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d42683f2a8e51b67bc286a5bf4a573613ef1d1d12d66925367695f36a8667589"}, + {file = "statsmodels-0.13.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e0a92b3dd2bcd1bef6363c824421c8532f24d7f1a88f55f0d2bc99f6ad4ff2a2"}, + {file = "statsmodels-0.13.4-cp311-cp311-win_amd64.whl", hash = "sha256:98b33318d3366eeb3631a9caf317cc667a36866c4b69d488ffa70dee9af37959"}, + {file = "statsmodels-0.13.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:80a5014be675ed2d5ebc0ef4ccbb7d3dba63bab2d0d4f780b51429d51f3aa2e6"}, + {file = "statsmodels-0.13.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91ec9ebfe4e74b33cc6b2007b3ee53d1fa7ceae90589fcd10de213bbebada2d7"}, + {file = "statsmodels-0.13.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecba51dda0583afcb8b179df380b3e9217bde405e24490d4124ac9b0cd1bf20d"}, + {file = "statsmodels-0.13.4-cp37-cp37m-win_amd64.whl", hash = "sha256:00b41f3d2c2a563d95abc1b948cf54c910e8f4c1bc42696380344708ce6882d9"}, + {file = "statsmodels-0.13.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1818c0f366a50c873e56d8c18925c188c691e0c2cd80ea7cdcd2d3b71788290f"}, + {file = "statsmodels-0.13.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e8be9d7e2d3c7b2dd8162022667e5352c96c3334087c6cb9e352f7dc310cca8e"}, + {file = "statsmodels-0.13.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be5916bd3d63370bf53711dea3f309e08d634c72859973a22384ade2a00e6675"}, + {file = "statsmodels-0.13.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9bdcd7938c0cadbf4be632407dbc6cf5d9ce3234cfe1c9a37e9cc61d717e6e27"}, + {file = "statsmodels-0.13.4-cp38-cp38-win_amd64.whl", hash = "sha256:b10e712dc51c814db2578530d3d64e982d265312636b520952db63c555b9b4e2"}, + {file = "statsmodels-0.13.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e44542d45d242c24eaf960e95e54cbc83cfeb07922e14c78f2771c4e81ffd6f7"}, + {file = "statsmodels-0.13.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:606e5aa5ca33a5468c5065f4b9dfc249d7f499f262c0d84a514f4346fd97f049"}, + {file = "statsmodels-0.13.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7e3e379d3c6ecdcb5065541c36a1b2421f6a27a8c4cbeec488b917631a7d207a"}, + {file = "statsmodels-0.13.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:719a0d175dae8466112d5847adc49e0f76adf4bb735b03ff2b73b97140712d09"}, + {file = "statsmodels-0.13.4-cp39-cp39-win_amd64.whl", hash = "sha256:7d50c9c9ecdf23e1b8339cfa839f689817467c4f4a4ae8561b655faa3dc53f5f"}, + {file = "statsmodels-0.13.4.tar.gz", hash = "sha256:8ee5d1b69f64bc0e9379667455ee3585849d5e6bcd3f3e48e58ba6cadadfead5"}, +] + +[package.dependencies] +numpy = {version = ">=1.17", markers = "python_version != \"3.10\" or platform_system != \"Windows\" or platform_python_implementation == \"PyPy\""} +packaging = ">=21.3" +pandas = ">=0.25" +patsy = ">=0.5.2" +scipy = {version = ">=1.3", markers = "(python_version > \"3.9\" or platform_system != \"Windows\" or platform_machine != \"x86\") and python_version < \"3.12\""} [package.extras] build = ["cython (>=0.29.32)"] @@ -8464,7 +8464,7 @@ numpy = [ packaging = ">=21.3" pandas = ">=0.25" patsy = ">=0.5.2" -scipy = {version = ">=1.3", markers = "python_version > \"3.9\" and python_version < \"3.12\" or platform_system != \"Windows\" and python_version < \"3.12\" or platform_machine != \"x86\" and python_version < \"3.12\""} +scipy = {version = ">=1.3", markers = "(python_version > \"3.9\" or platform_system != \"Windows\" or platform_machine != \"x86\") and python_version < \"3.12\""} [package.extras] build = ["cython (>=0.29.32)"] @@ -8504,18 +8504,18 @@ requests = "*" [[package]] name = "streamlit" -version = "1.19.0" +version = "1.20.0" description = "The fastest way to build data apps in Python" category = "main" optional = false python-versions = ">=3.7, !=3.9.7" files = [ - {file = "streamlit-1.19.0-py2.py3-none-any.whl", hash = "sha256:5387c89a9e930b97d46446516cf43f9156e1863713867050c7021cf97f10c0b3"}, - {file = "streamlit-1.19.0.tar.gz", hash = "sha256:e9793d351af5d4f7821c2ea81babf1c78cdbba69f057cf80d602dec56c4408f1"}, + {file = "streamlit-1.20.0-py2.py3-none-any.whl", hash = "sha256:41a544b8dc618ee65726da3ac76149c5b2bf3da7bde6d50625c4f7ec95e6c9e8"}, + {file = "streamlit-1.20.0.tar.gz", hash = "sha256:f6e257e033a2532ce9b37c425717a4e885fa4d0e339fa5dcdbbda8d75ec191e9"}, ] [package.dependencies] -altair = ">=3.2.0" +altair = ">=3.2.0,<5" blinker = ">=1.0.0" cachetools = ">=4.0" click = ">=7.0" @@ -8523,7 +8523,7 @@ gitpython = "!=3.1.19" importlib-metadata = ">=1.4" numpy = "*" packaging = ">=14.1" -pandas = ">=0.25" +pandas = ">=0.25,<2" pillow = ">=6.2.0" protobuf = ">=3.12,<4" pyarrow = ">=4.0" @@ -8892,14 +8892,14 @@ typing-extensions = "*" [[package]] name = "torchmetrics" -version = "0.11.3" +version = "0.11.4" description = "PyTorch native Metrics" category = "main" optional = true python-versions = ">=3.7" files = [ - {file = "torchmetrics-0.11.3-py3-none-any.whl", hash = "sha256:7797c6e86f7474b6e0beb46f979044354a831e012199e96e52d2208a15ebe418"}, - {file = "torchmetrics-0.11.3.tar.gz", hash = "sha256:6a2bcc17361f0e4c1668c92595b12ef30ccf9ef1d03263bee7c6136a882afe30"}, + {file = "torchmetrics-0.11.4-py3-none-any.whl", hash = "sha256:45f892f3534e91f3ad9e2488d1b05a93b7cb76b7d037969435a41a1f24750d9a"}, + {file = "torchmetrics-0.11.4.tar.gz", hash = "sha256:1fe45a14b44dd65d90199017dd5a4b5a128d56a8a311da7916c402c18c671494"}, ] [package.dependencies] @@ -8940,14 +8940,14 @@ files = [ [[package]] name = "tqdm" -version = "4.64.1" +version = "4.65.0" description = "Fast, Extensible Progress Meter" category = "main" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" +python-versions = ">=3.7" files = [ - {file = "tqdm-4.64.1-py2.py3-none-any.whl", hash = "sha256:6fee160d6ffcd1b1c68c65f14c829c22832bc401726335ce92c52d395944a6a1"}, - {file = "tqdm-4.64.1.tar.gz", hash = "sha256:5f4f682a004951c1b450bc753c710e9280c5746ce6ffedee253ddbcbf54cf1e4"}, + {file = "tqdm-4.65.0-py3-none-any.whl", hash = "sha256:c4f53a17fe37e132815abceec022631be8ffe1b9381c2e6e30aa70edc99e9671"}, + {file = "tqdm-4.65.0.tar.gz", hash = "sha256:1871fb68a86b8fb3b59ca4cdd3dcccbc7e6d613eeed31f4c332531977b89beb5"}, ] [package.dependencies] @@ -9004,14 +9004,14 @@ test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"] [[package]] name = "transformers" -version = "4.26.1" +version = "4.27.1" description = "State-of-the-art Machine Learning for JAX, PyTorch and TensorFlow" category = "main" optional = true python-versions = ">=3.7.0" files = [ - {file = "transformers-4.26.1-py3-none-any.whl", hash = "sha256:dae2fa15290c1f526e1b629b0e235eea5e4c04078fcaf1f197a70d51b4f65df2"}, - {file = "transformers-4.26.1.tar.gz", hash = "sha256:32dc474157367f8e551f470af0136a1ddafc9e18476400c3869f1ef4f0c12042"}, + {file = "transformers-4.27.1-py3-none-any.whl", hash = "sha256:b8cf844cbeaefd24b07f7ab1550af11b5d9cf0a7d09e5f4fedede9b15a3da2c0"}, + {file = "transformers-4.27.1.tar.gz", hash = "sha256:05120d91e407c0d3db364f5d0710cdacccd15f67114b075f161a71535c133695"}, ] [package.dependencies] @@ -9027,15 +9027,15 @@ tqdm = ">=4.27" [package.extras] accelerate = ["accelerate (>=0.10.0)"] -all = ["Pillow", "accelerate (>=0.10.0)", "codecarbon (==1.2.0)", "decord (==0.6.0)", "flax (>=0.4.1)", "jax (>=0.2.8,!=0.3.2,<=0.3.6)", "jaxlib (>=0.1.65,<=0.3.6)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "onnxconverter-common", "optax (>=0.0.8)", "optuna", "phonemizer", "protobuf (<=3.20.2)", "pyctcdecode (>=0.4.0)", "ray[tune]", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "tensorflow (>=2.4,<2.12)", "tensorflow-text", "tf2onnx", "timm", "tokenizers (>=0.11.1,!=0.11.3,<0.14)", "torch (>=1.7,!=1.12.0)", "torchaudio"] +all = ["Pillow", "accelerate (>=0.10.0)", "av (==9.2.0)", "codecarbon (==1.2.0)", "decord (==0.6.0)", "flax (>=0.4.1)", "jax (>=0.2.8,!=0.3.2,<=0.3.6)", "jaxlib (>=0.1.65,<=0.3.6)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "onnxconverter-common", "optax (>=0.0.8)", "optuna", "phonemizer", "protobuf (<=3.20.2)", "pyctcdecode (>=0.4.0)", "ray[tune]", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "tensorflow (>=2.4,<2.12)", "tensorflow-text", "tf2onnx", "timm", "tokenizers (>=0.11.1,!=0.11.3,<0.14)", "torch (>=1.7,!=1.12.0)", "torchaudio", "torchvision"] audio = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"] codecarbon = ["codecarbon (==1.2.0)"] deepspeed = ["accelerate (>=0.10.0)", "deepspeed (>=0.6.5)"] -deepspeed-testing = ["GitPython (<3.1.19)", "accelerate (>=0.10.0)", "beautifulsoup4", "black (==22.3)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "deepspeed (>=0.6.5)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "hf-doc-builder (>=0.3.0)", "nltk", "optuna", "parameterized", "protobuf (<=3.20.2)", "psutil", "pytest", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "safetensors (>=0.2.1)", "sentencepiece (>=0.1.91,!=0.1.92)", "timeout-decorator"] -dev = ["GitPython (<3.1.19)", "Pillow", "accelerate (>=0.10.0)", "beautifulsoup4", "black (==22.3)", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "decord (==0.6.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "flake8 (>=3.8.3)", "flax (>=0.4.1)", "fugashi (>=1.0)", "hf-doc-builder", "hf-doc-builder (>=0.3.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "jax (>=0.2.8,!=0.3.2,<=0.3.6)", "jaxlib (>=0.1.65,<=0.3.6)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "nltk", "onnxconverter-common", "optax (>=0.0.8)", "optuna", "parameterized", "phonemizer", "protobuf (<=3.20.2)", "psutil", "pyctcdecode (>=0.4.0)", "pytest", "pytest-timeout", "pytest-xdist", "ray[tune]", "rhoknp (>=1.1.0)", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "safetensors (>=0.2.1)", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorflow (>=2.4,<2.12)", "tensorflow-text", "tf2onnx", "timeout-decorator", "timm", "tokenizers (>=0.11.1,!=0.11.3,<0.14)", "torch (>=1.7,!=1.12.0)", "torchaudio", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)"] -dev-tensorflow = ["GitPython (<3.1.19)", "Pillow", "beautifulsoup4", "black (==22.3)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "flake8 (>=3.8.3)", "hf-doc-builder", "hf-doc-builder (>=0.3.0)", "isort (>=5.5.4)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "nltk", "onnxconverter-common", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "parameterized", "phonemizer", "protobuf (<=3.20.2)", "psutil", "pyctcdecode (>=0.4.0)", "pytest", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "safetensors (>=0.2.1)", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorflow (>=2.4,<2.12)", "tensorflow-text", "tf2onnx", "timeout-decorator", "tokenizers (>=0.11.1,!=0.11.3,<0.14)"] -dev-torch = ["GitPython (<3.1.19)", "Pillow", "beautifulsoup4", "black (==22.3)", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "flake8 (>=3.8.3)", "fugashi (>=1.0)", "hf-doc-builder", "hf-doc-builder (>=0.3.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "kenlm", "librosa", "nltk", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "optuna", "parameterized", "phonemizer", "protobuf (<=3.20.2)", "psutil", "pyctcdecode (>=0.4.0)", "pytest", "pytest-timeout", "pytest-xdist", "ray[tune]", "rhoknp (>=1.1.0)", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "safetensors (>=0.2.1)", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "timeout-decorator", "timm", "tokenizers (>=0.11.1,!=0.11.3,<0.14)", "torch (>=1.7,!=1.12.0)", "torchaudio", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)"] -docs = ["Pillow", "accelerate (>=0.10.0)", "codecarbon (==1.2.0)", "decord (==0.6.0)", "flax (>=0.4.1)", "hf-doc-builder", "jax (>=0.2.8,!=0.3.2,<=0.3.6)", "jaxlib (>=0.1.65,<=0.3.6)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "onnxconverter-common", "optax (>=0.0.8)", "optuna", "phonemizer", "protobuf (<=3.20.2)", "pyctcdecode (>=0.4.0)", "ray[tune]", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "tensorflow (>=2.4,<2.12)", "tensorflow-text", "tf2onnx", "timm", "tokenizers (>=0.11.1,!=0.11.3,<0.14)", "torch (>=1.7,!=1.12.0)", "torchaudio"] +deepspeed-testing = ["GitPython (<3.1.19)", "accelerate (>=0.10.0)", "beautifulsoup4", "black (>=23.1,<24.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "deepspeed (>=0.6.5)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "hf-doc-builder (>=0.3.0)", "nltk", "optuna", "parameterized", "protobuf (<=3.20.2)", "psutil", "pytest", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "safetensors (>=0.2.1)", "sentencepiece (>=0.1.91,!=0.1.92)", "timeout-decorator"] +dev = ["GitPython (<3.1.19)", "Pillow", "accelerate (>=0.10.0)", "av (==9.2.0)", "beautifulsoup4", "black (>=23.1,<24.0)", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "decord (==0.6.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "flax (>=0.4.1)", "fugashi (>=1.0)", "hf-doc-builder", "hf-doc-builder (>=0.3.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "jax (>=0.2.8,!=0.3.2,<=0.3.6)", "jaxlib (>=0.1.65,<=0.3.6)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "nltk", "onnxconverter-common", "optax (>=0.0.8)", "optuna", "parameterized", "phonemizer", "protobuf (<=3.20.2)", "psutil", "pyctcdecode (>=0.4.0)", "pytest", "pytest-timeout", "pytest-xdist", "ray[tune]", "rhoknp (>=1.1.0)", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (>=0.0.241)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "safetensors (>=0.2.1)", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorflow (>=2.4,<2.12)", "tensorflow-text", "tf2onnx", "timeout-decorator", "timm", "tokenizers (>=0.11.1,!=0.11.3,<0.14)", "torch (>=1.7,!=1.12.0)", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)"] +dev-tensorflow = ["GitPython (<3.1.19)", "Pillow", "beautifulsoup4", "black (>=23.1,<24.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "hf-doc-builder", "hf-doc-builder (>=0.3.0)", "isort (>=5.5.4)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "nltk", "onnxconverter-common", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "parameterized", "phonemizer", "protobuf (<=3.20.2)", "psutil", "pyctcdecode (>=0.4.0)", "pytest", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (>=0.0.241)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "safetensors (>=0.2.1)", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorflow (>=2.4,<2.12)", "tensorflow-text", "tf2onnx", "timeout-decorator", "tokenizers (>=0.11.1,!=0.11.3,<0.14)"] +dev-torch = ["GitPython (<3.1.19)", "Pillow", "beautifulsoup4", "black (>=23.1,<24.0)", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "fugashi (>=1.0)", "hf-doc-builder", "hf-doc-builder (>=0.3.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "kenlm", "librosa", "nltk", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "optuna", "parameterized", "phonemizer", "protobuf (<=3.20.2)", "psutil", "pyctcdecode (>=0.4.0)", "pytest", "pytest-timeout", "pytest-xdist", "ray[tune]", "rhoknp (>=1.1.0)", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (>=0.0.241)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "safetensors (>=0.2.1)", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "timeout-decorator", "timm", "tokenizers (>=0.11.1,!=0.11.3,<0.14)", "torch (>=1.7,!=1.12.0)", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)"] +docs = ["Pillow", "accelerate (>=0.10.0)", "av (==9.2.0)", "codecarbon (==1.2.0)", "decord (==0.6.0)", "flax (>=0.4.1)", "hf-doc-builder", "jax (>=0.2.8,!=0.3.2,<=0.3.6)", "jaxlib (>=0.1.65,<=0.3.6)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "onnxconverter-common", "optax (>=0.0.8)", "optuna", "phonemizer", "protobuf (<=3.20.2)", "pyctcdecode (>=0.4.0)", "ray[tune]", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "tensorflow (>=2.4,<2.12)", "tensorflow-text", "tf2onnx", "timm", "tokenizers (>=0.11.1,!=0.11.3,<0.14)", "torch (>=1.7,!=1.12.0)", "torchaudio", "torchvision"] docs-specific = ["hf-doc-builder"] fairscale = ["fairscale (>0.3)"] flax = ["flax (>=0.4.1)", "jax (>=0.2.8,!=0.3.2,<=0.3.6)", "jaxlib (>=0.1.65,<=0.3.6)", "optax (>=0.0.8)"] @@ -9048,7 +9048,7 @@ natten = ["natten (>=0.14.4)"] onnx = ["onnxconverter-common", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "tf2onnx"] onnxruntime = ["onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)"] optuna = ["optuna"] -quality = ["GitPython (<3.1.19)", "black (==22.3)", "datasets (!=2.5.0)", "flake8 (>=3.8.3)", "hf-doc-builder (>=0.3.0)", "isort (>=5.5.4)"] +quality = ["GitPython (<3.1.19)", "black (>=23.1,<24.0)", "datasets (!=2.5.0)", "hf-doc-builder (>=0.3.0)", "isort (>=5.5.4)", "ruff (>=0.0.241)"] ray = ["ray[tune]"] retrieval = ["datasets (!=2.5.0)", "faiss-cpu"] sagemaker = ["sagemaker (>=2.31.0)"] @@ -9057,7 +9057,7 @@ serving = ["fastapi", "pydantic", "starlette", "uvicorn"] sigopt = ["sigopt"] sklearn = ["scikit-learn"] speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)", "torchaudio"] -testing = ["GitPython (<3.1.19)", "beautifulsoup4", "black (==22.3)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "hf-doc-builder (>=0.3.0)", "nltk", "parameterized", "protobuf (<=3.20.2)", "psutil", "pytest", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "safetensors (>=0.2.1)", "timeout-decorator"] +testing = ["GitPython (<3.1.19)", "beautifulsoup4", "black (>=23.1,<24.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "hf-doc-builder (>=0.3.0)", "nltk", "parameterized", "protobuf (<=3.20.2)", "psutil", "pytest", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "safetensors (>=0.2.1)", "timeout-decorator"] tf = ["keras-nlp (>=0.3.1)", "onnxconverter-common", "tensorflow (>=2.4,<2.12)", "tensorflow-text", "tf2onnx"] tf-cpu = ["keras-nlp (>=0.3.1)", "onnxconverter-common", "tensorflow-cpu (>=2.4,<2.12)", "tensorflow-text", "tf2onnx"] tf-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"] @@ -9065,20 +9065,21 @@ timm = ["timm"] tokenizers = ["tokenizers (>=0.11.1,!=0.11.3,<0.14)"] torch = ["torch (>=1.7,!=1.12.0)"] torch-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)", "torchaudio"] +torch-vision = ["Pillow", "torchvision"] torchhub = ["filelock", "huggingface-hub (>=0.11.0,<1.0)", "importlib-metadata", "numpy (>=1.17)", "packaging (>=20.0)", "protobuf (<=3.20.2)", "regex (!=2019.12.17)", "requests", "sentencepiece (>=0.1.91,!=0.1.92)", "tokenizers (>=0.11.1,!=0.11.3,<0.14)", "torch (>=1.7,!=1.12.0)", "tqdm (>=4.27)"] -video = ["decord (==0.6.0)"] +video = ["av (==9.2.0)", "decord (==0.6.0)"] vision = ["Pillow"] [[package]] name = "triad" -version = "0.8.2" +version = "0.8.3" description = "A collection of python utils for Fugue projects" category = "main" optional = true python-versions = ">=3.7" files = [ - {file = "triad-0.8.2-py3-none-any.whl", hash = "sha256:15cf3df06279365d094112f16fa1b1657e749fb2571862429253ffceed8f2bae"}, - {file = "triad-0.8.2.tar.gz", hash = "sha256:4180f0d207825a40be465975de678b385afa924568b9febd9753f390b9a9c2ce"}, + {file = "triad-0.8.3-py3-none-any.whl", hash = "sha256:899f6336cfb5e0dd7bfad4593fdbb43593df01a3eec1996b5cb7f0927ef23aa7"}, + {file = "triad-0.8.3.tar.gz", hash = "sha256:4cf58ee0e7bfd4eb8bc12a15be1622b338e0cb12858cf924a0031694923dc4ec"}, ] [package.dependencies] @@ -9093,14 +9094,14 @@ ciso8601 = ["ciso8601"] [[package]] name = "tweepy" -version = "4.12.1" +version = "4.13.0" description = "Twitter library for Python" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "tweepy-4.12.1-py3-none-any.whl", hash = "sha256:86d4f6738cbd5a57f86dff7ae0caf52f66004d5777626bf5da970aa8c8aa35df"}, - {file = "tweepy-4.12.1.tar.gz", hash = "sha256:5e4c5b5d22f9e5dd9678a708fae4e40e6eeb1a860a89891a5de3040d5f3da8fe"}, + {file = "tweepy-4.13.0-py3-none-any.whl", hash = "sha256:95207c41023b75a066b0b442a0a907acada610a3cfa09c4ccb5f2d9e522c33b5"}, + {file = "tweepy-4.13.0.tar.gz", hash = "sha256:097425335f9f6674826ba7e72b2247bbca39c9ca0a0bd82f30a38a5bef8c6c88"}, ] [package.dependencies] @@ -9109,7 +9110,7 @@ requests = ">=2.27.0,<3" requests-oauthlib = ">=1.2.0,<2" [package.extras] -async = ["aiohttp (>=3.7.3,<4)", "async-lru (>=1.0.3,<2)"] +async = ["aiohttp (>=3.7.3,<4)", "async-lru (>=1.0.3,<3)"] dev = ["coverage (>=4.4.2)", "coveralls (>=2.1.0)", "tox (>=3.21.0)"] docs = ["myst-parser (==0.15.2)", "readthedocs-sphinx-search (==0.1.1)", "sphinx (==4.2.0)", "sphinx-hoverxref (==0.7b1)", "sphinx-rtd-theme (==1.0.0)", "sphinx-tabs (==3.2.0)"] socks = ["requests[socks] (>=2.27.0,<3)"] @@ -9196,14 +9197,14 @@ files = [ [[package]] name = "types-six" -version = "1.16.21.6" +version = "1.16.21.7" description = "Typing stubs for six" category = "dev" optional = false python-versions = "*" files = [ - {file = "types-six-1.16.21.6.tar.gz", hash = "sha256:7b6a60ef6b46bc954903fc588161c09183b7a33ee5ebfba556174fa649f4c1e0"}, - {file = "types_six-1.16.21.6-py3-none-any.whl", hash = "sha256:15b24f0ca13b7c2ec6448ec4d96e8691899525989e53802e99bc5b4c2574382f"}, + {file = "types-six-1.16.21.7.tar.gz", hash = "sha256:9ce4eb910e694ab0f94400361994c44c2186e0b62cef09095a8e4c92ce011e4f"}, + {file = "types_six-1.16.21.7-py3-none-any.whl", hash = "sha256:d7f74db8ca79f9620107465ce9ddf8c0d2bffd45461f719f14c1479cdaf2d2a9"}, ] [[package]] @@ -9401,14 +9402,14 @@ test = ["pytest (>=2.7.3)"] [[package]] name = "urllib3" -version = "1.26.14" +version = "1.26.15" description = "HTTP library with thread-safe connection pooling, file post, and more." category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ - {file = "urllib3-1.26.14-py2.py3-none-any.whl", hash = "sha256:75edcdc2f7d85b137124a6c3c9fc3933cdeaa12ecb9a6a959f22797a0feca7e1"}, - {file = "urllib3-1.26.14.tar.gz", hash = "sha256:076907bf8fd355cde77728471316625a4d2f7e713c125f51953bb5b3eecf4f72"}, + {file = "urllib3-1.26.15-py2.py3-none-any.whl", hash = "sha256:aa751d169e23c7479ce47a0cb0da579e3ede798f994f5816a74e4f4500dcea42"}, + {file = "urllib3-1.26.15.tar.gz", hash = "sha256:8a388717b9476f934a21484e8c8e61875ab60644d29b9b39e11e4b9dc1c6b305"}, ] [package.extras] @@ -9494,14 +9495,14 @@ yarl = "*" [[package]] name = "virtualenv" -version = "20.20.0" +version = "20.21.0" description = "Virtual Python Environment builder" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "virtualenv-20.20.0-py3-none-any.whl", hash = "sha256:3c22fa5a7c7aa106ced59934d2c20a2ecb7f49b4130b8bf444178a16b880fa45"}, - {file = "virtualenv-20.20.0.tar.gz", hash = "sha256:a8a4b8ca1e28f864b7514a253f98c1d62b64e31e77325ba279248c65fb4fcef4"}, + {file = "virtualenv-20.21.0-py3-none-any.whl", hash = "sha256:31712f8f2a17bd06234fa97fdf19609e789dd4e3e4bf108c3da71d710651adbc"}, + {file = "virtualenv-20.21.0.tar.gz", hash = "sha256:f50e3e60f990a0757c9b68333c9fdaa72d7188caa417f96af9e52407831a3b68"}, ] [package.dependencies] @@ -9720,18 +9721,18 @@ watchdog = ["watchdog"] [[package]] name = "wheel" -version = "0.38.4" +version = "0.40.0" description = "A built-package format for Python" category = "main" optional = true python-versions = ">=3.7" files = [ - {file = "wheel-0.38.4-py3-none-any.whl", hash = "sha256:b60533f3f5d530e971d6737ca6d58681ee434818fab630c83a734bb10c083ce8"}, - {file = "wheel-0.38.4.tar.gz", hash = "sha256:965f5259b566725405b05e7cf774052044b1ed30119b5d586b2703aafe8719ac"}, + {file = "wheel-0.40.0-py3-none-any.whl", hash = "sha256:d236b20e7cb522daf2390fa84c55eea81c5c30190f90f29ae2ca1ad8355bf247"}, + {file = "wheel-0.40.0.tar.gz", hash = "sha256:cd1196f3faee2b31968d626e1731c94f99cbdb67cf5a46e4f5656cbee7738873"}, ] [package.extras] -test = ["pytest (>=3.0.0)"] +test = ["pytest (>=6.0.0)"] [[package]] name = "widgetsnbextension" @@ -9900,14 +9901,14 @@ scikit-learn = ["scikit-learn"] [[package]] name = "xlsxwriter" -version = "3.0.8" +version = "3.0.9" description = "A Python module for creating Excel XLSX files." category = "main" optional = true python-versions = ">=3.6" files = [ - {file = "XlsxWriter-3.0.8-py3-none-any.whl", hash = "sha256:f5c7491b8450cf49968428f062355de16c9140aa24eafc466c9dfe107610bd44"}, - {file = "XlsxWriter-3.0.8.tar.gz", hash = "sha256:ec77335fb118c36bc5ed1c89e33904d649e4989df2d7980f7d6a9dd95ee5874e"}, + {file = "XlsxWriter-3.0.9-py3-none-any.whl", hash = "sha256:5eaaf3c6f791cba1dd1c3065147c35982180f693436093aabe5b7d6c16148e95"}, + {file = "XlsxWriter-3.0.9.tar.gz", hash = "sha256:7216d39a2075afac7a28cad81f6ac31b0b16d8976bf1b775577d157346f891dd"}, ] [[package]] @@ -10124,14 +10125,14 @@ requests = ">=2.26" [[package]] name = "yt-dlp" -version = "2023.2.17" +version = "2023.3.4" description = "A youtube-dl fork with additional features and patches" category = "main" optional = true python-versions = ">=3.7" files = [ - {file = "yt-dlp-2023.2.17.tar.gz", hash = "sha256:9af92de5effc193bdb51216d9ebf28874d96180d202fae752b0d9f2a63380f3a"}, - {file = "yt_dlp-2023.2.17-py2.py3-none-any.whl", hash = "sha256:3b2df037c80922f0f83f63ee2f9253496b4a8668c0fe8d2a836ba9040f853b07"}, + {file = "yt-dlp-2023.3.4.tar.gz", hash = "sha256:265d5da97a76c15d7d9a4088a67b78acd5dcf6f8cfd8257c52f581ff996ff515"}, + {file = "yt_dlp-2023.3.4-py2.py3-none-any.whl", hash = "sha256:40ca421407ce07c8fd700854fd978d58526ec6fff3468caa34ff1c7333b8dc34"}, ] [package.dependencies] @@ -10213,14 +10214,14 @@ test = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] [extras] -all = ["Riskfolio-Lib", "lightgbm", "openai-whisper", "pytorch-lightning", "setuptools-rust", "torch", "transformers", "u8darts", "yt-dlp"] +all = ["torch", "pytorch-lightning", "u8darts", "Riskfolio-Lib", "lightgbm", "openai-whisper", "setuptools-rust", "transformers", "yt-dlp"] doc = ["docstring-parser"] -forecast = ["lightgbm", "openai-whisper", "pytorch-lightning", "setuptools-rust", "torch", "transformers", "u8darts", "yt-dlp"] +forecast = ["torch", "pytorch-lightning", "u8darts", "lightgbm", "openai-whisper", "setuptools-rust", "transformers", "yt-dlp"] installer = ["pyinstaller"] -jupyterlab = ["jedi-language-server", "jupyterlab-code-formatter", "jupyterlab-lsp"] +jupyterlab = ["jupyterlab-code-formatter", "jupyterlab-lsp", "jedi-language-server"] optimization = ["Riskfolio-Lib"] [metadata] lock-version = "2.0" python-versions = "^3.8,<3.11, !=3.9.7" -content-hash = "5673985d2547944f488da556023fe0e75961cb0bc6286c2ea9035326558df04b" +content-hash = "08c9147c1d8b70071894e83400bc819f157af4751a0e96e90df0b3d5d0b94602" diff --git a/pyproject.toml b/pyproject.toml index 7d51faa7619..d13284a87d0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -39,7 +39,6 @@ seaborn = "^0.11.0" fredapi = "^0.4.3" screeninfo = "^0.6.7" robin-stocks = "^2.0.3" -pyally = "^1.1.2" pycoingecko = "^3.1.0" detecta = "^0.0.5" tradingview-ta = "^3.2.3" diff --git a/requirements-full.txt b/requirements-full.txt index 5f65ddfe8c5..d2ff4f48a1c 100644 --- a/requirements-full.txt +++ b/requirements-full.txt @@ -28,7 +28,7 @@ babel==2.12.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and p backcall==0.2.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" backoff==2.2.1 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" backports-zoneinfo==0.2.1 ; python_version >= "3.8" and python_version < "3.9" -bandit==1.7.4 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +bandit==1.7.5 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" base58==2.1.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" beautifulsoup4==4.11.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" black==23.1.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" @@ -40,23 +40,23 @@ bs4==0.0.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and pyth bt==0.2.9 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" cachetools==5.3.0 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" catboost==1.1.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -ccxt==2.8.78 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +ccxt==2.9.16 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" certifi==2022.12.7 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" cffi==1.15.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" cfgv==3.3.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -charset-normalizer==3.0.1 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" +charset-normalizer==3.1.0 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" click==8.1.3 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" cloudpickle==2.2.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" cmdstanpy==1.1.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -codespell==2.2.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +codespell==2.2.4 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" colorama==0.4.6 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" comm==0.1.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" commonmark==0.9.1 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" contourpy==1.0.7 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" convertdate==2.4.0 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" -coverage==7.2.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -coverage[toml]==7.2.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -cryptography==39.0.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +coverage==7.2.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +coverage[toml]==7.2.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +cryptography==39.0.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" cssselect2==0.7.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" cssselect==1.2.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" cvxpy==1.2.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" @@ -65,9 +65,9 @@ cython==0.29.33 ; python_version >= "3.8" and python_full_version != "3.9.7" and dash-core-components==2.0.0 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" dash-html-components==2.0.0 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" dash-table==5.0.0 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" -dash==2.8.1 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" +dash==2.9.0 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" dateparser==1.1.7 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -datetime==5.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +datetime==5.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" debugpy==1.6.6 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" decorator==5.1.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" defusedxml==0.7.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" @@ -88,22 +88,21 @@ fastjsonschema==2.16.3 ; python_version >= "3.8" and python_full_version != "3.9 feedparser==6.0.10 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" ffmpeg-python==0.2.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" ffn==0.3.6 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -filelock==3.9.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +filelock==3.10.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" financedatabase==2.0.9 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" finnhub-python==2.4.16 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" finviz==1.4.4 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" finvizfinance==0.14.5 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" flake8==5.0.4 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -flask-cors==3.0.10 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" flask==2.2.3 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" -fonttools==4.38.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +fonttools==4.39.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" formulaic==0.3.4 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" fred==3.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" fredapi==0.4.3 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" frozendict==2.3.5 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" frozenlist==1.3.3 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" fs==2.4.16 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -fsspec[http]==2023.1.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +fsspec[http]==2023.3.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" fugue-sql-antlr==0.1.5 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" fugue==0.8.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" fundamentalanalysis==0.2.14 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" @@ -111,24 +110,25 @@ future==0.18.3 ; python_version >= "3.8" and python_full_version != "3.9.7" and gitdb==4.0.10 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" gitpython==3.1.31 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" google-auth-oauthlib==0.4.6 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -google-auth==2.16.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +google-auth==2.16.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" graphviz==0.20.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -greenlet==2.0.2 ; python_version >= "3.8" and platform_machine == "aarch64" and python_full_version != "3.9.7" and python_version < "3.11" or python_version >= "3.8" and platform_machine == "ppc64le" and python_full_version != "3.9.7" and python_version < "3.11" or python_version >= "3.8" and platform_machine == "x86_64" and python_full_version != "3.9.7" and python_version < "3.11" or python_version >= "3.8" and platform_machine == "amd64" and python_full_version != "3.9.7" and python_version < "3.11" or python_version >= "3.8" and platform_machine == "AMD64" and python_full_version != "3.9.7" and python_version < "3.11" or python_version >= "3.8" and platform_machine == "win32" and python_full_version != "3.9.7" and python_version < "3.11" or python_version >= "3.8" and platform_machine == "WIN32" and python_full_version != "3.9.7" and python_version < "3.11" +greenlet==2.0.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" and platform_machine == "aarch64" or python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" and platform_machine == "ppc64le" or python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" and platform_machine == "x86_64" or python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" and platform_machine == "amd64" or python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" and platform_machine == "AMD64" or python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" and platform_machine == "win32" or python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" and platform_machine == "WIN32" grpcio==1.51.3 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" hijri-converter==2.2.4 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" holidays==0.14.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" html5lib==1.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -huggingface-hub==0.12.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -identify==2.5.18 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +huggingface-hub==0.13.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +identify==2.5.21 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" idna==3.4 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" imagesize==1.4.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -importlib-metadata==6.0.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -importlib-resources==5.12.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.10" +importlib-metadata==6.0.0 ; python_full_version != "3.9.7" and python_version < "3.11" and python_version >= "3.8" +importlib-resources==5.12.0 ; python_full_version != "3.9.7" and python_version < "3.10" and python_version >= "3.8" inflection==0.5.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" iniconfig==2.0.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" interface-meta==1.3.0 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" intrinio-sdk==6.22.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -ipykernel==6.21.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +ipyflex==0.2.6 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +ipykernel==6.21.3 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" ipympl==0.8.4 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" ipython-genutils==0.2.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" ipython==8.11.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" @@ -143,11 +143,11 @@ joblib==1.2.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and p json5==0.9.11 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" jsonschema==4.17.3 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" jupyter-client==7.4.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -jupyter-core==5.2.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +jupyter-core==5.3.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" jupyter-dash==0.4.2 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" jupyter-server==1.23.6 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" jupyterlab-pygments==0.2.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -jupyterlab-server==2.19.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +jupyterlab-server==2.20.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" jupyterlab-widgets==3.0.5 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" jupyterlab==3.5.3 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" kiwisolver==1.4.4 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" @@ -164,7 +164,7 @@ markdown-it-py==1.1.0 ; python_version >= "3.8" and python_version < "3.11" and markdown==3.4.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" markupsafe==2.1.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" matplotlib-inline==0.1.6 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -matplotlib==3.7.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +matplotlib==3.7.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" mccabe==0.7.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" mdit-py-plugins==0.2.8 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" mistune==2.0.5 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" @@ -176,11 +176,11 @@ multidict==6.0.4 ; python_version >= "3.8" and python_full_version != "3.9.7" an multitasking==0.0.11 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" mutagen==1.46.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" mypy-extensions==1.0.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -mypy==1.0.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +mypy==1.1.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" myst-parser==0.15.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -nbclassic==0.5.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +nbclassic==0.5.3 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" nbclient==0.6.8 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -nbconvert==7.2.9 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +nbconvert==7.2.10 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" nbformat==5.7.3 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" nbmake==1.4.1 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" nest-asyncio==1.5.6 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" @@ -188,14 +188,14 @@ networkx==3.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and p nfoursid==1.0.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" nodeenv==1.7.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" notebook-shim==0.2.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -notebook==6.5.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +notebook==6.5.3 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" numba==0.56.4 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" numpy==1.23.4 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" oandapyv20==0.6.3 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" oauthlib==3.2.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" onetimepass==1.0.1 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" openai-whisper==20230124 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -openpyxl==3.1.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +openpyxl==3.1.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" orjson==3.8.7 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" osqp==0.6.2.post8 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" packaging==23.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" @@ -206,7 +206,7 @@ pandas==1.5.3 ; python_version >= "3.8" and python_full_version != "3.9.7" and p pandocfilters==1.5.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" papermill==2.4.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" parso==0.8.3 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -pathspec==0.11.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +pathspec==0.11.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" patsy==0.5.3 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" pbr==5.11.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" pefile==2023.2.7 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" and sys_platform == "win32" @@ -214,12 +214,12 @@ pexpect==4.8.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and pickleshare==0.7.5 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" pillow==9.4.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" pkgutil-resolve-name==1.3.10 ; python_version >= "3.8" and python_version < "3.9" -platformdirs==3.0.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -plotly-resampler==0.8.1 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" +platformdirs==3.1.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +plotly-resampler==0.8.3.2 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" plotly==5.13.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" pluggy==1.0.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" pmaw==3.0.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -pmdarima==2.0.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +pmdarima==2.0.3 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" praw==7.7.0 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" prawcore==2.3.0 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" pre-commit==2.21.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" @@ -232,7 +232,6 @@ psutil==5.9.3 ; python_version >= "3.8" and python_full_version != "3.9.7" and p ptyprocess==0.7.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" and sys_platform != "win32" or python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" and os_name != "nt" pure-eval==0.2.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" py==1.11.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -pyally==1.1.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" pyarrow==11.0.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" pyasn1-modules==0.2.8 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" pyasn1==0.4.8 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" @@ -242,7 +241,7 @@ pycoingecko==3.1.0 ; python_version >= "3.8" and python_full_version != "3.9.7" pycparser==2.21 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" pycryptodome==3.17 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" pycryptodomex==3.17 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -pydantic==1.10.5 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +pydantic==1.10.6 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" pydeck==0.8.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" pydeprecate==0.3.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" pydocstyle==6.3.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" @@ -258,7 +257,7 @@ pymeeus==0.5.12 ; python_version >= "3.8" and python_version < "3.11" and python pympler==1.0.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" pyobjc-core==9.0.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" and sys_platform == "darwin" pyobjc-framework-cocoa==9.0.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" and sys_platform == "darwin" -pyod==1.0.7 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +pyod==1.0.8 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" pyotp==2.8.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" pyparsing==3.0.9 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" pyprind==2.11.3 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" @@ -267,7 +266,7 @@ pytest-cov==3.0.0 ; python_version >= "3.8" and python_full_version != "3.9.7" a pytest-mock==3.10.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" pytest-recording==0.12.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" pytest-timeout==2.1.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -pytest-xdist==3.2.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +pytest-xdist==3.2.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" pytest==6.2.5 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" pythclient==0.1.4 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" python-binance==1.0.17 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" @@ -278,13 +277,13 @@ python-i18n==0.3.9 ; python_version >= "3.8" and python_full_version != "3.9.7" pytorch-lightning==1.6.5 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" pytrends==4.9.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" pytz-deprecation-shim==0.1.0.post0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -pytz==2022.7.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +pytz==2022.7.1 ; python_full_version != "3.9.7" and python_version < "3.11" and python_version >= "3.8" pywin32-ctypes==0.2.0 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" and sys_platform == "win32" pywin32==305 ; sys_platform == "win32" and platform_python_implementation != "PyPy" and python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" pywinpty==2.0.10 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" and os_name == "nt" pywry==0.3.6 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" pyyaml==6.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -pyzmq==25.0.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +pyzmq==25.0.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" qdldl==0.1.5.post3 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" qpd==0.4.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" quandl==3.7.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" @@ -303,7 +302,7 @@ rsa==4.9 ; python_version >= "3.8" and python_version < "3.11" and python_full_v ruamel-yaml-clib==0.2.7 ; platform_python_implementation == "CPython" and python_version < "3.11" and python_version >= "3.8" and python_full_version != "3.9.7" ruamel-yaml==0.17.21 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" ruff==0.0.247 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -scikit-learn==1.2.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +scikit-learn==1.2.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" scipy==1.10.1 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" screeninfo==0.6.7 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" scs==3.2.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" @@ -330,15 +329,15 @@ sphinxcontrib-htmlhelp==2.0.1 ; python_version >= "3.8" and python_full_version sphinxcontrib-jsmath==1.0.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" sphinxcontrib-qthelp==1.0.3 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" sphinxcontrib-serializinghtml==1.1.5 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -sqlalchemy==2.0.4 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -sqlglot==11.2.3 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +sqlalchemy==2.0.6 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +sqlglot==11.3.7 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" squarify==0.4.3 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" stack-data==0.6.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" statsforecast==1.5.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" statsmodels==0.13.5 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" stevedore==5.0.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" stocksera==0.1.21 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -streamlit==1.19.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +streamlit==1.20.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" svglib==1.5.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" tabulate==0.9.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" tbats==1.1.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" @@ -358,35 +357,35 @@ tomli==2.0.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and py tomlkit==0.11.6 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" toolz==0.12.0 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" torch==1.11.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -torchmetrics==0.11.3 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +torchmetrics==0.11.4 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" tornado==6.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -tqdm==4.64.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +tqdm==4.65.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" trace-updater==0.0.9 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" tradingview-ta==3.3.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" traitlets==5.9.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -transformers==4.26.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -triad==0.8.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -tweepy==4.12.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +transformers==4.27.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +triad==0.8.3 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +tweepy==4.13.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" types-python-dateutil==2.8.19.10 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" types-pytz==2021.3.8 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" types-pyyaml==6.0.12.8 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" types-requests==2.28.11.15 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" types-setuptools==57.4.18 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -types-six==1.16.21.6 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +types-six==1.16.21.7 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" types-urllib3==1.26.25.8 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -typing-extensions==4.5.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +typing-extensions==4.5.0 ; python_full_version != "3.9.7" and python_version < "3.11" and python_version >= "3.8" tzdata==2022.7 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" tzlocal==4.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" u8darts[torch]==0.23.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" ujson==5.7.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" update-checker==0.18.0 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" -urllib3==1.26.14 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" +urllib3==1.26.15 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" user-agent==0.1.10 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" vadersentiment==3.3.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" validators==0.20.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" valinvest==0.0.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" vcrpy==4.2.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -virtualenv==20.20.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +virtualenv==20.21.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" voila==0.4.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" watchdog==2.3.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" wcwidth==0.2.6 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" @@ -394,17 +393,17 @@ webencodings==0.5.1 ; python_version >= "3.8" and python_full_version != "3.9.7" websocket-client==1.5.1 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" websockets==10.4 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" werkzeug==2.2.3 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -wheel==0.38.4 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +wheel==0.40.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" widgetsnbextension==4.0.5 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" win32-setctime==1.1.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" and sys_platform == "win32" wrapt==1.15.0 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" xarray==2023.1.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" xgboost==1.7.4 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -xlsxwriter==3.0.8 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +xlsxwriter==3.0.9 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" y-py==0.6.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" yahooquery==2.3.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" yarl==1.8.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" yfinance==0.2.12 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -yt-dlp==2023.2.17 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -zipp==3.15.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +yt-dlp==2023.3.4 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +zipp==3.15.0 ; python_full_version != "3.9.7" and python_version < "3.11" and python_version >= "3.8" zope-interface==5.5.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" diff --git a/requirements.txt b/requirements.txt index f5560d90f5b..7cb09512fdf 100644 --- a/requirements.txt +++ b/requirements.txt @@ -25,23 +25,23 @@ blinker==1.5 ; python_version >= "3.8" and python_full_version != "3.9.7" and py bs4==0.0.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" bt==0.2.9 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" cachetools==5.3.0 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" -ccxt==2.8.78 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +ccxt==2.9.16 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" certifi==2022.12.7 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" cffi==1.15.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -charset-normalizer==3.0.1 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" +charset-normalizer==3.1.0 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" click==8.1.3 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" colorama==0.4.6 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" comm==0.1.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" commonmark==0.9.1 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" contourpy==1.0.7 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" convertdate==2.4.0 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" -cryptography==39.0.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +cryptography==39.0.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" cssselect2==0.7.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" cssselect==1.2.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" cycler==0.11.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" cython==0.29.33 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" dateparser==1.1.7 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -datetime==5.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +datetime==5.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" debugpy==1.6.6 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" decorator==5.1.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" defusedxml==0.7.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" @@ -60,7 +60,7 @@ finnhub-python==2.4.16 ; python_version >= "3.8" and python_full_version != "3.9 finviz==1.4.4 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" finvizfinance==0.14.5 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" flake8==5.0.4 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -fonttools==4.38.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +fonttools==4.39.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" formulaic==0.3.4 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" fred==3.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" fredapi==0.4.3 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" @@ -76,11 +76,12 @@ holidays==0.14.2 ; python_version >= "3.8" and python_full_version != "3.9.7" an html5lib==1.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" idna==3.4 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" importlib-metadata==6.0.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -importlib-resources==5.12.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.10" +importlib-resources==5.12.0 ; python_full_version != "3.9.7" and python_version < "3.10" and python_version >= "3.8" inflection==0.5.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" interface-meta==1.3.0 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" intrinio-sdk==6.22.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -ipykernel==6.21.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +ipyflex==0.2.6 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +ipykernel==6.21.3 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" ipympl==0.8.4 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" ipython-genutils==0.2.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" ipython==8.11.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" @@ -93,10 +94,10 @@ joblib==1.2.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and p json5==0.9.11 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" jsonschema==4.17.3 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" jupyter-client==7.4.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -jupyter-core==5.2.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +jupyter-core==5.3.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" jupyter-server==1.23.6 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" jupyterlab-pygments==0.2.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -jupyterlab-server==2.19.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +jupyterlab-server==2.20.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" jupyterlab-widgets==3.0.5 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" jupyterlab==3.5.3 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" kiwisolver==1.4.4 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" @@ -106,7 +107,7 @@ loguru==0.6.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and p lxml==4.9.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" markupsafe==2.1.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" matplotlib-inline==0.1.6 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -matplotlib==3.7.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +matplotlib==3.7.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" mccabe==0.7.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" mistune==2.0.5 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" more-itertools==9.1.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" @@ -115,18 +116,18 @@ mstarpy==0.0.4 ; python_version >= "3.8" and python_full_version != "3.9.7" and multidict==6.0.4 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" multitasking==0.0.11 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" mypy-extensions==1.0.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -nbclassic==0.5.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +nbclassic==0.5.3 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" nbclient==0.6.8 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -nbconvert==7.2.9 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +nbconvert==7.2.10 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" nbformat==5.7.3 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" nest-asyncio==1.5.6 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" notebook-shim==0.2.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -notebook==6.5.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +notebook==6.5.3 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" numpy==1.23.4 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" oandapyv20==0.6.3 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" oauthlib==3.2.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" onetimepass==1.0.1 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" -openpyxl==3.1.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +openpyxl==3.1.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" packaging==23.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" pandas-datareader==0.10.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" pandas-market-calendars==3.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" @@ -140,7 +141,7 @@ pexpect==4.8.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and pickleshare==0.7.5 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" pillow==9.4.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" pkgutil-resolve-name==1.3.10 ; python_version >= "3.8" and python_version < "3.9" -platformdirs==3.0.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +platformdirs==3.1.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" plotly==5.13.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" pmaw==3.0.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" praw==7.7.0 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" @@ -152,14 +153,13 @@ protobuf==3.20.1 ; python_version >= "3.8" and python_full_version != "3.9.7" an psutil==5.9.3 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" ptyprocess==0.7.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" and sys_platform != "win32" or python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" and os_name != "nt" pure-eval==0.2.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -pyally==1.1.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" pyarrow==11.0.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" pycares==4.3.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" pycodestyle==2.9.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" pycoingecko==3.1.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" pycparser==2.21 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" pycryptodome==3.17 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -pydantic==1.10.5 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +pydantic==1.10.6 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" pydeck==0.8.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" pyflakes==2.5.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" pygments==2.14.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" @@ -181,12 +181,12 @@ python-dotenv==0.19.2 ; python_version >= "3.8" and python_full_version != "3.9. python-i18n==0.3.9 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" pytrends==4.9.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" pytz-deprecation-shim==0.1.0.post0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -pytz==2022.7.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +pytz==2022.7.1 ; python_full_version != "3.9.7" and python_version < "3.11" and python_version >= "3.8" pywin32==305 ; sys_platform == "win32" and platform_python_implementation != "PyPy" and python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" pywinpty==2.0.10 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" and os_name == "nt" pywry==0.3.6 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" pyyaml==6.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -pyzmq==25.0.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +pyzmq==25.0.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" quandl==3.7.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" rapidfuzz==2.13.7 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" rdflib==6.2.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" @@ -200,7 +200,7 @@ rich==12.6.0 ; python_version >= "3.8" and python_version < "3.11" and python_fu robin-stocks==2.1.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" ruamel-yaml-clib==0.2.7 ; platform_python_implementation == "CPython" and python_version < "3.11" and python_version >= "3.8" and python_full_version != "3.9.7" ruamel-yaml==0.17.21 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -scikit-learn==1.2.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +scikit-learn==1.2.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" scipy==1.10.1 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" screeninfo==0.6.7 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" seaborn==0.11.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" @@ -218,7 +218,7 @@ squarify==0.4.3 ; python_version >= "3.8" and python_full_version != "3.9.7" and stack-data==0.6.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" statsmodels==0.13.5 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" stocksera==0.1.21 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -streamlit==1.19.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +streamlit==1.20.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" svglib==1.5.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" tabulate==0.9.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" tenacity==7.0.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" @@ -232,16 +232,16 @@ toml==0.10.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and py tomli==2.0.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" toolz==0.12.0 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" tornado==6.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -tqdm==4.64.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +tqdm==4.65.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" tradingview-ta==3.3.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" traitlets==5.9.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -tweepy==4.12.1 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -typing-extensions==4.5.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +tweepy==4.13.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +typing-extensions==4.5.0 ; python_full_version != "3.9.7" and python_version < "3.11" and python_version >= "3.8" tzdata==2022.7 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" tzlocal==4.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" ujson==5.7.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" update-checker==0.18.0 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" -urllib3==1.26.14 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" +urllib3==1.26.15 ; python_version >= "3.8" and python_version < "3.11" and python_full_version != "3.9.7" user-agent==0.1.10 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" vadersentiment==3.3.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" validators==0.20.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" @@ -259,5 +259,5 @@ y-py==0.6.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and pyt yahooquery==2.3.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" yarl==1.8.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" yfinance==0.2.12 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" -zipp==3.15.0 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" +zipp==3.15.0 ; python_full_version != "3.9.7" and python_version < "3.11" and python_version >= "3.8" zope-interface==5.5.2 ; python_version >= "3.8" and python_full_version != "3.9.7" and python_version < "3.11" diff --git a/tests/openbb_terminal/account/test_account_controller.py b/tests/openbb_terminal/account/test_account_controller.py index 399e80279b0..46a72463a73 100644 --- a/tests/openbb_terminal/account/test_account_controller.py +++ b/tests/openbb_terminal/account/test_account_controller.py @@ -352,7 +352,9 @@ def test_call_sync(mocker, other_args, sync): target="openbb_terminal.core.session.current_user.__current_user", new=mock_current_user, ) - + mocker.patch( + target="openbb_terminal.account.account_controller.set_preference", + ) controller.call_sync(other_args=other_args) assert controller.queue == [] @@ -619,12 +621,6 @@ def test_call_generate(mocker, monkeypatch, test_user): mock_input = "y" monkeypatch.setattr(f"{path_controller}.console.input", lambda _: mock_input) - # mock save to keys - mocker.patch( - target=f"{path_controller}.keys_model.set_openbb_personal_access_token", - return_value=True, - ) - controller.call_generate(other_args=["--save", "--days", "30"]) mock_generate.assert_called_once_with( diff --git a/tests/openbb_terminal/session/test_hub_model.py b/tests/openbb_terminal/session/test_hub_model.py index 3f94c22c347..b30f512b282 100644 --- a/tests/openbb_terminal/session/test_hub_model.py +++ b/tests/openbb_terminal/session/test_hub_model.py @@ -360,7 +360,7 @@ def test_fetch_user_configs_exception(): ("key", "value", "settings", "auth_header"), ], ) -def test_patch_user_configs_success(key, value, type_, auth_header): +def test_upload_config_success(key, value, type_, auth_header): mock_response = MagicMock(spec=requests.Response) mock_response.status_code = 200 @@ -368,7 +368,7 @@ def test_patch_user_configs_success(key, value, type_, auth_header): "openbb_terminal.core.session.hub_model.requests.patch", return_value=mock_response, ) as requests_patch_mock: - result = hub_model.patch_user_configs(key, value, type_, auth_header) + result = hub_model.upload_config(key, value, type_, auth_header) assert result.status_code == mock_response.status_code requests_patch_mock.assert_called_once() @@ -379,7 +379,7 @@ def test_patch_user_configs_success(key, value, type_, auth_header): assert kwargs["timeout"] == hub_model.TIMEOUT -def test_patch_user_configs_failure(): +def test_upload_config_failure(): mock_response = MagicMock(spec=requests.Response) mock_response.status_code = 400 @@ -387,7 +387,7 @@ def test_patch_user_configs_failure(): "openbb_terminal.core.session.hub_model.requests.patch", return_value=mock_response, ) as requests_patch_mock: - result = hub_model.patch_user_configs("key", "value", "keys", "auth_header") + result = hub_model.upload_config("key", "value", "keys", "auth_header") assert result.status_code == mock_response.status_code requests_patch_mock.assert_called_once() @@ -398,13 +398,13 @@ def test_patch_user_configs_failure(): assert kwargs["timeout"] == hub_model.TIMEOUT -def test_patch_user_configs_connection_error(): +def test_upload_config_connection_error(): with patch( "openbb_terminal.core.session.hub_model.requests.patch" ) as requests_patch_mock: requests_patch_mock.side_effect = requests.exceptions.ConnectionError() - result = hub_model.patch_user_configs("key", "value", "keys", "auth_header") + result = hub_model.upload_config("key", "value", "keys", "auth_header") assert result is None requests_patch_mock.assert_called_once() @@ -415,13 +415,13 @@ def test_patch_user_configs_connection_error(): assert kwargs["timeout"] == hub_model.TIMEOUT -def test_patch_user_configs_timeout(): +def test_upload_config_timeout(): with patch( "openbb_terminal.core.session.hub_model.requests.patch" ) as requests_patch_mock: requests_patch_mock.side_effect = requests.exceptions.Timeout() - result = hub_model.patch_user_configs("key", "value", "keys", "auth_header") + result = hub_model.upload_config("key", "value", "keys", "auth_header") assert result is None requests_patch_mock.assert_called_once() @@ -432,13 +432,13 @@ def test_patch_user_configs_timeout(): assert kwargs["timeout"] == hub_model.TIMEOUT -def test_patch_user_configs_exception(): +def test_upload_config_exception(): with patch( "openbb_terminal.core.session.hub_model.requests.patch" ) as requests_patch_mock: requests_patch_mock.side_effect = Exception() - result = hub_model.patch_user_configs("key", "value", "keys", "auth_header") + result = hub_model.upload_config("key", "value", "keys", "auth_header") assert result is None requests_patch_mock.assert_called_once() @@ -750,7 +750,7 @@ def test_generate_personal_access_token( assert result.status_code == mock_response.status_code requests_put_mock.assert_called_once() _, kwargs = requests_put_mock.call_args - assert kwargs["url"] == base_url + "/sdk/token" + assert kwargs["url"] == base_url + "sdk/token" assert kwargs["headers"] == { "Authorization": auth_header, "Content-Type": "application/json", @@ -798,7 +798,7 @@ def test_get_personal_access_token(auth_header, base_url, timeout, status_code): assert result.status_code == mock_response.status_code requests_get_mock.assert_called_once() _, kwargs = requests_get_mock.call_args - assert kwargs["url"] == base_url + "/sdk/token" + assert kwargs["url"] == base_url + "sdk/token" assert kwargs["headers"] == {"Authorization": auth_header} assert kwargs["timeout"] == timeout @@ -842,7 +842,7 @@ def test_revoke_personal_access_token(auth_header, base_url, timeout, status_cod assert result.status_code == mock_response.status_code requests_get_mock.assert_called_once() _, kwargs = requests_get_mock.call_args - assert kwargs["url"] == base_url + "/sdk/token" + assert kwargs["url"] == base_url + "sdk/token" assert kwargs["headers"] == {"Authorization": auth_header} assert kwargs["timeout"] == timeout diff --git a/tests/openbb_terminal/stocks/behavioural_analysis/test_cramer_model.py b/tests/openbb_terminal/stocks/behavioural_analysis/test_cramer_model.py deleted file mode 100644 index e6536ee63f5..00000000000 --- a/tests/openbb_terminal/stocks/behavioural_analysis/test_cramer_model.py +++ /dev/null @@ -1,28 +0,0 @@ -# IMPORTATION THIRDPARTY -import pytest - -# IMPORTATION INTERNAL -from openbb_terminal.stocks.behavioural_analysis import cramer_model - - -@pytest.fixture(scope="module") -def vcr_config(): - return { - "filter_headers": [("User-Agent", None)], - } - - -@pytest.mark.vcr() -@pytest.mark.parametrize( - "inverse", - [True, False], -) -def test_get_orders(recorder, inverse): - recommendations = cramer_model.get_cramer_daily(inverse=inverse) - recorder.capture(recommendations) - - -@pytest.mark.vcr() -def test_get_cramer_ticker(recorder): - data = cramer_model.get_cramer_ticker("AAPL") - recorder.capture(data) diff --git a/tests/openbb_terminal/stocks/behavioural_analysis/test_cramer_view.py b/tests/openbb_terminal/stocks/behavioural_analysis/test_cramer_view.py deleted file mode 100644 index 60cf1e20749..00000000000 --- a/tests/openbb_terminal/stocks/behavioural_analysis/test_cramer_view.py +++ /dev/null @@ -1,96 +0,0 @@ -# IMPORTATION THIRDPARTY -from io import StringIO - -import pandas as pd -import pytest - -# IMPORTATION INTERNAL -from openbb_terminal.stocks.behavioural_analysis import cramer_view - -closes = pd.read_csv( - StringIO( - """ -Date,Adj Close -2022-01-03, 181.7783966064453 -2022-01-04, 179.47134399414062 -2022-01-05, 174.69741821289062 -2022-01-06, 171.78114318847656 -2022-01-07, 171.950927734375 -2022-01-10, 171.9709014892578 -2022-01-11, 174.8572235107422 -2022-01-12, 175.306640625 -2022-01-13, 171.9709014892578 -2022-01-14, 172.84979248046875 -2022-01-18, 169.5839385986328 -2022-01-19, 166.0184783935547 -2022-01-20, 164.3006591796875 -2022-01-21, 162.20335388183594 -2022-01-24, 161.41433715820312 -2022-01-25, 159.57669067382812 -2022-01-26, 159.48680114746094 -2022-01-27, 159.0174102783203 -2022-01-28, 170.11326599121094 -2022-01-31, 174.55760192871094 -2022-02-01, 174.3878173828125 -2022-02-02, 175.6162567138672 -2022-02-03, 172.67999267578125 -2022-02-04, 172.38999938964844 -2022-02-07, 171.66000366210938 -2022-02-08, 174.8300018310547 -2022-02-09, 176.27999877929688 -2022-02-10, 172.1199951171875 -2022-02-11, 168.63999938964844 -2022-02-14, 168.8800048828125 -2022-02-15, 172.7899932861328 -2022-02-16, 172.5500030517578 -2022-02-17, 168.8800048828125 -2022-02-18, 167.3000030517578 -2022-02-22, 164.32000732421875 -2022-02-23, 160.07000732421875 -2022-02-24, 162.74000549316406 -2022-02-25, 164.85000610351562 -2022-02-28, 165.1199951171875 -2022-03-01, 163.1999969482422 -2022-03-02, 166.55999755859375 -2022-03-03, 166.22999572753906 -2022-03-04, 163.1699981689453 -2022-03-07, 159.3000030517578 -2022-03-09, 162.01499938964844 -""" - ) -).set_index("Date") -closes.index = pd.to_datetime(closes.index) - - -@pytest.fixture(scope="module") -def vcr_config(): - return { - "filter_headers": [("User-Agent", None)], - } - - -@pytest.mark.vcr() -@pytest.mark.record_stdout -@pytest.mark.parametrize( - "inverse", - [True, False], -) -def test_get_orders(inverse): - cramer_view.display_cramer_daily(inverse=inverse) - - -@pytest.mark.vcr() -@pytest.mark.record_stdout -@pytest.mark.parametrize("raw", [True, False]) -def test_cramer_ticker(mocker, raw): - # MOCK EXPORT_DATA - mocker.patch( - target="openbb_terminal.stocks.behavioural_analysis.cramer_view.export_data" - ) - - mocker.patch( - target="openbb_terminal.stocks.behavioural_analysis.cramer_view.yfinance.download", - new=mocker.Mock(return_value=closes.copy()), - ) - - cramer_view.display_cramer_ticker("AAPL", raw=raw) diff --git a/tests/openbb_terminal/stocks/options/test_options_controller.py b/tests/openbb_terminal/stocks/options/test_options_controller.py index f8d41078d43..c4ca1865142 100644 --- a/tests/openbb_terminal/stocks/options/test_options_controller.py +++ b/tests/openbb_terminal/stocks/options/test_options_controller.py @@ -843,51 +843,6 @@ def test_call_func_expect_queue(expected_queue, func, mocker, queue): ], dict(), ), - ( - "call_parity", - [ - "--put", - "--ask", - "--min=1", - "--max=2", - "--export=csv", - ], - "yfinance_view.show_parity", - [ - "MOCK_TICKER", - "2022-01-07", - True, - True, - 1, - 2, - "csv", - ], - dict(), - ), - ( - "call_binom", - [ - "1", - "--put", - "--european", - "--xlsx", - "--plot", - "--volatility=2", - "--export=csv", - ], - "yfinance_view.show_binom", - [ - "MOCK_TICKER", - "2022-01-07", - 1.0, - True, - True, - True, - True, - 2.0, - ], - dict(), - ), ( "call_pricing", [], @@ -965,9 +920,6 @@ def test_call_func( "call_chains", "call_grhist", "call_plot", - "call_parity", - "call_binom", - "call_pricing", ], ) def test_call_func_no_ticker(func, mocker): @@ -994,9 +946,6 @@ def test_call_func_no_ticker(func, mocker): "call_oi", "call_vol", "call_plot", - "call_parity", - "call_binom", - "call_pricing", ], ) def test_call_func_no_selected_date(func, mocker): diff --git a/tests/openbb_terminal/stocks/options/test_pricing_controller.py b/tests/openbb_terminal/stocks/options/test_pricing_controller.py deleted file mode 100644 index 721f2902e56..00000000000 --- a/tests/openbb_terminal/stocks/options/test_pricing_controller.py +++ /dev/null @@ -1,441 +0,0 @@ -# IMPORTATION STANDARD - -import os - -# IMPORTATION THIRDPARTY -import pandas as pd -import pytest - -# IMPORTATION INTERNAL -from openbb_terminal.core.session.current_user import ( - PreferencesModel, - copy_user, -) -from openbb_terminal.stocks.options.pricing import pricing_controller - -# pylint: disable=E1101 -# pylint: disable=W0603 -# pylint: disable=E1111 - -PRICES = pd.DataFrame(data={"Price": [11.0, 12.0], "Chance": [0.2, 0.8]}) - - -@pytest.mark.vcr(record_mode="none") -@pytest.mark.parametrize( - "queue, expected", - [ - (["load", "help"], ["help"]), - (["quit", "help"], ["help"]), - ], -) -def test_menu_with_queue(expected, mocker, queue): - path_controller = "openbb_terminal.stocks.options.pricing.pricing_controller" - - # MOCK SWITCH - mocker.patch( - target=f"{path_controller}.PricingController.switch", - return_value=["quit"], - ) - result_menu = pricing_controller.PricingController( - ticker="MOCK_TICKER", - selected_date="2022-01-07", - prices=PRICES, - queue=queue, - ).menu() - - assert result_menu == expected - - -@pytest.mark.vcr(record_mode="none") -def test_menu_without_queue_completion(mocker): - path_controller = "openbb_terminal.stocks.options.pricing.pricing_controller" - - # ENABLE AUTO-COMPLETION : HELPER_FUNCS.MENU - preferences = PreferencesModel(USE_PROMPT_TOOLKIT=True) - mock_current_user = copy_user(preferences=preferences) - mocker.patch( - target="openbb_terminal.core.session.current_user.__current_user", - new=mock_current_user, - ) - mocker.patch( - target="openbb_terminal.parent_classes.session", - ) - mocker.patch( - target="openbb_terminal.parent_classes.session.prompt", - return_value="quit", - ) - - # ENABLE AUTO-COMPLETION : CONTROLLER.COMPLETER - preferences = PreferencesModel(USE_PROMPT_TOOLKIT=True) - mock_current_user = copy_user(preferences=preferences) - mocker.patch( - target="openbb_terminal.core.session.current_user.__current_user", - new=mock_current_user, - ) - mocker.patch( - target=f"{path_controller}.session", - ) - mocker.patch( - target=f"{path_controller}.session.prompt", - return_value="quit", - ) - - result_menu = pricing_controller.PricingController( - ticker="MOCK_TICKER", - selected_date="2022-01-07", - prices=PRICES, - queue=None, - ).menu() - - assert result_menu == ["help"] - - -@pytest.mark.vcr(record_mode="none") -@pytest.mark.parametrize( - "mock_input", - ["help", "homee help", "home help", "mock"], -) -def test_menu_without_queue_sys_exit(mock_input, mocker): - path_controller = "openbb_terminal.stocks.options.pricing.pricing_controller" - - # DISABLE AUTO-COMPLETION - preferences = PreferencesModel(USE_PROMPT_TOOLKIT=True) - mock_current_user = copy_user(preferences=preferences) - mocker.patch( - target="openbb_terminal.core.session.current_user.__current_user", - new=mock_current_user, - ) - mocker.patch( - target=f"{path_controller}.session", - return_value=None, - ) - - # MOCK USER INPUT - mocker.patch("builtins.input", return_value=mock_input) - - # MOCK SWITCH - class SystemExitSideEffect: - def __init__(self): - self.first_call = True - - def __call__(self, *args, **kwargs): - if self.first_call: - self.first_call = False - raise SystemExit() - return ["quit"] - - mock_switch = mocker.Mock(side_effect=SystemExitSideEffect()) - mocker.patch( - target=f"{path_controller}.PricingController.switch", - new=mock_switch, - ) - - result_menu = pricing_controller.PricingController( - ticker="MOCK_TICKER", - selected_date="2022-01-07", - prices=PRICES, - queue=None, - ).menu() - - assert result_menu == ["help"] - - -@pytest.mark.vcr(record_mode="none") -@pytest.mark.record_stdout -def test_print_help(): - controller = pricing_controller.PricingController( - ticker="MOCK_TICKER", - selected_date="2022-01-07", - prices=PRICES, - queue=None, - ) - controller.print_help() - - -@pytest.mark.vcr(record_mode="none") -@pytest.mark.parametrize( - "an_input, expected_queue", - [ - ("", []), - ("/help", ["home", "help"]), - ("help/help", ["help", "help"]), - ("q", ["quit"]), - ("h", []), - ( - "r", - [ - "quit", - "quit", - "quit", - "reset", - "stocks", - "load MOCK_TICKER", - "options", - "exp -d 2022-01-07", - "pricing", - ], - ), - ], -) -def test_switch(an_input, expected_queue): - controller = pricing_controller.PricingController( - ticker="MOCK_TICKER", - selected_date="2022-01-07", - prices=PRICES, - queue=None, - ) - queue = controller.switch(an_input=an_input) - - assert queue == expected_queue - - -@pytest.mark.vcr(record_mode="none") -def test_call_cls(mocker): - mocker.patch("os.system") - controller = pricing_controller.PricingController( - ticker="MOCK_TICKER", - selected_date="2022-01-07", - prices=PRICES, - queue=None, - ) - controller.call_cls([]) - - assert controller.queue == [] - os.system.assert_called_once_with("cls||clear") - - -@pytest.mark.vcr(record_mode="none") -@pytest.mark.parametrize( - "func, queue, expected_queue", - [ - ( - "call_exit", - [], - ["quit", "quit", "quit", "quit"], - ), - ("call_exit", ["help"], ["quit", "quit", "quit", "quit", "help"]), - ("call_home", [], ["quit", "quit", "quit"]), - ("call_help", [], []), - ("call_quit", [], ["quit"]), - ("call_quit", ["help"], ["quit", "help"]), - ( - "call_reset", - [], - [ - "quit", - "quit", - "quit", - "reset", - "stocks", - "load MOCK_TICKER", - "options", - "exp -d 2022-01-07", - "pricing", - ], - ), - ( - "call_reset", - ["help"], - [ - "quit", - "quit", - "quit", - "reset", - "stocks", - "load MOCK_TICKER", - "options", - "exp -d 2022-01-07", - "pricing", - "help", - ], - ), - ], -) -def test_call_func_expect_queue(expected_queue, func, queue): - controller = pricing_controller.PricingController( - ticker="MOCK_TICKER", - selected_date="2022-01-07", - prices=PRICES, - queue=queue, - ) - result = getattr(controller, func)([]) - - assert result is None - assert controller.queue == expected_queue - - -@pytest.mark.vcr(record_mode="none") -@pytest.mark.parametrize( - "tested_func, other_args, mocked_func, called_args, called_kwargs", - [ - ( - "call_add", - [ - "1", - "--chance=2", - ], - "", - [], - dict(), - ), - ( - "call_add", - [ - "11", - "--chance=2", - ], - "", - [], - dict(), - ), - ( - "call_rmv", - [ - "11", - ], - "", - [], - dict(), - ), - ( - "call_show", - [], - "print_rich_table", - [ - PRICES, - ], - dict( - headers=list(PRICES.columns), - show_index=False, - title="Estimated price(s) of MOCK_TICKER at 2022-01-07", - ), - ), - ( - "call_rnval", - [ - "--put", - "--min=1.0", - "--max=2.0", - "--risk=3.0", - ], - "yfinance_view.risk_neutral_vals", - [ - "MOCK_TICKER", - "2022-01-07", - PRICES, - True, - 1.0, - 2.0, - 3.0, - ], - dict(), - ), - ], -) -def test_call_func_test( - tested_func, mocked_func, other_args, called_args, called_kwargs, mocker -): - path_controller = "openbb_terminal.stocks.options.pricing.pricing_controller" - - if mocked_func: - mock = mocker.Mock() - mocker.patch( - target=f"{path_controller}.{mocked_func}", - new=mock, - ) - - controller = pricing_controller.PricingController( - ticker="MOCK_TICKER", - selected_date="2022-01-07", - prices=PRICES, - queue=None, - ) - getattr(controller, tested_func)(other_args) - - if called_args or called_kwargs: - mock.assert_called_once_with(*called_args, **called_kwargs) - else: - mock.assert_called_once() - else: - controller = pricing_controller.PricingController( - ticker="MOCK_TICKER", - selected_date="2022-01-07", - prices=PRICES, - queue=None, - ) - getattr(controller, tested_func)(other_args) - - -@pytest.mark.vcr(record_mode="none") -@pytest.mark.parametrize( - "func", - [ - "call_rnval", - ], -) -def test_call_func_no_ticker(func, mocker): - mocker.patch( - "openbb_terminal.stocks.options.pricing.pricing_controller.PricingController.parse_known_args_and_warn", - return_value=True, - ) - controller = pricing_controller.PricingController( - ticker=None, - selected_date="2022-01-07", - prices=PRICES, - queue=None, - ) - - func_result = getattr(controller, func)(list()) - assert func_result is None - assert controller.queue == [] - - -@pytest.mark.vcr(record_mode="none") -@pytest.mark.parametrize( - "func", - [ - "call_rnval", - ], -) -def test_call_func_no_selected_date(func, mocker): - # MOCK PARSE_KNOWN_ARGS_AND_WARN - mocker.patch( - "openbb_terminal.stocks.options.pricing.pricing_controller.PricingController.parse_known_args_and_warn", - return_value=True, - ) - - controller = pricing_controller.PricingController( - ticker="MOCK_TICKER", - selected_date=None, - prices=PRICES, - queue=None, - ) - - func_result = getattr(controller, func)(list()) - assert func_result is None - assert controller.selected_date is None - - -@pytest.mark.vcr(record_mode="none") -@pytest.mark.parametrize( - "ticker, expected", - [ - (None, []), - ( - "MOCK_TICKER", - ["stocks", "load MOCK_TICKER", "options", "exp -d 2022-01-07", "pricing"], - ), - ], -) -def test_custom_reset(expected, ticker): - controller = pricing_controller.PricingController( - ticker=None, - selected_date="2022-01-07", - prices=PRICES, - queue=None, - ) - controller.ticker = ticker - - result = controller.custom_reset() - - assert result == expected diff --git a/tests/openbb_terminal/stocks/options/test_yfinance_view.py b/tests/openbb_terminal/stocks/options/test_yfinance_view.py index fb321def624..e3b8946a17d 100644 --- a/tests/openbb_terminal/stocks/options/test_yfinance_view.py +++ b/tests/openbb_terminal/stocks/options/test_yfinance_view.py @@ -1,7 +1,6 @@ # IMPORTATION STANDARD # IMPORTATION THIRDPARTY -import pandas as pd import pytest # IMPORTATION INTERNAL @@ -48,62 +47,6 @@ def test_plot_payoff(mocker): ) -@pytest.mark.default_cassette("test_show_parity") -@pytest.mark.vcr -def test_show_parity(mocker): - # MOCK EXPORT_DATA - mocker.patch(target="openbb_terminal.stocks.options.yfinance_view.export_data") - - yfinance_view.show_parity( - symbol="AAPL", - expiry="2023-07-21", - put=True, - ask=True, - mini=0.0, - maxi=100.0, - export="csv", - sheet_name=None, - ) - - -@pytest.mark.default_cassette("test_risk_neutral_vals") -@pytest.mark.vcr -def test_risk_neutral_vals(mocker): - # MOCK EXPORT_DATA - mocker.patch(target="openbb_terminal.stocks.options.yfinance_view.export_data") - - yfinance_view.risk_neutral_vals( - symbol="AAPL", - expiry="2023-07-21", - put=True, - data=pd.DataFrame(columns=["Price", "Chance"]), - mini=None, - maxi=None, - risk=None, - ) - - -@pytest.mark.default_cassette("test_show_binom") -@pytest.mark.vcr -def test_show_binom(mocker): - # MOCK EXPORT_DATA - mocker.patch(target="openbb_terminal.stocks.options.yfinance_view.export_data") - - # MOCK EXPORT_BINOMIAL_CALCS - mocker.patch(target="openbb_terminal.stocks.options.yfinance_view.Workbook.save") - - yfinance_view.show_binom( - symbol="AAPL", - expiry="2023-07-21", - strike=90.0, - put=True, - europe=False, - export=False, - plot=True, - vol=None, - ) - - @pytest.mark.default_cassette("test_show_greeks") @pytest.mark.vcr def test_show_greeks(): diff --git a/tests/openbb_terminal/stocks/options/txt/test_options_controller/test_print_help.txt b/tests/openbb_terminal/stocks/options/txt/test_options_controller/test_print_help.txt index 746d1213099..dc924dcbb06 100644 --- a/tests/openbb_terminal/stocks/options/txt/test_options_controller/test_print_help.txt +++ b/tests/openbb_terminal/stocks/options/txt/test_options_controller/test_print_help.txt @@ -19,11 +19,8 @@ Expiry: [unvl] vsurf show 3D volatility surface[/unvl] [YahooFinance] [unvl] grhist plot option greek history[/unvl] [Syncretism, Intrinio] [unvl] plot plot variables provided by the user[/unvl] [YahooFinance] -[unvl] parity shows whether options are above or below expected price[/unvl] [YahooFinance] -[unvl] binom shows the value of an option using binomial options pricing[/unvl] [YahooFinance] [unvl] greeks shows the greeks for a given option[/unvl] [YahooFinance] [unvl] eodchain gets option chain at a specific date[/unvl] [Intrinio] -[unvl]> pricing shows options pricing and risk neutral valuation[/unvl] [unvl]> hedge shows portfolio weights in order to neutralise delta[/unvl] diff --git a/tests/openbb_terminal/test_featflags_controller.py b/tests/openbb_terminal/test_featflags_controller.py index 478e357b7d4..681d8e24dd8 100644 --- a/tests/openbb_terminal/test_featflags_controller.py +++ b/tests/openbb_terminal/test_featflags_controller.py @@ -24,12 +24,9 @@ def controller(mocker): ) mocker.patch( - target="openbb_terminal.featflags_controller.set_preference", + target="openbb_terminal.featflags_controller.set_and_save_preference", ) - mocker.patch( - target="openbb_terminal.core.session.preferences_handler.set_preference" - ) return FeatureFlagsController() diff --git a/tests/openbb_terminal/test_keys_controller.py b/tests/openbb_terminal/test_keys_controller.py index 65f461f606e..f41b1a8c3e3 100644 --- a/tests/openbb_terminal/test_keys_controller.py +++ b/tests/openbb_terminal/test_keys_controller.py @@ -252,20 +252,3 @@ def test_call_tokenterminal(other): @pytest.mark.parametrize("other", [[], ["-k", "1234", "-t", "456"]]) def test_call_shroom(other): controller.call_shroom(other) - - -@pytest.mark.vcr -@pytest.mark.parametrize("other", [[], ["-k", "1234", "-t", "456"]]) -def test_call_openbb(mocker, other): - # MOCK GET - attrs = { - "status_code": 200, - "json.return_value": {"token": "MOCK_TOKEN"}, - } - mock_response = mocker.Mock(**attrs) - mocker.patch( - target="openbb_terminal.keys_model.request", - new=mocker.Mock(return_value=mock_response), - ) - - controller.call_openbb(other) diff --git a/tests/openbb_terminal/test_keys_model.py b/tests/openbb_terminal/test_keys_model.py index d9a38b78489..a786ec6e813 100644 --- a/tests/openbb_terminal/test_keys_model.py +++ b/tests/openbb_terminal/test_keys_model.py @@ -1456,53 +1456,6 @@ def test_set_shroom_key( ) -@pytest.mark.vcr -@pytest.mark.record_stdout -@pytest.mark.parametrize( - "args, persist, show_output, __expected", - [ - ( - ["test_key"], - False, - True, - keys_model.KeyStatus.DEFINED_TEST_FAILED, - ), - ( - ["test_key"], - False, - False, - keys_model.KeyStatus.DEFINED_TEST_FAILED, - ), - ( - ["test_key"], - True, - True, - keys_model.KeyStatus.DEFINED_TEST_FAILED, - ), - ( - ["REPLACE_ME"], - False, - True, - keys_model.KeyStatus.NOT_DEFINED, - ), - ], -) -def test_set_openbb_key( - args: List[str], persist: bool, show_output: bool, __expected: str -): - var_name_list = [ - "OPENBB_OPENBB_PERSONAL_ACCESS_TOKEN", - ] - - set_naive_environment(var_name_list) - - keys_model.set_openbb_personal_access_token( - key=args[0], - persist=persist, - show_output=show_output, - ) - - def delete_tmp_files(): tmp_files = TEST_PATH.glob(f"*{proc_id}.tmp") for file in tmp_files: diff --git a/website/README.md b/website/README.md index a5e49611337..22fafd2d2d1 100644 --- a/website/README.md +++ b/website/README.md @@ -2,16 +2,16 @@ This repository contains the source code for the OpenBB Documentation Website. -The website was built using [Docusaurus](https://docusaurus.io/), a modern static website generator and [TailwindCSS](https://tailwindcss.com) as styling solution. +The website was built using [Docusaurus](https://docusaurus.io/), a modern static website generator and [TailwindCSS](https://tailwindcss.com) as styling solution. It uses algolia search for the search bar. The final website can be found at [https://docs.openbb.co](https://docs.openbb.co). - ## Folder Structure ```bash website ├── content # Markdown files | ├── sdk # SDK markdown files +| ├── bot # bot markdown files | └── terminal # Terminal markdown files ├── old_content # previous terminal documentation; required to get the examples for terminal reference ├── src # react stuff for website @@ -24,13 +24,72 @@ website The markdown files are used to generate the website. The markdown files are located in the `content` folder. The markdown files are generated using the `generate_sdk_markdown.py` and `generate_terminal_markdown.py` scripts. The markdown files are generated from the docstrings in the SDK and Terminal code. Files inside `content/sdk/reference` and `content/terminal/reference` should not be changed manually because they are generated automatically on every commit. +### Syntax sugar + +#### Code blocks + +Code blocks are generated using the default markdown syntax: + + ```python + print("Hello World") + ``` + +To generate a dynamic date for a certain code block (useful for options examples that need to have a valid date), you can use `2022-07-29` as a placeholder. The script will replace it with the third friday of the next month. + +``` +/op oichart ticker:AMD expiry:2022-07-29 +``` + +#### Available options + +This is great for huge lists. It opens a popup that contains the list and the search bar, so you can easily find what you are looking for. Everything is virtualized, so it's always fast no matter how many items you have. +Check [crypto page](https://docs.openbb.co/bot/discord/crypto) for a demo of this component. + +```md +import AvailableOptions from "@site/src/components/General/AvailableOptions"; + + +``` ## Run locally ### Prerequisites - [Node.js](https://nodejs.org/en/) >= 16.13.0 -To check if you have Node.js installed, run this command in your terminal: + To check if you have Node.js installed, run this command in your terminal: ```bash node --version # should be v16.13.0 or higher @@ -58,8 +117,6 @@ npm run build This command generates static content into the `build` directory and can be served using any static contents hosting service. We use Github Pages to host our website. It's deployed in the `gh-pages` branch. - - ## Run tests ```bash @@ -70,11 +127,18 @@ pytest tests/website --autodoc > To install necessary dependencies for tests, run `poetry install -E doc` in the root directory of the repository. +## Notes + +### iFrame + +We are detecting whether the website is loaded inside an iframe. If it is, we are hiding the header and footer. This is done to have a better integration with out [hub website](https://my.openbb.co). + ## Contributing We welcome contributions to the OpenBB Documentation Website. --- +
DEPRECATED - OLD README

diff --git a/website/content/bot/_category_.json b/website/content/bot/_category_.json new file mode 100644 index 00000000000..27df56c7357 --- /dev/null +++ b/website/content/bot/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "OpenBB Bot", + "position": 3 +} diff --git a/website/content/bot/changelog/_category_.json b/website/content/bot/changelog/_category_.json new file mode 100644 index 00000000000..dd4aac394c8 --- /dev/null +++ b/website/content/bot/changelog/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Changelog", + "position": 5 +} diff --git a/website/content/bot/changelog/version1_0_0.mdx b/website/content/bot/changelog/version1_0_0.mdx new file mode 100644 index 00000000000..da1b075b39e --- /dev/null +++ b/website/content/bot/changelog/version1_0_0.mdx @@ -0,0 +1,33 @@ +--- +title: Version 1.0.0 +version: "1.0.0" +date: 2022-08-03 +description: Version 1.0.0 +--- + +## Added + +- Supports Discord +- Charts menu including: chart, c3m, c5m, c15m, cd, cw, cm +- Discovery menu including: contracts, senate, splits, fgindex, holidays, ipolist, fidelity, house +- Due diligence menu including: ah, nexter, bio, pm, analyst, pt, est, sec, supplier, customer, instholdings, insiders, arktrades, splits, ermove, earnings +- ETF menu including: tops, holdings +- Economy menu including: calendar, glbonds, indices, commodiities, usbonds, currencies, revrepo, fedrates +- General menu including: futures, ta, news, quote +- Government menu including: contracts, senate, house +- Information menu including: serverid, stats, support, about, help +- Shorts menu including: borrowed, shortvol, topshortvol, hsi, shortrate +- Screener menu including: ah, pm, all, technical +- Premium Crypto menu including: prints, bigprints +- Premium Darkpool menu including: allblocks, alldp, allprints, bigprints, levels. topsum, sectors, summary +- Premium Flow menu including: sumexp, opening, unu, weekly, bigflow, prem, day, sumweek, sumtop, sectors, summary, sumday +- Premium Stock Options including: equitypc, chains, oichart, indexpc, maxpain, stats, gamma, oi, topoichange, smile, info, unu, vol, topoi, vsurf, topvoletf, topstrikevol, topvol, itm, uoastock, hist, highiv +- OpenBB Alerts including: list, create, update, delete + +## Changed + +- First release, no changes. + +## Fixed + +- First release, no fixes. \ No newline at end of file diff --git a/website/content/bot/changelog/version1_0_1.mdx b/website/content/bot/changelog/version1_0_1.mdx new file mode 100644 index 00000000000..97bae8574e7 --- /dev/null +++ b/website/content/bot/changelog/version1_0_1.mdx @@ -0,0 +1,20 @@ +--- +title: Version 1.0.1 +version: "1.0.1" +date: 2022-08-04 +description: Version 1.0.1 +--- + +## Added + +- Charts : new layout on charts "classic" theme - made this default +- Discovery menu including: heatmap + +## Changed + +- Charts menu including: "classic" theme on charts + +## Fixed + +- Due diligence menu including : added ah and pm to ! commands +- Premium Flow menu including : added weekly and opening to ! commands diff --git a/website/content/bot/changelog/version1_0_2.mdx b/website/content/bot/changelog/version1_0_2.mdx new file mode 100644 index 00000000000..d8157a66d3f --- /dev/null +++ b/website/content/bot/changelog/version1_0_2.mdx @@ -0,0 +1,18 @@ +--- +title: Version 1.0.2 +version: "1.0.2" +date: 2022-08-05 +description: Version 1.0.2 +--- + +## Added + +- No changes + +## Changed + +- All Blue should now be Green - :) + +## Fixed + +- Futures Caching issue diff --git a/website/content/bot/changelog/version1_0_3.mdx b/website/content/bot/changelog/version1_0_3.mdx new file mode 100644 index 00000000000..6b50d630b53 --- /dev/null +++ b/website/content/bot/changelog/version1_0_3.mdx @@ -0,0 +1,31 @@ +--- +title: Version 1.0.3 +version: "1.0.3" +date: 2022-08-12 +description: Version 1.0.3 +--- + +## Added + +Commands: +- /chartfib +- /disc wsb +- /disc trendingst +- /dd financials + +You can run /help to see these. + +## Changed + +Chart Changes: +- More Chart Style Settings changes - Should be almost done here +- Sizing of chart is smaller now +- Adjusted indicator opacity +- Added AH change to chart +- Made PM/AH/Price LARGER +- Adjusted Candle Color to not be so bright on Green +- Added Yest Close Line and fixed scaling + +## Fixed + +- PM Screener not getting correct data diff --git a/website/content/bot/changelog/version1_0_4.mdx b/website/content/bot/changelog/version1_0_4.mdx new file mode 100644 index 00000000000..58382b303fd --- /dev/null +++ b/website/content/bot/changelog/version1_0_4.mdx @@ -0,0 +1,28 @@ +--- +title: Version 1.0.4 +version: "1.0.4" +date: 2022-08-16 +description: Version 1.0.4 +--- + +## Added + +Commands: +- /dd divinfo +- /dd ytd +- /econ yieldcurve +- /chartsr +- /heatmap + +You can run /help to see these. + +## Changed + +Changes: +- old /heatmap is now /heatchart (makes more sense) +- changed positioning of numbers on chartfib + expanding line +- Added small candle border to Daily/Monthly/Weekly charts + +## Fixed + +- PM Screener not getting correct data - again... diff --git a/website/content/bot/changelog/version1_0_5.mdx b/website/content/bot/changelog/version1_0_5.mdx new file mode 100644 index 00000000000..4e073547a9f --- /dev/null +++ b/website/content/bot/changelog/version1_0_5.mdx @@ -0,0 +1,31 @@ +--- +title: Version 1.0.5 +version: "1.0.5" +date: 2022-08-30 +description: Version 1.0.5 +--- + +## Added + +Commands: +- /pop 1d +- /pop 1h +- /watchlist - (Each user gets 3 stocks for free signup) +- /heatmap crypto +- /cc (for the quick c5m) +- /fun urban +- /fun flip +- /fun 8ball + +You can run /help to see these. + +## Changed + +Changes: +- /alerts - Alerts have been refactored to include Stocks and Forex now +- For most Flow and Darkpool commands you should now see much more data - Added Pages +- Changed a few commands to be more mobile friendly - (TA - PM/AH Next update) + +## Fixed +- Chart bug with no PM data +- "Change" column on one of the screeners diff --git a/website/content/bot/changelog/version1_0_6.mdx b/website/content/bot/changelog/version1_0_6.mdx new file mode 100644 index 00000000000..ed227bcca85 --- /dev/null +++ b/website/content/bot/changelog/version1_0_6.mdx @@ -0,0 +1,26 @@ +--- +title: Version 1.0.6 +version: "1.0.6" +date: 2022-09-12 +description: Version 1.0.6 +--- + +## Added + +Commands: +No changes + +## Changed + +### Charts +- Candles should be easier to see now +- Reduced gaps on candles +- Charts should look more "zoomed" +- Increased size of text in some areas +### Tables +- All text should be larger and easier to read for Mobile and Desktop +- Tables will now use the same settings as your chart settings +- Branding on charts is now consistent + +## Fixed +No changes diff --git a/website/content/bot/changelog/version1_0_7.mdx b/website/content/bot/changelog/version1_0_7.mdx new file mode 100644 index 00000000000..c069216022f --- /dev/null +++ b/website/content/bot/changelog/version1_0_7.mdx @@ -0,0 +1,40 @@ +--- +title: Version 1.0.7 +version: "1.0.7" +date: 2022-09-12 +description: Version 1.0.7 +--- + +## Added + +Commands: + +### Stocks: +- /markets - Provides a nice overview of the market with adv / decliners relative to change and 50d/200d MA +- /scr pm_all - Displays all available pre-market screeners +- /scr ah_all - Displays all available after-hours screeners + +### Crypto: +- /crypto tvl - Get protocols historical TVL. +- /crypto defi table - Get top DeFi protocols +- /crypto defi chart - Chart of top 20 defi protocols by TVL +- /crypto top - Get top cryptos and info +- /crypto bio - Get fundamental information about a crypto. +- /crypto fees - Fees on a certain date of top crypto protocols +- /crypto compfees - Get protocol fees over time. +- /crypto ir - Returns a table of issuance rate of top crypto protocols. + +### NFT: +- /nft top - Get Top NFT Collections from Ethereum Chain +- /nft collection - Get NFT collection data from Ethereum network for the specified slug. +- /nft chart - Returns NFT chart for floor price and sales on the specified slug. + +- REMOVE: +- /fidelity - They made this so you have to be logged in now :( + +## Changed +No changes + +## Fixed +- Fixed small bug when saving watchlist +- Adjusted some tickers sizing on charts diff --git a/website/content/bot/changelog/version1_0_8.mdx b/website/content/bot/changelog/version1_0_8.mdx new file mode 100644 index 00000000000..a5a9b278d97 --- /dev/null +++ b/website/content/bot/changelog/version1_0_8.mdx @@ -0,0 +1,17 @@ +--- +title: Version 1.0.8 +version: "1.0.8" +date: 2022-10-13 +description: Version 1.0.8 +--- + +## Added + +### Stocks +- /scr technical - Added "Overbought" and "Oversold" to Screener - Calcs are based on RSI 14 + +## Changed +- /flow day - Added ability to filter on - Expiration Date | Strike | Option Type - ex. "/flow day ticker:AMD expiry:2023-01-20 strike:75 opt_type:Calls" + +## Fixed +- No Changes diff --git a/website/content/bot/changelog/version2_0_0.mdx b/website/content/bot/changelog/version2_0_0.mdx new file mode 100644 index 00000000000..1a7345f7f17 --- /dev/null +++ b/website/content/bot/changelog/version2_0_0.mdx @@ -0,0 +1,30 @@ +--- +title: Current - Version 2.0.0 +version: "2.0.0" +date: 2022-10-26 +description: Version 2.0.0 +sidebar_position: 0 +--- + +## Added + +### Telegram Support +- OpenBB Bot is now available on telegram - you can add it here + +### Billboard Messages +- With a premium server account you can now edit the billboard messages users see in your server. You can edit this on the [my.openbb.co](https://my.openbb.co) dash. + +Commands: + + +- /autopost add - Added Auto Posting to bot! (Finally :D ) You can now schedule autoposts for your server with a free server plan or premium plan + + +## Changed + +### Pricing +- You can read more about the pricing change here - TLDR - It's cheaper now :) + +## Fixed + +No Changes diff --git a/website/content/bot/faqs/_category_.json b/website/content/bot/faqs/_category_.json new file mode 100644 index 00000000000..6c26249e604 --- /dev/null +++ b/website/content/bot/faqs/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "FAQs", + "position": 4 +} diff --git a/website/content/bot/faqs/generic.md b/website/content/bot/faqs/generic.md new file mode 100644 index 00000000000..b826af21228 --- /dev/null +++ b/website/content/bot/faqs/generic.md @@ -0,0 +1,91 @@ +--- +title: Generic +sidebar_position: 1 +description: TBD +keywords: + [ + installation, + installer, + install, + guide, + mac, + windows, + linux, + python, + github, + macos, + how to, + explanation, + openbb terminal, + ] +--- + +## Generic + +

How Do I Link My OpenBB Bot Account? + +After you signup for an OpenBB Bot plan you can link your accounts from here + +
+ +
Can I try an OpenBB Bot plan? + +You can try a preview of any plan by just running commands on a server that has OpenBB Bot, like OpenBB Discord. We offer a limited amount of daily commands. + +
+ + +
Will my OpenBB Bot plan renew at the end of the billing cycle? + +Yes, plans renew automatically at the end of the monthly and yearly billing cycles. You can cancel your plan at any time, before the end of the billing cycle, and it will not auto-renew anymore. + +
+ + +
Can I get a refund on my OpenBB Bot? + +Since we offer a free command tier to try commands we don't offer refunds as you have had ample time to try the service and make a decision. + +
+ + +
If I sign up for OpenBB Bot do I get access on all platforms? + +Yes! You will have access on Discord, and other platforms as we add support. + +
+ +
If I cancel OpenBB Bot subscription do I still have access? + +No, you will lose your access but you get a credit on your account of the prorated amount until the end of your current billing cycle. + +
+ + +
What's the difference in an individual plan and server plan on OpenBB Bot? + +An individual plan gives your account access to OpenBB Bot while a server plan gives the whole server access. An individual plan carries more perks with it than a server plan, which you can find by clicking on the plan. + +
+ + +
I added the bot but still don't see slash commands, what do I do? + + + +Just head to Server Settings → Integrations and then click ‘Manage’ next to an app, where you will behold a new, shiny, and dare we say dazzling, new surface. + +
    +
  • Use toggles to modify which members can use commands
  • +
  • Use toggles to modify which channels allow commands
  • +
+ +There’s also a command-specific list, where you can make customized permissions for each command. +
    +
  • By default, these are all synced to the command permission at the top.
  • +
  • You can unsync an individual command to make further customizations.
  • +
+ +For more information click here. + +
diff --git a/website/content/bot/faqs/individual.md b/website/content/bot/faqs/individual.md new file mode 100644 index 00000000000..032bce6263e --- /dev/null +++ b/website/content/bot/faqs/individual.md @@ -0,0 +1,23 @@ +--- +title: Individual +sidebar_position: 2 +description: TBD +keywords: + [ + installation, + installer, + install, + guide, + mac, + windows, + linux, + python, + github, + macos, + how to, + explanation, + openbb terminal, + ] +--- + +## Individual diff --git a/website/content/bot/faqs/server.md b/website/content/bot/faqs/server.md new file mode 100644 index 00000000000..587fe5a4cc9 --- /dev/null +++ b/website/content/bot/faqs/server.md @@ -0,0 +1,23 @@ +--- +title: Server +sidebar_position: 3 +description: TBD +keywords: + [ + installation, + installer, + install, + guide, + mac, + windows, + linux, + python, + github, + macos, + how to, + explanation, + openbb terminal, + ] +--- + +## Server diff --git a/website/content/bot/guides.md b/website/content/bot/guides.md new file mode 100644 index 00000000000..03257a54f4b --- /dev/null +++ b/website/content/bot/guides.md @@ -0,0 +1,10 @@ +--- +title: Guides +sidebar_position: 2 +description: TBD +keywords: [installation, installer, install, guide, mac, windows, linux, python, github, macos, how to, explanation, openbb, sdk, api, pip, pypi,] +--- + +## Guides + +TBD diff --git a/website/content/bot/index.md b/website/content/bot/index.md new file mode 100644 index 00000000000..eeeffd4c5b5 --- /dev/null +++ b/website/content/bot/index.md @@ -0,0 +1,56 @@ +--- +sidebar_position: 1 +keywords: + [ + getting started, + openbb, + discord, + telegram, + beginner guide, + how to use openbb bot, + introduction, + intro, + how-to, + how to, + openbb bot, + ] +description: OpenBB Bot is a chatting bot for investment research that provides access to high quality financial data for both individual investors and online communities. +--- + +import Card from "@site/src/components/General/Card"; + +# OpenBB Bot + +OpenBB Bot is a chatting bot for Discord and Telegram which provides access to high quality financial data for both individual investors and online communities. + +With OpenBB Bot, we offer free access to hundreds of commands ranging from stock data, options, screeners, darkpool info, crypto, nft, short data, and more! + +OpenBB Bot was created to give individual users access to high quality financial data. We know our users love to invest and they also want to be part of a community and share ideas with their friends quickly and easily. Our Bot allows quick access to actionable market data to make you and your community better informed investors. + +--- + + + + + +--- + +### Getting Started + +To know more about OpenBB Bot, you can start by reading the [Installation Guide](/bot/installation). + +### Using OpenBB Bot + +To learn how to use OpenBB Bot, you can start by reading the [Basics Guide](/bot/guides). + +### Bot Reference + +The Reference section is a complete list of all functions available for OpenBB Bot. It can be found [here](/bot/reference/). diff --git a/website/content/bot/installation.md b/website/content/bot/installation.md new file mode 100644 index 00000000000..7676bdfa0e2 --- /dev/null +++ b/website/content/bot/installation.md @@ -0,0 +1,53 @@ +--- +title: Installation +sidebar_position: 1 +description: How to get started with OpenBB Bot +keywords: [installation, install, install openbb bot, guide, how to, explanation, openbb bot, openbb, discord, telegram,] +--- + +import AddBotDialog from "@site/src/components/General/AddBot"; + +## Adding Bot to your Server + +To add the bot to your server click on one of the links for your respective platform and then follow the instructions below. + + + +--- + +# Discord - First Time Setup + +A pop-up window will open, asking you to log in to your Discord account and allow the bot access. + +discord bot setup step 1 + +Once you log in, you’ll see a window asking for permission to access your account. Locate the “Add to Server” drop-down menu and click on it. +discord bot setup step 2 + +This will open a list of Discord servers where you can add a bot. Select your server and press “Continue”. + +Review permissions that the bot requests on your server. Select and deselect based on your needs, we recommend all the default settings in order to experience everything the bot has to offer. Click on “Authorize” when you’re ready. +discord bot setup step 3 + +Congratulations! You’ve successfully added a bot to your Discord server. + +--- + +# Telegram - First Time Setup + +After clicking on the Add to Telegram button it should open a chat with our OpenBB Bot. + +telegram bot setup step 1 + +Go to your Telegram chat and click/tap on the Top Bar of the OpenBB Bot chat window. + +telegram bot setup step 2 + +Then, you need to click on “More” and select "Add to Group or Channel" or just click "Add to Group or Channel" and select the Telegram group you want to add the chatbot to: + +telegram bot setup step 3 + +Now you can verify it has the permissions required, we recommend the ones already selected, and you are ready to go! + +telegram bot setup step 4 diff --git a/website/content/bot/reference/_category_.json b/website/content/bot/reference/_category_.json new file mode 100644 index 00000000000..12273a39ab7 --- /dev/null +++ b/website/content/bot/reference/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Reference", + "position": 3 + } diff --git a/website/content/bot/reference/discord/_category_.json b/website/content/bot/reference/discord/_category_.json new file mode 100644 index 00000000000..8ad19098074 --- /dev/null +++ b/website/content/bot/reference/discord/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Discord", + "position": 2 +} diff --git a/website/content/bot/reference/discord/alerts.mdx b/website/content/bot/reference/discord/alerts.mdx new file mode 100644 index 00000000000..a04062b32db --- /dev/null +++ b/website/content/bot/reference/discord/alerts.mdx @@ -0,0 +1,100 @@ +--- +title: Alerts +description: create, list, update, delete +premium: false +commands: + - "/alerts create" + - "/alerts list" + - "/alerts update" + - "/alerts delete" +--- + +# Alerts + +## create + +> Create an alert with conditions for a symbol + +```format +/alerts create +``` + +**ticker** + +- The symbol/ticker/coin of the stock/coin you want to set the alert for + +**condition** + +- Condition to set alert for - (Equal or Above or Equal or Below) + +**price** + +- Price to set the alert for + +**Examples** + +``` +/alerts create ticker:BTCUSD condition:Equal or Above price:1000 +``` + +``` +/alerts create ticker:SPY condition:Equal or Below price:400 +``` + +--- + +## list + +> List all of your active alerts + +```format +/alerts list +``` + +--- + +## update + +> Update a condition on an active alert + +```format +/alerts update +``` + +**alerts** + +- The alert you want to update + +**condition** + +- Change condition here if needed + +**price** + +- To update the price send a new price + +**Examples** + +``` +/alerts update alerts: condition: price: +``` + +--- + +## delete + +> Delete an active alert you have set + +```format +/alerts delete +``` + +**alert** + +- The alert you want to remove/delete + +**Examples** + +``` +/alerts delete alert: +``` diff --git a/website/content/bot/reference/discord/charts.mdx b/website/content/bot/reference/discord/charts.mdx new file mode 100644 index 00000000000..25a12dd63ad --- /dev/null +++ b/website/content/bot/reference/discord/charts.mdx @@ -0,0 +1,214 @@ +--- +title: Charting +description: c3m, c5m, c15m, cd, cw... +premium: false +commands: + - "/chart" + - "/c3m" + - "/c5m" + - "/c15m" + - "/cd" + - "/cw" + - "/cm" + - "/chartfib" + - "/chartsr" +--- + +# Charting + +## chart + +> Shows the candlestick chart for the ticker/interval provided + +```format +/chart [] +``` + +**ticker** + +- The symbol/ticker/coin of the stock you want the chart of + +**interval** + +- The interval you want to chart - Current valid options are : Daily, Weekly, Monthly, 1-5-10-15-30 Minute, 1 hour, or 4 hour. + +**[past_days]** - _optional_ + +- Amount of days to show for the Interval + +**Examples** + +``` +/chart ticker:AMD interval:5 minute past_days:0 +``` + +``` +/chart ticker:AMD interval:Daily +``` + +--- + +## c3m + +> Shows an intraday 3m candlestick chart for the ticker provided + +```format +/c3m +``` + +**ticker** + +- The symbol/ticker/coin of the stock you want the chart of + +**Examples** + +``` +/c3m ticker:AMD +``` + +--- + +## c5m + +> Shows an intraday 5m candlestick chart for the ticker/coin provided + +```format +/c5m +``` + +**ticker** + +- The symbol/ticker/coin of the ticker/coin you want the chart of + +**Examples** + +``` +/c5m ticker:AMD +``` + +--- + +## c15m + +> Shows an intraday 15m candlestick chart for the ticker provided + +```format +/c15m +``` + +**ticker** + +- The symbol/ticker/coin of the stock you want the chart of + +**Examples** + +``` +/c15m ticker:AMD +``` + +--- + +## cd + +> Shows a daily candlestick chart for the ticker/coin provided + +```format +/cd +``` + +**ticker** + +- The symbol/ticker/coin of the stock you want the chart of + +**Examples** + +``` +/cd ticker:AMD +``` + +--- + +## cw + +> Shows a weekly candlestick chart for the ticker/coin provided + +```format +/cw +``` + +**ticker** + +- The symbol/ticker/coin of the stock you want the chart of + +**Examples** + +``` +/cw ticker:AMD +``` + +--- + +## cm + +> Shows a monthly candlestick chart for the ticker/coin provided + +```format +/cm +``` + +**ticker** + +- The symbol/ticker/coin of the stock you want the chart of + +**Examples** + +``` +/cm ticker:AMD +``` + +--- + +## chartfib + +> Plots the Fibonacci levels for the ticker provided + +```format +/chartfib +``` + +**ticker** + +- The symbol/ticker/coin of the stock you want the chartfib of + +**Examples** + +``` +/chartfib ticker:AMD +``` + +--- + +## chartsr + +> Displays Support and Resistance Levels for the ticker provided + +```format +/chartsr **[interval]** +``` + +**ticker** + +- The symbol/ticker/coin of the stock you want the chartfib of + +**[interval]** - _optional_ + +- interval in minutes for the chart. Defaults to Daily with no selection + +**Examples** + +``` +/chartsr ticker:AMC +``` +``` +/chartsr ticker:AMC interval:5 minute +``` diff --git a/website/content/bot/reference/discord/crypto.mdx b/website/content/bot/reference/discord/crypto.mdx new file mode 100644 index 00000000000..706ba8a41ac --- /dev/null +++ b/website/content/bot/reference/discord/crypto.mdx @@ -0,0 +1,2712 @@ +--- +title: Crypto +description: prints, bigprints, bio, defi, fees, ir... +premium: false +commands: + - "/crypto prints" + - "/crypto bigprints" + - "/crypto tvl" + - "/crypto defi chart" + - "/crypto defi table" + - "/crypto bio" + - "/crypto fees" + - "/crypto compfees" + - "/crypto ir" +--- + +import AvailableOptions from "@site/src/components/General/AvailableOptions"; + +# Crypto + +## prints + +> Last 15 Crypto Prints over last 24hrs. + +```format +/crypto prints +``` + +**coin** + +- The coin you want the prints of + +**Examples** + +``` +/crypto prints coin:BTC-USD +``` + +--- + +## bigprints + +> Last 15 Large Crypto Prints. + +```format +/crypto bigprints +``` + +**coin** + +- The coin you want the large prints of + +**Examples** + +``` +/crypto bigprints coin:BTC-USD +``` + +--- + +## tvl + +> Get protocols historical TVL [Source: defillama.com] + +```format +/crypto tvl +``` + +**protocols** + +- comma separated list of protocols (e.g., curve,makerdaodwadwa) + + +**Examples** + +``` +/crypto tvl +``` + +``` +/crypto tvl protocols: curve +``` + +--- + +## defi table + +> Get top DeFi protocols + +```format +/crypto defi table [sortby] [chain] [reverse] +``` + +**[sortby]** - _optional_ + +- Column to sort data by (default="TVL") (e.g., Total Value Locked) + +**[chain]** - _optional_ + +- Chain to filter by (default="all") (e.g., ethereum) + + +**[reverse]** - _optional_ + +- Reverse the sort order (default: No) - Yes/No + +**Examples** + +``` +/crypto defi table +``` + +``` +/crypto defi table sortby: Change 1hr chain: Bitcoin +``` + +--- + +## defi chart + +> Chart of top 20 defi protocols by TVL + +```format +/crypto defi chart +``` + +**Examples** + +``` +/crypto defi chart +``` + +--- + +## top + +> Get top cryptos and info + +```format +/crypto top [sortby] [category] [reverse] +``` + +**[sortby]** - _optional_ + +- Column to sort data by (default="MCap") (e.g., Market Cap) + +**[category]** - _optional_ + +- Category to filter by (default="all") (e.g., stablecoins) + + +**[reverse]** - _optional_ + +- Reverse the sort order (default: No) - Yes/No + +**Examples** + +``` +/crypto top +``` + +``` +/crypto top sortby: Market Cap category: manufacturing +``` + +--- + +## bio + +> Get fundamental information about a crypto. + +```format +/crypto bio +``` + +**symbol** + +- Crypto symbol to check information (e.g., BTC) + + +**Examples** + +``` +/crypto bio symbol: btc +``` + +--- + +## fees + +> Fees on a certain date of top crypto protocols + +```format +/crypto fees +``` + +**date** + +- Date to get fees for (e.g., 2022-01-01) + +**Examples** + +``` +/crypto fees date: 2022-09-19 +``` + +--- + +## compfees + +> Get protocol fees over time. + +```format +/crypto compfees +``` + +**project** + +- Comma separated list of protocols (e.g., btc,eth) + + +**Examples** + +``` +/crypto compfees projects: doge +``` + +``` +/crypto compfees projects: btc,eth +``` + +--- + +## ir + +> Returns a table of issuance rate of top crypto protocols. + +```format +/crypto ir +``` + +**Examples** + +``` +/crypto ir +``` diff --git a/website/content/bot/reference/discord/darkpool.mdx b/website/content/bot/reference/discord/darkpool.mdx new file mode 100644 index 00000000000..d9602a25edc --- /dev/null +++ b/website/content/bot/reference/discord/darkpool.mdx @@ -0,0 +1,158 @@ +--- +title: Darkpool +description: topsum, sectors, summary, allprints... +premium: true +commands: + - "/dp topsum" + - "/dp sectors" + - "/dp summary" + - "/dp allprints" + - "/dp allblocks" + - "/dp bigprints" +--- + +# darkpool + +## topsum + +> Top Total Block & Dark Pool data. + +```format +/dp topsum +``` + +**Examples** + +``` +/dp topsum +``` + +--- + +## levels + +> Biggest Levels for All Prints over last X days. + +```format +/dp levels +``` + +**ticker** + +- The ticker to query for + +**days** + +- The number of days to return + +**Examples** + +``` +/dp levels ticker:TSLA days:10 +``` + +--- + +## sectors + +> Summary of all prints by % of MarketCap by Sector + +```format +/dp sectors +``` + +**days** + +- The number of days to return + +**sector** + +- The sector to select for the query + +```format +/dp sectors days:5 sector:Basic Materials +``` + +--- + +## summary + +> Summary of all prints by % of MarketCap + +```format +/dp summary +``` + +**days** + +- The number of days to return + +**sort** + +- Sort by market cap, float, total or short percentage + +**Examples** + +``` +/dp summary days:10 sort:MarketCap +``` + +--- + +## allprints + +> Last 15 Combination of Dark Pool and Blocks. + +```format +/dp allprints +``` + +**ticker** + +- The symbol/ticker of the stock you want to lookup + +**Examples** + +``` +/dp allprints ticker:AMD +``` + +--- + +## allblocks + +> Last 15 Combination of Block Trades only + +```format +/dp allblocks +``` + +**ticker** + +- The symbol/ticker of the stock you want to lookup + +**Examples** + +``` +/dp allblocks ticker:AMD +``` + +--- + +## bigprints + +> Combination of Dark Pool and Blocks - Largest over x amount of days + +```format +/dp bigprints +``` + +**days** + +- The number of days to return + +**Examples** + +``` +/dp bigprints days:6 +``` diff --git a/website/content/bot/reference/discord/discovery.mdx b/website/content/bot/reference/discord/discovery.mdx new file mode 100644 index 00000000000..94985ef438c --- /dev/null +++ b/website/content/bot/reference/discord/discovery.mdx @@ -0,0 +1,116 @@ +--- +title: Discovery +description: splits, senate, house, fgindex, ipolist... +premium: false +commands: + - "/disc splits" + - "/disc senate" + - "/disc house" + - "/disc fgindex" + - "/disc ipolist" + - "/disc contracts" + - "/disc holidays" + - "/disc wsb" + - "/disc trendingst" +--- + +# Discovery + +## splits + +> List of recent Stock splits for all tickers. + +```format +/disc splits +``` + +--- + +## senate + +> Displays recent senate trades for all tickers. + +```format +/disc senate +``` + +--- + +## house + +> Displays recent House trades for all tickers + +```format +/disc house +``` + +--- + +## fgindex + +> Displays Fear & Greed Index - Investor Sentiment - CNNMoney + +```format +/disc fgindex +``` + +--- + +## ipolist + +> Displays 10 Upcoming and Recent IPO's. + +```format +/disc ipolist +``` + +--- + +## contracts + +> Displays Top 15 Government contracts by amount for all tickers. + +```format +/disc contracts +``` + +--- + +## holidays + +> Displays Upcoming Market Holidays. + +```format +/disc holidays +``` + +--- + +## arktrades + +> Displays trades made by ARK ETF + +```format +/disc arktrades +``` + +--- + +## wsb + +> Display Top 15 Trending Stocks - WSB (WallStreetBets) + +```format +/disc wsb +``` +--- + +## trendingst + +> Display top 15 Trending Stocks - StockTwits + +```format +/disc trendingst +``` + + diff --git a/website/content/bot/reference/discord/duedilligence.mdx b/website/content/bot/reference/discord/duedilligence.mdx new file mode 100644 index 00000000000..da80cd6cc9e --- /dev/null +++ b/website/content/bot/reference/discord/duedilligence.mdx @@ -0,0 +1,387 @@ +--- +title: Due Diligence +description: ph, ah, shortrate, news, earnings, bio, ermove... +premium: false +commands: + - "/dd pm" + - "/dd ah" + - "/dd splits" + - "/dd earnings" + - "/dd nexter" + - "/dd bio" + - "/dd ermove" + - "/dd analyst" + - "/dd pt" + - "/dd est" + - "/dd supplier" + - "/dd customer" + - "/dd sec" + - "/dd insiders" + - "/dd arktrades" + - "/dd instholdings" + - "/dd financials" + - "/dd divinfo" + - "/dd ytd" +--- + +# Due Diligence + +## pm + +> Displays premarket data for a given stock ticker + +```format +/dd pm +``` + +**ticker** + +- The symbol/ticker of the stock you want the premarket info for + +**Examples** + +``` +/dd pm ticker:AMD +``` + +--- + +## ah + +> Displays afterhours data for a given stock ticker + +```format +/dd ah +``` + +**ticker** + +- The symbol/ticker of the stock you want the afterhours info for + +**Examples** + +``` +/dd ah ticker:AMD +``` + +--- + +## splits + +> List of recent Stock splits for a ticker + +**Command** + +```format +/dd splits +``` + +**ticker** + +- The symbol/ticker of the stock you want the splits for + +**Examples** + +``` +/dd splits ticker:AMD +``` + +--- + +## earnings + +> Display Earnings that are expected to occur in the next business days. (Sorted by market cap) + +```format +/dd earnings +``` + +**day** + +- The Date you want to see the earnings for. Format: YYYY-MM-DD + +**Examples** + +``` +/dd earnings day:2022-07-29 +``` + +--- + +## nexter + +> Returns next Earnings Date for a stock. + +```format +/dd nexter +``` + +**ticker** + +- The symbol/ticker of the stock you want the next earnings date for + +**Examples** + +``` +/dd nexter ticker:AMD +``` + +--- + +## bio + +> Displays a Stock's dd Info and other information. + +```format +/dd bio +``` + +**ticker** + +- The symbol/ticker of the stock you want the bio of + +**Examples** + +``` +/dd bio ticker:AMD +``` + +--- + +## ermove + +> Display implied move for a stock based on option prices. + +```format +/dd ermove +``` + +**ticker** + +- The symbol/ticker of the stock you want the earnings move of + +**Examples** + +``` +/dd ermove ticker:AMD +``` + +--- + +## analyst + +> Displays analyst recommendations. + +```format +/dd analyst +``` + +**ticker** + +- The symbol/ticker of the stock you want the analyst ratings for + +**Examples** + +``` +/dd analyst ticker:AMD +``` + +--- + +## pt + +> Displays chart with price targets. + +```format +/dd pt +``` + +**ticker** + +- The symbol/ticker of the stock you want to query + +**Examples** + +``` +/dd pt ticker:AMD +``` + +--- + +## est + +> Displays earning estimates. + +```format +/dd est +``` + +**ticker** + +- The symbol/ticker of the stock you want to query + +**Examples** + +``` +/dd est ticker:MMM +``` + +--- + +## supplier + +> Retrieve list of suppliers for specified company + +```format +/dd supplier +``` + +**ticker** + +- The symbol/ticker of the stock you want to query + +**Examples** + +``` +/dd supplier ticker:AMD +``` + +--- + +## customer + +> Retrieve list of customers for specified company + +```format +/dd customer +``` + +**ticker** + +- The symbol/ticker of the stock you want to query + +**Examples** + +``` +/dd customer ticker:AMD +``` + +--- + +## sec + +> Displays recent SEC filings. + +``` +/dd sec +``` + +**ticker** + +- The symbol/ticker of the stock you want to query + +**Examples** + +``` +/dd sec ticker:AMD +``` + +--- + +## insiders + +Displays 15 latest insider transactions for given stock + +```format +/dd insiders +``` + +**ticker** + +- The symbol/ticker of the stock you want to query + +**Examples** + +``` +/dd insiders ticker:AMD +``` + +--- + +## instholdings + +> Displays top 15 Institutional Holdings for given stock + +```format +/dd instholdings +``` + +**ticker** + +- The symbol/ticker of the stock you want to query + +**Examples** + +``` +/dd instholdings ticker:AMD +``` + +--- + +## financials + +> Gives Total Assets, Cash, Debt, Liabilities, Rev for Company + +```format +/dd financials +``` + +**ticker** + +- The symbol/ticker of the stock you want to query + +**Examples** + +``` +/dd financials ticker:AMD +``` + +--- + +## divinfo + +> Display dividend information for a stock. + +```format +/dd divinfo +``` + +**ticker** + +- The symbol/ticker of the stock you want to query + +**Examples** + +``` +/dd divinfo ticker:AAPL +``` + +--- + +## ytd + +> Displays Period Performance for a stock + +```format +/dd ytd +``` + +**ticker** + +- The symbol/ticker of the stock you want to query + +**Examples** + +``` +/dd ytd ticker:AAPL +``` diff --git a/website/content/bot/reference/discord/economy.mdx b/website/content/bot/reference/discord/economy.mdx new file mode 100644 index 00000000000..b03642373ed --- /dev/null +++ b/website/content/bot/reference/discord/economy.mdx @@ -0,0 +1,119 @@ +--- +title: Economy +description: calendar, currencies, indices, commodities... +premium: false +commands: + - "/econ calendar" + - "/econ currencies" + - "/econ indices" + - "/econ commodities" + - "/econ usbonds" + - "/econ glbonds" + - "/econ revrepo" + - "/econ fedrates" + - "/econ yieldcurve" +--- + +# Economy + +## calendar + +> Displays Economic Calendar of events + +```format +/econ calendar +``` + +--- + +## currencies + +> Create an alert with conditions for a symbol + +```format +/econ currencies +``` + +--- + +## indices + +> US indices overview + +```format +/econ indices +``` + +--- + +## commodities + +> Futures and commodities overview. + +```format +/econ commodities +``` + +--- + +## usbonds + +> US bonds overview. + +```format +/econ usbonds +``` + +--- + +## glbonds + +> Global bonds overview. + +```format +/econ glbonds +``` + +--- + +## revrepo + +> Displays Reverse Repo. + +```format +/econ revrepo [] +``` + +**[days]** - _optional_ +- The number of days to display. Default : 50 + +**Examples** + +``` +/econ revrepo days:35 +``` + +``` +/econ revrepo +``` + +--- + +## fedrates + +> Upcoming Federal Rate decision dates and chances + +```format +/econ fedrates +``` + +--- + +## yieldcurve + +> Displays US Bonds yield curve + +```format +/econ yieldcurve +``` + diff --git a/website/content/bot/reference/discord/etfs.mdx b/website/content/bot/reference/discord/etfs.mdx new file mode 100644 index 00000000000..19616b3c7ce --- /dev/null +++ b/website/content/bot/reference/discord/etfs.mdx @@ -0,0 +1,53 @@ +--- +title: ETFs +description: tops, holdings +premium: false +commands: + - "/etf tops" + - "/etf holdings" +--- + +# ETFs + +## tops + +> Displays ETF's Top Gainers/Decliners, Most Active. + +```format +/etf tops +``` + +**sort** +- Sort by Top Gainers, Top Decliners, or Most Active + +**Examples** + +``` +/etf tops sort:Top Gainers +``` + +--- + +## holdings + +> Displays ETF's Holdings. + +```format +/etf holdings [] +``` + +**etf** +- ETF Symbol + +**[num]** - _optional_ +- Amount of holdings to display. Default 15 + +**Examples** + +``` +/etf holdings etf:SPY +``` + +``` +/etf holdings etf:SPY num:25 +``` diff --git a/website/content/bot/reference/discord/flow.mdx b/website/content/bot/reference/discord/flow.mdx new file mode 100644 index 00000000000..6629e9455ab --- /dev/null +++ b/website/content/bot/reference/discord/flow.mdx @@ -0,0 +1,278 @@ +--- +title: Flow +description: opening, day, bigflow, prem, weekly, summary... +premium: true +commands: + - "/flow unu" + - "/flow opening" + - "/flow day" + - "/flow bigflow" + - "/flow prem" + - "/flow weekly" + - "/flow summary" + - "/flow sectors" + - "/flow sumexp" + - "/flow sumweek" + - "/flow sumday" + - "/flow sumtop" +--- + +# Flow + +## unu + +> Unusual Options Trades over 100k Prem. - Vol > OI + +```format +/flow unu +``` + +--- + +## opening + +> Top 20 flow by Premium for a stock with opening condition - Vol > OI + +```format +/flow opening +``` + +**ticker** + +- Ticker symbol you want to lookup + +Examples + +``` +/flow opening ticker:AMD +``` + +--- + +## day + +> Returns the most recent flow for a stock + +```format +/flow day [expiry] [strike] [opt_type] +``` + +**ticker** + +- Ticker symbol you want to lookup + +**[expiry]** - _optional_ + +- Filter last flow for the provided expiration date that happened today - YYYY-MM-DD format + +**[strike]** - _optional_ + +- Filter on the strike for flow - + +**[opt_type]** - _optional_ + +- Filter on option type - Can be "C" - Calls or "P" - Puts + +Examples + +``` +/flow day ticker:AMD +``` + +``` +/flow day ticker:AMD expiry:2022-07-29 strike:60 opt_type:Puts +``` + +``` +/flow day ticker:AMD expiry:2022-07-29 strike:60 +``` + +--- + +## bigflow + +> Returns the top 20 largest flow by premium for a stock + +```format +/flow bigflow +``` + +**ticker** + +- Ticker symbol you want to lookup + +Examples + +``` +/flow bigflow ticker:AMD +``` + +--- + +## weekly + +> Top 20 flow by Premium for a stock with weekly expiration + +```format +/flow weekly +``` + +**ticker** + +- Ticker symbol you want to lookup + +Examples + +``` +/flow weekly ticker:AMD +``` + +--- + +## prem + +> Returns a chart with sum of premium per day by call/put + +```format +/flow prem +``` + +**ticker** + +- Ticker symbol you want to lookup + +Examples + +``` +/flow prem ticker:AMD +``` + +--- + +## summary + +> Summary of all flow by % of MarketCap + +```format +/flow summary +``` + +**days** + +- The number of days to look back + +**sort** + +- Field to sort by - Can be : MarketCap, Float, Total, Short Percentage + +Examples + +``` +/flow summary days:5 sort:Float +``` + +``` +/flow summary days:5 sort:Short Percentage +``` + +--- + +## sectors + +> Summary of all flow by % of MarketCap by Sector + +``` +/flow sectors +``` + +**days** + +- The number of days to look back + +**sector** + +- Sector to filter by - Basic Materials | Energy | Communication Services | Consumer Cyclical | Consumer Defensive | Financial | Healthcare | Industrials | Real Estate | Technology | Utilities + +Examples + +``` +/flow sectors days:5 sector:Energy +``` + +``` +/flow sectors days:2 sector:Communication Services +``` + +--- + +## sumday + +> Graph Today's Total Premium of a stock. + +```format +/flow sumday +``` + +**ticker** + +- The ticker/symbol to look up + +Examples + +``` +/flow sumday ticker:AMD +``` + +--- + +## sumweek + +> Graph Total Premium weekly summary of a stock. + +```format +/flow sumweek +``` + +**ticker** + +- The ticker/symbol to look up + +Examples + +``` +/flow sumweek ticker:AMD +``` + +--- + +## sumexp + +> Flow summary by expiration date + +```format +/flow sumexp +``` + +**ticker** + +- The ticker/symbol to look up + +**expiry** + +- The expiration date to lookup + +Examples + +``` +/flow sumexp ticker:AMD expiry:2022-07-29 +``` + +--- + +## sumtop + +> Top flow for the day Calls vs Puts by ticker + +```format +/flow sumtop +``` diff --git a/website/content/bot/reference/discord/fun.mdx b/website/content/bot/reference/discord/fun.mdx new file mode 100644 index 00000000000..f64f42567b3 --- /dev/null +++ b/website/content/bot/reference/discord/fun.mdx @@ -0,0 +1,62 @@ +--- +title: Fun +description: 8ball, flip, urban +premium: false +commands: + - "/fun 8ball" + - "/fun flip" + - "/fun urban" + +--- + +# Fun + +## 8ball + +> Ask 8ball a question + +```format +/fun 8ball +``` + +**question** +- Make sure its in the form of a question + +**Examples** + +``` +/fun 8ball question:Will I make money today? +``` +--- + +## flip + +> Flip a coin for your Witcher! + +```format +/fun flip +``` + +**Examples** + +``` +/fun flip +``` +--- +## Urban + +> Look up a word in the urban dictionary - be careful + +```format +/fun urban +``` + +**word** +- enjoy the lookup + +**Examples** + +``` +/fun urban word:Shill +``` +--- diff --git a/website/content/bot/reference/discord/general.mdx b/website/content/bot/reference/discord/general.mdx new file mode 100644 index 00000000000..8ac5f450f52 --- /dev/null +++ b/website/content/bot/reference/discord/general.mdx @@ -0,0 +1,213 @@ +--- +title: General +description: autopost, watchlist, markets, news, quote, futures, ta, pop +premium: false +commands: + - "/autopost" + - "/watchlist" + - "/news" + - "/markets" + - "/quote" + - "/futures" + - "/ta" + - "/heatmap" + - "/heatchart" + - "/pop" +--- + +# General + +## autopost + +> Set up Autoposting for your server - (Server Only) + +```format +/autopost add +``` + +**add** - _optional_ +- If you want to add autoposts to your server + +**list** - _optional_ +- If you want to list all current autoposts + +**remove** - _optional_ +- If you want to remove an autopost from your server channel + +**Examples** + +``` +/autopost add +``` +``` +/autopost list +``` +``` +/autopost remove +``` + + +## watchlist + +> Display the tickers in your watchlist - Registered users get 3 for free! + +```format +/watchlist [] [] +``` + +**add** - _optional_ +- How to add more tickers to your watchlist + +**edit** - _optional_ +- If you want to remove symbols you can run add this optional parameter + +**Examples** + +``` +/watchlist +``` +``` +/watchlist add:AMD +``` +``` +/watchlist add:AMD,GOOG,TSLA +``` +``` +/watchlist edit:Remove +``` + +## news + +> Display the most recent news for ticker + +```format +/news +``` + +**ticker** +- The symbol/ticker/coin of the stock/coin you want to query + +**Examples** + +``` +/news ticker:AMD +``` + +--- + +## markets + +> Displays an overview of the market with adv / decliners relative to change and 50d/200d MA + +```format +/markets +``` + +**Examples** + +``` +/markets +``` + +--- + +## quote + +> Displays ticker quote info. + +```format +/quote +``` + +**ticker** +- The symbol/ticker/coin of the stock/coin you want to query + +**Examples** + +``` +/quote ticker:AMD +``` + +--- + +## futures + +> Displays Futures. + +```format +/futures +``` + +--- + +## ta + +> Displays a given stocks Technical Analysis summary. + +```format +/ta +``` + +**ticker** +- The symbol/ticker/coin of the stock/coin you want to query + +**Examples** + +``` +/ta ticker:AMD +``` + +--- + +## heatmap + +> Daily Heat Maps by Market. Sector is optional. + +```format +/heatmap +``` + +**market** +- Market to filter by. +**sector** +- Sector to filter by. If not specified, all sectors are returned. + +**Examples** + +``` +/heatmap market:S&P 500 +/heatmap market:S&P 500 sector:Services +``` + +--- + +## heatchart + +> Daily Market Heat Chart - 15m Delayed + +```format +/heatchart +``` + +**Examples** + +``` +/heatchart +``` +## pop + +> Display the most popular tickers over the last hour or day run on the bot + +```format +/pop +``` + +**Examples** + +``` +/pop 1hr +``` + +``` +/pop 1d +``` diff --git a/website/content/bot/reference/discord/government.mdx b/website/content/bot/reference/discord/government.mdx new file mode 100644 index 00000000000..da00daa93b2 --- /dev/null +++ b/website/content/bot/reference/discord/government.mdx @@ -0,0 +1,66 @@ +--- +title: Government +description: contracts, house, senate +premium: false +commands: + - "/gov contracts" + - "/gov house" + - "/gov senate" +--- + +# Government + +## contracts + +> Displays Top 15 Government contracts by amount for all tickers or for a specific ticker. + +```format +/gov contracts +``` + +**ticker** +- The symbol of the stock you want to query + +**Examples** + +``` +/gov contracts ticker:GE +``` + +--- + +## house + +> Displays recent house trades for all tickers or a specific ticker. + +```format +/gov house +``` + +**ticker** +- The symbol of the stock you want to query + +**Examples** + +``` +/gov house ticker:GE +``` + +---- + +## senate + +> Displays recent senate trades for all tickers or for a specific ticker + +```format +/gov senate +``` + +**ticker** +- The symbol of the stock you want to query + +**Examples** + +``` +/gov senate ticker:GE +``` diff --git a/website/content/bot/reference/discord/info.mdx b/website/content/bot/reference/discord/info.mdx new file mode 100644 index 00000000000..64744cdba1e --- /dev/null +++ b/website/content/bot/reference/discord/info.mdx @@ -0,0 +1,61 @@ +--- +title: Info +description: help, stats, about, serverid, support +premium: false +commands: + - "/help" + - "/info stats" + - "/info about" + - "/info serverid" + - "/info support" +--- + +# Info + +## help + +> Get started with OpenBB Bot. + +```format +/help +``` + +--- + +## stats + +> Bot Stats + +```format +/info stats +``` + +--- + +## about + +> About OpenBB Terminal + +```format +/info about +``` + +--- + +## serverid + +> Responds with your Server ID + +```format +/info serverid +``` + +--- + +## support + +> Send support ticket! + +```format +/info support +``` diff --git a/website/content/bot/reference/discord/nft.mdx b/website/content/bot/reference/discord/nft.mdx new file mode 100644 index 00000000000..336f0f07e78 --- /dev/null +++ b/website/content/bot/reference/discord/nft.mdx @@ -0,0 +1,921 @@ +--- +title: NFT +description: top, collection... +premium: false +commands: + - "/nft top" + - "/nft collection" + - "/nft chart" +--- + +import AvailableOptions from "@site/src/components/General/AvailableOptions"; + +# NFT + +## top + +> Get Top NFT Collections from Ethereum + +```format +/nft top [sortby] [interval] [reverse] +``` + +**[sortby]** - _optional_ + +- Column to sort by (default: Market Cap) - can be one of : Market Cap/ Floor Price Change / Volume / Sales + +**[interval]** - _optional_ + +- Time interval to display Sales/Volume/Floor Price (default: 1d) - can be one of : 1d / 7d / 30d / 90d + +**[reverse]** - _optional_ + +- Reverse the sort order (default: No) - Yes/No + +**Examples** + +``` +/nft top +``` + +``` +/nft top sortby: Market Cap reverse: Yes +``` + +--- + +## collection + +> Get NFT collection data from Ethereum network for the specified slug. Returns ranking, price info, supply, and much more. + +```format +/nft collection +``` + +**slug** + +- The nft you want the collection info for + + +**Examples** + +``` +/nft collection slug: bent +``` + +--- + +## chart + +> Returns NFT chart for floor price and sales on the specified slug. + +```format +/nft chart +``` + +**slug** + +- The nft you want the chart for + + +**Examples** + +``` +/nft chart slug: bent +``` + +``` +/nft chart slug: bored-ape-yacht-club +``` diff --git a/website/content/bot/reference/discord/options.mdx b/website/content/bot/reference/discord/options.mdx new file mode 100644 index 00000000000..179c4fa442d --- /dev/null +++ b/website/content/bot/reference/discord/options.mdx @@ -0,0 +1,471 @@ +--- +title: Options +description: gamma, info, topoi, unu, vol, hist, oi, mp... +premium: true +commands: + - "/op gamma" + - "/op info" + - "/op topoi" + - "/op unu" + - "/op vol" + - "/op hist" + - "/op uoastock" + - "/op highiv" + - "/op topvol" + - "/op topvoletf" + - "/op topoichange" + - "/op oi" + - "/op stats" + - "/op mp" + - "/op smile" + - "/op vsurf" + - "/op chains" +--- + +# Options + +## itm + +> Displays In-The-Money (ITM) options by expiry for a stock. + +```format +/op itm +``` + +**ticker** + +- The ticker/symbol to look up + +Examples + +``` +/op itm ticker:AMD +``` + +--- + +## equitypc + +> Displays the Equity Put/Call Volume Ratio - from market-harmonics.com + +```format +/op equitypc +``` + +--- + +## indexpc + +> Displays the Index Put/Call Ratio for the market - from market-harmonics.com + +```format +/op indexpc +``` + +--- + +## oichart + +> Charts Total Open Interest by Strike Price. + +```format +/op oichart [] +``` + +**ticker** + +- The ticker/symbol to look up + +**[expiry]** - _optional_ + +- The ticker/symbol to look up + +Examples + +``` +/op oichart ticker:AMD +``` + +``` +/op oichart ticker:AMD expiry:2022-07-29 +``` + +--- + +## gamma + +> Displays Options Gamma Levels for a Stock. + +```format +/op gamma [] +``` + +**ticker** + +- The ticker/symbol to look up + +**[expiry]** - _optional_ + +- Gamma from now to expiration + +Examples + +``` +/op gamma ticker:AMD +``` + +``` +/op gamma ticker:AMD expiry:2022-07-29 +``` + +--- + +## info + +> Displays option information (volatility, IV rank etc). + +```format +/op info +``` + +**ticker** + +- The ticker/symbol to look up + +Examples + +``` +/op info ticker:AMD +``` + +--- + +## topoi + +> Displays Top Open Interest + +```format +/op topoi +``` + +--- + +## unu + +> Shows Unusual Options + +```format +/op unu +``` + +--- + +## vol + +> Displays Options Strike Volume can add EXP date for bigger breakdown + +```format +/op vol [] +``` + +**ticker** + +- The ticker/symbol to look up + +**expiry** - _optional_ + +- Expiration to query + +Examples + +``` +/op vol ticker:AMD +``` + +``` +/op vol ticker:AMD expiry:2022-07-29 +``` + +--- + +## hist + +> Displays Options Price History in a chart. + +``` +/op hist [] +``` + +**ticker** + +- The ticker/symbol to look up + +**expiry** + +- Expiration to query + +**strike** + +- Option Strike Price + +**opt_type** + +- Calls or Puts Calls | Puts + +**interval** + +- Chart Minute Interval | 1440 for Daily 15 | 30 + +**[past_days]** - _optional_ + +- Past Days to Display. Default: 5 + +Examples + +``` +/op hist ticker:AMD expiry:2022-07-29 strike:80 opt_type:Calls interval:15 past_days:5 +``` + +``` +/op hist ticker:AMD expiry:2022-07-29 strike:80 opt_type:Calls interval:15 +``` + +--- + +## uoastock + +> Display Top 20day Average Options Volume by ticker. + +```format +/op uoastock [] +``` + +**[price]** - _optional_ + +- Filter by stocks over a certain price + +Examples + +``` +/op uoastock +``` + +``` +/op uoastock price:50 +``` + +--- + +## highiv + +> Top 15 Highest IV30 Equity stocks. + +```format +/op highiv +``` + +--- + +## topvol + +> Top 15 Highest options volume. + +```format +/op topvol +``` + +--- + +## topvoletf + +> Top 15 Highest options volume ETF. + +``` +/op topvoletf +``` + +--- + +## topoichange + +> Displays Top 15 stocks with highest OI Change. + +```format +/op topoichange +``` + +--- + +## oi + +> Displays OI and call/put ratio for given stock - can add EXP date too for bigger breakdown + +```format +/op oi [] +``` + +**ticker** + +- The ticker/symbol to look up + +**[expiry]** - _optional_ + +- Expiration to query + +Examples + +``` +/op oi ticker:AMC +``` + +``` +/op oi ticker:AMC expiry:2022-07-29 +``` + +--- + +## stats + +> Displays Options Statistics for a stock. + +```format +/op stats +``` + +**ticker** + +- The ticker/symbol to look up + +Examples + +``` +/op stats ticker:AMC +``` + +--- + +## maxpain + +> Displays the Max Pain on expiration date for a given stock. + +```format +/op maxpain +``` + +**ticker** + +- The ticker/symbol to look up + +**expiry** + +- Expiration to query + +Examples + +``` +/op maxpain ticker:AMC expiry:2022-07-29 +``` + +--- + +## chains + +> Displays Options Chain by Expiry + +```format +/op chains [] [] +``` + +**ticker** + +- The ticker/symbol to look up + +**expiry** + +- Expiration to query + +**opt_type** + +- Calls or Puts + +**[min_sp]** - _optional_ + +- Minimum Strike Price + +**[max_sp]** - _optional_ + +- Maximum Strike Price + +Examples + +``` +/op chains ticker:AMD expiry:2022-07-29 opt_type:Calls +``` + +``` +/op chains ticker:AMD expiry:2022-07-29 opt_type:Calls min_sp:10 max_sp:100 +``` + +--- + +## vsurf + +> Displays Options Volatility Surface + +```format +/op vsurf +``` + +**ticker** + +- The ticker/symbol to look up + +**z** + +- Variable for the Z axis (Volatility, Open Interest, Last Price) + +Examples + +``` +/op vsurf ticker:AMD z:Volatility +``` + +``` +/op vsurf ticker:AMD z:Open Interest +``` + +--- + +## smile + +> Displays Options Volatility Smile + +```format +/op smile [] [] +``` + +**ticker** + +- The ticker/symbol to look up + +**expiry** + +- Expiration to query + +**[min_sp]** - _optional_ + +- Minimum Strike price + +**[max_sp]** - _optional_ + +- Maximum Strike Price + +Examples + +``` +/op smile ticker:AMD expiry:2022-07-29 +``` + +``` +/op smile ticker:AMD expiry:2022-07-29 min_sp:10 max_sp:100 +``` diff --git a/website/content/bot/reference/discord/screeners.mdx b/website/content/bot/reference/discord/screeners.mdx new file mode 100644 index 00000000000..cffb9506961 --- /dev/null +++ b/website/content/bot/reference/discord/screeners.mdx @@ -0,0 +1,80 @@ +--- +title: Screeners +description: technical, all, pm, ah +premium: false +commands: + - "/scr technical" + - "/scr all" + - "/scr pm" + - "/scr ah" +--- + +# Screeners + +## technical + +> Displays stock screener results according to chosen signal. + +```format +/scr technical +``` + +**signal** +- Screener presets - Top Gainers | Top Losers | Most Active | Most Volatile | Relative Volatility | Golden Cross | Death Cross | New 52week High | New 52week Low | Unusual Volume | Overbought (RSI > 70) | Oversold (RSI < 14) + +**Examples** + +``` +/scr technical signal:Top Gainers +``` +``` +/scr technical signal:Death Cross +``` + +--- + +## all + +> Displays all available screeners + +```format +/scr all +``` + +--- + +## pm + +> Displays Pre-Market stocks according to chosen screener. + +```format +/scr pm +``` + +**signal** +- Screener preset - Pre-Market Top Gainers | Pre-Market Top Losers | Pre-Market Most Active + +**Examples** + +``` +/scr pm signal:Pre-Market Top Gainers +``` + +--- + +## ah + +> Displays After-Hours stocks according to chosen screener. + +```format +/scr ah +``` + +**signal** +- Screener preset - After-Hours Top Gainers | After-Hours Top Losers | After-Hours Most Active + +**Examples** + +``` +/scr ah signal:After-Hours Top Gainers +``` diff --git a/website/content/bot/reference/discord/short_data.mdx b/website/content/bot/reference/discord/short_data.mdx new file mode 100644 index 00000000000..809489e2320 --- /dev/null +++ b/website/content/bot/reference/discord/short_data.mdx @@ -0,0 +1,101 @@ +--- +title: Shorts +description: shotvol, shortint, topshortvol, hsi... +premium: false +commands: + - "/sh shortvol" + - "/sh shortint" + - "/sh topshortvol" + - "/sh hsi" + - "/sh shortrate" + - "/sh borrowed" +--- + +# Shorts + +## sh + +> Graph of 30 day history of short volume vs vol. + +```format +/sh shortvol +``` + +**ticker** +- The symbol/ticker of the stock you want the short interest for + +**Examples** + +``` +/sh shortvol ticker:AMD +``` + +--- + +## borrowed + +> Displays history of borrowed shares available and fee. + +```format +/sh borrowed +``` + +**ticker** +- The symbol/ticker of the stock you want the short interest for + +**Examples** + +``` +/sh borrowed ticker:AMD +``` + +--- + +## shortrate + +> Display Short shares spot borrow rate sourced from Interactive Brokers. + +```format +/sh shortrate +``` + +**ticker** +- The symbol/ticker of the stock you want the short interest for + +**Examples** + +``` +/sh shortrate ticker:AMD +``` + +--- + +## topshortvol + +> Top 15 Short Interest Stocks per Finra + +```format +/sh topshortvol +``` + +--- + +## hsi + +> Show top high short interest stocks of over 20% ratio + +``` +/sh hsi [] +``` + +**[num]** - _optional_ +- The number of stocks to print + +Examples + +``` +/sh hsi +``` +``` +/sh hsi num:4 +``` diff --git a/website/content/bot/reference/telegram/_category_.json b/website/content/bot/reference/telegram/_category_.json new file mode 100644 index 00000000000..e5c4b78e6ad --- /dev/null +++ b/website/content/bot/reference/telegram/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Telegram", + "position": 3 +} diff --git a/website/content/bot/reference/telegram/charts.mdx b/website/content/bot/reference/telegram/charts.mdx new file mode 100644 index 00000000000..9cb17594846 --- /dev/null +++ b/website/content/bot/reference/telegram/charts.mdx @@ -0,0 +1,231 @@ +--- +title: Charting +description: c3m, c5m, c15m, cd, cw... +premium: false +commands: + - "/chart" + - "/c3m" + - "/c5m" + - "/c15m" + - "/cd" + - "/cw" + - "/cm" + - "/chartfib" + - "/chartsr" +--- + +# Charting + +## chart + +> Shows the candlestick chart for the ticker/interval provided + +```format +/chart [] +``` + +**ticker** + +- The symbol/ticker/coin of the stock you want the chart of + +**interval** + +- The interval you want to chart - Current valid options are : 1m, 5m, 10m, 15m, 30m, 60m, 1d, 1wk, 1mo + +**[past_days]** - _optional_ + +- Amount of days to show for the Interval + +**Examples** + +``` +/chart AMD 1d 10 +``` + +``` +/chart AMD 1d +``` + +--- + +## c3m + +> Shows an intraday 3m candlestick chart for the ticker provided + +```format +/c3m +``` + +**ticker** + +- The symbol/ticker/coin of the stock you want the chart of + +**[extendedhours]** - _optional_ + +- Show the full extended hours chart from 4am to 8pm + +**Examples** + +``` +/c3m AMD +``` + +``` +/c3m AMD true +``` + +--- + +## c5m + +> Shows an intraday 5m candlestick chart for the ticker/coin provided + +```format +/c5m +``` + +**ticker** + +- The symbol/ticker/coin of the ticker/coin you want the chart of + +**[extendedhours]** - _optional_ + +- Show the full extended hours chart from 4am to 8pm + +**Examples** + +``` +/c5m AMD +``` + +``` +/c5m AMD true +``` + +--- + +## c15m + +> Shows an intraday 15m candlestick chart for the ticker provided + +```format +/c15m +``` + +**ticker** + +- The symbol/ticker/coin of the stock you want the chart of + +**Examples** + +``` +/c15m AMD +``` + +--- + +## cd + +> Shows a daily candlestick chart for the ticker/coin provided + +```format +/cd +``` + +**ticker** + +- The symbol/ticker/coin of the stock you want the chart of + +**Examples** + +``` +/cd AMD +``` + +--- + +## cw + +> Shows a weekly candlestick chart for the ticker/coin provided + +```format +/cw +``` + +**ticker** + +- The symbol/ticker/coin of the stock you want the chart of + +**Examples** + +``` +/cw AMD +``` + +--- + +## cm + +> Shows a monthly candlestick chart for the ticker/coin provided + +```format +/cm +``` + +**ticker** + +- The symbol/ticker/coin of the stock you want the chart of + +**Examples** + +``` +/cm AMD +``` + +--- + +## chartfib + +> Plots the Fibonacci levels for the ticker provided + +```format +/chartfib +``` + +**ticker** + +- The symbol/ticker/coin of the stock you want the chartfib of + +**Examples** + +``` +/chartfib AMD +``` + +--- + +## chartsr + +> Displays Support and Resistance Levels for the ticker provided + +```format +/chartsr **[interval]** +``` + +**ticker** + +- The symbol/ticker/coin of the stock you want the chartfib of + +**[interval]** - _optional_ + +- interval in minutes for the chart. Defaults to Daily with no selection + +**Examples** + +``` +/chartsr AMC +``` + +``` +/chartsr AMC 1d +``` diff --git a/website/content/bot/reference/telegram/crypto.mdx b/website/content/bot/reference/telegram/crypto.mdx new file mode 100644 index 00000000000..c3206317623 --- /dev/null +++ b/website/content/bot/reference/telegram/crypto.mdx @@ -0,0 +1,268 @@ +--- +title: Crypto +description: c, prints, bigprints, bio, defi, fees, ir... +premium: false +commands: + - "/c" + - "/prints" + - "/bigprints" + - "/tvl" + - "/defi chart" + - "/defi" + - "/bio" + - "/fees" + - "/compfees" + - "/ir" +--- + +# Crypto + +## chart + +```format +/c +``` + +> Shows the candlestick chart for the ticker/interval provided + +**symbol** + - The Crypto Symbol want to chart + +**currency** - _optional_ + - Crypto Currency. Default: USDT + +**exchange** - _optional_ + - Crypto Exchange. Default: binanceus + +**interval** - _optional_ + - Chart Interval. Default: 15m + +**srlines** - _optional_ + - Show Support/Resistance Lines. Default: False + +**fibs** - _optional_ + - Show Fibonacci Retracement Levels. Default: False + + +```format +/c doge +``` + +--- + +## prints + +> Last 15 Crypto Prints over last 24hrs. + +```format +/prints +``` + +**coin** + - The coin you want the prints of + +**Examples** + +``` +/prints ada +``` + +--- + +## bigprints + +> Last 15 Large Crypto Prints. + +```format +/bigprints +``` + +**coin** + - The coin you want the large prints of + +**Examples** + +``` +/bigprints ada +``` + +--- + +## tvl + +> Get protocols historical TVL. + +```format +/crypto tvl +``` + +**protocols** + - comma separated list of protocols (e.g., curve,makerdao) + +**Examples** + +``` +/tvl +``` +``` +/tvl curve +``` + +--- + +## defi table + +> Get top DeFi protocols + +```format +/defi [sortby] [chain] [reverse] +``` + +**[sortby]** - _optional_ + +- Column to sort data by (default="TVL") (e.g., Total Value Locked) + +**[chain]** - _optional_ + +- Chain to filter by (default="all") (e.g., ethereum) + +**[reverse]** - _optional_ + +- Reverse the sort order (default: No) - Yes/No + +**Examples** + +``` +/defi +``` + +``` +/defi 1hr Bitcoin +``` + +--- + + +## defi chart + +> Chart of top 20 defi protocols by TVL + +```format +/defi chart +``` + +**Examples** + +``` +/defi chart +``` + +--- + +## top + +> Get top cryptos and info + +```format +/crypto top [sortby] [category] [reverse] +``` + +**[sortby]** - _optional_ + +- Column to sort data by (default="mc") (e.g., Market Cap) + +**[category]** - _optional_ + +- Category to filter by (default="all") (e.g., stablecoins) + +**[reverse]** - _optional_ + +- Reverse the sort order (default: No) - Yes/No + +**Examples** + +``` +/top +``` + +``` +/top mc marketing +``` + +--- + +## bio + +> Get fundamental information about a crypto. + +```format +/bio +``` + +**symbol** + - Crypto symbol to check information (e.g., BTC) + +**Examples** + +``` +/bio btc +``` + +--- + +## fees + +> Fees on a certain date of top crypto protocols + +```format +/fees +``` + +**date** + - Date to get fees for (e.g., 2022-01-01) + +**Examples** + +``` +/fees date: 2023-04-19 +``` + +--- + +## compfees + +> Get protocol fees over time. + +```format +/compfees +``` + +**project** + - Comma separated list of protocols (e.g., btc,eth) + +**Examples** + +``` +/compfees doge +``` + +``` +/compfees projects: btc,eth +``` + + +--- + +## ir + +> Returns a table of issuance rate of top crypto protocols. + +```format +/ir +``` + +**Examples** + +``` +/ir +``` diff --git a/website/content/bot/reference/telegram/darkpool.mdx b/website/content/bot/reference/telegram/darkpool.mdx new file mode 100644 index 00000000000..5787c0d0d17 --- /dev/null +++ b/website/content/bot/reference/telegram/darkpool.mdx @@ -0,0 +1,170 @@ +--- +title: Darkpool +description: topsum, sectors, summary, allprints... +premium: true +commands: + - "/topsum" + - "/sectors" + - "/summary" + - "/allprints" + - "/allblocks" + - "/alldp" + - "/bigprintsdp" + - "/levels" +--- + +# darkpool + +## topsum + +> Top Total Block & Dark Pool data. + +```format +/topsum +``` + +**Examples** + +``` +/topsum +``` + +--- + +## levels + +> Biggest Levels for All Prints over last X days. + +```format +/levels +``` + +**ticker** + - The ticker to query for + +**days** + - The number of days to return + +**Examples** + +``` +/levels TSLA 10 +``` + +--- + +## sectors + +> Summary of all prints by % of MarketCap by Sector + +```format +/sectors +``` + +**days** + - The number of days to return + +**sector** + - The sector to select for the query + +```format +/sectors 5 bm +``` + +--- + +## summary + +> Summary of all prints by % of MarketCap + +```format +/summary +``` + +**days** + - The number of days to return + +**sort** + - Sort by market cap, float, total or short percentage + +**Examples** + +``` +/summary 10 mc +``` + +--- + +## allprints + +> Last 10 Combination of Dark Pool and Blocks. + +```format +/allprints +``` + +**ticker** + - The symbol/ticker of the stock you want to lookup + +**Examples** + +``` +/allprints AMD +``` + +--- + +## alldp + +> Last 15 Dark Pool Trades. + +```format +/alldp +``` + +**ticker** + - The symbol/ticker of the stock you want to lookup + +**Examples** + +``` +/alldp AMD +``` + +--- + +## allblocks + +> Last 15 Combination of Block Trades only + +```format +/allblocks +``` + +**ticker** + - The symbol/ticker of the stock you want to lookup + +**Examples** + +``` +/allblocks AMD +``` + +--- + +## bigprints + +> Combination of Dark Pool and Blocks - Largest over x amount of days + +```format +/bigprintsdp +``` + +**days** + - The number of days to return + +**Examples** + +``` +/bigprintsdp 6 +``` diff --git a/website/content/bot/reference/telegram/discovery.mdx b/website/content/bot/reference/telegram/discovery.mdx new file mode 100644 index 00000000000..f2d3f9c1218 --- /dev/null +++ b/website/content/bot/reference/telegram/discovery.mdx @@ -0,0 +1,114 @@ +--- +title: Discovery +description: splits, senate, house, fgindex, ipolist... +premium: false +commands: + - "/splits" + - "/senate" + - "/house" + - "/fgindex" + - "/ipolist" + - "/contracts" + - "/holidays" + - "/wsb" + - "/trendingst" +--- + +# Discovery + +## splits + +> List of recent Stock splits for all tickers. + +```format +/splits +``` + +--- + +## senate + +> Displays recent senate trades for all tickers. + +```format +/senate +``` + +--- + +## house + +> Displays recent House trades for all tickers + +```format +/house +``` + +--- + +## fgindex + +> Displays Fear & Greed Index - Investor Sentiment - CNNMoney + +```format +/fgindex +``` + +--- + +## ipolist + +> Displays 10 Upcoming and Recent IPO's. + +```format +/ipolist +``` + +--- + +## contracts + +> Displays Top 15 Government contracts by amount for all tickers. + +```format +/contracts +``` + +--- + +## holidays + +> Displays Upcoming Market Holidays. + +```format +/holidays +``` + +--- + +## arktrades + +> Displays trades made by ARK ETF + +```format +/arktrades +``` + +--- + +## wsb + +> Display Top 15 Trending Stocks - WSB (WallStreetBets) + +```format +/wsb +``` +--- + +## trendingst + +> Display top 15 Trending Stocks - StockTwits + +```format +/trendingst +``` diff --git a/website/content/bot/reference/telegram/duedilligence.mdx b/website/content/bot/reference/telegram/duedilligence.mdx new file mode 100644 index 00000000000..638336944fb --- /dev/null +++ b/website/content/bot/reference/telegram/duedilligence.mdx @@ -0,0 +1,349 @@ +--- +title: Due Diligence +description: ph, ah, shortrate, news, earnings, bio, ermove... +premium: false +commands: + - "/pm" + - "/ah" + - "/splits" + - "/earnings" + - "/nexter" + - "/bio" + - "/ermove" + - "/analyst" + - "/pt" + - "/supplier" + - "/customer" + - "/insiders" + - "/arktrades" + - "/instholdings" + - "/financials" + - "/divinfo" + - "/ytd" +--- + +# Due Diligence + +## pm + +> Displays premarket data for a given stock ticker + +```format +/pm +``` + +**ticker** + +- The symbol/ticker of the stock you want the premarket info for + +**Examples** + +``` +/pm AMD +``` + +--- + +## ah + +> Displays afterhours data for a given stock ticker + +```format +/ah +``` + +**ticker** + +- The symbol/ticker of the stock you want the afterhours info for + +**Examples** + +``` +/ah AMD +``` + +--- + +## splits + +> List of recent Stock splits for a ticker + +### Command + +```format +/splits +``` + +**ticker** + +- The symbol/ticker of the stock you want the splits for + +**Examples** + +``` +/splits AMD +``` + +--- + +## earnings + +> Display Earnings that are expected to occur in the next business days. (Sorted by market cap) + +```format +/earnings +``` + +**day** + +- The Date you want to see the earnings for. Format: YYYY-MM-DD + +**Examples** + +``` +/earnings 2022-07-29 +``` + +--- + +## nexter + +> Returns next Earnings Date for a stock. + +```format +/nexter +``` + +**ticker** + +- The symbol/ticker of the stock you want the next earnings date for + +**Examples** + +``` +/nexter AMD +``` + +--- + +## bio + +> Displays a Crpyto's Info and other information or you can use bio_stocks to get Stock bio + +```format +/bio +``` + +**ticker** + +- The symbol/ticker of the stock you want the bio of + +**Examples** + +``` +/bio BTC +``` + +``` +/bio_stocks AMD +``` + +--- + +## ermove + +> Display implied move for a stock based on option prices. + +```format +/ermove +``` + +**ticker** + +- The symbol/ticker of the stock you want the earnings move of + +**Examples** + +``` +/ermove AMD +``` + +--- + +## analyst + +> Displays analyst recommendations. + +```format +/analyst +``` + +**ticker** + +- The symbol/ticker of the stock you want the analyst ratings for + +**Examples** + +``` +/analyst AMD +``` + +--- + +## pt + +> Displays chart with price targets. + +```format +/pt +``` + +**ticker** + +- The symbol/ticker of the stock you want to query + +**Examples** + +``` +/pt AMD +``` + +--- + +## supplier + +> Retrieve list of suppliers for specified company + +```format +/supplier +``` + +**ticker** + +- The symbol/ticker of the stock you want to query + +**Examples** + +``` +/supplier AMD +``` + +--- + +## customer + +> Retrieve list of customers for specified company + +```format +/customer +``` + +**ticker** + +- The symbol/ticker of the stock you want to query + +**Examples** + +``` +/customer AMD +``` + +--- + +## insiders + +Displays 15 latest insider transactions for given stock + +```format +/insiders +``` + +**ticker** + +- The symbol/ticker of the stock you want to query + +**Examples** + +``` +/insiders AMD +``` + +--- + +## instholdings + +> Displays top 15 Institutional Holdings for given stock + +```format +/instholdings +``` + +**ticker** + +- The symbol/ticker of the stock you want to query + +**Examples** + +``` +/instholdings AMD +``` + +--- + +## financials + +> Gives Total Assets, Cash, Debt, Liabilities, Rev for Company + +```format +/financials +``` + +**ticker** + +- The symbol/ticker of the stock you want to query + +**Examples** + +``` +/financials AMD +``` + +--- + +## divinfo + +> Display dividend information for a stock. + +```format +/divinfo +``` + +**ticker** + +- The symbol/ticker of the stock you want to query + +**Examples** + +``` +/divinfo AAPL +``` + +--- + +## ytd + +> Displays Period Performance for a stock + +```format +/ytd +``` + +**ticker** + +- The symbol/ticker of the stock you want to query + +**Examples** + +``` +/ytd AAPL +``` diff --git a/website/content/bot/reference/telegram/economy.mdx b/website/content/bot/reference/telegram/economy.mdx new file mode 100644 index 00000000000..182caaec705 --- /dev/null +++ b/website/content/bot/reference/telegram/economy.mdx @@ -0,0 +1,119 @@ +--- +title: Economy +description: calendar, currencies, indices, commodities... +premium: false +commands: + - "/calendar" + - "/currencies" + - "/indices" + - "/commodities" + - "/bonds" + - "/fedrates" + - "/yieldcurve" +--- + +# Economy + +## calendar + +> Displays Economic Calendar of events + +```format +/calendar +``` + +--- + +## currencies + +> Create an alert with conditions for a symbol + +```format +/currencies +``` + +--- + +## indices + +> US indices overview + +```format +/indices +``` + +--- + +## commodities + +> Futures and commodities overview. + +```format +/commodities +``` + +--- + +## bonds + +> Global bonds overview. + +```format +/bonds +``` + +**market** - +- The market to get bonds for - us (US bonds) or gl (Global) + +**Examples** + +``` +/bonds us +``` + +``` +/bonds gl +``` + +--- + +## revrepo + +> Displays Reverse Repo. + +```format +/revrepo [] +``` + +**[days]** - _optional_ +- The number of days to display. Default : 50 + +**Examples** + +``` +/revrepo days:35 +``` + +``` +/revrepo +``` + +--- + +## fedrates + +> Upcoming Federal Rate decision dates and chances + +```format +/fedrates +``` + +--- + +## yieldcurve + +> Displays US Bonds yield curve + +```format +/yieldcurve +``` diff --git a/website/content/bot/reference/telegram/etfs.mdx b/website/content/bot/reference/telegram/etfs.mdx new file mode 100644 index 00000000000..922e93b6b2f --- /dev/null +++ b/website/content/bot/reference/telegram/etfs.mdx @@ -0,0 +1,34 @@ +--- +title: ETFs +description: top etfs, etf holdings +premium: false +commands: + - "/etf" +--- + +# ETFs + +## tops/holdings + +> Displays ETF's Top Gainers/Decliners, Most Active or get holdings data for an ETF. + +```format +/etf tops +/etf holdings +``` + +**sort** +- Sort by Top Gainers, Top Decliners, or Most Active + +**ticker** +- Ticker to get holdings data for + +**Examples** + +``` +/etf holdings SPY +``` + +``` +/etf tops +``` diff --git a/website/content/bot/reference/telegram/flow.mdx b/website/content/bot/reference/telegram/flow.mdx new file mode 100644 index 00000000000..3abe06ac048 --- /dev/null +++ b/website/content/bot/reference/telegram/flow.mdx @@ -0,0 +1,184 @@ +--- +title: Flow +description: flow, unusual, bigflow, summary... +premium: true +commands: + - "/flow" + - "/unu" + - "/bigflow" + - "/summary" + - "/sectors" + - "/sumexp" + - "/sumweek" + - "/sumday" + - "/sumtop" +--- + +# Flow + +## flow + +> Returns the most recent for a stock + +```format +/flow [subcmd] [expiry] [strike] [opt_type] +``` + +**[subcmd]** - _optional_ + +- Possible subcommands to run. If not provided, defaults to daily flow + - wk: Weekly flow by Premium for a stock with weekly expiration + - open: Flow by Premium for a stock with opening condition - Vol > OI + - unu: Unusual Options Trades over 100k Prem. - Vol > OI + - prem: Chart with sum of premium per day by call/put + +**ticker** +- Ticker symbol you want to lookup + +**[expiry]** - _optional_ + +- Filter last flow for the provided expiration date that happened today - YYYY-MM-DD format + +**[strike]** - _optional_ + +- Filter on the strike for flow - + +**[opt_type]** - _optional_ + +- Filter on option type - Can be "C" - Calls or "P" - Puts + +Examples + +``` +/flow AMD +``` + +``` +/flow wk AMD +``` + +``` +/flow prem AMD +``` + +--- + +## unu + +> Unusual Options Trades over 100k Prem. - Vol > OI + +```format +/unu +``` + +--- + +## bigflow + +> Returns the top 20 largest by premium for a stock + +```format +/bigflow +``` + +**ticker** +- Ticker symbol you want to lookup + +Examples + +``` +/bigflow AMD +``` + +--- + +## summary + +> Summary of all by % of MarketCap + +```format +/summaryflow +``` + +**days** +- The number of days to look back + +**sort** +- Field to sort by - Can be : MarketCap, Float, Total, Short Percentage + +Examples + +``` +/summaryflow 1 float +``` + +``` +/summaryflow 1 sum +``` + +--- + +## sectorsflow + +> Summary of all by % of MarketCap by Sector + +``` +/sectorsflow +``` + +**days** +- The number of days to look back + +**sector** +- Sector to filter by - Basic Materials (bm) | Energy (e) | Communication Services (cs) | Consumer Cyclical (cs) | Consumer Defensive (cd) | Financial (f) | Healthcare (h) | Industrials (i) | Real Estate (re) | Technology (t) | Utilities (u) + +Examples + +``` +/sectorsflow 5 cs +``` + +``` +/sectorsflow 5 bm +``` + +--- + +## flowsum + +> Graph Today's Total Premium of a stock. + +```format +/flowsum [subcmd] +``` + +**[subcmd]** - _optional_ + +- Possible subcommands, if not provided, defaults to daily sum + wk: Weekly flow by Premium for a stock with weekly expiration + exp: Flow summary by expiration date + top: Top flow for the day Calls vs Puts by stock + +**ticker** +- The ticker/symbol to look up + +**expiry** +- Expiration date - Only available/required for exp + +Examples + +``` +/flowsum AMD +``` + +``` +/flowsum wk AMD +``` + +``` +/flowsum top AMD +``` + +``` +/flowsum exp AMD 2022-07-29 +``` diff --git a/website/content/bot/reference/telegram/fun.mdx b/website/content/bot/reference/telegram/fun.mdx new file mode 100644 index 00000000000..9245966b373 --- /dev/null +++ b/website/content/bot/reference/telegram/fun.mdx @@ -0,0 +1,62 @@ +--- +title: Fun +description: 8ball, flip, urban +premium: false +commands: + - "/8ball" + - "/flip" + - "/urban" + +--- + +# Fun + +## 8ball + +> Ask 8ball a question + +```format +/8ball +``` + +**question** +- Make sure its in the form of a question + +**Examples** + +``` +/8ball Will I make money today? +``` +--- + +## flip + +> Flip a coin for your Witcher! + +```format +/flip +``` + +**Examples** + +``` +/flip +``` +--- +## Urban + +> Look up a word in the urban dictionary - be careful + +```format +/urban +``` + +**word** +- enjoy the lookup + +**Examples** + +``` +/urban Shill +``` +--- diff --git a/website/content/bot/reference/telegram/general.mdx b/website/content/bot/reference/telegram/general.mdx new file mode 100644 index 00000000000..cb64cbaed73 --- /dev/null +++ b/website/content/bot/reference/telegram/general.mdx @@ -0,0 +1,182 @@ +--- +title: General +description: watchlist, markets, news, quote, futures, ta, pop +premium: false +commands: + - "/watchlist" + - "/news" + - "/markets" + - "/quote" + - "/futures" + - "/ta" + - "/heatmap" + - "/heatchart" + - "/pop" +--- + +# General + +## watchlist + +> Display the tickers in your watchlist - Registered users get 3 for free! + +```format +/watchlist +``` + +**_add** - _optional_ +- How to add more tickers to your watchlist + +**_remove** - _optional_ +- If you want to remove symbols + +**Examples** + +``` +/watchlist +``` +``` +/watchlist_add AMD,GOOG,TSLA +``` +``` +/watchlist_remove +``` + +## news + +> Display the most recent news for ticker + +```format +/news +``` + +**ticker** +- The symbol/ticker/coin of the stock/coin you want to query + +**Examples** + +``` +/news AMD +``` + +--- + +## markets + +> Displays an overview of the market with adv / decliners relative to change and 50d/200d MA + +```format +/markets +``` + +**Examples** + +``` +/markets +``` + +--- + +## quote + +> Displays ticker quote info. + +```format +/quote +``` + +**ticker** +- The symbol/ticker/coin of the stock/coin you want to query + +**Examples** + +``` +/quote AMD +``` + +--- + +## futures + +> Displays Futures. + +```format +/futures +``` + +--- + +## ta + +> Displays a given stocks Technical Analysis summary. + +```format +/ta +``` + +**ticker** +- The symbol/ticker/coin of the stock/coin you want to query + +**Examples** + +``` +/ta AMD +``` + +--- + +## heatmap + +> Daily Heat Maps by Market. Sector is optional. + +```format +/heatmap +``` + +**market** +- Market to filter by. (sp500, dow30, nasdaq, crypto, russel) +**sector** +- Sector to filter by. If not specified, all sectors are returned. (TODO : list sectors here) + +**Examples** + +``` +/heatmap sp500 +/heatmap sp500 services +``` + +--- + +## heatchart + +> Daily Market Heat Chart - 15m Delayed + +```format +/heatchart +``` + +**Examples** + +``` +/heatchart +``` +## pop + +> Display the most popular tickers over the last hour or day run on the bot + +```format +/pop +``` + +**interval** - +The interval you want to see the most popular commands for - 1d, 1h + +**Examples** + +``` +/pop 1d +``` + +``` +/pop 1h +``` diff --git a/website/content/bot/reference/telegram/government.mdx b/website/content/bot/reference/telegram/government.mdx new file mode 100644 index 00000000000..89aae552069 --- /dev/null +++ b/website/content/bot/reference/telegram/government.mdx @@ -0,0 +1,66 @@ +--- +title: Government +description: contracts, house, senate +premium: false +commands: + - "/contracts" + - "/house" + - "/senate" +--- + +# Government + +## contracts + +> Displays Top 15 Government contracts by amount for all tickers or for a specific ticker. + +```format +/contracts +``` + +**ticker** +- The symbol of the stock you want to query + +**Examples** + +``` +/contracts GE +``` + +--- + +## house + +> Displays recent house trades for all tickers or a specific ticker. + +```format +/house +``` + +**ticker** +- The symbol of the stock you want to query + +**Examples** + +``` +/house GE +``` + +---- + +## senate + +> Displays recent senate trades for all tickers or for a specific ticker + +```format +/senate +``` + +**ticker** +- The symbol of the stock you want to query + +**Examples** + +``` +/senate GE +``` diff --git a/website/content/bot/reference/telegram/info.mdx b/website/content/bot/reference/telegram/info.mdx new file mode 100644 index 00000000000..6acf449cc5d --- /dev/null +++ b/website/content/bot/reference/telegram/info.mdx @@ -0,0 +1,28 @@ +--- +title: Info +description: help, about +premium: false +commands: + - "/help" + - "/about" +--- + +# Info + +## help + +> List of commands for OpenBB Bot. + +```format +/help +``` + +--- + +## about + +> About OpenBB Terminal + +```format +/about +``` diff --git a/website/content/bot/reference/telegram/nft.mdx b/website/content/bot/reference/telegram/nft.mdx new file mode 100644 index 00000000000..c0cb7f38ab6 --- /dev/null +++ b/website/content/bot/reference/telegram/nft.mdx @@ -0,0 +1,72 @@ +--- +title: NFT +description: top, collection... +premium: false +commands: + - "/nfttop" + - "/nftcollection" +--- + +# NFT + +## top + +> Get Top NFT Collections from Ethereum + +```format +/nft top [sortby] [interval] [reverse] +``` + +**[sortby]** - _optional_ + +- Column to sort by (default: Market Cap) - can be one of : Market Cap/ Floor Price Change / Volume / Sales + +**[interval]** - _optional_ + +- Time interval to display Sales/Volume/Floor Price (default: 1d) - can be one of : 1d / 7d / 30d / 90d + +**[reverse]** - _optional_ + +- Reverse the sort order (default: No) - Yes/No + +**Examples** + +``` +/nfttop +``` + +``` +/nfttop mc y +``` + +--- + +## collection + +> Get NFT collection data from Ethereum network for the specified slug. Returns ranking, price info, supply, and much more. + +```format +/nftcollection +``` + +**slug** + +- The nft you want the collection info for + +**chart** -optional- + +- returns a chart for the selected nft - can also use y/yes/chart/true + +**Examples** + +``` +/nftcollection bent +``` + +``` +/nftcollection bent chart +``` + +``` +/nftcollection bent y +``` diff --git a/website/content/bot/reference/telegram/options.mdx b/website/content/bot/reference/telegram/options.mdx new file mode 100644 index 00000000000..0bf88feee0c --- /dev/null +++ b/website/content/bot/reference/telegram/options.mdx @@ -0,0 +1,437 @@ +--- +title: Options +description: gamma, iv, topoi, unu, vol, hist, oi, mp... +premium: true +commands: + - "/gamma" + - "/iv" + - "/topoi" + - "/unu" + - "/vol" + - "/hist" + - "/uoastock" + - "/highiv" + - "/topvol" + - "/topvoletf" + - "/topoichange" + - "/oi" + - "/stats" + - "/mp" + - "/smile" + - "/vsurf" + - "/chains" +--- + +# Options + +## itm + +> Displays In-The-Money (ITM) options by expiry for a stock. + +```format +/itm +``` + +**ticker** +- The ticker/symbol to look up + +Examples + +``` +/itm AMD +``` + +--- + +## equitypc + +> Displays the Equity Put/Call Volume Ratio - from market-harmonics.com + +```format +/equitypc +``` + +--- + +## indexpc + +> Displays the Index Put/Call Ratio for the market - from market-harmonics.com + +```format +/indexpc +``` + +--- + +## oichart + +> Charts Total Open Interest by Strike Price. + +```format +/oichart [] +``` + +**ticker** +- The ticker/symbol to look up + +**[expiry]** - _optional_ +- The ticker/symbol to look up + +Examples + +``` +/oichart AMD +``` + +``` +/oichart AMD 2022-07-29 +``` + +--- + +## gamma + +> Displays Options Gamma Levels for a Stock. + +```format +/gamma [] +``` + +**ticker** +- The ticker/symbol to look up + +**[expiry]** - _optional_ +- Gamma from now to expiration + +Examples + +``` +/gamma AMD +``` + +``` +/gamma AMD 2022-07-29 +``` + +--- + +## iv + +> Displays option information (volatility, IV rank etc). + +```format +/iv +``` + +**ticker** +- The ticker/symbol to look up + +Examples + +``` +/iv AMD +``` + +--- + +## topoi + +> Displays TOpen Interest + +```format +/topoi +``` + +--- + +## unu + +> Shows Unusual Options + +```format +/unu +``` + +--- + +## vol + +> Displays Options Strike Volume can add EXP date for bigger breakdown + +```format +/vol [] +``` + +**ticker** +- The ticker/symbol to look up + +**expiry** - _optional_ +- Expiration to query + +Examples + +``` +/vol AMD +``` + +``` +/vol AMD 2022-07-29 +``` + +--- + +## hist + +> Displays Options Price History in a chart. + +``` +/hist [] +``` + +**ticker** +- The ticker/symbol to look up + +**expiry** +- Expiration to query + +**strike** +- Option Strike Price + +**opt_type** +- Calls or Puts Calls | Puts + +**interval** +- Chart Minute Interval | 1440 for Daily 5 | 15 | 30 + +**[past_days]** - _optional_ +- Past Days to Display. Default: 5 + +Examples + +``` +/hist AMD 2022-07-29 18 Calls 5 5 +``` + +``` +/hist AMD 2022-07-29 18 Calls 5 +``` + +--- + +## uoastock + +> Display T20day Average Options Volume by ticker. + +```format +/uoastock [] +``` + +**[price]** - _optional_ +- Filter by stocks over a certain price + +Examples + +``` +/uoastock +``` + +``` +/uoastock 50 +``` + +--- + +## highiv + +> T15 Highest IV30 Equity stocks. + +```format +/highiv +``` + +--- + +## topvol + +> T15 Highest options volume. + +```format +/topvol +``` + +--- + +## topvoletf + +> T15 Highest options volume ETF. + +``` +/topvoletf +``` + +--- + +## topoichange + +> Displays T15 stocks with highest OI Change. + +```format +/topoichange +``` + +--- + +## oi + +> Displays OI and call/put ratio for given stock - can add EXP date too for bigger breakdown + +```format +/oi [] +``` + +**ticker** +- The ticker/symbol to look up + +**[expiry]** - _optional_ +- Expiration to query + +Examples + +``` +/oi AMC +``` + +``` +/oi AMC 2022-07-29 +``` + +--- + +## stats + +> Displays Options Statistics for a stock. + +```format +/stats +``` + +**ticker** +- The ticker/symbol to look up + +Examples + +``` +/stats AMC +``` + +--- + +## maxpain + +> Displays the Max Pain on expiration date for a given stock. + +```format +/maxpain +``` + +**ticker** +- The ticker/symbol to look up + +**expiry** +- Expiration to query + +Examples + +``` +/maxpain AMC 2022-07-29 +``` + +--- + +## chains + +> Displays Options Chain by Expiry + +```format +/chains [] [] +``` + +**ticker** +- The ticker/symbol to look up + +**expiry** +- Expiration to query + +**opt_type** +- Calls or Puts + +**[min_sp]** - _optional_ +- Minimum Strike Price + +**[max_sp]** - _optional_ +- Maximum Strike Price + +Examples + +``` +/chains AMD 2022-08-05 Calls +``` +``` +/chains AMD 2022-08-05 Calls 10 100 +``` + +--- + +## vsurf + +> Displays Options Volatility Surface + +```format +/vsurf +``` + +**ticker** +- The ticker/symbol to look up + +**z** +- Variable for the Z axis (Volatility (v), Open Interest (oi), Last Price (lp)) + +Examples + +``` +/vsurf AMD v +``` +``` +/vsurf AMD oi +``` + +--- + +## smile + +> Displays Options Volatility Smile + +```format +/smile [] [] +``` + +**ticker** +- The ticker/symbol to look up + +**expiry** +- Expiration to query + +**[min_sp]** - _optional_ +- Minimum Strike price + +**[max_sp]** - _optional_ +- Maximum Strike Price + +Examples + +``` +/smile AMD 2022-08-19 +``` +``` +/smile AMD 2022-08-19 10 100 +``` diff --git a/website/content/bot/reference/telegram/screeners.mdx b/website/content/bot/reference/telegram/screeners.mdx new file mode 100644 index 00000000000..66af6237b94 --- /dev/null +++ b/website/content/bot/reference/telegram/screeners.mdx @@ -0,0 +1,52 @@ +--- +title: Screeners +description: screener, scr +premium: false +commands: + - "/screener" + - "/scr" +--- + +# Screeners + +## screener + +> Displays stock screener results according to chosen signal. + +```format +/scr technical +``` + +**signal** (TODO : find these numbers) +- Screener presets - Top Gainers | Top Losers | Most Active | Most Volatile | Relative Volatility | Golden Cross | Death Cross | New 52week High | New 52week Low | Unusual Volume + +**Examples** + +``` +/screener 0 +``` +``` +/screener 4 +``` + +--- + +## all + +> Displays all available screeners + +```format +/scr - _optional_ +``` +**subcmd** +- Screener preset valid options are - pm | ah (default is all) + +**Examples** + +``` +/scr pm +``` + +``` +/scr pm +``` diff --git a/website/content/bot/reference/telegram/short_data.mdx b/website/content/bot/reference/telegram/short_data.mdx new file mode 100644 index 00000000000..4cf27a2a077 --- /dev/null +++ b/website/content/bot/reference/telegram/short_data.mdx @@ -0,0 +1,101 @@ +--- +title: Shorts +description: shotvol, shortint, topshortvol, hsi... +premium: false +commands: + - "/shortvol" + - "/shortint (TODO FIND ME)" + - "/topshortvol" + - "/hsi" + - "/shortrate" + - "/borrowed" +--- + +# Shorts + +## sh + +> Graph of 30 day history of short volume vs vol. + +```format +/shortvol +``` + +**ticker** +- The symbol/ticker of the stock you want the short interest for + +**Examples** + +``` +/shortvol AMD +``` + +--- + +## borrowed + +> Displays history of borrowed shares available and fee. + +```format +/borrowed +``` + +**ticker** +- The symbol/ticker of the stock you want the short interest for + +**Examples** + +``` +/borrowed AMD +``` + +--- + +## shortrate + +> Display Short shares spot borrow rate sourced from Interactive Brokers. + +```format +/shortrate +``` + +**ticker** +- The symbol/ticker of the stock you want the short interest for + +**Examples** + +``` +/shortrate AMD +``` + +--- + +## topshortvol + +> Top 15 Short Interest Stocks per Finra + +```format +/topshortvol +``` + +--- + +## hsi + +> Show top high short interest stocks of over 20% ratio + +``` +/hsi [] +``` + +**[num]** - _optional_ +- The number of stocks to print + +Examples + +``` +/hsi +``` +``` +/hsi 4 +``` diff --git a/website/content/sdk/_category_.json b/website/content/sdk/_category_.json new file mode 100644 index 00000000000..ffeb7126131 --- /dev/null +++ b/website/content/sdk/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "OpenBB SDK", + "position": 2 +} diff --git a/website/content/sdk/changelog/_category_.json b/website/content/sdk/changelog/_category_.json new file mode 100644 index 00000000000..dd4aac394c8 --- /dev/null +++ b/website/content/sdk/changelog/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Changelog", + "position": 5 +} diff --git a/website/content/sdk/changelog/version1_0_0.mdx b/website/content/sdk/changelog/version1_0_0.mdx new file mode 100644 index 00000000000..23a3448455b --- /dev/null +++ b/website/content/sdk/changelog/version1_0_0.mdx @@ -0,0 +1,21 @@ +--- +title: Version 1.0.0 +version: "1.0.0" +date: 2022-08-03 +description: Version 1.0.0 +--- + +## Added + +- bullet 1 +- bullet 2 + +## Changed + +- bullet 1 +- bullet 2 + +## Fixed + +- bullet 1 +- bullet 2 diff --git a/website/content/sdk/changelog/version2_0_0.mdx b/website/content/sdk/changelog/version2_0_0.mdx new file mode 100644 index 00000000000..7e95cb4e5f9 --- /dev/null +++ b/website/content/sdk/changelog/version2_0_0.mdx @@ -0,0 +1,22 @@ +--- +title: Current - Version 2.0.0 +version: "2.0.0" +date: 2022-10-26 +description: Version 2.0.0 +sidebar_position: 0 +--- + +## Added + +- bullet 1 +- bullet 2 + +## Changed + +- bullet 1 +- bullet 2 + +## Fixed + +- bullet 1 +- bullet 2 diff --git a/website/content/sdk/faq.md b/website/content/sdk/faq.md deleted file mode 100644 index 5b6554c2aa7..00000000000 --- a/website/content/sdk/faq.md +++ /dev/null @@ -1,412 +0,0 @@ ---- -title: FAQ -sidebar_position: 6 -keywords: [faq, questions, openbb, terminal, troubleshooting, errors, bugs, issues, problems, installation, contributors, developers, github, pip] ---- -Still experiencing trouble after consulting this page? Reach us on [Discord](https://openbb.co/discord) or visit our [contact page](https://openbb.co/contact). - -## Installation and Updates - -
Do I have to use Miniconda? - -There are certain dependencies which are sourced exclusively from the `conda-forge` directory. Other virtual environment managers, such a `venv`, may not solve the environment properly, resulting in failed package installations or incorrect builds. We highly recommend using Miniconda as the Python virtual environment manager for installing the OpenBB SDK. - -
- -
How do I update my installation to the latest version? - -The code is constantly being updated with new features and bug fixes. The process for updating will vary by the installation type: - -- For a `pip` installation, when a new version is published: `pip install -U openbb[all]` -- Upgrade a cloned version of the GitHub repo with: - -```console -git fetch -git pull -poetry install -E all -``` - -**Notes:** If the cloned repository is a fork, pull from: `git pull origin main`, or, `git pull origin develop`. If there are changes locally to the files that conflict with the incoming changes from GitHub, stash them before pulling from main with `git stash`. - -
- -### PyPi Nightly - -The nightly build can be installed with: - -```console -pip install openbb-nightly[all] -``` - -**Note**: This version may not be stable and should not be used in a production setting. - -
"Microsoft Visual C++ 14.0 or greater is required" - -Download and install [C++ Build Tools](https://visualstudio.microsoft.com/visual-cpp-build-tools/), restart the machine, then try again. - -
- -
Error: failed building wheel for bt - -There may be an additional message that is printed from this error, stating: "Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools". - -Download and install it. [https://visualstudio.microsoft.com/visual-cpp-build-tools/](https://visualstudio.microsoft.com/visual-cpp-build-tools/) - -Mac and Linux users may also encounter a similar error because a C++ compiler is not installed. Install Homebrew: - -```console -/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" -``` - -Then run: - -```console -brew install gcc -brew install cmake -``` - -Additionally, Mac users should install Rosetta: - -```console -softwareupdate --install-rosetta -``` - -
- -
Miniconda3 will not install on ARM/Linux Raspberry Pi machines. - -Refer to this issue on the Conda [GitHub](https://github.com/conda/conda/issues/10723) page. - -
- -## Import Errors - -
ModuleNotFoundError: No module named '______' - -Before troubleshooting please verify that the recommended installation instructions were followed. These errors often can occur when the virtual environment has not been activated, or the `poetry install` command was skipped. Activate the OpenBB virtual environment created during the installation process prior to launching or importing the SDK. - -**Terminal**: - -```console -conda activate obb -python terminal.py -``` - -**SDK**: - -```console -conda activate obb -ipython -from openbb_terminal.sdk import openbb -``` - -**Jupyter**: - -Check that the kernel selected for the session is the OpenBB virtual environment created during the installation process and then re-run the cell. - -```console -from openbb_terminal.sdk import openbb -``` - -There is also a possibility that a new dependency has been added to the code and it has not yet been installed in the environment. This may happen after updating the code from GitHub, but before running the `poetry install` install command. - -```console -poetry install -E all -``` - -
- -
SSL certificates fail to authorize - -```console -SSL: CERTIFICATE_VERIFY_FAILED -``` - -An error message, similar to above, is usually encountered while attempting to use the OpenBB Platform from behind a firewall. A workplace environment is typically the most common occurrence. Try connecting to the internet directly through a home network to test the connection. If using a work computer and/or network, we recommend speaking with the company's IT department prior to installing or running any software. - -A potential solution is to try: - -```console -pip install pip-system-certs -``` - -
- -
Cannot connect due to proxy connection. - -Find the `.env` file (located at the root of the user account folder: (`~/.openbb_terminal/.env`), and add a line at the bottom of the file with: - -```console -HTTP_PROXY="
" or HTTPS_PROXY="
” -``` - -## General Operation - -
What is the correct format for entering dates to function variables? - -Dates should be entered as a string variable, inside of quotation marks, formatted as `%Y-%m-%d` - YYYY-MM-DD. - -
- -
Does the portfolio menu allow for dividends, interest, or other distributions? - -Currently, this is only possible by manually updating the portfolio file. - -
- -
Why does my Portfolio file fail to load? - -This can be the result of a formatting error, check the file in a simple text editor to observe any abnormalities in the formatting; or, it could be a bug - check the [GitHub issues page](https://github.com/OpenBB-finance/OpenBBTerminal/issues) for similar errors. - -- Check that all the necessary column titles are present. -- Inspect the file to see if cells left blank have been filled unintentionally with 0 or NaN values. -- A particular asset may not be able to load data. Check for valid historical data from the Stocks menu. -- Format ticker symbols according to yFinance naming convention. -- All dates must be entered as YYYY-MM-DD. -- Transactions dated for today will fail to load historical data. -- MacOS users should attempt to avoid using the Numbers application as it has a habit of changing the formatting while saving. - -Files can be formatted as either `.csv` or `.xlsx` files, and the required column headers are: - -`[Date,Type,Ticker,Side,Price,Quantity,Fees,Investment,Currency,Sector,Industry,Country,Region]` - -See the guide [here](https://docs.openbb.co/sdk/usage/intros/portfolio) for more information. - -
- -
How do I change the chart styles? - -Place style sheets in this folder: `OpenBBUserData/styles/user` - -To select the light themes: - -```python -from openbb_terminal.sdk import TerminalStyle -theme = TerminalStyle("light", "light", "light") -``` - -To select the dark themes: - -```python -from openbb_terminal.sdk import TerminalStyle -theme = TerminalStyle("dark", "dark", "dark") -``` - -
- -
Where are the included stock screener presets located? - -The files are located in the folder with the code, under: - -`~/openbb_terminal/miscellaneous/stocks/screener` - -Alternatively, the source code on GitHub is [here](https://github.com/OpenBB-finance/OpenBBTerminal/tree/develop/openbb_terminal/miscellaneous/stocks/screener) - -
- -## Data and Sources - -Please note that OpenBB does not provide any data, it is an aggregator which provides users access to data from a variety of sources. OpenBB does not maintain or have any control over the raw data supplied. If there is a specific problem with the output from a data provider, please consider contacting them first. - -
Data from today is missing. - -By default, the load function requests end-of-day daily data and is not included until the EOD summary has been published. The current day's data is considered intraday and is loaded when the `interval` argument is present. - -```console -df = openbb.stocks.load(SPY, interval = 60) -``` - -
- -
Can I stream live prices and news feeds? - -It is not currently possible to stream live feeds with the OpenBB SDK. - -
- -
"Pair BTC/USDT not found in binance" - -US-based users are currently unable to access the Binance API. Please try loading the pair from a different source, for example: - -`load btc --source CCXT --exchange kraken` - -
- -## General Troubleshooting - -Both Windows and MacOS provide a "developer mode", and enabling it may help. - -**MacOS**: Go to the System Settings, and under the "Privacy and Security" tab, scroll to the bottom and select the option to "Allow applications downloaded from App Store and identified developers". Then, scroll up to click on, "Developer Tools", and add `Terminal.app` and `Visual Studio Code` (or the preferred code editor) to the list of applications allowed to run software locally that does not meet the system's security policy. - -**Windows**: Go to the Control Panel, and under the "Privacy & Security" tab, click on, "For developers". Under this menu, turn "Developer Mode" on. - -From the Windows Security menu, click on the Firewall & Network Protection tab, then click on "Allow an app through firewall". If the applications below are not allowed to communicate through Windows Defender Firewall, change the settings to allow. - -- BranchCache -- Hyper-V -- VcXsrv -- Windows Terminal - -
- -
Why does a specific menu or command not exist? - -It could be that you are running an outdated version in which the menu or command is not yet available. Please check the [installation guide](https://docs.openbb.co/terminal/quickstart/installation) to download the most recent release. - -Do note that it is also possible that the menu or command has been deprecated. If this is oversight, please reach out to us [here](https://openbb.co/support). - -
- -## Bugs, Support, and Feedback - -When an error is encountered, it is always a good idea to check the open issues on [GitHub](https://github.com/OpenBB-finance/OpenBBTerminal/issues). There may be a workaround solution for the specific problem until a patch is released. - -
How often are patches for bugs released? - -The installer versions are packaged approximately every two-weeks. Those working with a cloned GitHub version can checkout the Develop branch to get the latest fixes and releases before they are pushed to the main branch. - -```console -git checkout develop -``` - -
- -
How do I report a bug? - -First, search the open issues for another report. If one already exists, attach any relevant information and screenshots as a comment. If one does not exist, start one with this [link](https://github.com/OpenBB-finance/OpenBBTerminal/issues/new?assignees=&labels=type%3Abug&template=bug_report.md&title=%5BBug%5D) - -
- -
How can I get help with OpenBB Terminal? - -You can get help with OpenBB Terminal by joining our [Discord server](https://openbb.co/discord) or contact us in our support form [here](https://openbb.co/support). - -
- -
How can I give feedback about the OpenBB Terminal, or request specific functionality? - -Being an open source platform that wishes to tailor to the needs of any type of investor, we highly encourage anyone to share with us their experience and/or how we can further improve the OpenBB Terminal. This can be anything from a very small bug, a new feature, or the implementation of a highly advanced Machine Learning model. - -You are able to directly send us information about a bug or a question/suggestion from inside the terminal by using the `support` command which is available everywhere in the terminal. Here you can select which command you want to report a bug on, ask a question or make a suggestion. After entering `support`, when you press `ENTER` (⏎), you are taken to the Support form which is automatically filled with your input. You are only required to include the type (e.g. bug, suggestion or question) and message in the form, although this can also be set directly from inside the terminal (see `support -h`). - -Alternatively, you can contact us via the following routes: - -- If you notice that a feature is missing inside the terminal, please fill in the [Request a Feature](https://openbb.co/request-a-feature) form. -- If you wish to report a bug, have a question/suggestion or anything else, please fill in the [Support](https://openbb.co/support) form. -- If you wish to speak to us directly, please contact us on [Discord](https://openbb.co/discord). - -
- -## Developer Issues - -
Error: "git pull" fails because of a hot fix: cannot lock ref - -If the error message looks something like: - -```console -cannot lock ref: 'refs/remotes/origin/hotfix' exists; cannot create -``` - -Try: - -```console -git remote prune origin -git pull -``` - -
- -
What does it mean if it says wheel is missing? - -If you receive any notifications regarding `wheel` missing, this could be due to this dependency missing. - -`conda install -c conda-forge wheel` or `pip install wheel` - -
- -
Why do these .whl files not exist? - -If you get errors about .whl files not existing (usually on Windows) you have to reinitialize the following folder. -Just removing the 'artifacts' folder could also be enough: - -| Platform | Location | -| -------- | ------------------------------- | -| Linux | "~/.cache/pypoetry" | -| Mac | "~/Library/Caches/pypoetry" | -| Windows | "%localappdata%/pypoetry/cache" | - -When you try to add a package to Poetry it is possible that it causes a similar issue. Here you can remove the -'artifacts' folder again to reinitialize Poetry. - -If you run into trouble with Poetry, and the advice above did not help, your best bet is to try - -- `poetry update --lock` -- `conda deactivate` -> `conda activate obb`, then try again -- Track down the offensive package and purge it from your anaconda `` folder, then try again - -| Platform | Location | -| --------- | ------------------------------------------- | -| Linux/Mac | ~/anaconda3/envs, or , ~/opt/anaconda3/envs | -| Windows | %userprofile%/anaconda3/envs | - -- Completely nuke your conda environment folder and make a new environment from scratch - - - `conda deactivate` - - `conda env remove -n obb` - - `conda clean -a` - - Make a new environment and install dependencies again. -- Reboot your computer and try again -- Submit a ticket on GitHub - -
- -
What does the JSONDecodeError mean during poetry install? - -Sometimes poetry can throw a `JSONDecodeError` on random packages while running `poetry install`. This can be observed on macOS 10.14+ running python 3.8+. This is because of the use of an experimental installer that can be switched off to avoid the mentioned error. Run the code below as advised [here](https://github.com/python-poetry/poetry/issues/4210) and it should fix the installation process. - -```bash -poetry config experimental.new-installer false -``` - -_Commands that may help you in case of an error:_ - -- `python -m pip install --upgrade pip` -- `poetry update --lock` -- `poetry install` - -
- -
How do I deal with errors regarding CRLF? - -When trying to commit code changes, pylint will prevent you from doing so if your line break settings are set to -CRLF (default for Windows). -This is because the entire package uses LF (default for Linux/Mac), and it is therefore -important that you change this setting to LF _before_ you make any changes to the code. - -It is possible that CRLF automatically turns back on, you can correct this with: - -```bash -git config --global core.autocrlf false -``` - -In case you already made coding adjustments, you have to reset your cache, and the changes you made to the code with -the following: - -```bash -git rm --cached -r . -git reset --hard -``` - -
- -
Why can't I run OpenBB via the VS Code integrated terminal? - -This occurs when VS Code terminal python version/path is different from the terminal version. - -To fix it add this to vscode JSON settings ([ref](https://stackoverflow.com/questions/54582361/vscode-terminal-shows-incorrect-python-version-and-path-launching-terminal-from)): - -```bash - "terminal.integrated.inheritEnv": false, -``` - -
diff --git a/website/content/sdk/faqs/_category_.json b/website/content/sdk/faqs/_category_.json new file mode 100644 index 00000000000..6c26249e604 --- /dev/null +++ b/website/content/sdk/faqs/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "FAQs", + "position": 4 +} diff --git a/website/content/sdk/faqs/bugs_support_feedback.md b/website/content/sdk/faqs/bugs_support_feedback.md new file mode 100644 index 00000000000..3bd97273c82 --- /dev/null +++ b/website/content/sdk/faqs/bugs_support_feedback.md @@ -0,0 +1,61 @@ +--- +title: Bugs, Support, and Feedback +sidebar_position: 6 +description: TBD +keywords: + [ + installation, + installer, + install, + guide, + mac, + windows, + linux, + python, + github, + macos, + how to, + explanation, + openbb terminal, + ] +--- + +## Bugs, Support, and Feedback + +When an error is encountered, it is always a good idea to check the open issues on [GitHub](https://github.com/OpenBB-finance/OpenBBTerminal/issues). There may be a workaround solution for the specific problem until a patch is released. + +
How often are patches for bugs released? + +The installer versions are packaged approximately every two-weeks. Those working with a cloned GitHub version can checkout the Develop branch to get the latest fixes and releases before they are pushed to the main branch. + +```console +git checkout develop +``` + +
+ +
How do I report a bug? + +First, search the open issues for another report. If one already exists, attach any relevant information and screenshots as a comment. If one does not exist, start one with this [link](https://github.com/OpenBB-finance/OpenBBTerminal/issues/new?assignees=&labels=type%3Abug&template=bug_report.md&title=%5BBug%5D) + +
+ +
How can I get help with OpenBB Terminal? + +You can get help with OpenBB Terminal by joining our [Discord server](https://openbb.co/discord) or contact us in our support form [here](https://openbb.co/support). + +
+ +
How can I give feedback about the OpenBB Terminal, or request specific functionality? + +Being an open source platform that wishes to tailor to the needs of any type of investor, we highly encourage anyone to share with us their experience and/or how we can further improve the OpenBB Terminal. This can be anything from a very small bug, a new feature, or the implementation of a highly advanced Machine Learning model. + +You are able to directly send us information about a bug or a question/suggestion from inside the terminal by using the `support` command which is available everywhere in the terminal. Here you can select which command you want to report a bug on, ask a question or make a suggestion. After entering `support`, when you press `ENTER` (⏎), you are taken to the Support form which is automatically filled with your input. You are only required to include the type (e.g. bug, suggestion or question) and message in the form, although this can also be set directly from inside the terminal (see `support -h`). + +Alternatively, you can contact us via the following routes: + +- If you notice that a feature is missing inside the terminal, please fill in the [Request a Feature](https://openbb.co/request-a-feature) form. +- If you wish to report a bug, have a question/suggestion or anything else, please fill in the [Support](https://openbb.co/support) form. +- If you wish to speak to us directly, please contact us on [Discord](https://openbb.co/discord). + +
diff --git a/website/content/sdk/faqs/data_sources.md b/website/content/sdk/faqs/data_sources.md new file mode 100644 index 00000000000..979b3c3027c --- /dev/null +++ b/website/content/sdk/faqs/data_sources.md @@ -0,0 +1,49 @@ +--- +title: Data and Sources +sidebar_position: 4 +description: TBD +keywords: + [ + installation, + installer, + install, + guide, + mac, + windows, + linux, + python, + github, + macos, + how to, + explanation, + openbb terminal, + ] +--- + +## Data and Sources + +Please note that OpenBB does not provide any data, it is an aggregator which provides users access to data from a variety of sources. OpenBB does not maintain or have any control over the raw data supplied. If there is a specific problem with the output from a data provider, please consider contacting them first. + +
Data from today is missing. + +By default, the load function requests end-of-day daily data and is not included until the EOD summary has been published. The current day's data is considered intraday and is loaded when the `interval` argument is present. + +```console +df = openbb.stocks.load(SPY, interval = 60) +``` + +
+ +
Can I stream live prices and news feeds? + +It is not currently possible to stream live feeds with the OpenBB SDK. + +
+ +
"Pair BTC/USDT not found in binance" + +US-based users are currently unable to access the Binance API. Please try loading the pair from a different source, for example: + +`load btc --source CCXT --exchange kraken` + +
diff --git a/website/content/sdk/faqs/developer_issues.md b/website/content/sdk/faqs/developer_issues.md new file mode 100644 index 00000000000..3eff67d5f20 --- /dev/null +++ b/website/content/sdk/faqs/developer_issues.md @@ -0,0 +1,135 @@ +--- +title: Developer Issues +sidebar_position: 7 +description: TBD +keywords: + [ + installation, + installer, + install, + guide, + mac, + windows, + linux, + python, + github, + macos, + how to, + explanation, + openbb terminal, + ] +--- + +## Developer Issues + +
Error: "git pull" fails because of a hot fix: cannot lock ref + +If the error message looks something like: + +```console +cannot lock ref: 'refs/remotes/origin/hotfix' exists; cannot create +``` + +Try: + +```console +git remote prune origin +git pull +``` + +
+ +
What does it mean if it says wheel is missing? + +If you receive any notifications regarding `wheel` missing, this could be due to this dependency missing. + +`conda install -c conda-forge wheel` or `pip install wheel` + +
+ +
Why do these .whl files not exist? + +If you get errors about .whl files not existing (usually on Windows) you have to reinitialize the following folder. +Just removing the 'artifacts' folder could also be enough: + +| Platform | Location | +| -------- | ------------------------------- | +| Linux | "~/.cache/pypoetry" | +| Mac | "~/Library/Caches/pypoetry" | +| Windows | "%localappdata%/pypoetry/cache" | + +When you try to add a package to Poetry it is possible that it causes a similar issue. Here you can remove the +'artifacts' folder again to reinitialize Poetry. + +If you run into trouble with Poetry, and the advice above did not help, your best bet is to try + +- `poetry update --lock` +- `conda deactivate` -> `conda activate obb`, then try again +- Track down the offensive package and purge it from your anaconda `` folder, then try again + +| Platform | Location | +| --------- | ------------------------------------------- | +| Linux/Mac | ~/anaconda3/envs, or , ~/opt/anaconda3/envs | +| Windows | %userprofile%/anaconda3/envs | + +- Completely nuke your conda environment folder and make a new environment from scratch + + - `conda deactivate` + - `conda env remove -n obb` + - `conda clean -a` + - Make a new environment and install dependencies again. +- Reboot your computer and try again +- Submit a ticket on GitHub + +
+ +
What does the JSONDecodeError mean during poetry install? + +Sometimes poetry can throw a `JSONDecodeError` on random packages while running `poetry install`. This can be observed on macOS 10.14+ running python 3.8+. This is because of the use of an experimental installer that can be switched off to avoid the mentioned error. Run the code below as advised [here](https://github.com/python-poetry/poetry/issues/4210) and it should fix the installation process. + +```bash +poetry config experimental.new-installer false +``` + +_Commands that may help you in case of an error:_ + +- `python -m pip install --upgrade pip` +- `poetry update --lock` +- `poetry install` + +
+ +
How do I deal with errors regarding CRLF? + +When trying to commit code changes, pylint will prevent you from doing so if your line break settings are set to +CRLF (default for Windows). +This is because the entire package uses LF (default for Linux/Mac), and it is therefore +important that you change this setting to LF _before_ you make any changes to the code. + +It is possible that CRLF automatically turns back on, you can correct this with: + +```bash +git config --global core.autocrlf false +``` + +In case you already made coding adjustments, you have to reset your cache, and the changes you made to the code with +the following: + +```bash +git rm --cached -r . +git reset --hard +``` + +
+ +
Why can't I run OpenBB via the VS Code integrated terminal? + +This occurs when VS Code terminal python version/path is different from the terminal version. + +To fix it add this to vscode JSON settings ([ref](https://stackoverflow.com/questions/54582361/vscode-terminal-shows-incorrect-python-version-and-path-launching-terminal-from)): + +```bash + "terminal.integrated.inheritEnv": false, +``` + +
diff --git a/website/content/sdk/faqs/general_operation.md b/website/content/sdk/faqs/general_operation.md new file mode 100644 index 00000000000..6a04879ef82 --- /dev/null +++ b/website/content/sdk/faqs/general_operation.md @@ -0,0 +1,85 @@ +--- +title: General operation +sidebar_position: 3 +description: TBD +keywords: + [ + installation, + installer, + install, + guide, + mac, + windows, + linux, + python, + github, + macos, + how to, + explanation, + openbb terminal, + ] +--- + +## General Operation + +
What is the correct format for entering dates to function variables? + +Dates should be entered as a string variable, inside of quotation marks, formatted as `%Y-%m-%d` - YYYY-MM-DD. + +
+ +
Does the portfolio menu allow for dividends, interest, or other distributions? + +Currently, this is only possible by manually updating the portfolio file. + +
+ +
Why does my Portfolio file fail to load? + +This can be the result of a formatting error, check the file in a simple text editor to observe any abnormalities in the formatting; or, it could be a bug - check the [GitHub issues page](https://github.com/OpenBB-finance/OpenBBTerminal/issues) for similar errors. + +- Check that all the necessary column titles are present. +- Inspect the file to see if cells left blank have been filled unintentionally with 0 or NaN values. +- A particular asset may not be able to load data. Check for valid historical data from the Stocks menu. +- Format ticker symbols according to yFinance naming convention. +- All dates must be entered as YYYY-MM-DD. +- Transactions dated for today will fail to load historical data. +- MacOS users should attempt to avoid using the Numbers application as it has a habit of changing the formatting while saving. + +Files can be formatted as either `.csv` or `.xlsx` files, and the required column headers are: + +`[Date,Type,Ticker,Side,Price,Quantity,Fees,Investment,Currency,Sector,Industry,Country,Region]` + +See the guide [here](https://docs.openbb.co/sdk/guides/intros/portfolio) for more information. + +
+ +
How do I change the chart styles? + +Place style sheets in this folder: `OpenBBUserData/styles/user` + +To select the light themes: + +```python +from openbb_terminal.sdk import TerminalStyle +theme = TerminalStyle("light", "light", "light") +``` + +To select the dark themes: + +```python +from openbb_terminal.sdk import TerminalStyle +theme = TerminalStyle("dark", "dark", "dark") +``` + +
+ +
Where are the included stock screener presets located? + +The files are located in the folder with the code, under: + +`~/openbb_terminal/miscellaneous/stocks/screener` + +Alternatively, the source code on GitHub is [here](https://github.com/OpenBB-finance/OpenBBTerminal/tree/develop/openbb_terminal/miscellaneous/stocks/screener) + +
diff --git a/website/content/sdk/faqs/import_errors.md b/website/content/sdk/faqs/import_errors.md new file mode 100644 index 00000000000..72e275725f6 --- /dev/null +++ b/website/content/sdk/faqs/import_errors.md @@ -0,0 +1,84 @@ +--- +title: Import Errors +sidebar_position: 2 +description: TBD +keywords: + [ + installation, + installer, + install, + guide, + mac, + windows, + linux, + python, + github, + macos, + how to, + explanation, + openbb terminal, + ] +--- + +## Import Errors + +
ModuleNotFoundError: No module named '______' + +Before troubleshooting please verify that the recommended installation instructions were followed. These errors often can occur when the virtual environment has not been activated, or the `poetry install` command was skipped. Activate the OpenBB virtual environment created during the installation process prior to launching or importing the SDK. + +**Terminal**: + +```console +conda activate obb +python terminal.py +``` + +**SDK**: + +```console +conda activate obb +ipython +from openbb_terminal.sdk import openbb +``` + +**Jupyter**: + +Check that the kernel selected for the session is the OpenBB virtual environment created during the installation process and then re-run the cell. + +```console +from openbb_terminal.sdk import openbb +``` + +There is also a possibility that a new dependency has been added to the code and it has not yet been installed in the environment. This may happen after updating the code from GitHub, but before running the `poetry install` install command. + +```console +poetry install -E all +``` + +
+ +
SSL certificates fail to authorize + +```console +SSL: CERTIFICATE_VERIFY_FAILED +``` + +An error message, similar to above, is usually encountered while attempting to use the OpenBB Platform from behind a firewall. A workplace environment is typically the most common occurrence. Try connecting to the internet directly through a home network to test the connection. If using a work computer and/or network, we recommend speaking with the company's IT department prior to installing or running any software. + +A potential solution is to try: + +```console +pip install pip-system-certs +``` + +
+ +
Cannot connect due to proxy connection. + +Find the `.env` file (located at the root of the user account folder: (`~/.openbb_terminal/.env`), and add a line at the bottom of the file with: + +```console +HTTP_PROXY="
" or HTTPS_PROXY="
” +``` + +
diff --git a/website/content/sdk/faqs/installation_updates.md b/website/content/sdk/faqs/installation_updates.md new file mode 100644 index 00000000000..d79d9320b16 --- /dev/null +++ b/website/content/sdk/faqs/installation_updates.md @@ -0,0 +1,95 @@ +--- +title: Installation and Updates +sidebar_position: 1 +description: TBD +keywords: + [ + installation, + installer, + install, + guide, + mac, + windows, + linux, + python, + github, + macos, + how to, + explanation, + openbb terminal, + ] +--- + +## Installation and Updates + +
Do I have to use Miniconda? + +There are certain dependencies which are sourced exclusively from the `conda-forge` directory. Other virtual environment managers, such a `venv`, may not solve the environment properly, resulting in failed package installations or incorrect builds. We highly recommend using Miniconda as the Python virtual environment manager for installing the OpenBB SDK. + +
+ +
How do I update my installation to the latest version? + +The code is constantly being updated with new features and bug fixes. The process for updating will vary by the installation type: + +- For a `pip` installation, when a new version is published: `pip install -U openbb[all]` +- Upgrade a cloned version of the GitHub repo with: + +```console +git fetch +git pull +poetry install -E all +``` + +**Notes:** If the cloned repository is a fork, pull from: `git pull origin main`, or, `git pull origin develop`. If there are changes locally to the files that conflict with the incoming changes from GitHub, stash them before pulling from main with `git stash`. + +
+ +### PyPi Nightly + +The nightly build can be installed with: + +```console +pip install openbb-nightly[all] +``` + +**Note**: This version may not be stable and should not be used in a production setting. + +
"Microsoft Visual C++ 14.0 or greater is required" + +Download and install [C++ Build Tools](https://visualstudio.microsoft.com/visual-cpp-build-tools/), restart the machine, then try again. + +
+ +
Error: failed building wheel for bt + +There may be an additional message that is printed from this error, stating: "Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools". + +Download and install it. [https://visualstudio.microsoft.com/visual-cpp-build-tools/](https://visualstudio.microsoft.com/visual-cpp-build-tools/) + +Mac and Linux users may also encounter a similar error because a C++ compiler is not installed. Install Homebrew: + +```console +/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" +``` + +Then run: + +```console +brew install gcc +brew install cmake +``` + +Additionally, Mac users should install Rosetta: + +```console +softwareupdate --install-rosetta +``` + +
+ +
Miniconda3 will not install on ARM/Linux Raspberry Pi machines. + +Refer to this issue on the Conda [GitHub](https://github.com/conda/conda/issues/10723) page. + +
diff --git a/website/content/sdk/faqs/troubleshooting.md b/website/content/sdk/faqs/troubleshooting.md new file mode 100644 index 00000000000..51566d915eb --- /dev/null +++ b/website/content/sdk/faqs/troubleshooting.md @@ -0,0 +1,44 @@ +--- +title: General Troubleshooting +sidebar_position: 5 +description: TBD +keywords: + [ + installation, + installer, + install, + guide, + mac, + windows, + linux, + python, + github, + macos, + how to, + explanation, + openbb terminal, + ] +--- + +## General Troubleshooting + +Both Windows and MacOS provide a "developer mode", and enabling it may help. + +**MacOS**: Go to the System Settings, and under the "Privacy and Security" tab, scroll to the bottom and select the option to "Allow applications downloaded from App Store and identified developers". Then, scroll up to click on, "Developer Tools", and add `Terminal.app` and `Visual Studio Code` (or the preferred code editor) to the list of applications allowed to run software locally that does not meet the system's security policy. + +**Windows**: Go to the Control Panel, and under the "Privacy & Security" tab, click on, "For developers". Under this menu, turn "Developer Mode" on. + +From the Windows Security menu, click on the Firewall & Network Protection tab, then click on "Allow an app through firewall". If the applications below are not allowed to communicate through Windows Defender Firewall, change the settings to allow. + +- BranchCache +- Hyper-V +- VcXsrv +- Windows Terminal + +
Why does a specific menu or command not exist? + +It could be that you are running an outdated version in which the menu or command is not yet available. Please check the [installation guide](https://docs.openbb.co/terminal/quickstart/installation) to download the most recent release. + +Do note that it is also possible that the menu or command has been deprecated. If this is oversight, please reach out to us [here](https://openbb.co/support). + +
diff --git a/website/content/sdk/index.md b/website/content/sdk/index.md index cd5f2a19030..1604c675c36 100644 --- a/website/content/sdk/index.md +++ b/website/content/sdk/index.md @@ -1,12 +1,27 @@ --- sidebar_position: 1 -keywords: [getting started, openbb, api, beginner guide, how to use openbb, openbb keys, openbb terminal, introduction, intro, how-to, how to, openbb, sdk] +keywords: + [ + getting started, + openbb, + api, + beginner guide, + how to use openbb, + openbb keys, + openbb terminal, + introduction, + intro, + how-to, + how to, + openbb, + sdk, + ] description: The OpenBB Documentation provides guidance on how to use the OpenBB SDK, a free, custom built financial SDK that will help you make more informed decisions, faster. --- import Card from "@site/src/components/General/Card"; -# Introduction +# OpenBB SDK OpenBB SDK gives you direct and programmatic access to all capabilities from OpenBB Terminal. You will have the necessary building blocks to create your own financial tools and applications, whether that be a visualization dashboard or a custom report on Jupyter Notebook. diff --git a/website/content/sdk/installation.md b/website/content/sdk/installation.md index 4dfccc4bd13..41e1c6985ea 100644 --- a/website/content/sdk/installation.md +++ b/website/content/sdk/installation.md @@ -1,6 +1,6 @@ --- title: Installation -sidebar_position: 2 +sidebar_position: 1 description: The OpenBB SDK provides programmatic access to all Terminal functions. This layer of code allows users to build their own tools and applications on top of the existing architecture. Follow these steps to install on a local machine. keywords: [installation, installer, install, guide, mac, windows, linux, python, github, macos, how to, explanation, openbb, sdk, api, pip, pypi,] --- @@ -8,7 +8,7 @@ The OpenBB SDK provides programmatic access to all Terminal functions. This laye
Minimum Requirements -- Windows 10, +- Windows 10, - Modern CPU (made in the last 5 years) - At least 4GB of RAM - At least 5GB of free storage diff --git a/website/content/sdk/reference/_category_.json b/website/content/sdk/reference/_category_.json index 648a3250e1d..0726e4660a1 100644 --- a/website/content/sdk/reference/_category_.json +++ b/website/content/sdk/reference/_category_.json @@ -1,4 +1,4 @@ { "label": "Reference", - "position": 4 -} \ No newline at end of file + "position": 3 +} diff --git a/website/content/sdk/showcase.md b/website/content/sdk/showcase.md index 711fa3b1dd4..4160745faca 100644 --- a/website/content/sdk/showcase.md +++ b/website/content/sdk/showcase.md @@ -1,5 +1,5 @@ --- -sidebar_position: 5 +sidebar_position: 6 --- import ShowcaseItem from "@site/src/components/General/ShowcaseItem" @@ -49,5 +49,3 @@ Your browser does not support the video tag. :::tip Find more open source projects on GitHub [here](https://github.com/search?q=topic:openbb&type=Repositories&l=&l=) - - diff --git a/website/content/sdk/usage/_category_.json b/website/content/sdk/usage/_category_.json index da53c8adaaa..82e09efaafd 100644 --- a/website/content/sdk/usage/_category_.json +++ b/website/content/sdk/usage/_category_.json @@ -1,4 +1,4 @@ { - "label": "Using OpenBB SDK", - "position": 3 -} \ No newline at end of file + "label": "Guides", + "position": 2 +} diff --git a/website/content/terminal/_category_.json b/website/content/terminal/_category_.json new file mode 100644 index 00000000000..8f1c5ce1d49 --- /dev/null +++ b/website/content/terminal/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "OpenBB Terminal", + "position": 1 +} diff --git a/website/content/terminal/changelog/_category_.json b/website/content/terminal/changelog/_category_.json new file mode 100644 index 00000000000..dd4aac394c8 --- /dev/null +++ b/website/content/terminal/changelog/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Changelog", + "position": 5 +} diff --git a/website/content/terminal/changelog/version1_0_0.mdx b/website/content/terminal/changelog/version1_0_0.mdx new file mode 100644 index 00000000000..23a3448455b --- /dev/null +++ b/website/content/terminal/changelog/version1_0_0.mdx @@ -0,0 +1,21 @@ +--- +title: Version 1.0.0 +version: "1.0.0" +date: 2022-08-03 +description: Version 1.0.0 +--- + +## Added + +- bullet 1 +- bullet 2 + +## Changed + +- bullet 1 +- bullet 2 + +## Fixed + +- bullet 1 +- bullet 2 diff --git a/website/content/terminal/changelog/version2_0_0.mdx b/website/content/terminal/changelog/version2_0_0.mdx new file mode 100644 index 00000000000..7e95cb4e5f9 --- /dev/null +++ b/website/content/terminal/changelog/version2_0_0.mdx @@ -0,0 +1,22 @@ +--- +title: Current - Version 2.0.0 +version: "2.0.0" +date: 2022-10-26 +description: Version 2.0.0 +sidebar_position: 0 +--- + +## Added + +- bullet 1 +- bullet 2 + +## Changed + +- bullet 1 +- bullet 2 + +## Fixed + +- bullet 1 +- bullet 2 diff --git a/website/content/terminal/faq.md b/website/content/terminal/faq.md deleted file mode 100644 index fdf0b841355..00000000000 --- a/website/content/terminal/faq.md +++ /dev/null @@ -1,450 +0,0 @@ ---- -title: FAQ -sidebar_position: 5 -keywords: [faq, questions, openbb, terminal, troubleshooting, errors, bugs, issues, problems, installation, contributors, developers, github, pip] ---- -Still experiencing trouble after consulting this page? Reach us on [Discord](https://openbb.co/discord) or visit our [contact page](https://openbb.co/contact). - -## Installation and Updates - -
How much hard drive space is required? - -An installation will use approximately 4GB of space. - -
- -
What is the minimum version of Windows or MacOS required to install the OpenBB Terminal? - -The OpenBB Terminal installation packages are compatible with: - -- Windows 10 or later. -- MacOS Monterey or later. - -**Note:** Machines which are not compatible with the installer packages may be able to install from the source code. - -
- -
How do I update my installation to the latest version? - -The terminal is constantly being updated with new features and bug fixes. The process for updating will vary by the installation type: - -- As of version 2.4.1, the Windows installer has an option for uninstalling the existing prior to updating. -- For other installer versions, uninstall the previous version (uninstall.exe for Windows, delete the Application folder on MacOS); then, download the latest version and reinstall. User settings and data will remain. -- For a `pip` installation, when a new version is published: `pip install -U openbb[all]` -- Upgrade a cloned version of the GitHub repo with: - -```console -git fetch -git pull -poetry install -E all -``` - -**Notes:** If the cloned repository is a fork, pull from: `git pull origin main` or `git pull origin develop`. If there are changes locally to the files that conflict with the incoming changes from GitHub, stash them before pulling from main with `git stash`. - -
- -
"Microsoft Visual C++ 14.0 or greater is required" - -Download and install [C++ Build Tools](https://visualstudio.microsoft.com/visual-cpp-build-tools/), restart the machine, then try again. - -
- -
Error: failed building wheel for bt - -There may be an additional message that is printed from this error, stating: "Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools". - -Download and install it. [https://visualstudio.microsoft.com/visual-cpp-build-tools/](https://visualstudio.microsoft.com/visual-cpp-build-tools/) - -Mac and Linux users may also encounter a similar error because a C++ compiler is not installed. Install Homebrew: - -```console -/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" -``` - -Then run: - -```console -brew install gcc -brew install cmake -``` - -
- -
Miniconda3 will not install on ARM/Linux Raspberry Pi machines. - -Refer to this issue on the Conda [GitHub](https://github.com/conda/conda/issues/10723) page. - -
- -## Launching - -
Mac: Invalid CPU Type - Terminal fails to launch. - -This error is usually the result of a Mac M1/M2 machine which does not have Rosetta installed. Install from the system Terminal command line: - -```console -softwareupdate --install-rosetta -``` - -
- -
Terminal app does not launch: Failed to execute script 'terminal' due to unhandled exception! - -When an installer-packaged version of the OpenBB Terminal fails to launch, because of this message, the machine may have an obsolete CPU-type or operating system. Please try installing via the source code, and if problems persist, reach out to us on [Discord](https://discord.gg/xPHTuHCmuV) or fill out a support request form on our [website](https://openbb.co/support). - -
- -
ModuleNotFoundError: No module named '______' - -Before troubleshooting please verify that the recommended installation instructions were followed. These errors often can occur when the virtual environment has not been activated, or the `poetry install` command was skipped. Activate the OpenBB virtual environment created during the installation process prior to launching or importing the SDK. - -**Terminal**: - -```console -conda activate obb -python terminal.py -``` - -**SDK**: - -```console -conda activate obb -ipython -from openbb_terminal.sdk import openbb -``` - -**Jupyter**: - -Check that the kernel selected for the session is the OpenBB virtual environment created during the installation process and then re-run the cell. - -```console -from openbb_terminal.sdk import openbb -``` - -There is also a possibility that a new dependency has been added to the code and it has not yet been installed in the environment. This may happen after updating the code from GitHub, but before running the `poetry install` install command. - -```console -poetry install -E all -``` - -
- -
Fontconfig warning: ignoring UTF-8: not a valid region tag - -In the OS default terminal shell profile, check for a variable similar to, “set locale environment variables at startup”, then also, set text encoding to UTF-8. - -
- -
SSL certificates fail to authorize - -```console -SSL: CERTIFICATE_VERIFY_FAILED -``` - -An error message, similar to above, is usually encountered while attempting to use the OpenBB Platform from behind a firewall. A workplace environment is typically the most common occurrence. Try connecting to the internet directly through a home network to test the connection. If using a work computer and/or network, we recommend speaking with the company's IT department prior to installing or running any software. - -A potential solution is to try: - -```console -pip install pip-system-certs -``` - -
- -
Cannot connect due to proxy connection. - -Find the `.env` file (located at the root of the user account folder: (`~/.openbb_terminal/.env`), and add a line at the bottom of the file with: - -```console -HTTP_PROXY="
" or HTTPS_PROXY="
” -``` - -
- -
Linux Ubuntu installation was successful but now hangs on launch. - -Check that VcXsvr - or an equivalent X-host - is running and configured prior to launch. - -
- -## General Operation - -
Charts do not display on Linux/WSL or Docker installation. - -Check that X-11, or similar, is installed, open, and configured. Follow the instructions pertaining to the system here: [https://docs.openbb.co/terminal/quickstart/installation#3-configuring-your-x-server-to-show-plots](https://docs.openbb.co/terminal/quickstart/installation#3-configuring-your-x-server-to-show-plots) - -
- -
How do I retrieve more results than is returned by default? - -Most functions will have either, `--start` and `--end` flags, or a `--limit` argument. Print the help dialogue for any command by attaching, `--help` or `-h`. - -
- -
Does the portfolio menu allow for dividends, interest, or other distributions? - -Currently, this is only possible by manually updating the portfolio file. - -
- -
Why does my Portfolio file fail to load? - -This can be the result of a formatting error, check the file in a simple text editor to observe any abnormalities in the formatting; or, it could be a bug - check the [GitHub issues page](https://github.com/OpenBB-finance/OpenBBTerminal/issues) for similar errors. - -- Check that all the necessary column titles are present. -- Inspect the file to see if cells left blank have been filled unintentionally with 0 or NaN values. -- A particular asset may not be able to load data. Check for valid historical data from the Stocks menu. -- Format ticker symbols according to yFinance naming convention. -- All dates must be entered as YYYY-MM-DD. -- Transactions dated for today will fail to load historical data. -- MacOS users should attempt to avoid using the Numbers application as it has a habit of changing the formatting while saving. - -Files can be formatted as either `.csv` or `.xlsx` files, and the required column headers are: - -`[Date,Type,Ticker,Side,Price,Quantity,Fees,Investment,Currency,Sector,Industry,Country,Region]` - -See the guide [here](https://docs.openbb.co/sdk/usage/intros/portfolio) for more information. - -
- -
How do I change the chart styles? - -Place style sheets in this folder: `OpenBBUserData/styles/user` - -SDK users can refer to the documentation [here](https://docs.openbb.co/sdk/usage/guides/chart-styling) for syntax. A sample Matplotlib configuration file can be copied from [here](https://matplotlib.org/stable/tutorials/introductory/customizing.html#the-default-matplotlibrc-file). - -
- -
Can I change the colors of the text in the Terminal? - -Yes, follow the directions on this page: [https://openbb.co/products/terminal?customizeMenu=true#terminal](https://openbb.co/products/terminal?customizeMenu=true#terminal) - -
- -
After setting the preset in the stocks screener, nothing happens. - -Print the current screen again with by entering, `?`. Does the name of the selected preset display? With a preset loaded, run the screener by entering one of the commands below: - -- Financial -- Ownership -- Overview -- Performance -- Technical -- Valuation - -
- -
Forecast functions say to enter a valid data set - -Because an unlimited number of data sets can be loaded into the Forecast menu, each function requires defining the specific data set to be used. Add the `-d` or `--dataset` argument to the command, along with the name of the desired data set. - -```console -rnn -d SPY -``` - -
- -## Data and Sources - -Please note that OpenBB does not provide any data, it is an aggregator which provides users access to data from a variety of sources. OpenBB does not maintain or have any control over the raw data supplied. If there is a specific problem with the output from a data provider, please consider contacting them first. - -
Data from today is missing. - -By default, the load function requests end-of-day daily data and is not included until the EOD summary has been published. The current day's data is considered intraday and is loaded when the `interval` argument is present. - -```console -load SPY -i 60 -``` - -
- -
Can I stream live prices and news feeds? - -The OpenBB Terminal is not currently capable of streaming live feeds through websocket connections. - -
- -
"Pair BTC/USDT not found in binance" - -US-based users are currently unable to access the Binance API. Please try loading the pair from a different source, for example: - -`load btc --source CCXT --exchange kraken` - -
- -## General Troubleshooting - -Both Windows and MacOS provide a "developer mode", and enabling it may help. - -**MacOS**: Go to the System Settings, and under the "Privacy and Security" tab, scroll to the bottom and select the option to "Allow applications downloaded from App Store and identified developers". Then, scroll up to click on, "Developer Tools", and add `Terminal.app` and `Visual Studio Code` (or the preferred code editor) to the list of applications allowed to run software locally that does not meet the system's security policy. - -**Windows**: Go to the Control Panel, and under the "Privacy & Security" tab, click on, "For developers". Under this menu, turn "Developer Mode" on. - -From the Windows Security menu, click on the Firewall & Network Protection tab, then click on "Allow an app through firewall". If the applications below are not allowed to communicate through Windows Defender Firewall, change the settings to allow. - -- BranchCache -- Hyper-V -- VcXsrv -- Windows Terminal - -
Why does a specific menu or command not exist? - -It could be that you are running an outdated version in which the menu or command is not yet available. Please check the [installation guide](https://docs.openbb.co/terminal/quickstart/installation) to download the most recent release. - -Do note that it is also possible that the menu or command has been deprecated. If this is oversight, please reach out to us [here](https://openbb.co/support). - -
- -## Bugs, Support, and Feedback - -When an error is encountered, it is always a good idea to check the open issues on [GitHub](https://github.com/OpenBB-finance/OpenBBTerminal/issues). There may be a workaround solution for the specific problem until a patch is released. - -
How often are patches for bugs released? - -The installer versions are packaged approximately every two-weeks. Those working with a cloned GitHub version can checkout the Develop branch to get the latest fixes and releases before they are pushed to the main branch. - -```console -git checkout develop -``` - -
- -
How do I report a bug? - -First, search the open issues for another report. If one already exists, attach any relevant information and screenshots as a comment. If one does not exist, start one with this [link](https://github.com/OpenBB-finance/OpenBBTerminal/issues/new?assignees=&labels=type%3Abug&template=bug_report.md&title=%5BBug%5D) - -
- -
How can I get help with OpenBB Terminal? - -You can get help with OpenBB Terminal by joining our [Discord server](https://openbb.co/discord) or contact us in our support form [here](https://openbb.co/support). - -
- -
How can I give feedback about the OpenBB Terminal, or request specific functionality? - -Being an open source platform that wishes to tailor to the needs of any type of investor, we highly encourage anyone to share with us their experience and/or how we can further improve the OpenBB Terminal. This can be anything from a very small bug, a new feature, or the implementation of a highly advanced Machine Learning model. - -You are able to directly send us information about a bug or a question/suggestion from inside the terminal by using the `support` command which is available everywhere in the terminal. Here you can select which command you want to report a bug on, ask a question or make a suggestion. After entering `support`, when you press `ENTER` (⏎), you are taken to the Support form which is automatically filled with your input. You are only required to include the type (e.g. bug, suggestion or question) and message in the form, although this can also be set directly from inside the terminal (see `support -h`). - -Alternatively, you can contact us via the following routes: - -- If you notice that a feature is missing inside the terminal, please fill in the [Request a Feature](https://openbb.co/request-a-feature) form. -- If you wish to report a bug, have a question/suggestion or anything else, please fill in the [Support](https://openbb.co/support) form. -- If you wish to speak to us directly, please contact us on [Discord](https://openbb.co/discord). - -
- -## Developer Issues - -
Error: "git pull" fails because of a hot fix: cannot lock ref - -If the error message looks something like: - -```console -cannot lock ref: 'refs/remotes/origin/hotfix' exists; cannot create -``` - -Try: - -```console -git remote prune origin -git pull -``` - -
- -
What does it mean if it says wheel is missing? - -If you receive any notifications regarding `wheel` missing, this could be due to this dependency missing. - -`conda install -c conda-forge wheel` or `pip install wheel` - -
- -
Why do these .whl files not exist? - -If you get errors about .whl files not existing (usually on Windows) you have to reinitialize the following folder. -Just removing the 'artifacts' folder could also be enough: - -| Platform | Location | -| -------- | ------------------------------- | -| Linux | "~/.cache/pypoetry" | -| Mac | "~/Library/Caches/pypoetry" | -| Windows | "%localappdata%/pypoetry/cache" | - -When you try to add a package to Poetry it is possible that it causes a similar issue. Here you can remove the -'artifacts' folder again to reinitialize Poetry. - -If you run into trouble with Poetry, and the advice above did not help, your best bet is to try - -- `poetry update --lock` -- `conda deactivate` -> `conda activate obb`, then try again -- Track down the offensive package and purge it from your anaconda `` folder, then try again - -| Platform | Location | -| --------- | ------------------------------------------- | -| Linux/Mac | ~/anaconda3/envs, or , ~/opt/anaconda3/envs | -| Windows | %userprofile%/anaconda3/envs | - -- Completely nuke your conda environment folder and make a new environment from scratch - - - `conda deactivate` - - `conda env remove -n obb` - - `conda clean -a` - - Make a new environment and install dependencies again. -- Reboot your computer and try again -- Submit a ticket on GitHub - -
- -
What does the JSONDecodeError mean during poetry install? - -Sometimes poetry can throw a `JSONDecodeError` on random packages while running `poetry install`. This can be observed on macOS 10.14+ running python 3.8+. This is because of the use of an experimental installer that can be switched off to avoid the mentioned error. Run the code below as advised [here](https://github.com/python-poetry/poetry/issues/4210) and it should fix the installation process. - -```bash -poetry config experimental.new-installer false -``` - -_Commands that may help you in case of an error:_ - -- `python -m pip install --upgrade pip` -- `poetry update --lock` -- `poetry install` - -
- -
How do I deal with errors regarding CRLF? - -When trying to commit code changes, pylint will prevent you from doing so if your line break settings are set to -CRLF (default for Windows). -This is because the entire package uses LF (default for Linux/Mac), and it is therefore -important that you change this setting to LF _before_ you make any changes to the code. - -It is possible that CRLF automatically turns back on, you can correct this with: - -```bash -git config --global core.autocrlf false -``` - -In case you already made coding adjustments, you have to reset your cache, and the changes you made to the code with -the following: - -```bash -git rm --cached -r . -git reset --hard -``` - -
- -
Why can't I run OpenBB via the VS Code integrated terminal? - -This occurs when VS Code terminal python version/path is different from the terminal version. - -To fix it add this to vscode JSON settings ([ref](https://stackoverflow.com/questions/54582361/vscode-terminal-shows-incorrect-python-version-and-path-launching-terminal-from)): - -```bash - "terminal.integrated.inheritEnv": false, -``` - -
diff --git a/website/content/terminal/faqs/_category_.json b/website/content/terminal/faqs/_category_.json new file mode 100644 index 00000000000..6c26249e604 --- /dev/null +++ b/website/content/terminal/faqs/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "FAQs", + "position": 4 +} diff --git a/website/content/terminal/faqs/bugs_support_feedback.md b/website/content/terminal/faqs/bugs_support_feedback.md new file mode 100644 index 00000000000..694340d781d --- /dev/null +++ b/website/content/terminal/faqs/bugs_support_feedback.md @@ -0,0 +1,59 @@ +--- +title: Bugs, Support and Feedback +sidebar_position: 5 +description: TBD +keywords: + [ + installation, + installer, + install, + guide, + mac, + windows, + linux, + python, + github, + macos, + how to, + explanation, + openbb terminal, + ] +--- + +When an error is encountered, it is always a good idea to check the open issues on [GitHub](https://github.com/OpenBB-finance/OpenBBTerminal/issues). There may be a workaround solution for the specific problem until a patch is released. + +
How often are patches for bugs released? + +The installer versions are packaged approximately every two-weeks. Those working with a cloned GitHub version can checkout the Develop branch to get the latest fixes and releases before they are pushed to the main branch. + +```console +git checkout develop +``` + +
+ +
How do I report a bug? + +First, search the open issues for another report. If one already exists, attach any relevant information and screenshots as a comment. If one does not exist, start one with this [link](https://github.com/OpenBB-finance/OpenBBTerminal/issues/new?assignees=&labels=type%3Abug&template=bug_report.md&title=%5BBug%5D) + +
+ +
How can I get help with OpenBB Terminal? + +You can get help with OpenBB Terminal by joining our [Discord server](https://openbb.co/discord) or contact us in our support form [here](https://openbb.co/support). + +
+ +
How can I give feedback about the OpenBB Terminal, or request specific functionality? + +Being an open source platform that wishes to tailor to the needs of any type of investor, we highly encourage anyone to share with us their experience and/or how we can further improve the OpenBB Terminal. This can be anything from a very small bug, a new feature, or the implementation of a highly advanced Machine Learning model. + +You are able to directly send us information about a bug or a question/suggestion from inside the terminal by using the `support` command which is available everywhere in the terminal. Here you can select which command you want to report a bug on, ask a question or make a suggestion. After entering `support`, when you press `ENTER` (⏎), you are taken to the Support form which is automatically filled with your input. You are only required to include the type (e.g. bug, suggestion or question) and message in the form, although this can also be set directly from inside the terminal (see `support -h`). + +Alternatively, you can contact us via the following routes: + +- If you notice that a feature is missing inside the terminal, please fill in the [Request a Feature](https://openbb.co/request-a-feature) form. +- If you wish to report a bug, have a question/suggestion or anything else, please fill in the [Support](https://openbb.co/support) form. +- If you wish to speak to us directly, please contact us on [Discord](https://openbb.co/discord). + +
diff --git a/website/content/terminal/faqs/data_sources.md b/website/content/terminal/faqs/data_sources.md new file mode 100644 index 00000000000..c4aa80841d8 --- /dev/null +++ b/website/content/terminal/faqs/data_sources.md @@ -0,0 +1,72 @@ +--- +title: Data and Sources +sidebar_position: 4 +description: TBD +keywords: + [ + installation, + installer, + install, + guide, + mac, + windows, + linux, + python, + github, + macos, + how to, + explanation, + openbb terminal, + ] +--- + +## Data and Sources + +Please note that OpenBB does not provide any data, it is an aggregator which provides users access to data from a variety of sources. OpenBB does not maintain or have any control over the raw data supplied. If there is a specific problem with the output from a data provider, please consider contacting them first. + +
Data from today is missing. + +By default, the load function requests end-of-day daily data and is not included until the EOD summary has been published. The current day's data is considered intraday and is loaded when the `interval` argument is present. + +```console +load SPY -i 60 +``` + +
+ +
Can I stream live prices and news feeds? + +The OpenBB Terminal is not currently capable of streaming live feeds through websocket connections. + +
+ +
"Pair BTC/USDT not found in binance" + +US-based users are currently unable to access the Binance API. Please try loading the pair from a different source, for example: + +`load btc --source CCXT --exchange kraken` + +
+ +## General Troubleshooting + +Both Windows and MacOS provide a "developer mode", and enabling it may help. + +**MacOS**: Go to the System Settings, and under the "Privacy and Security" tab, scroll to the bottom and select the option to "Allow applications downloaded from App Store and identified developers". Then, scroll up to click on, "Developer Tools", and add `Terminal.app` and `Visual Studio Code` (or the preferred code editor) to the list of applications allowed to run software locally that does not meet the system's security policy. + +**Windows**: Go to the Control Panel, and under the "Privacy & Security" tab, click on, "For developers". Under this menu, turn "Developer Mode" on. + +From the Windows Security menu, click on the Firewall & Network Protection tab, then click on "Allow an app through firewall". If the applications below are not allowed to communicate through Windows Defender Firewall, change the settings to allow. + +- BranchCache +- Hyper-V +- VcXsrv +- Windows Terminal + +
Why does a specific menu or command not exist? + +It could be that you are running an outdated version in which the menu or command is not yet available. Please check the [installation guide](https://docs.openbb.co/terminal/quickstart/installation) to download the most recent release. + +Do note that it is also possible that the menu or command has been deprecated. If this is oversight, please reach out to us [here](https://openbb.co/support). + +
diff --git a/website/content/terminal/faqs/developer_issues.md b/website/content/terminal/faqs/developer_issues.md new file mode 100644 index 00000000000..75255e902d6 --- /dev/null +++ b/website/content/terminal/faqs/developer_issues.md @@ -0,0 +1,133 @@ +--- +title: Developer Issues +sidebar_position: 6 +description: TBD +keywords: + [ + installation, + installer, + install, + guide, + mac, + windows, + linux, + python, + github, + macos, + how to, + explanation, + openbb terminal, + ] +--- + +
Error: "git pull" fails because of a hot fix: cannot lock ref + +If the error message looks something like: + +```console +cannot lock ref: 'refs/remotes/origin/hotfix' exists; cannot create +``` + +Try: + +```console +git remote prune origin +git pull +``` + +
+ +
What does it mean if it says wheel is missing? + +If you receive any notifications regarding `wheel` missing, this could be due to this dependency missing. + +`conda install -c conda-forge wheel` or `pip install wheel` + +
+ +
Why do these .whl files not exist? + +If you get errors about .whl files not existing (usually on Windows) you have to reinitialize the following folder. +Just removing the 'artifacts' folder could also be enough: + +| Platform | Location | +| -------- | ------------------------------- | +| Linux | "~/.cache/pypoetry" | +| Mac | "~/Library/Caches/pypoetry" | +| Windows | "%localappdata%/pypoetry/cache" | + +When you try to add a package to Poetry it is possible that it causes a similar issue. Here you can remove the +'artifacts' folder again to reinitialize Poetry. + +If you run into trouble with Poetry, and the advice above did not help, your best bet is to try + +- `poetry update --lock` +- `conda deactivate` -> `conda activate obb`, then try again +- Track down the offensive package and purge it from your anaconda `` folder, then try again + +| Platform | Location | +| --------- | ------------------------------------------- | +| Linux/Mac | ~/anaconda3/envs, or , ~/opt/anaconda3/envs | +| Windows | %userprofile%/anaconda3/envs | + +- Completely nuke your conda environment folder and make a new environment from scratch + + - `conda deactivate` + - `conda env remove -n obb` + - `conda clean -a` + - Make a new environment and install dependencies again. +- Reboot your computer and try again +- Submit a ticket on GitHub + +
+ +
What does the JSONDecodeError mean during poetry install? + +Sometimes poetry can throw a `JSONDecodeError` on random packages while running `poetry install`. This can be observed on macOS 10.14+ running python 3.8+. This is because of the use of an experimental installer that can be switched off to avoid the mentioned error. Run the code below as advised [here](https://github.com/python-poetry/poetry/issues/4210) and it should fix the installation process. + +```bash +poetry config experimental.new-installer false +``` + +_Commands that may help you in case of an error:_ + +- `python -m pip install --upgrade pip` +- `poetry update --lock` +- `poetry install` + +
+ +
How do I deal with errors regarding CRLF? + +When trying to commit code changes, pylint will prevent you from doing so if your line break settings are set to +CRLF (default for Windows). +This is because the entire package uses LF (default for Linux/Mac), and it is therefore +important that you change this setting to LF _before_ you make any changes to the code. + +It is possible that CRLF automatically turns back on, you can correct this with: + +```bash +git config --global core.autocrlf false +``` + +In case you already made coding adjustments, you have to reset your cache, and the changes you made to the code with +the following: + +```bash +git rm --cached -r . +git reset --hard +``` + +
+ +
Why can't I run OpenBB via the VS Code integrated terminal? + +This occurs when VS Code terminal python version/path is different from the terminal version. + +To fix it add this to vscode JSON settings ([ref](https://stackoverflow.com/questions/54582361/vscode-terminal-shows-incorrect-python-version-and-path-launching-terminal-from)): + +```bash + "terminal.integrated.inheritEnv": false, +``` + +
diff --git a/website/content/terminal/faqs/general_operation.md b/website/content/terminal/faqs/general_operation.md new file mode 100644 index 00000000000..158c6fc73f0 --- /dev/null +++ b/website/content/terminal/faqs/general_operation.md @@ -0,0 +1,96 @@ +--- +title: General Operation +sidebar_position: 3 +description: This section provides you with the installation file as well as the guide to install the OpenBB Terminal via Windows (10 or greater). +keywords: + [ + installation, + installer, + install, + guide, + mac, + windows, + linux, + python, + github, + macos, + how to, + explanation, + openbb terminal, + ] +--- + +
Charts do not display on Linux/WSL or Docker installation. + +Check that X-11, or similar, is installed, open, and configured. Follow the instructions pertaining to the system here: [https://docs.openbb.co/terminal/quickstart/installation#3-configuring-your-x-server-to-show-plots](https://docs.openbb.co/terminal/quickstart/installation#3-configuring-your-x-server-to-show-plots) + +
+ +
How do I retrieve more results than is returned by default? + +Most functions will have either, `--start` and `--end` flags, or a `--limit` argument. Print the help dialogue for any command by attaching, `--help` or `-h`. + +
+ +
Does the portfolio menu allow for dividends, interest, or other distributions? + +Currently, this is only possible by manually updating the portfolio file. + +
+ +
Why does my Portfolio file fail to load? + +This can be the result of a formatting error, check the file in a simple text editor to observe any abnormalities in the formatting; or, it could be a bug - check the [GitHub issues page](https://github.com/OpenBB-finance/OpenBBTerminal/issues) for similar errors. + +- Check that all the necessary column titles are present. +- Inspect the file to see if cells left blank have been filled unintentionally with 0 or NaN values. +- A particular asset may not be able to load data. Check for valid historical data from the Stocks menu. +- Format ticker symbols according to yFinance naming convention. +- All dates must be entered as YYYY-MM-DD. +- Transactions dated for today will fail to load historical data. +- MacOS users should attempt to avoid using the Numbers application as it has a habit of changing the formatting while saving. + +Files can be formatted as either `.csv` or `.xlsx` files, and the required column headers are: + +`[Date,Type,Ticker,Side,Price,Quantity,Fees,Investment,Currency,Sector,Industry,Country,Region]` + +See the guide [here](https://docs.openbb.co/sdk/guides/intros/portfolio) for more information. + +
+ +
How do I change the chart styles? + +Place style sheets in this folder: `OpenBBUserData/styles/user` + +SDK users can refer to the documentation [here](https://docs.openbb.co/sdk/guides/advanced/chart-styling) for syntax. A sample Matplotlib configuration file can be copied from [here](https://matplotlib.org/stable/tutorials/introductory/customizing.html#the-default-matplotlibrc-file). + +
+ +
Can I change the colors of the text in the Terminal? + +Yes, follow the directions on this page: [https://openbb.co/products/terminal?customizeMenu=true#terminal](https://openbb.co/products/terminal?customizeMenu=true#terminal) + +
+ +
After setting the preset in the stocks screener, nothing happens. + +Print the current screen again with by entering, `?`. Does the name of the selected preset display? With a preset loaded, run the screener by entering one of the commands below: + +- Financial +- Ownership +- Overview +- Performance +- Technical +- Valuation + +
+ +
Forecast functions say to enter a valid data set + +Because an unlimited number of data sets can be loaded into the Forecast menu, each function requires defining the specific data set to be used. Add the `-d` or `--dataset` argument to the command, along with the name of the desired data set. + +```console +rnn -d SPY +``` + +
diff --git a/website/content/terminal/faqs/installation_updates.md b/website/content/terminal/faqs/installation_updates.md new file mode 100644 index 00000000000..2e486354fb9 --- /dev/null +++ b/website/content/terminal/faqs/installation_updates.md @@ -0,0 +1,92 @@ +--- +title: Installation and Updates +sidebar_position: 1 +description: TBD +keywords: + [ + installation, + installer, + install, + guide, + mac, + windows, + linux, + python, + github, + macos, + how to, + explanation, + openbb terminal, + ] +--- + +## Installation and Updates + +
How much hard drive space is required? + +An installation will use approximately 4GB of space. + +
+ +
What is the minimum version of Windows or MacOS required to install the OpenBB Terminal? + +The OpenBB Terminal installation packages are compatible with: + +- Windows 10 or later. +- MacOS Monterey or later. + +**Note:** Machines which are not compatible with the installer packages may be able to install from the source code. + +
+ +
How do I update my installation to the latest version? + +The terminal is constantly being updated with new features and bug fixes. The process for updating will vary by the installation type: + +- As of version 2.4.1, the Windows installer has an option for uninstalling the existing prior to updating. +- For other installer versions, uninstall the previous version (uninstall.exe for Windows, delete the Application folder on MacOS); then, download the latest version and reinstall. User settings and data will remain. +- For a `pip` installation, when a new version is published: `pip install -U openbb[all]` +- Upgrade a cloned version of the GitHub repo with: + +```console +git fetch +git pull +poetry install -E all +``` + +**Notes:** If the cloned repository is a fork, pull from: `git pull origin main` or `git pull origin develop`. If there are changes locally to the files that conflict with the incoming changes from GitHub, stash them before pulling from main with `git stash`. + +
+ +
"Microsoft Visual C++ 14.0 or greater is required" + +Download and install [C++ Build Tools](https://visualstudio.microsoft.com/visual-cpp-build-tools/), restart the machine, then try again. + +
+ +
Error: failed building wheel for bt + +There may be an additional message that is printed from this error, stating: "Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools". + +Download and install it. [https://visualstudio.microsoft.com/visual-cpp-build-tools/](https://visualstudio.microsoft.com/visual-cpp-build-tools/) + +Mac and Linux users may also encounter a similar error because a C++ compiler is not installed. Install Homebrew: + +```console +/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" +``` + +Then run: + +```console +brew install gcc +brew install cmake +``` + +
+ +
Miniconda3 will not install on ARM/Linux Raspberry Pi machines. + +Refer to this issue on the Conda [GitHub](https://github.com/conda/conda/issues/10723) page. + +
diff --git a/website/content/terminal/faqs/launching.md b/website/content/terminal/faqs/launching.md new file mode 100644 index 00000000000..7dae502b0e9 --- /dev/null +++ b/website/content/terminal/faqs/launching.md @@ -0,0 +1,110 @@ +--- +title: Launching +sidebar_position: 2 +description: TBD +keywords: + [ + installation, + installer, + install, + guide, + mac, + windows, + linux, + python, + github, + macos, + how to, + explanation, + openbb terminal, + ] +--- + +
Mac: Invalid CPU Type - Terminal fails to launch. + +This error is usually the result of a Mac M1/M2 machine which does not have Rosetta installed. Install from the system Terminal command line: + +```console +softwareupdate --install-rosetta +``` + +
+ +
Terminal app does not launch: Failed to execute script 'terminal' due to unhandled exception! + +When an installer-packaged version of the OpenBB Terminal fails to launch, because of this message, the machine may have an obsolete CPU-type or operating system. Please try installing via the source code, and if problems persist, reach out to us on [Discord](https://discord.gg/xPHTuHCmuV) or fill out a support request form on our [website](https://openbb.co/support). + +
+ +
ModuleNotFoundError: No module named '______' + +Before troubleshooting please verify that the recommended installation instructions were followed. These errors often can occur when the virtual environment has not been activated, or the `poetry install` command was skipped. Activate the OpenBB virtual environment created during the installation process prior to launching or importing the SDK. + +**Terminal**: + +```console +conda activate obb +python terminal.py +``` + +**SDK**: + +```console +conda activate obb +ipython +from openbb_terminal.sdk import openbb +``` + +**Jupyter**: + +Check that the kernel selected for the session is the OpenBB virtual environment created during the installation process and then re-run the cell. + +```console +from openbb_terminal.sdk import openbb +``` + +There is also a possibility that a new dependency has been added to the code and it has not yet been installed in the environment. This may happen after updating the code from GitHub, but before running the `poetry install` install command. + +```console +poetry install -E all +``` + +
+ +
Fontconfig warning: ignoring UTF-8: not a valid region tag + +In the OS default terminal shell profile, check for a variable similar to, “set locale environment variables at startup”, then also, set text encoding to UTF-8. + +
+ +
SSL certificates fail to authorize + +```console +SSL: CERTIFICATE_VERIFY_FAILED +``` + +An error message, similar to above, is usually encountered while attempting to use the OpenBB Platform from behind a firewall. A workplace environment is typically the most common occurrence. Try connecting to the internet directly through a home network to test the connection. If using a work computer and/or network, we recommend speaking with the company's IT department prior to installing or running any software. + +A potential solution is to try: + +```console +pip install pip-system-certs +``` + +
+ +
Cannot connect due to proxy connection. + +Find the `.env` file (located at the root of the user account folder: (`~/.openbb_terminal/.env`), and add a line at the bottom of the file with: + +```console +HTTP_PROXY="
" or HTTPS_PROXY="
” +``` + +
+ +
Linux Ubuntu installation was successful but now hangs on launch. + +Check that VcXsvr - or an equivalent X-host - is running and configured prior to launch. + +
diff --git a/website/content/terminal/index.md b/website/content/terminal/index.md index 4294c076955..1a4986ee84b 100644 --- a/website/content/terminal/index.md +++ b/website/content/terminal/index.md @@ -1,12 +1,28 @@ --- sidebar_position: 1 -title: Introduction -keywords: [getting started, openbb, api, beginner guide, how to use openbb, openbb keys, openbb terminal, introduction, intro, how-to, how to, openbb, terminal] +keywords: + [ + getting started, + openbb, + api, + beginner guide, + how to use openbb, + openbb keys, + openbb terminal, + introduction, + intro, + how-to, + how to, + openbb, + terminal, + ] description: The OpenBB Documentation provides guidance on how to use the OpenBB Terminal, a free, custom built financial terminal that will help you make more informed decisions, faster. --- import Card from "@site/src/components/General/Card"; +# OpenBB Terminal + OpenBB is a leading open source investment research software platform for accessing and analyzing financial market data. We represent millions of investors who want to leverage state-of-the-art data science and machine learning technologies to make sense of raw unrefined data. Our mission is to make investment research effective, powerful and accessible to everyone. Want to contribute? Check out our [CONTRIBUTING GUIDELINES](https://github.com/OpenBB-finance/OpenBBTerminal/blob/main/CONTRIBUTING.md). @@ -46,7 +62,7 @@ Want to contribute? Check out our [CONTRIBUTING GUIDELINES](https://github.com/O proprietary features on top of our infrastructure." /> - (ally)> movers -n 5 -l toplosers -╒══════╤════════╤════════════╤═════════╤═══════════════════════╤════════╤═════════╤════════╤═════════╕ -│ │ chg │ chg_sign │ last │ name │ pchg │ pcls │ rank │ vl │ -╞══════╪════════╪════════════╪═════════╪═══════════════════════╪════════╪═════════╪════════╪═════════╡ -│ CABO │ -19.90 │ u │ 1915.98 │ CABLE ONE INC │ 1.03 │ 1935.88 │ 1 │ 12311 │ -├──────┼────────┼────────────┼─────────┼───────────────────────┼────────┼─────────┼────────┼─────────┤ -│ BILL │ -12.28 │ u │ 271.47 │ BILL.COM HOLDINGS INC │ 4.33 │ 283.75 │ 2 │ 2340470 │ -├──────┼────────┼────────────┼─────────┼───────────────────────┼────────┼─────────┼────────┼─────────┤ -│ BLK │ -10.06 │ u │ 847.21 │ BLACKROCK INC │ 1.17 │ 857.27 │ 3 │ 410960 │ -├──────┼────────┼────────────┼─────────┼───────────────────────┼────────┼─────────┼────────┼─────────┤ -│ CVNA │ -6.90 │ u │ 319.60 │ CARVANA CO │ 2.11 │ 326.50 │ 4 │ 551151 │ -├──────┼────────┼────────────┼─────────┼───────────────────────┼────────┼─────────┼────────┼─────────┤ -│ FICO │ -5.50 │ u │ 421.06 │ FAIR ISAAC CORP │ 1.29 │ 426.56 │ 5 │ 118449 │ -╘══════╧════════╧════════════╧═════════╧═══════════════════════╧════════╧═════════╧════════╧═════════╛ -``` diff --git a/website/old_content/terminal/portfolio/bro/ally/quote/_index.md b/website/old_content/terminal/portfolio/bro/ally/quote/_index.md deleted file mode 100644 index faf095b04da..00000000000 --- a/website/old_content/terminal/portfolio/bro/ally/quote/_index.md +++ /dev/null @@ -1,29 +0,0 @@ -``` -usage: quote [-t TICKER] [-h] -``` - -Get stock quote - -``` -optional arguments: - -t TICKER, --ticker TICKER - Ticker to get quote for. Can be in form of 'tick1,tick2...' (default: None) - -h, --help show this help message (default: False) -``` - -Sample Usage: - -``` -(🦋) (bro)>(ally)> quote -t amc,gme,msft,aapl -╒══════╤════════╤════════╤═══════╤════════════════╤════════╤════════╤═════════════╕ -│ │ ask │ bid │ chg │ dollar_value │ last │ opn │ vl │ -╞══════╪════════╪════════╪═══════╪════════════════╪════════╪════════╪═════════════╡ -│ MSFT │ 296.48 │ 296.46 │ 2.18 │ 4.79162e+09 │ 296.48 │ 295.69 │ 1.62015e+07 │ -├──────┼────────┼────────┼───────┼────────────────┼────────┼────────┼─────────────┤ -│ AMC │ 39.37 │ 39.36 │ -0.93 │ 2.30169e+09 │ 39.36 │ 40.97 │ 5.89093e+07 │ -├──────┼────────┼────────┼───────┼────────────────┼────────┼────────┼─────────────┤ -│ AAPL │ 144.12 │ 144.11 │ 1.18 │ 8.48636e+09 │ 144.12 │ 143.93 │ 6.04101e+07 │ -├──────┼────────┼────────┼───────┼────────────────┼────────┼────────┼─────────────┤ -│ GME │ 192.21 │ 191.83 │ -0.13 │ 4.07203e+08 │ 192.07 │ 199.36 │ 2.13093e+06 │ -╘══════╧════════╧════════╧═══════╧════════════════╧════════╧════════╧═════════════╛ -``` diff --git a/website/package-lock.json b/website/package-lock.json index 3a425934bad..6ce8e2f1aa0 100644 --- a/website/package-lock.json +++ b/website/package-lock.json @@ -13,8 +13,11 @@ "@docusaurus/plugin-content-docs": "^2.3.1", "@docusaurus/preset-classic": "^2.3.1", "@mdx-js/react": "^1.6.22", + "@radix-ui/react-dialog": "^1.0.2", "@radix-ui/react-popover": "^1.0.3", + "@radix-ui/react-tooltip": "^1.0.5", "clsx": "^1.2.1", + "fuse.js": "^6.6.2", "prism-react-renderer": "^1.3.5", "react": "^17.0.2", "react-dom": "^17.0.2", @@ -2952,6 +2955,32 @@ "react": "^16.8 || ^17.0 || ^18.0" } }, + "node_modules/@radix-ui/react-dialog": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.0.2.tgz", + "integrity": "sha512-EKxxp2WNSmUPkx4trtWNmZ4/vAYEg7JkAfa1HKBUnaubw9eHzf1Orr9B472lJYaYz327RHDrd4R95fsw7VR8DA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-dismissable-layer": "1.0.2", + "@radix-ui/react-focus-guards": "1.0.0", + "@radix-ui/react-focus-scope": "1.0.1", + "@radix-ui/react-id": "1.0.0", + "@radix-ui/react-portal": "1.0.1", + "@radix-ui/react-presence": "1.0.0", + "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-slot": "1.0.1", + "@radix-ui/react-use-controllable-state": "1.0.0", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, "node_modules/@radix-ui/react-dismissable-layer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.2.tgz", @@ -3108,6 +3137,108 @@ "react": "^16.8 || ^17.0 || ^18.0" } }, + "node_modules/@radix-ui/react-tooltip": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.0.5.tgz", + "integrity": "sha512-cDKVcfzyO6PpckZekODJZDe5ZxZ2fCZlzKzTmPhe4mX9qTHRfLcKgqb0OKf22xLwDequ2tVleim+ZYx3rabD5w==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-dismissable-layer": "1.0.3", + "@radix-ui/react-id": "1.0.0", + "@radix-ui/react-popper": "1.1.1", + "@radix-ui/react-portal": "1.0.2", + "@radix-ui/react-presence": "1.0.0", + "@radix-ui/react-primitive": "1.0.2", + "@radix-ui/react-slot": "1.0.1", + "@radix-ui/react-use-controllable-state": "1.0.0", + "@radix-ui/react-visually-hidden": "1.0.2" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-arrow": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.2.tgz", + "integrity": "sha512-fqYwhhI9IarZ0ll2cUSfKuXHlJK0qE4AfnRrPBbRwEH/4mGQn04/QFGomLi8TXWIdv9WJk//KgGm+aDxVIr1wA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.2" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.3.tgz", + "integrity": "sha512-nXZOvFjOuHS1ovumntGV7NNoLaEp9JEvTht3MBjP44NSW5hUKj/8OnfN3+8WmB+CEhN44XaGhpHoSsUIEl5P7Q==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-primitive": "1.0.2", + "@radix-ui/react-use-callback-ref": "1.0.0", + "@radix-ui/react-use-escape-keydown": "1.0.2" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-popper": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.1.tgz", + "integrity": "sha512-keYDcdMPNMjSC8zTsZ8wezUMiWM9Yj14wtF3s0PTIs9srnEPC9Kt2Gny1T3T81mmSeyDjZxsD9N5WCwNNb712w==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@floating-ui/react-dom": "0.7.2", + "@radix-ui/react-arrow": "1.0.2", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-primitive": "1.0.2", + "@radix-ui/react-use-callback-ref": "1.0.0", + "@radix-ui/react-use-layout-effect": "1.0.0", + "@radix-ui/react-use-rect": "1.0.0", + "@radix-ui/react-use-size": "1.0.0", + "@radix-ui/rect": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-portal": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.2.tgz", + "integrity": "sha512-swu32idoCW7KA2VEiUZGBSu9nB6qwGdV6k6HYhUoOo3M1FFpD+VgLzUqtt3mwL1ssz7r2x8MggpLSQach2Xy/Q==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.2" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.2.tgz", + "integrity": "sha512-zY6G5Qq4R8diFPNwtyoLRZBxzu1Z+SXMlfYpChN7Dv8gvmx9X3qhDqiLWvKseKVJMuedFeU/Sa0Sy/Ia+t06Dw==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.1" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, "node_modules/@radix-ui/react-use-callback-ref": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.0.tgz", @@ -3178,6 +3309,32 @@ "react": "^16.8 || ^17.0 || ^18.0" } }, + "node_modules/@radix-ui/react-visually-hidden": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.0.2.tgz", + "integrity": "sha512-qirnJxtYn73HEk1rXL12/mXnu2rwsNHDID10th2JGtdK25T9wX+mxRmGt7iPSahw512GbZOc0syZX1nLQGoEOg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.2" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-visually-hidden/node_modules/@radix-ui/react-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.2.tgz", + "integrity": "sha512-zY6G5Qq4R8diFPNwtyoLRZBxzu1Z+SXMlfYpChN7Dv8gvmx9X3qhDqiLWvKseKVJMuedFeU/Sa0Sy/Ia+t06Dw==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.1" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, "node_modules/@radix-ui/rect": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.0.0.tgz", @@ -6688,6 +6845,14 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, + "node_modules/fuse.js": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-6.6.2.tgz", + "integrity": "sha512-cJaJkxCCxC8qIIcPBF9yGxY0W/tVZS3uEISDxhYIdtk8OL93pe+6Zj7LjCqVV4dzbqcriOZ+kQ/NE4RXZHsIGA==", + "engines": { + "node": ">=10" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -12638,9 +12803,9 @@ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "node_modules/webpack": { - "version": "5.75.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", - "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", + "version": "5.76.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.76.2.tgz", + "integrity": "sha512-Th05ggRm23rVzEOlX8y67NkYCHa9nTNcwHPBhdg+lKG+mtiW7XgggjAeeLnADAe7mLjJ6LUNfgHAuRRh+Z6J7w==", "dependencies": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^0.0.51", diff --git a/website/package.json b/website/package.json index cadcdbb16ef..cb6eb057900 100644 --- a/website/package.json +++ b/website/package.json @@ -21,8 +21,11 @@ "@docusaurus/plugin-content-docs": "^2.3.1", "@docusaurus/preset-classic": "^2.3.1", "@mdx-js/react": "^1.6.22", + "@radix-ui/react-dialog": "^1.0.2", "@radix-ui/react-popover": "^1.0.3", + "@radix-ui/react-tooltip": "^1.0.5", "clsx": "^1.2.1", + "fuse.js": "^6.6.2", "prism-react-renderer": "^1.3.5", "react": "^17.0.2", "react-dom": "^17.0.2", diff --git a/website/src/components/General/AddBot.tsx b/website/src/components/General/AddBot.tsx new file mode 100644 index 00000000000..2dd4b5b0bc6 --- /dev/null +++ b/website/src/components/General/AddBot.tsx @@ -0,0 +1,60 @@ +import DiscordIcon from "../Icons/Discord"; +import TelegramIcon from "../Icons/Telegram"; +import * as TooltipPrimitive from "@radix-ui/react-tooltip"; +import InfoIcon from "../Icons/Info"; +import React, { useState } from "react"; + +export default function AddBotDialog() { + return ( + + ); +} + +function Tooltip() { + const [open, setOpen] = useState(false); + return ( + + + { + if (!open) { + setOpen(true); + } + }} + onMouseOver={() => setOpen(true)} + onMouseLeave={() => setOpen(false)} + className="absolute -right-6 top-0" + > + + + + You must be a server owner + + + + ); +} diff --git a/website/src/components/General/AvailableOptions.tsx b/website/src/components/General/AvailableOptions.tsx new file mode 100644 index 00000000000..f512d308afd --- /dev/null +++ b/website/src/components/General/AvailableOptions.tsx @@ -0,0 +1,81 @@ +import * as DialogPrimitive from "@radix-ui/react-dialog"; +import React, { useState } from "react"; +import CloseIcon from "../Icons/Close"; +import Fuse from "fuse.js"; + +//TODO - Make this show up nicer - Doesn't look like it does on bot site +export default function AvailableOptions({ + label, + allOptions, +}: { + label: string; + allOptions: string[]; +}) { + const [options, setOptions] = useState(allOptions); + const fuse = new Fuse(allOptions, { + threshold: 0, + distance: 0, + }); + + function searchWithFuse(query: string) { + if (!query) { + return []; + } + + return fuse.search(query).map((result) => result.item); + } + return ( + { + if (!value) { + setOptions(allOptions); + } + }} + > + + See {label} + + + + + + + + {label} + + + Search for {label} + +
+
+ { + const query = e.target.value; + if (query) setOptions(searchWithFuse(e.target.value)); + else setOptions(allOptions); + }} + required + placeholder=" " + type="text" + className="input peer" + id="search-input" + /> + +
+
    + {options.slice(0, 5).map((option) => ( +
  • {option}
  • + ))} +
+
+

{`${options.length} ${label} found`}

+
+ + + ); +} diff --git a/website/src/components/General/Card.tsx b/website/src/components/General/Card.tsx index efeb0ea490a..e01cbd86583 100644 --- a/website/src/components/General/Card.tsx +++ b/website/src/components/General/Card.tsx @@ -1,35 +1,47 @@ import clsx from "clsx"; -import React from "react" +import React from "react"; import ChevronRightIcon from "../Icons/ChevronRight"; interface CardProps { - title: string - description: string - className?: string - type?: "terminal" | "sdk" + title: string; + description: string; + className?: string; + type?: "terminal" | "sdk" | "bot"; } -export default function Card({ title, description, className = "mb-8", type = "terminal" }: CardProps) { - return ( -
-

- {title} -

-

- {description} -

- {false && (

- See more - -

)} -
- ); -} \ No newline at end of file +export default function Card({ + title, + description, + className = "mb-8", + type = "terminal", +}: CardProps) { + return ( +
+

{title}

+

{description}

+ {false && ( +

+ See more + +

+ )} +
+ ); +} diff --git a/website/src/components/General/PlayButton.tsx b/website/src/components/General/PlayButton.tsx new file mode 100644 index 00000000000..966895d5f45 --- /dev/null +++ b/website/src/components/General/PlayButton.tsx @@ -0,0 +1,64 @@ +import React from "react" +import * as DialogPrimitive from "@radix-ui/react-dialog"; +import PlayIcon from "../Icons/Play" +import CloseIcon from "../Icons/Close"; + +export default function PlayButton({ text, pathname }) { + + const pathvalue = pathname.split("/")[4]; + console.log(pathvalue) + const platform = pathname.split("/")[3]; + console.log(platform) + var imgname = "c3m" + + // TODO - Check these - make sure they all work - So far need to do a special case for these 2 + // menus as we don't do the same thing for them as we do for the other pages + if ((pathvalue == "charts" || pathvalue == "general") && platform == "discord") { + console.log(pathvalue + " " + platform) + imgname = text.split(" ")[0].toLowerCase().replace("/", ""); + console.log("here1") + } else if (platform == "telegram") { + if (pathvalue.toString() == "etfs") { + imgname = text.split(" ")[1].toLowerCase().replace("/", ""); + console.log("here2") + }else{ + console.log(pathvalue + " " + platform) + imgname = text.split(" ")[0].toLowerCase().replace("/", ""); + console.log("here122") + } + + } else { + try{ + imgname = text.split(" ")[1].toLowerCase().replace("/", ""); + // special case for defi - i know its not great :D + if (imgname == "defi") { + imgname = text.split(" ")[2].toLowerCase().replace("/", ""); + } + } catch (e) { + imgname = text.split(" ")[0].toLowerCase().replace("/", ""); + } + } + + //console.log(platform) + //console.log(pathvalue) + //console.log(imgname) + + const img5 = `https://openbb-assets.s3.amazonaws.com/${platform}/${pathvalue}/${imgname}.png`; + + console.log(img5.toString()) + + return ( + + + + + + + {pathvalue} + + + + + + ); +} diff --git a/website/src/components/Icons/BotLetteringLogo.tsx b/website/src/components/Icons/BotLetteringLogo.tsx new file mode 100644 index 00000000000..2227e314cd7 --- /dev/null +++ b/website/src/components/Icons/BotLetteringLogo.tsx @@ -0,0 +1,38 @@ +import React from "react"; +import type { SVGProps } from "react"; +interface SVGRProps { + title?: string; + titleId?: string; +} + +const BotLetteringLogo = ({ + title, + titleId, + ...props +}: SVGProps & SVGRProps) => ( + + + + + +); + +export default BotLetteringLogo; diff --git a/website/src/components/Icons/Play.tsx b/website/src/components/Icons/Play.tsx new file mode 100644 index 00000000000..89d15113194 --- /dev/null +++ b/website/src/components/Icons/Play.tsx @@ -0,0 +1,32 @@ +import * as React from "react" +interface SVGRProps { + title?: string; + titleId?: string; +} + +const PlayIcon = ({ + title, + titleId, + ...props +}: SVGProps & SVGRProps) => ( + + {title ? {title} : null} + + +); + +export default PlayIcon; diff --git a/website/src/components/Icons/SDKLetteringLogo.tsx b/website/src/components/Icons/SDKLetteringLogo.tsx new file mode 100644 index 00000000000..1e2012a4a6d --- /dev/null +++ b/website/src/components/Icons/SDKLetteringLogo.tsx @@ -0,0 +1,38 @@ +import React from "react"; +import type { SVGProps } from "react"; +interface SVGRProps { + title?: string; + titleId?: string; +} + +const SDKLetteringLogo = ({ + title, + titleId, + ...props +}: SVGProps & SVGRProps) => ( + + + + + +); + +export default SDKLetteringLogo; diff --git a/website/src/components/Icons/TerminalLetteringLogo.tsx b/website/src/components/Icons/TerminalLetteringLogo.tsx new file mode 100644 index 00000000000..8f9eb66c9d4 --- /dev/null +++ b/website/src/components/Icons/TerminalLetteringLogo.tsx @@ -0,0 +1,42 @@ +import React from "react"; +import type { SVGProps } from "react"; +interface SVGRProps { + title?: string; + titleId?: string; +} + +const TerminalLetteringLogo = ({ + title, + titleId, + ...props +}: SVGProps & SVGRProps) => ( + + + + + + +); + +export default TerminalLetteringLogo; diff --git a/website/src/css/custom.css b/website/src/css/custom.css index b148854208d..c251d157985 100644 --- a/website/src/css/custom.css +++ b/website/src/css/custom.css @@ -59,6 +59,9 @@ } @layer components { + .card { + @apply w-full rounded-[4px] border border-grey-400 p-6 shadow bg-grey-900; + } .tw-transition { @apply transition duration-150 ease-out; } @@ -78,8 +81,20 @@ ._group-tab { @apply w-full flex mb-12; } - .card { - @apply w-full rounded-md border border-white p-9 shadow; + ._modal { + @apply card fixed top-1/2 left-1/2 z-50 max-h-[608px] w-[90%] max-w-[568px] -translate-x-1/2 -translate-y-1/2 animate-fade-in overflow-auto bg-grey-900 p-2 duration-300 focus:outline-none md:p-10; + } + ._modal-overlay { + @apply bg-grey-900 opacity-60 z-40 inset-0 fixed; + } + ._modal-title { + @apply text-white uppercase tracking-widest text-lg font-bold; + } + .input { + @apply text-sm h-12 pl-4 pr-2 w-full border border-grey-600 text-white focus:text-white rounded-md focus:border-white active:border-white focus:ring-0 hover:border-white disabled:border-grey-700 py-3 bg-transparent; + } + ._floating-label { + @apply absolute text-sm text-grey-500 duration-300 transform -translate-y-8 scale-75 top-2 z-0 origin-[0] px-1 peer-focus:px-1 peer-focus:text-white peer-placeholder-shown:scale-100 peer-placeholder-shown:-translate-y-1/2 peer-placeholder-shown:top-1/2 peer-focus:-top-2 peer-focus:scale-75 peer-focus:-translate-y-4 left-4; } } @@ -145,11 +160,16 @@ --aa-background-color-rgb: 0, 0, 0 !important; } +.cls-1, +.cls-2 { + fill: rgb(160, 160, 160) !important; +} + .DocSearch-Button { border-radius: 4px !important; - border: 1px solid #2e2e2e !important; + border-radius: 4px !important; + border: 1px solid #a2a2a2ff !important; background-color: #070707ff !important; - border-color: #a2a2a2ff !important; } @media (max-width: 440px) { @@ -159,11 +179,12 @@ } } +/* .DocSearch-Button:hover { outline: none !important; border-color: white !important; color: white !important; -} +}*/ [data-theme="dark"] { /* @@ -228,6 +249,37 @@ ); } +.header_docs_bot { + background: -moz-linear-gradient( + 90deg, + rgb(78, 23, 65) 0%, + rgb(62, 29, 78) 15%, + rgba(55, 29, 76, 1) 45%, + rgb(68, 39, 87) 64%, + rgb(46, 34, 65) 82%, + rgba(16, 9, 0, 1) 100% + ) !important; + background: -webkit-linear-gradient( + 90deg, + rgb(78, 23, 65) 0%, + rgb(62, 29, 78) 15%, + rgba(55, 29, 76, 1) 45%, + rgb(68, 39, 87) 64%, + rgb(46, 34, 65) 82%, + rgba(16, 9, 0, 1) 100% + ) !important; + background: linear-gradient( + 90deg, + rgb(78, 23, 65) 0%, + rgb(62, 29, 78) 15%, + rgba(55, 29, 76, 1) 45%, + rgb(68, 39, 87) 64%, + rgb(46, 34, 65) 82%, + rgba(16, 9, 0, 1) 100% + ); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#170806",endColorstr="#100900",GradientType=1) !important; +} + .header_docs_sdk { background: rgb(23, 8, 6); background: -moz-linear-gradient( diff --git a/website/src/pages/index.tsx b/website/src/pages/index.tsx index a313a2e440b..8934488182b 100644 --- a/website/src/pages/index.tsx +++ b/website/src/pages/index.tsx @@ -18,8 +18,9 @@ export default function Home(): JSX.Element { OpenBB Documentation

- This website contains documentation for OpenBB SDK and Terminal, two - open source projects that powers your investment research. + This website contains documentation for OpenBB Terminal, OpenBB + SDK, and OpenBB Bot. All the tooling you need for your investment + research.

@@ -28,18 +29,17 @@ export default function Home(): JSX.Element { backgroundSize: "100% 110%", }} to="/terminal" - className="bg-[url('/img/terminal_bg_light.png')] dark:bg-[url('/img/terminal_bg.png')] bg-no-repeat shadow-sm group !no-underline text-grey-900 dark:text-white hover:text-grey-900 dark:hover:border-white hover:border-grey-900 dark:hover:!text-white relative w-full h-[238px] max-w-full p-8 rounded flex flex-col items-start justify-start border border-grey-400 bg-white dark:bg-grey-900" + className="bg-[url('/img/terminal_bg_light.png')] dark:bg-[url('/img/terminal_bg.png')] bg-no-repeat shadow-sm group !no-underline text-grey-900 dark:text-white hover:text-grey-900 dark:hover:border-white hover:border-grey-900 dark:hover:!text-white relative w-full h-[238px] max-w-full p-8 rounded flex flex-col items-start justify-start border border-grey-200 bg-white dark:bg-grey-900" > -

+

OpenBB Terminal

- Desktop application that allows you to perform your own investment - research. + Free and open source investment research platform.

See more @@ -51,18 +51,40 @@ export default function Home(): JSX.Element { backgroundSize: "100% 130%", }} to="/sdk" - className="bg-[url('/img/sdk_bg_light.png')] dark:bg-[url('/img/sdk_bg.png')] bg-no-repeat shadow-sm group !no-underline text-grey-900 dark:text-white hover:text-grey-900 dark:hover:border-white hover:border-grey-900 dark:hover:!text-white relative w-full h-[238px] max-w-full p-8 rounded flex flex-col items-start justify-start border border-grey-400 bg-white dark:bg-grey-900" + className="bg-[url('/img/sdk_bg_light.png')] dark:bg-[url('/img/sdk_bg.png')] bg-no-repeat shadow-sm group !no-underline text-grey-900 dark:text-white hover:text-grey-900 dark:hover:border-white hover:border-grey-900 dark:hover:!text-white relative w-full h-[238px] max-w-full p-8 rounded flex flex-col items-start justify-start border border-grey-200 bg-white dark:bg-grey-900" > -

+

OpenBB SDK

- Python library that allows you to build your own investment - research platform. + Python library that allows access to investment research data.

+ See more + +

+ + +

+ OpenBB Bot +

+

+ Discord/Telegram bot to retrieve investment research data from + anywhere. +

+

See more diff --git a/website/src/theme/CodeBlock/Content/String.js b/website/src/theme/CodeBlock/Content/String.js index 248b8ed0be2..6a2dbcc38af 100644 --- a/website/src/theme/CodeBlock/Content/String.js +++ b/website/src/theme/CodeBlock/Content/String.js @@ -11,9 +11,12 @@ import { import Highlight, { defaultProps } from "prism-react-renderer"; import Line from "@theme/CodeBlock/Line"; import CopyButton from "@theme/CodeBlock/CopyButton"; +import PlayButton from "@site/src/components/General/PlayButton"; import WordWrapButton from "@theme/CodeBlock/WordWrapButton"; import Container from "@theme/CodeBlock/Container"; import styles from "./styles.module.css"; +import { useLocation } from "react-router-dom"; + export default function CodeBlockString({ children, className: blockClassName = "", @@ -28,7 +31,7 @@ export default function CodeBlockString({ const language = languageProp ?? parseLanguage(blockClassName) ?? defaultLanguage; const prismTheme = usePrismTheme(); - const wordWrap = useCodeWordWrap() + const wordWrap = useCodeWordWrap(); // We still parse the metastring in case we want to support more syntax in the // future. Note that MDX doesn't strip quotes when parsing metastring: @@ -42,7 +45,12 @@ export default function CodeBlockString({ const showLineNumbers = showLineNumbersProp ?? containsLineNumbers(metastring); - const shouldWordwrapByDefault = metastring?.includes("wordwrap") + const shouldWordwrapByDefault = metastring?.includes("wordwrap"); + + const newDate = getThirdFriday(); + + const newCode = code.replace("2022-07-29", newDate); + const {pathname} = useLocation(); return ( {title &&

{title}
} @@ -59,7 +67,7 @@ export default function CodeBlockString({ {({ className, tokens, getLineProps, getTokenProps }) => ( @@ -70,10 +78,14 @@ export default function CodeBlockString({ className={clsx(className, styles.codeBlock, "thin-scrollbar")} > )} - + +
); } + +function getThirdFriday() { + const thirdFriday = new Date(); + thirdFriday.setMonth(thirdFriday.getMonth() + 1); + thirdFriday.setDate(1); + const firstDay = thirdFriday.getDay(); + let daysToAdd = (5 - firstDay + 7) % 7; + daysToAdd += 15; + thirdFriday.setDate(daysToAdd); + + const yearString = thirdFriday.getFullYear().toString(); + const monthString = (thirdFriday.getMonth() + 1).toString().padStart(2, "0"); + const dayString = thirdFriday.getDate().toString().padStart(2, "0"); + const dateString = `${yearString}-${monthString}-${dayString}`; + return dateString; +} diff --git a/website/src/theme/ColorModeToggle/index.js b/website/src/theme/ColorModeToggle/index.js index 7d084ec7983..6289c98c435 100644 --- a/website/src/theme/ColorModeToggle/index.js +++ b/website/src/theme/ColorModeToggle/index.js @@ -5,7 +5,15 @@ import { translate } from "@docusaurus/Translate"; import * as PopoverPrimitive from "@radix-ui/react-popover"; import SunIcon from "@site/src/components/Icons/Sun"; import MoonIcon from "@site/src/components/Icons/Moon"; +import { useLocation } from "@docusaurus/router"; +import DiscordIcon from "@site/src/components/Icons/Discord"; +import TelegramIcon from "@site/src/components/Icons/Telegram"; +import Link from "@docusaurus/Link"; function ColorModeToggle({ className, value, onChange }) { + const { pathname } = useLocation(); + const showBotChange = + pathname.startsWith("/bot/discord") || pathname.startsWith("/bot/telegram"); + const isDiscord = pathname.startsWith("/bot/discord"); const isBrowser = useIsBrowser(); const title = translate( { @@ -28,8 +36,56 @@ function ColorModeToggle({ className, value, onChange }) { }), } ); + const command = pathname.split("/").pop(); return ( -
+
+ {showBotChange && ( + + + {isDiscord ? ( + + ) : ( + + )} + + + + Discord + + + Telegram + + + + )} {value !== "dark" ? ( diff --git a/website/src/theme/DocSidebar/Desktop/Content/index.js b/website/src/theme/DocSidebar/Desktop/Content/index.js index 50fef2f113d..48772ef9815 100644 --- a/website/src/theme/DocSidebar/Desktop/Content/index.js +++ b/website/src/theme/DocSidebar/Desktop/Content/index.js @@ -7,6 +7,8 @@ import { } from "@docusaurus/theme-common/internal"; import DocSidebarItems from "@theme/DocSidebarItems"; import styles from "./styles.module.css"; +import { useIFrameContext } from "@site/src/theme/Root"; +import SearchBar from "@site/src/theme/SearchBar"; function useShowAnnouncementBar() { const { isActive } = useAnnouncementBar(); const [showAnnouncementBar, setShowAnnouncementBar] = useState(isActive); @@ -22,10 +24,15 @@ function useShowAnnouncementBar() { } export default function DocSidebarDesktopContent({ path, sidebar, className }) { const showAnnouncementBar = useShowAnnouncementBar(); + const { isIFrame } = useIFrameContext(); + return (