diff --git a/openbb_platform/dev_install.py b/openbb_platform/dev_install.py index 782e64ce559f..1669bc09d646 100644 --- a/openbb_platform/dev_install.py +++ b/openbb_platform/dev_install.py @@ -21,11 +21,11 @@ openbb-fmp = { path = "./providers/fmp", develop = true } openbb-fred = { path = "./providers/fred", develop = true } openbb-intrinio = { path = "./providers/intrinio", develop = true } -openbb-polygon = { path = "./providers/polygon", develop = true } -openbb-wsj = { path = "./providers/wsj", develop = true } -openbb-tradingeconomics = { path = "./providers/tradingeconomics", develop = true } openbb-oecd = { path = "./providers/oecd", develop = true } +openbb-polygon = { path = "./providers/polygon", develop = true } openbb-sec = { path = "./providers/sec", develop = true } +openbb-tradingeconomics = { path = "./providers/tradingeconomics", develop = true } +openbb-wsj = { path = "./providers/wsj", develop = true } openbb-crypto = { path = "./extensions/crypto", develop = true } openbb-economy = { path = "./extensions/economy", develop = true } @@ -42,6 +42,7 @@ openbb-cboe = { path = "./providers/cboe", optional = true, develop = true } openbb-nasdaq = { path = "./providers/nasdaq", optional = true, develop = true } openbb-quandl = { path = "./providers/quandl", optional = true, develop = true } +openbb-seeking-alpha = { path = "./providers/seeking_alpha", optional = true, develop = true } openbb-yfinance = { path = "./providers/yfinance", optional = true, develop = true } openbb-charting = { path = "./extensions/charting", optional = true, develop = true } diff --git a/openbb_platform/extensions/stocks/integration/test_stocks_api.py b/openbb_platform/extensions/stocks/integration/test_stocks_api.py index f452c48d628e..b66369855426 100644 --- a/openbb_platform/extensions/stocks/integration/test_stocks_api.py +++ b/openbb_platform/extensions/stocks/integration/test_stocks_api.py @@ -1141,3 +1141,48 @@ def test_stocks_disc_growth_tech_equities(params, headers): result = requests.get(url, headers=headers, timeout=10) assert isinstance(result, requests.Response) assert result.status_code == 200 + + +@pytest.mark.parametrize( + "params", + [({"limit": 10, "provider": "nasdaq"})], +) +@pytest.mark.integration +def test_stocks_disc_top_retail(params, headers): + params = {p: v for p, v in params.items() if v} + + query_str = get_querystring(params, []) + url = f"http://0.0.0.0:8000/api/v1/stocks/disc/top_retail?{query_str}" + result = requests.get(url, headers=headers, timeout=10) + assert isinstance(result, requests.Response) + assert result.status_code == 200 + + +@pytest.mark.parametrize( + "params", + [({"limit": 5, "start_date": "2023-01-01"})], +) +@pytest.mark.integration +def test_stocks_disc_upcoming_release_days(params, headers): + params = {p: v for p, v in params.items() if v} + + query_str = get_querystring(params, []) + url = f"http://0.0.0.0:8000/api/v1/stocks/disc/upcoming_release_days?{query_str}" + result = requests.get(url, headers=headers, timeout=10) + assert isinstance(result, requests.Response) + assert result.status_code == 200 + + +@pytest.mark.parametrize( + "params", + [({"pages": 1, "limit": 5, "today": True, "provider": "fmp"})], +) +@pytest.mark.integration +def test_stocks_disc_filings(params, headers): + params = {p: v for p, v in params.items() if v} + + query_str = get_querystring(params, []) + url = f"http://0.0.0.0:8000/api/v1/stocks/disc/filings?{query_str}" + result = requests.get(url, headers=headers, timeout=10) + assert isinstance(result, requests.Response) + assert result.status_code == 200 diff --git a/openbb_platform/extensions/stocks/integration/test_stocks_python.py b/openbb_platform/extensions/stocks/integration/test_stocks_python.py index 6a28f7f5293e..c43e7e2fe450 100644 --- a/openbb_platform/extensions/stocks/integration/test_stocks_python.py +++ b/openbb_platform/extensions/stocks/integration/test_stocks_python.py @@ -1071,3 +1071,45 @@ def test_stocks_disc_growth_tech_equities(params, obb): assert result assert isinstance(result, OBBject) assert len(result.results) > 0 + + +@pytest.mark.parametrize( + "params", + [({"limit": 10})], +) +@pytest.mark.integration +def test_stocks_disc_top_retail(params, obb): + params = {p: v for p, v in params.items() if v} + + result = obb.stocks.disc.top_retail(**params) + assert result + assert isinstance(result, OBBject) + assert len(result.results) > 0 + + +@pytest.mark.parametrize( + "params", + [({"limit": 5, "start_date": "2023-01-01"})], +) +@pytest.mark.integration +def test_stocks_disc_upcoming_release_days(params, obb): + params = {p: v for p, v in params.items() if v} + + result = obb.stocks.disc.upcoming_release_days(**params) + assert result + assert isinstance(result, OBBject) + assert len(result.results) > 0 + + +@pytest.mark.parametrize( + "params", + [({"pages": 1, "limit": 5, "today": True})], +) +@pytest.mark.integration +def test_stocks_disc_filings(params, obb): + params = {p: v for p, v in params.items() if v} + + result = obb.stocks.disc.filings(**params) + assert result + assert isinstance(result, OBBject) + assert len(result.results) > 0 diff --git a/openbb_platform/extensions/stocks/openbb_stocks/disc/disc_router.py b/openbb_platform/extensions/stocks/openbb_stocks/disc/disc_router.py index 7fbab04a96a6..1b801fc30324 100644 --- a/openbb_platform/extensions/stocks/openbb_stocks/disc/disc_router.py +++ b/openbb_platform/extensions/stocks/openbb_stocks/disc/disc_router.py @@ -1,4 +1,5 @@ """Disc router for Equities.""" +# pylint: disable=unused-argument from openbb_core.app.model.command_context import CommandContext from openbb_core.app.model.obbject import OBBject from openbb_core.app.provider_interface import ( @@ -88,3 +89,40 @@ def growth_tech_equities( ) -> OBBject[BaseModel]: """Get growth tech Equities.""" return OBBject(results=Query(**locals()).execute()) + + +@router.command(model="TopRetail") +def top_retail( + cc: CommandContext, + provider_choices: ProviderChoices, + standard_params: StandardParams, + extra_params: ExtraParams, +) -> OBBject[BaseModel]: + """Tracks over $30B USD/day of individual investors trades. + + It gives a daily view into retail activity and sentiment for over 9,500 US traded stocks, + ADRs, and ETPs. + """ + return OBBject(results=Query(**locals()).execute()) + + +@router.command(model="UpcomingReleaseDays") +def upcoming_release_days( + cc: CommandContext, + provider_choices: ProviderChoices, + standard_params: StandardParams, + extra_params: ExtraParams, +) -> OBBject[BaseModel]: + """Get upcoming release days.""" + return OBBject(results=Query(**locals()).execute()) + + +@router.command(model="DiscFilings") +def filings( + cc: CommandContext, + provider_choices: ProviderChoices, + standard_params: StandardParams, + extra_params: ExtraParams, +) -> OBBject[BaseModel]: + """Get the most-recent filings submitted to the SEC.""" + return OBBject(results=Query(**locals()).execute()) diff --git a/openbb_platform/openbb/package/__extensions__.py b/openbb_platform/openbb/package/__extensions__.py index 6cfd2ef5c240..123af67f17dc 100644 --- a/openbb_platform/openbb/package/__extensions__.py +++ b/openbb_platform/openbb/package/__extensions__.py @@ -1,8 +1,24 @@ ### THIS FILE IS AUTO-GENERATED. DO NOT EDIT. ### - from openbb_core.app.static.container import Container - +from openbb_core.app.model.obbject import OBBject +from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +import openbb_provider +import pandas +import datetime +import pydantic +from pydantic import BaseModel +from inspect import Parameter +import typing +from typing import List, Dict, Union, Optional, Literal +from annotated_types import Ge, Le, Gt, Lt +import typing_extensions +from openbb_core.app.utils import df_to_basemodel +from openbb_core.app.static.decorators import validate + +from openbb_core.app.static.filters import filter_inputs + +from openbb_provider.abstract.data import Data class Extensions(Container): # fmt: off @@ -11,11 +27,13 @@ class Extensions(Container): /crypto /econometrics /economy + /etf /fixedincome /forex /futures /news /qa + /regulators /stocks /ta @@ -23,12 +41,14 @@ class Extensions(Container): - crypto@0.1.0a4 - econometrics@0.1.0a4 - economy@0.1.0a4 + - etf@0.1.0a3 - fixedincome@0.1.0a4 - forex@0.1.0a4 - futures@0.1.0a4 - news@0.1.0a4 - openbb_charting@0.1.0a4 - qa@0.1.0a4 + - regulators@0.1.0a4 - stocks@0.1.0a4 - ta@0.1.0a4 @@ -39,71 +59,75 @@ class Extensions(Container): - fmp@0.1.0a4 - fred@0.1.0a4 - intrinio@0.1.0a4 + - nasdaq@0.1.0a4 - oecd@0.1.0a4 - polygon@0.1.0a4 - quandl@0.1.0a4 + - sec@0.1.0a4 + - seeking_alpha@0.1.0a4 - tradingeconomics@0.1.0a4 + - wsj@0.1.0a4 - yfinance@0.1.0a4 """ - # fmt: on +# fmt: on def __repr__(self) -> str: return self.__doc__ or "" @property def crypto(self): # route = "/crypto" from . import crypto - return crypto.ROUTER_crypto(command_runner=self._command_runner) @property def econometrics(self): # route = "/econometrics" from . import econometrics - return econometrics.ROUTER_econometrics(command_runner=self._command_runner) @property def economy(self): # route = "/economy" from . import economy - return economy.ROUTER_economy(command_runner=self._command_runner) + @property + def etf(self): # route = "/etf" + from . import etf + return etf.ROUTER_etf(command_runner=self._command_runner) + @property def fixedincome(self): # route = "/fixedincome" from . import fixedincome - return fixedincome.ROUTER_fixedincome(command_runner=self._command_runner) @property def forex(self): # route = "/forex" from . import forex - return forex.ROUTER_forex(command_runner=self._command_runner) @property def futures(self): # route = "/futures" from . import futures - return futures.ROUTER_futures(command_runner=self._command_runner) @property def news(self): # route = "/news" from . import news - return news.ROUTER_news(command_runner=self._command_runner) @property def qa(self): # route = "/qa" from . import qa - return qa.ROUTER_qa(command_runner=self._command_runner) + @property + def regulators(self): # route = "/regulators" + from . import regulators + return regulators.ROUTER_regulators(command_runner=self._command_runner) + @property def stocks(self): # route = "/stocks" from . import stocks - return stocks.ROUTER_stocks(command_runner=self._command_runner) @property def ta(self): # route = "/ta" from . import ta - return ta.ROUTER_ta(command_runner=self._command_runner) diff --git a/openbb_platform/openbb/package/crypto.py b/openbb_platform/openbb/package/crypto.py index 113b76b6d1e9..acd1fb7ed644 100644 --- a/openbb_platform/openbb/package/crypto.py +++ b/openbb_platform/openbb/package/crypto.py @@ -1,140 +1,123 @@ ### THIS FILE IS AUTO-GENERATED. DO NOT EDIT. ### +from openbb_core.app.static.container import Container +from openbb_core.app.model.obbject import OBBject +from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +import openbb_provider +import pandas import datetime -from typing import List, Literal, Union - +import pydantic +from pydantic import BaseModel +from inspect import Parameter +import typing +from typing import List, Dict, Union, Optional, Literal +from annotated_types import Ge, Le, Gt, Lt import typing_extensions -from openbb_core.app.model.custom_parameter import OpenBBCustomParameter -from openbb_core.app.model.obbject import OBBject -from openbb_core.app.static.container import Container +from openbb_core.app.utils import df_to_basemodel from openbb_core.app.static.decorators import validate + from openbb_core.app.static.filters import filter_inputs -from openbb_provider.abstract.data import Data +from openbb_provider.abstract.data import Data +import openbb_core.app.model.command_context +import openbb_core.app.model.obbject +import types class ROUTER_crypto(Container): """/crypto - load +load """ - def __repr__(self) -> str: return self.__doc__ or "" @validate - def load( - self, - symbol: typing_extensions.Annotated[ - Union[str, List[str]], - OpenBBCustomParameter( - description="Symbol to get data for. Can use CURR1-CURR2 or CURR1CURR2 format." - ), - ], - start_date: typing_extensions.Annotated[ - Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), - ] = None, - end_date: typing_extensions.Annotated[ - Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), - ] = None, - provider: Union[Literal["fmp", "polygon", "yfinance"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def load(self, symbol: typing_extensions.Annotated[Union[str, List[str]], OpenBBCustomParameter(description='Symbol to get data for. Can use CURR1-CURR2 or CURR1CURR2 format.')], start_date: typing_extensions.Annotated[Union[datetime.date, None, str], OpenBBCustomParameter(description='Start date of the data, in YYYY-MM-DD format.')] = None, end_date: typing_extensions.Annotated[Union[datetime.date, None, str], OpenBBCustomParameter(description='End date of the data, in YYYY-MM-DD format.')] = None, provider: Union[Literal['fmp', 'polygon', 'yfinance'], None] = None, **kwargs) -> OBBject[List[Data]]: """Crypto Historical Price. Cryptocurrency historical price data. - Parameters - ---------- - symbol : str - Symbol to get data for. Can use CURR1-CURR2 or CURR1CURR2 format. - start_date : Union[datetime.date, None] - Start date of the data, in YYYY-MM-DD format. - end_date : Union[datetime.date, None] - End date of the data, in YYYY-MM-DD format. - provider : Union[Literal['fmp', 'polygon', 'yfinance'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'fmp' if there is - no default. - timeseries : Optional[Union[typing_extensions.Annotated[int, Ge(ge=0)]]] - Number of days to look back. (provider: fmp) - interval : Optional[Union[Literal['1min', '5min', '15min', '30min', '1hour', '4hour', '1day'], Literal['1m', '2m', '5m', '15m', '30m', '60m', '90m', '1h', '1d', '5d', '1wk', '1mo', '3mo']]] - Data granularity. (provider: fmp, yfinance) - multiplier : int - Multiplier of the timespan. (provider: polygon) - timespan : Literal['minute', 'hour', 'day', 'week', 'month', 'quarter', 'year'] - Timespan of the data. (provider: polygon) - sort : Literal['asc', 'desc'] - Sort order of the data. (provider: polygon) - limit : int - The number of data entries to return. (provider: polygon) - adjusted : bool - Whether the data is adjusted. (provider: polygon) - period : Optional[Union[Literal['1d', '5d', '1mo', '3mo', '6mo', '1y', '2y', '5y', '10y', 'ytd', 'max']]] - Time period of the data to return. (provider: yfinance) +Parameters +---------- +symbol : str + Symbol to get data for. Can use CURR1-CURR2 or CURR1CURR2 format. +start_date : Union[datetime.date, None] + Start date of the data, in YYYY-MM-DD format. +end_date : Union[datetime.date, None] + End date of the data, in YYYY-MM-DD format. +provider : Union[Literal['fmp', 'polygon', 'yfinance'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fmp' if there is + no default. +timeseries : Optional[Union[typing_extensions.Annotated[int, Ge(ge=0)]]] + Number of days to look back. (provider: fmp) +interval : Optional[Union[Literal['1min', '5min', '15min', '30min', '1hour', '4hour', '1day'], Literal['1m', '2m', '5m', '15m', '30m', '60m', '90m', '1h', '1d', '5d', '1wk', '1mo', '3mo']]] + Data granularity. (provider: fmp, yfinance) +multiplier : int + Multiplier of the timespan. (provider: polygon) +timespan : Literal['minute', 'hour', 'day', 'week', 'month', 'quarter', 'year'] + Timespan of the data. (provider: polygon) +sort : Literal['asc', 'desc'] + Sort order of the data. (provider: polygon) +limit : int + The number of data entries to return. (provider: polygon) +adjusted : bool + Whether the data is adjusted. (provider: polygon) +period : Optional[Union[Literal['1d', '5d', '1mo', '3mo', '6mo', '1y', '2y', '5y', '10y', 'ytd', 'max']]] + Time period of the data to return. (provider: yfinance) + +Returns +------- +OBBject + results : Union[List[CryptoHistorical]] + Serializable results. + provider : Union[Literal['fmp', 'polygon', 'yfinance'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. - Returns - ------- - OBBject - results : Union[List[CryptoHistorical]] - Serializable results. - provider : Union[Literal['fmp', 'polygon', 'yfinance'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. +CryptoHistorical +---------------- +date : datetime + The date of the data. +open : float + The open price of the symbol. +high : float + The high price of the symbol. +low : float + The low price of the symbol. +close : float + The close price of the symbol. +volume : float + The volume of the symbol. +vwap : Optional[Union[typing_extensions.Annotated[float, Gt(gt=0)]]] + Volume Weighted Average Price of the symbol. +adj_close : Optional[Union[float]] + Adjusted Close Price of the symbol. (provider: fmp) +unadjusted_volume : Optional[Union[float]] + Unadjusted volume of the symbol. (provider: fmp) +change : Optional[Union[float]] + Change in the price of the symbol from the previous day. (provider: fmp) +change_percent : Optional[Union[float]] + Change % in the price of the symbol. (provider: fmp) +label : Optional[Union[str]] + Human readable format of the date. (provider: fmp) +change_over_time : Optional[Union[float]] + Change % in the price of the symbol over a period of time. (provider: fmp) +transactions : Optional[Union[typing_extensions.Annotated[int, Gt(gt=0)]]] + Number of transactions for the symbol in the time period. (provider: polygon) - CryptoHistorical - ---------------- - date : datetime - The date of the data. - open : float - The open price of the symbol. - high : float - The high price of the symbol. - low : float - The low price of the symbol. - close : float - The close price of the symbol. - volume : float - The volume of the symbol. - vwap : Optional[Union[typing_extensions.Annotated[float, Gt(gt=0)]]] - Volume Weighted Average Price of the symbol. - adj_close : Optional[Union[float]] - Adjusted Close Price of the symbol. (provider: fmp) - unadjusted_volume : Optional[Union[float]] - Unadjusted volume of the symbol. (provider: fmp) - change : Optional[Union[float]] - Change in the price of the symbol from the previous day. (provider: fmp) - change_percent : Optional[Union[float]] - Change % in the price of the symbol. (provider: fmp) - label : Optional[Union[str]] - Human readable format of the date. (provider: fmp) - change_over_time : Optional[Union[float]] - Change % in the price of the symbol over a period of time. (provider: fmp) - transactions : Optional[Union[typing_extensions.Annotated[int, Gt(gt=0)]]] - Number of transactions for the symbol in the time period. (provider: polygon) +Example +------- +>>> from openbb import obb +>>> obb.crypto.load(symbol="BTCUSD") - Example - ------- - >>> from openbb import obb - >>> obb.crypto.load(symbol="BTCUSD") - """ # noqa: E501 +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, - "start_date": start_date, - "end_date": end_date, - }, + provider_choices={"provider": provider, }, + standard_params={"symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, "start_date": start_date, "end_date": end_date, }, extra_params=kwargs, ) @@ -142,3 +125,4 @@ def load( "/crypto/load", **inputs, ) + diff --git a/openbb_platform/openbb/package/econometrics.py b/openbb_platform/openbb/package/econometrics.py index f4a1e9f34227..cef4c68b2d7a 100644 --- a/openbb_platform/openbb/package/econometrics.py +++ b/openbb_platform/openbb/package/econometrics.py @@ -1,64 +1,67 @@ ### THIS FILE IS AUTO-GENERATED. DO NOT EDIT. ### -from typing import Dict, List, Literal, Union - +from openbb_core.app.static.container import Container +from openbb_core.app.model.obbject import OBBject +from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +import openbb_provider import pandas +import datetime +import pydantic +from pydantic import BaseModel +from inspect import Parameter +import typing +from typing import List, Dict, Union, Optional, Literal +from annotated_types import Ge, Le, Gt, Lt import typing_extensions -from annotated_types import Gt -from openbb_core.app.model.obbject import OBBject -from openbb_core.app.static.container import Container +from openbb_core.app.utils import df_to_basemodel from openbb_core.app.static.decorators import validate + from openbb_core.app.static.filters import filter_inputs -from openbb_provider.abstract.data import Data +from openbb_provider.abstract.data import Data +import openbb_core.app.model.obbject +import typing class ROUTER_econometrics(Container): """/econometrics - bgot - coint - corr - dwat - granger - ols - ols_summary - panelbols - panelfd - panelfmac - panelols - panelpols - panelre - unitroot +bgot +coint +corr +dwat +granger +ols +ols_summary +panelbols +panelfd +panelfmac +panelols +panelpols +panelre +unitroot """ - def __repr__(self) -> str: return self.__doc__ or "" @validate(config=dict(arbitrary_types_allowed=True)) - def bgot( - self, - data: Union[List[Data], pandas.DataFrame], - y_column: str, - x_columns: List[str], - lags: typing_extensions.Annotated[int, Gt(gt=0)] = 1, - ) -> OBBject[Data]: + def bgot(self, data: Union[List[Data], pandas.DataFrame], y_column: str, x_columns: List[str], lags: typing_extensions.Annotated[int, Gt(gt=0)] = 1) -> OBBject[Data]: """Perform Breusch-Godfrey Lagrange Multiplier tests for residual autocorrelation. - Parameters - ---------- - data: List[Data] - Input dataset. - y_column: str - Target column. - x_columns: str - List of columns to use as exogenous variables. - lags: PositiveInt - Number of lags to use in the test. - - Returns - ------- - OBBject[Data] - OBBject with the results being the score from the test. - """ # noqa: E501 + Parameters + ---------- + data: List[Data] + Input dataset. + y_column: str + Target column. + x_columns: str + List of columns to use as exogenous variables. + lags: PositiveInt + Number of lags to use in the test. + + Returns + ------- + OBBject[Data] + OBBject with the results being the score from the test. + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -72,26 +75,25 @@ def bgot( **inputs, ) + @validate(config=dict(arbitrary_types_allowed=True)) - def coint( - self, data: Union[List[Data], pandas.DataFrame], columns: List[str] - ) -> OBBject[Data]: + def coint(self, data: Union[List[Data], pandas.DataFrame], columns: List[str]) -> OBBject[Data]: """Show co-integration between two timeseries using the two step Engle-Granger test. - Parameters - ---------- - data: List[Data] - Input dataset. - columns: List[str] - Data columns to check cointegration - maxlag: PositiveInt - Number of lags to use in the test. - - Returns - ------- - OBBject[Data] - OBBject with the results being the score from the test. - """ # noqa: E501 + Parameters + ---------- + data: List[Data] + Input dataset. + columns: List[str] + Data columns to check cointegration + maxlag: PositiveInt + Number of lags to use in the test. + + Returns + ------- + OBBject[Data] + OBBject with the results being the score from the test. + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -103,20 +105,21 @@ def coint( **inputs, ) + @validate(config=dict(arbitrary_types_allowed=True)) def corr(self, data: Union[List[Data], pandas.DataFrame]) -> OBBject[List[Data]]: """Get the corrlelation matrix of an input dataset. - Parameters - ---------- - data : List[Data] - Input dataset. + Parameters + ---------- + data : List[Data] + Input dataset. - Returns - ------- - OBBject[List[Data]] - Correlation matrix. - """ # noqa: E501 + Returns + ------- + OBBject[List[Data]] + Correlation matrix. + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -127,29 +130,25 @@ def corr(self, data: Union[List[Data], pandas.DataFrame]) -> OBBject[List[Data]] **inputs, ) + @validate(config=dict(arbitrary_types_allowed=True)) - def dwat( - self, - data: Union[List[Data], pandas.DataFrame], - y_column: str, - x_columns: List[str], - ) -> OBBject[Dict]: + def dwat(self, data: Union[List[Data], pandas.DataFrame], y_column: str, x_columns: List[str]) -> OBBject[Dict]: """Perform Durbin-Watson test for autocorrelation. - Parameters - ---------- - data: List[Data] - Input dataset. - y_column: str - Target column. - x_columns: str - List of columns to use as exogenous variables. - - Returns - ------- - OBBject[Data] - OBBject with the results being the score from the test. - """ # noqa: E501 + Parameters + ---------- + data: List[Data] + Input dataset. + y_column: str + Target column. + x_columns: str + List of columns to use as exogenous variables. + + Returns + ------- + OBBject[Data] + OBBject with the results being the score from the test. + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -162,32 +161,27 @@ def dwat( **inputs, ) + @validate(config=dict(arbitrary_types_allowed=True)) - def granger( - self, - data: Union[List[Data], pandas.DataFrame], - y_column: str, - x_column: str, - lag: typing_extensions.Annotated[int, Gt(gt=0)] = 3, - ) -> OBBject[Data]: + def granger(self, data: Union[List[Data], pandas.DataFrame], y_column: str, x_column: str, lag: typing_extensions.Annotated[int, Gt(gt=0)] = 3) -> OBBject[Data]: """Perform Granger causality test to determine if X "causes" y. - Parameters - ---------- - data: List[Data] - Input dataset. - y_column: str - Target column. - x_column: str - Columns to use as exogenous variables. - lag: PositiveInt - Number of lags to use in the test. - - Returns - ------- - OBBject[Data] - OBBject with the results being the score from the test. - """ # noqa: E501 + Parameters + ---------- + data: List[Data] + Input dataset. + y_column: str + Target column. + x_column: str + Columns to use as exogenous variables. + lag: PositiveInt + Number of lags to use in the test. + + Returns + ------- + OBBject[Data] + OBBject with the results being the score from the test. + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -201,29 +195,25 @@ def granger( **inputs, ) + @validate(config=dict(arbitrary_types_allowed=True)) - def ols( - self, - data: Union[List[Data], pandas.DataFrame], - y_column: str, - x_columns: List[str], - ) -> OBBject[Dict]: + def ols(self, data: Union[List[Data], pandas.DataFrame], y_column: str, x_columns: List[str]) -> OBBject[Dict]: """Perform OLS regression. This returns the model and results objects from statsmodels. - Parameters - ---------- - data: List[Data] - Input dataset. - y_column: str - Target column. - x_columns: str - List of columns to use as exogenous variables. - - Returns - ------- - OBBject[Dict] - OBBject with the results being model and results objects. - """ # noqa: E501 + Parameters + ---------- + data: List[Data] + Input dataset. + y_column: str + Target column. + x_columns: str + List of columns to use as exogenous variables. + + Returns + ------- + OBBject[Dict] + OBBject with the results being model and results objects. + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -236,29 +226,25 @@ def ols( **inputs, ) + @validate(config=dict(arbitrary_types_allowed=True)) - def ols_summary( - self, - data: Union[List[Data], pandas.DataFrame], - y_column: str, - x_columns: List[str], - ) -> OBBject[Data]: + def ols_summary(self, data: Union[List[Data], pandas.DataFrame], y_column: str, x_columns: List[str]) -> OBBject[Data]: """Perform OLS regression. This returns the summary object from statsmodels. - Parameters - ---------- - data: List[Data] - Input dataset. - y_column: str - Target column. - x_columns: str - List of columns to use as exogenous variables. - - Returns - ------- - OBBject[Dict] - OBBject with the results being summary object. - """ # noqa: E501 + Parameters + ---------- + data: List[Data] + Input dataset. + y_column: str + Target column. + x_columns: str + List of columns to use as exogenous variables. + + Returns + ------- + OBBject[Dict] + OBBject with the results being summary object. + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -271,29 +257,25 @@ def ols_summary( **inputs, ) + @validate(config=dict(arbitrary_types_allowed=True)) - def panelbols( - self, - data: Union[List[Data], pandas.DataFrame], - y_column: str, - x_columns: List[str], - ) -> OBBject[Dict]: + def panelbols(self, data: Union[List[Data], pandas.DataFrame], y_column: str, x_columns: List[str]) -> OBBject[Dict]: """Perform a Between estimator regression on panel data. - Parameters - ---------- - data: List[Data] - Input dataset. - y_column: str - Target column. - x_columns: str - List of columns to use as exogenous variables. - - Returns - ------- - OBBject[Dict] - OBBject with the fit model returned - """ # noqa: E501 + Parameters + ---------- + data: List[Data] + Input dataset. + y_column: str + Target column. + x_columns: str + List of columns to use as exogenous variables. + + Returns + ------- + OBBject[Dict] + OBBject with the fit model returned + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -306,29 +288,25 @@ def panelbols( **inputs, ) + @validate(config=dict(arbitrary_types_allowed=True)) - def panelfd( - self, - data: Union[List[Data], pandas.DataFrame], - y_column: str, - x_columns: List[str], - ) -> OBBject[Dict]: + def panelfd(self, data: Union[List[Data], pandas.DataFrame], y_column: str, x_columns: List[str]) -> OBBject[Dict]: """Perform a first-difference estimate for panel data. - Parameters - ---------- - data: List[Data] - Input dataset. - y_column: str - Target column. - x_columns: str - List of columns to use as exogenous variables. - - Returns - ------- - OBBject[Dict] - OBBject with the fit model returned - """ # noqa: E501 + Parameters + ---------- + data: List[Data] + Input dataset. + y_column: str + Target column. + x_columns: str + List of columns to use as exogenous variables. + + Returns + ------- + OBBject[Dict] + OBBject with the fit model returned + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -341,29 +319,25 @@ def panelfd( **inputs, ) + @validate(config=dict(arbitrary_types_allowed=True)) - def panelfmac( - self, - data: Union[List[Data], pandas.DataFrame], - y_column: str, - x_columns: List[str], - ) -> OBBject[Dict]: + def panelfmac(self, data: Union[List[Data], pandas.DataFrame], y_column: str, x_columns: List[str]) -> OBBject[Dict]: """Fama-MacBeth estimator for panel data. - Parameters - ---------- - data: List[Data] - Input dataset. - y_column: str - Target column. - x_columns: str - List of columns to use as exogenous variables. - - Returns - ------- - OBBject[Dict] - OBBject with the fit model returned - """ # noqa: E501 + Parameters + ---------- + data: List[Data] + Input dataset. + y_column: str + Target column. + x_columns: str + List of columns to use as exogenous variables. + + Returns + ------- + OBBject[Dict] + OBBject with the fit model returned + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -376,29 +350,25 @@ def panelfmac( **inputs, ) + @validate(config=dict(arbitrary_types_allowed=True)) - def panelols( - self, - data: Union[List[Data], pandas.DataFrame], - y_column: str, - x_columns: List[str], - ) -> OBBject[Dict]: + def panelols(self, data: Union[List[Data], pandas.DataFrame], y_column: str, x_columns: List[str]) -> OBBject[Dict]: """One- and two-way fixed effects estimator for panel data. - Parameters - ---------- - data: List[Data] - Input dataset. - y_column: str - Target column. - x_columns: str - List of columns to use as exogenous variables. - - Returns - ------- - OBBject[Dict] - OBBject with the fit model returned - """ # noqa: E501 + Parameters + ---------- + data: List[Data] + Input dataset. + y_column: str + Target column. + x_columns: str + List of columns to use as exogenous variables. + + Returns + ------- + OBBject[Dict] + OBBject with the fit model returned + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -411,29 +381,25 @@ def panelols( **inputs, ) + @validate(config=dict(arbitrary_types_allowed=True)) - def panelpols( - self, - data: Union[List[Data], pandas.DataFrame], - y_column: str, - x_columns: List[str], - ) -> OBBject[Dict]: + def panelpols(self, data: Union[List[Data], pandas.DataFrame], y_column: str, x_columns: List[str]) -> OBBject[Dict]: """Perform a Pooled coefficvient estimator regression on panel data. - Parameters - ---------- - data: List[Data] - Input dataset. - y_column: str - Target column. - x_columns: str - List of columns to use as exogenous variables. - - Returns - ------- - OBBject[Dict] - OBBject with the fit model returned - """ # noqa: E501 + Parameters + ---------- + data: List[Data] + Input dataset. + y_column: str + Target column. + x_columns: str + List of columns to use as exogenous variables. + + Returns + ------- + OBBject[Dict] + OBBject with the fit model returned + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -446,29 +412,25 @@ def panelpols( **inputs, ) + @validate(config=dict(arbitrary_types_allowed=True)) - def panelre( - self, - data: Union[List[Data], pandas.DataFrame], - y_column: str, - x_columns: List[str], - ) -> OBBject[Dict]: + def panelre(self, data: Union[List[Data], pandas.DataFrame], y_column: str, x_columns: List[str]) -> OBBject[Dict]: """Perform One-way Random Effects model for panel data. - Parameters - ---------- - data: List[Data] - Input dataset. - y_column: str - Target column. - x_columns: str - List of columns to use as exogenous variables. - - Returns - ------- - OBBject[Dict] - OBBject with the fit model returned - """ # noqa: E501 + Parameters + ---------- + data: List[Data] + Input dataset. + y_column: str + Target column. + x_columns: str + List of columns to use as exogenous variables. + + Returns + ------- + OBBject[Dict] + OBBject with the fit model returned + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -481,30 +443,26 @@ def panelre( **inputs, ) + @validate(config=dict(arbitrary_types_allowed=True)) - def unitroot( - self, - data: Union[List[Data], pandas.DataFrame], - column: str, - regression: Literal["c", "ct", "ctt"] = "c", - ) -> OBBject[Data]: + def unitroot(self, data: Union[List[Data], pandas.DataFrame], column: str, regression: Literal['c', 'ct', 'ctt'] = 'c') -> OBBject[Data]: """Perform Augmented Dickey-Fuller unit root test. - Parameters - ---------- - data: List[Data] - Input dataset. - column: str - Data columns to check unit root - regression: str - Regression type to use in the test. Either "c" for constant only, "ct" for constant and trend, or "ctt" for - constant, trend, and trend-squared. - - Returns - ------- - OBBject[Data] - OBBject with the results being the score from the test. - """ # noqa: E501 + Parameters + ---------- + data: List[Data] + Input dataset. + column: str + Data columns to check unit root + regression: str + Regression type to use in the test. Either "c" for constant only, "ct" for constant and trend, or "ctt" for + constant, trend, and trend-squared. + + Returns + ------- + OBBject[Data] + OBBject with the results being the score from the test. + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -516,3 +474,4 @@ def unitroot( "/econometrics/unitroot", **inputs, ) + diff --git a/openbb_platform/openbb/package/economy.py b/openbb_platform/openbb/package/economy.py index 075ca094857d..49014979e4f3 100644 --- a/openbb_platform/openbb/package/economy.py +++ b/openbb_platform/openbb/package/economy.py @@ -23,105 +23,100 @@ import openbb_core.app.model.obbject import types - class ROUTER_economy(Container): """/economy - available_indices - calendar - const - cot - cot_search - cpi - european_index - european_index_constituents - fred_index - gdpforecast - gdpnom - gdpreal - index - index_search - index_snapshots - risk - sp500_multiples +available_indices +calendar +const +cot +cot_search +cpi +european_index +european_index_constituents +fred_index +gdpforecast +gdpnom +gdpreal +index +index_search +index_snapshots +risk +sp500_multiples """ - def __repr__(self) -> str: return self.__doc__ or "" @validate - def available_indices( - self, provider: Union[Literal["cboe", "fmp", "yfinance"], None] = None, **kwargs - ) -> OBBject[List[Data]]: + def available_indices(self, provider: Union[Literal['cboe', 'fmp', 'yfinance'], None] = None, **kwargs) -> OBBject[List[Data]]: """Available Indices. Available indices for a given provider. - Parameters - ---------- - provider : Union[Literal['cboe', 'fmp', 'yfinance'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'cboe' if there is - no default. - europe : bool - Filter for European indices. False for US indices. (provider: cboe) - - Returns - ------- - OBBject - results : Union[List[AvailableIndices]] - Serializable results. - provider : Union[Literal['cboe', 'fmp', 'yfinance'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - AvailableIndices - ---------------- - name : Optional[Union[str]] - Name of the index. - currency : Optional[Union[str]] - Currency the index is traded in. - isin : Optional[Union[str]] - ISIN code for the index. Valid only for European indices. (provider: cboe) - region : Optional[Union[str]] - Region for the index. Valid only for European indices (provider: cboe) - symbol : Optional[Union[str]] - Symbol for the index. (provider: cboe, yfinance) - description : Optional[Union[str]] - Description for the index. Valid only for US indices. (provider: cboe) - data_delay : Optional[Union[int]] - Data delay for the index. Valid only for US indices. (provider: cboe) - open_time : Optional[Union[datetime.time]] - Opening time for the index. Valid only for US indices. (provider: cboe) - close_time : Optional[Union[datetime.time]] - Closing time for the index. Valid only for US indices. (provider: cboe) - time_zone : Optional[Union[str]] - Time zone for the index. Valid only for US indices. (provider: cboe) - tick_days : Optional[Union[str]] - The trading days for the index. Valid only for US indices. (provider: cboe) - tick_frequency : Optional[Union[str]] - The frequency of the index ticks. Valid only for US indices. (provider: cboe) - tick_period : Optional[Union[str]] - The period of the index ticks. Valid only for US indices. (provider: cboe) - stock_exchange : Optional[Union[str]] - Stock exchange where the index is listed. (provider: fmp) - exchange_short_name : Optional[Union[str]] - Short name of the stock exchange where the index is listed. (provider: fmp) - code : Optional[Union[str]] - ID code for keying the index in the OpenBB Terminal. (provider: yfinance) - - Example - ------- - >>> from openbb import obb - >>> obb.economy.available_indices() - """ # noqa: E501 +Parameters +---------- +provider : Union[Literal['cboe', 'fmp', 'yfinance'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'cboe' if there is + no default. +europe : bool + Filter for European indices. False for US indices. (provider: cboe) + +Returns +------- +OBBject + results : Union[List[AvailableIndices]] + Serializable results. + provider : Union[Literal['cboe', 'fmp', 'yfinance'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +AvailableIndices +---------------- +name : Optional[Union[str]] + Name of the index. +currency : Optional[Union[str]] + Currency the index is traded in. +isin : Optional[Union[str]] + ISIN code for the index. Valid only for European indices. (provider: cboe) +region : Optional[Union[str]] + Region for the index. Valid only for European indices (provider: cboe) +symbol : Optional[Union[str]] + Symbol for the index. (provider: cboe, yfinance) +description : Optional[Union[str]] + Description for the index. Valid only for US indices. (provider: cboe) +data_delay : Optional[Union[int]] + Data delay for the index. Valid only for US indices. (provider: cboe) +open_time : Optional[Union[datetime.time]] + Opening time for the index. Valid only for US indices. (provider: cboe) +close_time : Optional[Union[datetime.time]] + Closing time for the index. Valid only for US indices. (provider: cboe) +time_zone : Optional[Union[str]] + Time zone for the index. Valid only for US indices. (provider: cboe) +tick_days : Optional[Union[str]] + The trading days for the index. Valid only for US indices. (provider: cboe) +tick_frequency : Optional[Union[str]] + The frequency of the index ticks. Valid only for US indices. (provider: cboe) +tick_period : Optional[Union[str]] + The period of the index ticks. Valid only for US indices. (provider: cboe) +stock_exchange : Optional[Union[str]] + Stock exchange where the index is listed. (provider: fmp) +exchange_short_name : Optional[Union[str]] + Short name of the stock exchange where the index is listed. (provider: fmp) +code : Optional[Union[str]] + ID code for keying the index in the OpenBB Terminal. (provider: yfinance) + +Example +------- +>>> from openbb import obb +>>> obb.economy.available_indices() + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, + provider_choices={"provider": provider, }, standard_params={}, extra_params=kwargs, ) @@ -131,112 +126,93 @@ def available_indices( **inputs, ) + @validate - def calendar( - self, - start_date: typing_extensions.Annotated[ - Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), - ] = None, - end_date: typing_extensions.Annotated[ - Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), - ] = None, - provider: Union[Literal["fmp", "tradingeconomics"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def calendar(self, start_date: typing_extensions.Annotated[Union[datetime.date, None, str], OpenBBCustomParameter(description='Start date of the data, in YYYY-MM-DD format.')] = None, end_date: typing_extensions.Annotated[Union[datetime.date, None, str], OpenBBCustomParameter(description='End date of the data, in YYYY-MM-DD format.')] = None, provider: Union[Literal['fmp', 'nasdaq', 'tradingeconomics'], None] = None, **kwargs) -> OBBject[List[Data]]: """Economic Calendar. - Parameters - ---------- - start_date : Union[datetime.date, None] - Start date of the data, in YYYY-MM-DD format. - end_date : Union[datetime.date, None] - End date of the data, in YYYY-MM-DD format. - provider : Union[Literal['fmp', 'tradingeconomics'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'fmp' if there is - no default. - country : Optional[Union[List[str], str]] - Country of the event (provider: tradingeconomics) - importance : Literal['Low', 'Medium', 'High'] - Importance of the event. (provider: tradingeconomics) - group : Literal['interest rate', 'inflation', 'bonds', 'consumer', 'gdp', 'government', 'housing', 'labour', 'markets', 'money', 'prices', 'trade', 'business'] - Grouping of events (provider: tradingeconomics) - - Returns - ------- - OBBject - results : Union[List[EconomicCalendar]] - Serializable results. - provider : Union[Literal['fmp', 'tradingeconomics'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - EconomicCalendar - ---------------- - date : Optional[Union[datetime]] - The date of the data. - country : Optional[Union[str]] - Country of event. - event : Optional[Union[str]] - Event name. - reference : Optional[Union[str]] - Abbreviated period for which released data refers to. - source : Optional[Union[str]] - Source of the data. - sourceurl : Optional[Union[str]] - Source URL. - actual : Optional[Union[str, float]] - Latest released value. - previous : Optional[Union[str, float]] - Value for the previous period after the revision (if revision is applicable). - consensus : Optional[Union[str, float]] - Average forecast among a representative group of economists. - forecast : Optional[Union[str, float]] - Trading Economics projections - url : Optional[Union[str]] - Trading Economics URL - importance : Optional[Union[Literal[0, 1, 2, 3], str]] - Importance of the event. 1-Low, 2-Medium, 3-High - currency : Optional[Union[str]] - Currency of the data. - unit : Optional[Union[str]] - Unit of the data. - change : Optional[Union[float]] - Value change since previous. (provider: fmp) - change_percent : Optional[Union[float]] - Percentage change since previous. (provider: fmp) - updated_at : Optional[Union[datetime]] - Last updated timestamp. (provider: fmp) - created_at : Optional[Union[datetime]] - Created at timestamp. (provider: fmp) - category : Optional[Union[str]] - Category of event. (provider: tradingeconomics) - - Example - ------- - >>> from openbb import obb - >>> obb.economy.calendar() - """ # noqa: E501 +Parameters +---------- +start_date : Union[datetime.date, None] + Start date of the data, in YYYY-MM-DD format. +end_date : Union[datetime.date, None] + End date of the data, in YYYY-MM-DD format. +provider : Union[Literal['fmp', 'nasdaq', 'tradingeconomics'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fmp' if there is + no default. +country : Optional[Union[List[str], str]] + Country of the event (provider: nasdaq, tradingeconomics) +importance : Literal['Low', 'Medium', 'High'] + Importance of the event. (provider: tradingeconomics) +group : Literal['interest rate', 'inflation', 'bonds', 'consumer', 'gdp', 'government', 'housing', 'labour', 'markets', 'money', 'prices', 'trade', 'business'] + Grouping of events (provider: tradingeconomics) + +Returns +------- +OBBject + results : Union[List[EconomicCalendar]] + Serializable results. + provider : Union[Literal['fmp', 'nasdaq', 'tradingeconomics'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +EconomicCalendar +---------------- +date : Optional[Union[datetime]] + The date of the data. +country : Optional[Union[str]] + Country of event. +event : Optional[Union[str]] + Event name. +reference : Optional[Union[str]] + Abbreviated period for which released data refers to. +source : Optional[Union[str]] + Source of the data. +sourceurl : Optional[Union[str]] + Source URL. +actual : Optional[Union[str, float]] + Latest released value. +previous : Optional[Union[str, float]] + Value for the previous period after the revision (if revision is applicable). +consensus : Optional[Union[str, float]] + Average forecast among a representative group of economists. +forecast : Optional[Union[str, float]] + Trading Economics projections +url : Optional[Union[str]] + Trading Economics URL +importance : Optional[Union[Literal[0, 1, 2, 3], str]] + Importance of the event. 1-Low, 2-Medium, 3-High +currency : Optional[Union[str]] + Currency of the data. +unit : Optional[Union[str]] + Unit of the data. +change : Optional[Union[float]] + Value change since previous. (provider: fmp) +change_percent : Optional[Union[float]] + Percentage change since previous. (provider: fmp) +updated_at : Optional[Union[datetime]] + Last updated timestamp. (provider: fmp) +created_at : Optional[Union[datetime]] + Created at timestamp. (provider: fmp) +description : Optional[Union[str]] + Event description. (provider: nasdaq) + +Example +------- +>>> from openbb import obb +>>> obb.economy.calendar() + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "start_date": start_date, - "end_date": end_date, - }, + provider_choices={"provider": provider, }, + standard_params={"start_date": start_date, "end_date": end_date, }, extra_params=kwargs, ) @@ -245,75 +221,63 @@ def calendar( **inputs, ) + @validate - def const( - self, - index: typing_extensions.Annotated[ - Literal["nasdaq", "sp500", "dowjones"], - OpenBBCustomParameter( - description="Index for which we want to fetch the constituents." - ), - ] = "dowjones", - provider: Union[Literal["fmp"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def const(self, index: typing_extensions.Annotated[Literal['nasdaq', 'sp500', 'dowjones'], OpenBBCustomParameter(description='Index for which we want to fetch the constituents.')] = 'dowjones', provider: Union[Literal['fmp'], None] = None, **kwargs) -> OBBject[List[Data]]: """Major Indices Constituents. Constituents of an index. - Parameters - ---------- - index : Literal['nasdaq', 'sp500', 'dowjones'] - Index for which we want to fetch the constituents. - provider : Union[Literal['fmp'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'fmp' if there is - no default. - - Returns - ------- - OBBject - results : Union[List[MajorIndicesConstituents]] - Serializable results. - provider : Union[Literal['fmp'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - MajorIndicesConstituents - ------------------------ - symbol : str - Symbol representing the entity requested in the data. - name : str - Name of the constituent company in the index. - sector : str - Sector the constituent company in the index belongs to. - sub_sector : Optional[Union[str]] - Sub-sector the constituent company in the index belongs to. - headquarter : Optional[Union[str]] - Location of the headquarter of the constituent company in the index. - date_first_added : Optional[Union[date, str]] - Date the constituent company was added to the index. - cik : int - Central Index Key of the constituent company in the index. - founded : Optional[Union[date, str]] - Founding year of the constituent company in the index. - - Example - ------- - >>> from openbb import obb - >>> obb.economy.const(index="dowjones") - """ # noqa: E501 +Parameters +---------- +index : Literal['nasdaq', 'sp500', 'dowjones'] + Index for which we want to fetch the constituents. +provider : Union[Literal['fmp'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fmp' if there is + no default. + +Returns +------- +OBBject + results : Union[List[MajorIndicesConstituents]] + Serializable results. + provider : Union[Literal['fmp'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +MajorIndicesConstituents +------------------------ +symbol : str + Symbol representing the entity requested in the data. +name : str + Name of the constituent company in the index. +sector : str + Sector the constituent company in the index belongs to. +sub_sector : Optional[Union[str]] + Sub-sector the constituent company in the index belongs to. +headquarter : Optional[Union[str]] + Location of the headquarter of the constituent company in the index. +date_first_added : Optional[Union[str, date]] + Date the constituent company was added to the index. +cik : int + Central Index Key of the constituent company in the index. +founded : Optional[Union[str, date]] + Founding year of the constituent company in the index. + +Example +------- +>>> from openbb import obb +>>> obb.economy.const(index="dowjones") + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "index": index, - }, + provider_choices={"provider": provider, }, + standard_params={"index": index, }, extra_params=kwargs, ) @@ -322,95 +286,93 @@ def const( **inputs, ) + @validate - def cot( - self, provider: Union[Literal["quandl"], None] = None, **kwargs - ) -> OBBject[List[Data]]: + def cot(self, provider: Union[Literal['quandl'], None] = None, **kwargs) -> OBBject[List[Data]]: """Commitment of Traders Reports. Lookup Commitment of Traders Reports by series ID. - Parameters - ---------- - provider : Union[Literal['quandl'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'quandl' if there is - no default. - code : str - - CFTC series code. Use search_cot() to find the code. - Codes not listed in the curated list, but are published by on the Nasdaq Data Link website, are valid. - Certain symbols, such as "ES=F", or exact names are also valid. - Default report is: S&P 500 Consolidated (CME)) - (provider: quandl) - data_type : Optional[Union[Literal['F', 'FO', 'CITS']]] - - The type of data to reuturn. Default is "FO". - - F = Futures only - - FO = Futures and Options - - CITS = Commodity Index Trader Supplemental. Only valid for commodities. - (provider: quandl) - legacy_format : Optional[Union[bool]] - Returns the legacy format of report. Default is False. (provider: quandl) - report_type : Optional[Union[Literal['ALL', 'CHG', 'OLD', 'OTR']]] - - The type of report to return. Default is "ALL". - - ALL = All - - CHG = Change in Positions - - OLD = Old Crop Years - - OTR = Other Crop Years - (provider: quandl) - measure : Optional[Union[Literal['CR', 'NT', 'OI', 'CHG']]] - - The measure to return. Default is None. - - CR = Concentration Ratios - - NT = Number of Traders - - OI = Percent of Open Interest - - CHG = Change in Positions. Only valid when data_type is "CITS". - (provider: quandl) - start_date : Optional[Union[datetime.date]] - The start date of the time series. Defaults to all. (provider: quandl) - end_date : Optional[Union[datetime.date]] - The end date of the time series. Defaults to the most recent data. (provider: quandl) - transform : Optional[Union[Literal['diff', 'rdiff', 'cumul', 'normalize']]] - Transform the data as w/w difference, percent change, cumulative, or normalize. (provider: quandl) - - Returns - ------- - OBBject - results : Union[List[COT]] - Serializable results. - provider : Union[Literal['quandl'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - COT - --- - - Example - ------- - >>> from openbb import obb - >>> obb.economy.cot() - """ # noqa: E501 +Parameters +---------- +provider : Union[Literal['quandl'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'quandl' if there is + no default. +code : str + + CFTC series code. Use search_cot() to find the code. + Codes not listed in the curated list, but are published by on the Nasdaq Data Link website, are valid. + Certain symbols, such as "ES=F", or exact names are also valid. + Default report is: S&P 500 Consolidated (CME)) + (provider: quandl) +data_type : Optional[Union[Literal['F', 'FO', 'CITS']]] + + The type of data to reuturn. Default is "FO". + + F = Futures only + + FO = Futures and Options + + CITS = Commodity Index Trader Supplemental. Only valid for commodities. + (provider: quandl) +legacy_format : Optional[Union[bool]] + Returns the legacy format of report. Default is False. (provider: quandl) +report_type : Optional[Union[Literal['ALL', 'CHG', 'OLD', 'OTR']]] + + The type of report to return. Default is "ALL". + + ALL = All + + CHG = Change in Positions + + OLD = Old Crop Years + + OTR = Other Crop Years + (provider: quandl) +measure : Optional[Union[Literal['CR', 'NT', 'OI', 'CHG']]] + + The measure to return. Default is None. + + CR = Concentration Ratios + + NT = Number of Traders + + OI = Percent of Open Interest + + CHG = Change in Positions. Only valid when data_type is "CITS". + (provider: quandl) +start_date : Optional[Union[datetime.date]] + The start date of the time series. Defaults to all. (provider: quandl) +end_date : Optional[Union[datetime.date]] + The end date of the time series. Defaults to the most recent data. (provider: quandl) +transform : Optional[Union[Literal['diff', 'rdiff', 'cumul', 'normalize']]] + Transform the data as w/w difference, percent change, cumulative, or normalize. (provider: quandl) + +Returns +------- +OBBject + results : Union[List[COT]] + Serializable results. + provider : Union[Literal['quandl'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +COT +--- + +Example +------- +>>> from openbb import obb +>>> obb.economy.cot() + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, + provider_choices={"provider": provider, }, standard_params={}, extra_params=kwargs, ) @@ -420,71 +382,62 @@ def cot( **inputs, ) + @validate - def cot_search( - self, - query: typing_extensions.Annotated[ - str, OpenBBCustomParameter(description="Search query.") - ] = "", - provider: Union[Literal["quandl"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def cot_search(self, query: typing_extensions.Annotated[str, OpenBBCustomParameter(description='Search query.')] = '', provider: Union[Literal['quandl'], None] = None, **kwargs) -> OBBject[List[Data]]: """ - Curated Commitment of Traders Reports. - Fuzzy search and list of curated Commitment of Traders Reports series information. - - - Parameters - ---------- - query : str - Search query. - provider : Union[Literal['quandl'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'quandl' if there is - no default. - - Returns - ------- - OBBject - results : Union[List[COTSearch]] - Serializable results. - provider : Union[Literal['quandl'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - COTSearch - --------- - code : str - CFTC Code of the report. - name : str - Name of the underlying asset. - category : Optional[Union[str]] - Category of the underlying asset. - subcategory : Optional[Union[str]] - Subcategory of the underlying asset. - units : Optional[Union[str]] - The units for one contract. - symbol : Optional[Union[str]] - Symbol representing the entity requested in the data. - - Example - ------- - >>> from openbb import obb - >>> obb.economy.cot_search() - """ # noqa: E501 + Curated Commitment of Traders Reports. + Fuzzy search and list of curated Commitment of Traders Reports series information. + + +Parameters +---------- +query : str + Search query. +provider : Union[Literal['quandl'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'quandl' if there is + no default. + +Returns +------- +OBBject + results : Union[List[COTSearch]] + Serializable results. + provider : Union[Literal['quandl'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +COTSearch +--------- +code : str + CFTC Code of the report. +name : str + Name of the underlying asset. +category : Optional[Union[str]] + Category of the underlying asset. +subcategory : Optional[Union[str]] + Subcategory of the underlying asset. +units : Optional[Union[str]] + The units for one contract. +symbol : Optional[Union[str]] + Symbol representing the entity requested in the data. + +Example +------- +>>> from openbb import obb +>>> obb.economy.cot_search() + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "query": query, - }, + provider_choices={"provider": provider, }, + standard_params={"query": query, }, extra_params=kwargs, ) @@ -493,161 +446,64 @@ def cot_search( **inputs, ) + @validate - def cpi( - self, - countries: typing_extensions.Annotated[ - List[ - Literal[ - "australia", - "austria", - "belgium", - "brazil", - "bulgaria", - "canada", - "chile", - "china", - "croatia", - "cyprus", - "czech_republic", - "denmark", - "estonia", - "euro_area", - "finland", - "france", - "germany", - "greece", - "hungary", - "iceland", - "india", - "indonesia", - "ireland", - "israel", - "italy", - "japan", - "korea", - "latvia", - "lithuania", - "luxembourg", - "malta", - "mexico", - "netherlands", - "new_zealand", - "norway", - "poland", - "portugal", - "romania", - "russian_federation", - "slovak_republic", - "slovakia", - "slovenia", - "south_africa", - "spain", - "sweden", - "switzerland", - "turkey", - "united_kingdom", - "united_states", - ] - ], - OpenBBCustomParameter(description="The country or countries to get data."), - ], - units: typing_extensions.Annotated[ - Literal["growth_previous", "growth_same", "index_2015"], - OpenBBCustomParameter( - description="The unit of measurement for the data.\n Options:\n - `growth_previous`: growth from the previous period\n - `growth_same`: growth from the same period in the previous year\n - `index_2015`: index with base year 2015." - ), - ] = "growth_same", - frequency: typing_extensions.Annotated[ - Literal["monthly", "quarter", "annual"], - OpenBBCustomParameter( - description="The frequency of the data.\n Options: `monthly`, `quarter`, and `annual`." - ), - ] = "monthly", - harmonized: typing_extensions.Annotated[ - bool, - OpenBBCustomParameter( - description="Whether you wish to obtain harmonized data." - ), - ] = False, - start_date: typing_extensions.Annotated[ - Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), - ] = None, - end_date: typing_extensions.Annotated[ - Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), - ] = None, - provider: Union[Literal["fred"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def cpi(self, countries: typing_extensions.Annotated[List[Literal['australia', 'austria', 'belgium', 'brazil', 'bulgaria', 'canada', 'chile', 'china', 'croatia', 'cyprus', 'czech_republic', 'denmark', 'estonia', 'euro_area', 'finland', 'france', 'germany', 'greece', 'hungary', 'iceland', 'india', 'indonesia', 'ireland', 'israel', 'italy', 'japan', 'korea', 'latvia', 'lithuania', 'luxembourg', 'malta', 'mexico', 'netherlands', 'new_zealand', 'norway', 'poland', 'portugal', 'romania', 'russian_federation', 'slovak_republic', 'slovakia', 'slovenia', 'south_africa', 'spain', 'sweden', 'switzerland', 'turkey', 'united_kingdom', 'united_states']], OpenBBCustomParameter(description='The country or countries to get data.')], units: typing_extensions.Annotated[Literal['growth_previous', 'growth_same', 'index_2015'], OpenBBCustomParameter(description='The unit of measurement for the data.\n Options:\n - `growth_previous`: growth from the previous period\n - `growth_same`: growth from the same period in the previous year\n - `index_2015`: index with base year 2015.')] = 'growth_same', frequency: typing_extensions.Annotated[Literal['monthly', 'quarter', 'annual'], OpenBBCustomParameter(description='The frequency of the data.\n Options: `monthly`, `quarter`, and `annual`.')] = 'monthly', harmonized: typing_extensions.Annotated[bool, OpenBBCustomParameter(description='Whether you wish to obtain harmonized data.')] = False, start_date: typing_extensions.Annotated[Union[datetime.date, None, str], OpenBBCustomParameter(description='Start date of the data, in YYYY-MM-DD format.')] = None, end_date: typing_extensions.Annotated[Union[datetime.date, None, str], OpenBBCustomParameter(description='End date of the data, in YYYY-MM-DD format.')] = None, provider: Union[Literal['fred'], None] = None, **kwargs) -> OBBject[List[Data]]: """CPI. Consumer Price Index. - Parameters - ---------- - countries : List[Literal['australia', 'austria', 'belgium', 'brazil', 'bulgar... - The country or countries to get data. - units : Literal['growth_previous', 'growth_same', 'index_2015'] - The unit of measurement for the data. - Options: - - `growth_previous`: growth from the previous period - - `growth_same`: growth from the same period in the previous year - - `index_2015`: index with base year 2015. - frequency : Literal['monthly', 'quarter', 'annual'] - The frequency of the data. - Options: `monthly`, `quarter`, and `annual`. - harmonized : bool - Whether you wish to obtain harmonized data. - start_date : Union[datetime.date, None] - Start date of the data, in YYYY-MM-DD format. - end_date : Union[datetime.date, None] - End date of the data, in YYYY-MM-DD format. - provider : Union[Literal['fred'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'fred' if there is - no default. - - Returns - ------- - OBBject - results : Union[List[CPI]] - Serializable results. - provider : Union[Literal['fred'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - CPI - --- - date : date - The date of the data. - - Example - ------- - >>> from openbb import obb - >>> obb.economy.cpi(countries=['portugal', 'spain'], units="growth_same", frequency="monthly") - """ # noqa: E501 +Parameters +---------- +countries : List[Literal['australia', 'austria', 'belgium', 'brazil', 'bulgar... + The country or countries to get data. +units : Literal['growth_previous', 'growth_same', 'index_2015'] + The unit of measurement for the data. + Options: + - `growth_previous`: growth from the previous period + - `growth_same`: growth from the same period in the previous year + - `index_2015`: index with base year 2015. +frequency : Literal['monthly', 'quarter', 'annual'] + The frequency of the data. + Options: `monthly`, `quarter`, and `annual`. +harmonized : bool + Whether you wish to obtain harmonized data. +start_date : Union[datetime.date, None] + Start date of the data, in YYYY-MM-DD format. +end_date : Union[datetime.date, None] + End date of the data, in YYYY-MM-DD format. +provider : Union[Literal['fred'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fred' if there is + no default. + +Returns +------- +OBBject + results : Union[List[CPI]] + Serializable results. + provider : Union[Literal['fred'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +CPI +--- +date : date + The date of the data. + +Example +------- +>>> from openbb import obb +>>> obb.economy.cpi(countries=['portugal', 'spain'], units="growth_same", frequency="monthly") + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "countries": countries, - "units": units, - "frequency": frequency, - "harmonized": harmonized, - "start_date": start_date, - "end_date": end_date, - }, + provider_choices={"provider": provider, }, + standard_params={"countries": countries, "units": units, "frequency": frequency, "harmonized": harmonized, "start_date": start_date, "end_date": end_date, }, extra_params=kwargs, ) @@ -656,89 +512,65 @@ def cpi( **inputs, ) + @validate - def european_index( - self, - symbol: typing_extensions.Annotated[ - Union[str, List[str]], - OpenBBCustomParameter(description="Symbol to get data for."), - ], - start_date: typing_extensions.Annotated[ - Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), - ] = None, - end_date: typing_extensions.Annotated[ - Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), - ] = None, - provider: Union[Literal["cboe"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def european_index(self, symbol: typing_extensions.Annotated[Union[str, List[str]], OpenBBCustomParameter(description='Symbol to get data for.')], start_date: typing_extensions.Annotated[Union[datetime.date, None, str], OpenBBCustomParameter(description='Start date of the data, in YYYY-MM-DD format.')] = None, end_date: typing_extensions.Annotated[Union[datetime.date, None, str], OpenBBCustomParameter(description='End date of the data, in YYYY-MM-DD format.')] = None, provider: Union[Literal['cboe'], None] = None, **kwargs) -> OBBject[List[Data]]: """European Index Historical. Historical close values for selected European indices. - Parameters - ---------- - symbol : str - Symbol to get data for. - start_date : Union[datetime.date, None] - Start date of the data, in YYYY-MM-DD format. - end_date : Union[datetime.date, None] - End date of the data, in YYYY-MM-DD format. - provider : Union[Literal['cboe'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'cboe' if there is - no default. - interval : Optional[Union[Literal['1d', '1m']]] - Data granularity. (provider: cboe) - - Returns - ------- - OBBject - results : Union[List[EuropeanIndexHistorical]] - Serializable results. - provider : Union[Literal['cboe'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - EuropeanIndexHistorical - ----------------------- - date : datetime - The date of the data. - close : float - The close price of the symbol. - open : Optional[Union[float]] - Opening price for the interval. Only valid when interval is 1m. (provider: cboe) - high : Optional[Union[float]] - High price for the interval. Only valid when interval is 1m. (provider: cboe) - low : Optional[Union[float]] - Low price for the interval. Only valid when interval is 1m. (provider: cboe) - utc_datetime : Optional[Union[datetime]] - UTC datetime. Only valid when interval is 1m. (provider: cboe) - - Example - ------- - >>> from openbb import obb - >>> obb.economy.european_index(symbol="BUKBUS") - """ # noqa: E501 +Parameters +---------- +symbol : str + Symbol to get data for. +start_date : Union[datetime.date, None] + Start date of the data, in YYYY-MM-DD format. +end_date : Union[datetime.date, None] + End date of the data, in YYYY-MM-DD format. +provider : Union[Literal['cboe'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'cboe' if there is + no default. +interval : Optional[Union[Literal['1d', '1m']]] + Data granularity. (provider: cboe) + +Returns +------- +OBBject + results : Union[List[EuropeanIndexHistorical]] + Serializable results. + provider : Union[Literal['cboe'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +EuropeanIndexHistorical +----------------------- +date : datetime + The date of the data. +close : float + The close price of the symbol. +open : Optional[Union[float]] + Opening price for the interval. Only valid when interval is 1m. (provider: cboe) +high : Optional[Union[float]] + High price for the interval. Only valid when interval is 1m. (provider: cboe) +low : Optional[Union[float]] + Low price for the interval. Only valid when interval is 1m. (provider: cboe) +utc_datetime : Optional[Union[datetime]] + UTC datetime. Only valid when interval is 1m. (provider: cboe) + +Example +------- +>>> from openbb import obb +>>> obb.economy.european_index(symbol="BUKBUS") + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, - "start_date": start_date, - "end_date": end_date, - }, + provider_choices={"provider": provider, }, + standard_params={"symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, "start_date": start_date, "end_date": end_date, }, extra_params=kwargs, ) @@ -747,87 +579,77 @@ def european_index( **inputs, ) + @validate - def european_index_constituents( - self, - symbol: typing_extensions.Annotated[ - Union[str, List[str]], - OpenBBCustomParameter(description="Symbol to get data for."), - ], - provider: Union[Literal["cboe"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def european_index_constituents(self, symbol: typing_extensions.Annotated[Union[str, List[str]], OpenBBCustomParameter(description='Symbol to get data for.')], provider: Union[Literal['cboe'], None] = None, **kwargs) -> OBBject[List[Data]]: """Get current levels for constituents of select European indices. - Parameters - ---------- - symbol : str - Symbol to get data for. - provider : Union[Literal['cboe'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'cboe' if there is - no default. - - Returns - ------- - OBBject - results : Union[List[EuropeanIndexConstituents]] - Serializable results. - provider : Union[Literal['cboe'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - EuropeanIndexConstituents - ------------------------- - symbol : str - Symbol representing the entity requested in the data. The symbol is the constituent company in the index. - price : float - Current price of the constituent company in the index. - open : float - The open price of the symbol. - high : float - The high price of the symbol. - low : float - The low price of the symbol. - close : float - The close price of the symbol. - volume : float - The volume of the symbol. - prev_close : Optional[Union[float]] - Previous closing price. (provider: cboe) - change : Optional[Union[float]] - Change in price. (provider: cboe) - change_percent : Optional[Union[float]] - Change in price as a percentage. (provider: cboe) - tick : Optional[Union[str]] - Whether the last sale was an up or down tick. (provider: cboe) - last_trade_timestamp : Optional[Union[datetime]] - Last trade timestamp for the symbol. (provider: cboe) - exchange_id : Optional[Union[int]] - The Exchange ID number. (provider: cboe) - seqno : Optional[Union[int]] - Sequence number of the last trade on the tape. (provider: cboe) - asset_type : Optional[Union[str]] - Type of asset. (provider: cboe) - - Example - ------- - >>> from openbb import obb - >>> obb.economy.european_index_constituents(symbol="BUKBUS") - """ # noqa: E501 +Parameters +---------- +symbol : str + Symbol to get data for. +provider : Union[Literal['cboe'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'cboe' if there is + no default. + +Returns +------- +OBBject + results : Union[List[EuropeanIndexConstituents]] + Serializable results. + provider : Union[Literal['cboe'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +EuropeanIndexConstituents +------------------------- +symbol : str + Symbol representing the entity requested in the data. The symbol is the constituent company in the index. +price : float + Current price of the constituent company in the index. +open : float + The open price of the symbol. +high : float + The high price of the symbol. +low : float + The low price of the symbol. +close : float + The close price of the symbol. +volume : float + The volume of the symbol. +prev_close : Optional[Union[float]] + Previous closing price. (provider: cboe) +change : Optional[Union[float]] + Change in price. (provider: cboe) +change_percent : Optional[Union[float]] + Change in price as a percentage. (provider: cboe) +tick : Optional[Union[str]] + Whether the last sale was an up or down tick. (provider: cboe) +last_trade_timestamp : Optional[Union[datetime]] + Last trade timestamp for the symbol. (provider: cboe) +exchange_id : Optional[Union[int]] + The Exchange ID number. (provider: cboe) +seqno : Optional[Union[int]] + Sequence number of the last trade on the tape. (provider: cboe) +asset_type : Optional[Union[str]] + Type of asset. (provider: cboe) + +Example +------- +>>> from openbb import obb +>>> obb.economy.european_index_constituents(symbol="BUKBUS") + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, - }, + provider_choices={"provider": provider, }, + standard_params={"symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, }, extra_params=kwargs, ) @@ -836,90 +658,61 @@ def european_index_constituents( **inputs, ) + @validate - def fred_index( - self, - symbol: typing_extensions.Annotated[ - Union[str, List[str]], - OpenBBCustomParameter(description="Symbol to get data for."), - ], - start_date: typing_extensions.Annotated[ - Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), - ] = None, - end_date: typing_extensions.Annotated[ - Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), - ] = None, - limit: typing_extensions.Annotated[ - Union[int, None], - OpenBBCustomParameter(description="The number of data entries to return."), - ] = 100, - provider: Union[Literal["intrinio"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def fred_index(self, symbol: typing_extensions.Annotated[Union[str, List[str]], OpenBBCustomParameter(description='Symbol to get data for.')], start_date: typing_extensions.Annotated[Union[datetime.date, None, str], OpenBBCustomParameter(description='Start date of the data, in YYYY-MM-DD format.')] = None, end_date: typing_extensions.Annotated[Union[datetime.date, None, str], OpenBBCustomParameter(description='End date of the data, in YYYY-MM-DD format.')] = None, limit: typing_extensions.Annotated[Union[int, None], OpenBBCustomParameter(description='The number of data entries to return.')] = 100, provider: Union[Literal['intrinio'], None] = None, **kwargs) -> OBBject[List[Data]]: """Fred Historical. Historical close values for selected Fred indices. - Parameters - ---------- - symbol : str - Symbol to get data for. - start_date : Union[datetime.date, None] - Start date of the data, in YYYY-MM-DD format. - end_date : Union[datetime.date, None] - End date of the data, in YYYY-MM-DD format. - limit : Union[int, None] - The number of data entries to return. - provider : Union[Literal['intrinio'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'intrinio' if there is - no default. - next_page : Optional[Union[str]] - Token to get the next page of data from a previous API call. (provider: intrinio) - all_pages : Optional[Union[bool]] - Returns all pages of data from the API call at once. (provider: intrinio) - - Returns - ------- - OBBject - results : Union[List[FredHistorical]] - Serializable results. - provider : Union[Literal['intrinio'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - FredHistorical - -------------- - date : date - The date of the data. - value : Optional[Union[typing_extensions.Annotated[float, Gt(gt=0)]]] - Value of the index. - - Example - ------- - >>> from openbb import obb - >>> obb.economy.fred_index(symbol="SPX", limit=100) - """ # noqa: E501 +Parameters +---------- +symbol : str + Symbol to get data for. +start_date : Union[datetime.date, None] + Start date of the data, in YYYY-MM-DD format. +end_date : Union[datetime.date, None] + End date of the data, in YYYY-MM-DD format. +limit : Union[int, None] + The number of data entries to return. +provider : Union[Literal['intrinio'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'intrinio' if there is + no default. +next_page : Optional[Union[str]] + Token to get the next page of data from a previous API call. (provider: intrinio) +all_pages : Optional[Union[bool]] + Returns all pages of data from the API call at once. (provider: intrinio) + +Returns +------- +OBBject + results : Union[List[FredHistorical]] + Serializable results. + provider : Union[Literal['intrinio'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +FredHistorical +-------------- +date : date + The date of the data. +value : Optional[Union[typing_extensions.Annotated[float, Gt(gt=0)]]] + Value of the index. + +Example +------- +>>> from openbb import obb +>>> obb.economy.fred_index(symbol="SPX", limit=100) + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, - "start_date": start_date, - "end_date": end_date, - "limit": limit, - }, + provider_choices={"provider": provider, }, + standard_params={"symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, "start_date": start_date, "end_date": end_date, "limit": limit, }, extra_params=kwargs, ) @@ -928,92 +721,59 @@ def fred_index( **inputs, ) + @validate - def gdpforecast( - self, - period: typing_extensions.Annotated[ - Literal["quarter", "annual"], - OpenBBCustomParameter( - description="Time period of the data to return. Units for nominal GDP period. Either quarter or annual." - ), - ] = "annual", - start_date: typing_extensions.Annotated[ - Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), - ] = None, - end_date: typing_extensions.Annotated[ - Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), - ] = None, - type: typing_extensions.Annotated[ - Literal["nominal", "real"], - OpenBBCustomParameter( - description="Type of GDP to get forecast of. Either nominal or real." - ), - ] = "real", - provider: Union[Literal["oecd"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def gdpforecast(self, period: typing_extensions.Annotated[Literal['quarter', 'annual'], OpenBBCustomParameter(description='Time period of the data to return. Units for nominal GDP period. Either quarter or annual.')] = 'annual', start_date: typing_extensions.Annotated[Union[datetime.date, None, str], OpenBBCustomParameter(description='Start date of the data, in YYYY-MM-DD format.')] = None, end_date: typing_extensions.Annotated[Union[datetime.date, None, str], OpenBBCustomParameter(description='End date of the data, in YYYY-MM-DD format.')] = None, type: typing_extensions.Annotated[Literal['nominal', 'real'], OpenBBCustomParameter(description='Type of GDP to get forecast of. Either nominal or real.')] = 'real', provider: Union[Literal['oecd'], None] = None, **kwargs) -> OBBject[List[Data]]: """GDP Data. - Parameters - ---------- - period : Literal['quarter', 'annual'] - Time period of the data to return. Units for nominal GDP period. Either quarter or annual. - start_date : Union[datetime.date, None] - Start date of the data, in YYYY-MM-DD format. - end_date : Union[datetime.date, None] - End date of the data, in YYYY-MM-DD format. - type : Literal['nominal', 'real'] - Type of GDP to get forecast of. Either nominal or real. - provider : Union[Literal['oecd'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'oecd' if there is - no default. - country : Literal['argentina', 'asia', 'australia', 'austria', 'belgium', 'brazil', 'bulgaria', 'canada', 'chile', 'china', 'colombia', 'costa_rica', 'croatia', 'czech_republic', 'denmark', 'estonia', 'euro_area_17', 'finland', 'france', 'germany', 'greece', 'hungary', 'iceland', 'india', 'indonesia', 'ireland', 'israel', 'italy', 'japan', 'korea', 'latvia', 'lithuania', 'luxembourg', 'mexico', 'netherlands', 'new_zealand', 'non-oecd', 'norway', 'oecd_total', 'peru', 'poland', 'portugal', 'romania', 'russia', 'slovak_republic', 'slovenia', 'south_africa', 'spain', 'sweden', 'switzerland', 'turkey', 'united_kingdom', 'united_states', 'world'] - Country to get GDP for. (provider: oecd) - - Returns - ------- - OBBject - results : Union[List[GDPForecast]] - Serializable results. - provider : Union[Literal['oecd'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - GDPForecast - ----------- - date : Optional[Union[date]] - The date of the data. - value : Optional[Union[float]] - Nominal GDP value on the date. - - Example - ------- - >>> from openbb import obb - >>> obb.economy.gdpforecast(period="annual", type="real") - """ # noqa: E501 +Parameters +---------- +period : Literal['quarter', 'annual'] + Time period of the data to return. Units for nominal GDP period. Either quarter or annual. +start_date : Union[datetime.date, None] + Start date of the data, in YYYY-MM-DD format. +end_date : Union[datetime.date, None] + End date of the data, in YYYY-MM-DD format. +type : Literal['nominal', 'real'] + Type of GDP to get forecast of. Either nominal or real. +provider : Union[Literal['oecd'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'oecd' if there is + no default. +country : Literal['argentina', 'asia', 'australia', 'austria', 'belgium', 'brazil', 'bulgaria', 'canada', 'chile', 'china', 'colombia', 'costa_rica', 'croatia', 'czech_republic', 'denmark', 'estonia', 'euro_area_17', 'finland', 'france', 'germany', 'greece', 'hungary', 'iceland', 'india', 'indonesia', 'ireland', 'israel', 'italy', 'japan', 'korea', 'latvia', 'lithuania', 'luxembourg', 'mexico', 'netherlands', 'new_zealand', 'non-oecd', 'norway', 'oecd_total', 'peru', 'poland', 'portugal', 'romania', 'russia', 'slovak_republic', 'slovenia', 'south_africa', 'spain', 'sweden', 'switzerland', 'turkey', 'united_kingdom', 'united_states', 'world'] + Country to get GDP for. (provider: oecd) + +Returns +------- +OBBject + results : Union[List[GDPForecast]] + Serializable results. + provider : Union[Literal['oecd'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +GDPForecast +----------- +date : Optional[Union[date]] + The date of the data. +value : Optional[Union[float]] + Nominal GDP value on the date. + +Example +------- +>>> from openbb import obb +>>> obb.economy.gdpforecast(period="annual", type="real") + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "period": period, - "start_date": start_date, - "end_date": end_date, - "type": type, - }, + provider_choices={"provider": provider, }, + standard_params={"period": period, "start_date": start_date, "end_date": end_date, "type": type, }, extra_params=kwargs, ) @@ -1022,83 +782,57 @@ def gdpforecast( **inputs, ) + @validate - def gdpnom( - self, - units: typing_extensions.Annotated[ - Literal["usd", "usd_cap"], - OpenBBCustomParameter( - description="The unit of measurement for the data. Units to get nominal GDP in. Either usd or usd_cap indicating per capita." - ), - ] = "usd", - start_date: typing_extensions.Annotated[ - Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), - ] = None, - end_date: typing_extensions.Annotated[ - Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), - ] = None, - provider: Union[Literal["oecd"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def gdpnom(self, units: typing_extensions.Annotated[Literal['usd', 'usd_cap'], OpenBBCustomParameter(description='The unit of measurement for the data. Units to get nominal GDP in. Either usd or usd_cap indicating per capita.')] = 'usd', start_date: typing_extensions.Annotated[Union[datetime.date, None, str], OpenBBCustomParameter(description='Start date of the data, in YYYY-MM-DD format.')] = None, end_date: typing_extensions.Annotated[Union[datetime.date, None, str], OpenBBCustomParameter(description='End date of the data, in YYYY-MM-DD format.')] = None, provider: Union[Literal['oecd'], None] = None, **kwargs) -> OBBject[List[Data]]: """GDP Data. - Parameters - ---------- - units : Literal['usd', 'usd_cap'] - The unit of measurement for the data. Units to get nominal GDP in. Either usd or usd_cap indicating per capita. - start_date : Union[datetime.date, None] - Start date of the data, in YYYY-MM-DD format. - end_date : Union[datetime.date, None] - End date of the data, in YYYY-MM-DD format. - provider : Union[Literal['oecd'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'oecd' if there is - no default. - country : Literal['australia', 'austria', 'belgium', 'brazil', 'canada', 'chile', 'colombia', 'costa_rica', 'czech_republic', 'denmark', 'estonia', 'euro_area', 'european_union', 'finland', 'france', 'germany', 'greece', 'hungary', 'iceland', 'indonesia', 'ireland', 'israel', 'italy', 'japan', 'korea', 'latvia', 'lithuania', 'luxembourg', 'mexico', 'netherlands', 'new_zealand', 'norway', 'poland', 'portugal', 'russia', 'slovak_republic', 'slovenia', 'south_africa', 'spain', 'sweden', 'switzerland', 'turkey', 'united_kingdom', 'united_states'] - Country to get GDP for. (provider: oecd) - - Returns - ------- - OBBject - results : Union[List[GDPNom]] - Serializable results. - provider : Union[Literal['oecd'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - GDPNom - ------ - date : Optional[Union[date]] - The date of the data. - value : Optional[Union[float]] - Nominal GDP value on the date. - - Example - ------- - >>> from openbb import obb - >>> obb.economy.gdpnom(units="usd") - """ # noqa: E501 +Parameters +---------- +units : Literal['usd', 'usd_cap'] + The unit of measurement for the data. Units to get nominal GDP in. Either usd or usd_cap indicating per capita. +start_date : Union[datetime.date, None] + Start date of the data, in YYYY-MM-DD format. +end_date : Union[datetime.date, None] + End date of the data, in YYYY-MM-DD format. +provider : Union[Literal['oecd'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'oecd' if there is + no default. +country : Literal['australia', 'austria', 'belgium', 'brazil', 'canada', 'chile', 'colombia', 'costa_rica', 'czech_republic', 'denmark', 'estonia', 'euro_area', 'european_union', 'finland', 'france', 'germany', 'greece', 'hungary', 'iceland', 'indonesia', 'ireland', 'israel', 'italy', 'japan', 'korea', 'latvia', 'lithuania', 'luxembourg', 'mexico', 'netherlands', 'new_zealand', 'norway', 'poland', 'portugal', 'russia', 'slovak_republic', 'slovenia', 'south_africa', 'spain', 'sweden', 'switzerland', 'turkey', 'united_kingdom', 'united_states'] + Country to get GDP for. (provider: oecd) + +Returns +------- +OBBject + results : Union[List[GDPNom]] + Serializable results. + provider : Union[Literal['oecd'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +GDPNom +------ +date : Optional[Union[date]] + The date of the data. +value : Optional[Union[float]] + Nominal GDP value on the date. + +Example +------- +>>> from openbb import obb +>>> obb.economy.gdpnom(units="usd") + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "units": units, - "start_date": start_date, - "end_date": end_date, - }, + provider_choices={"provider": provider, }, + standard_params={"units": units, "start_date": start_date, "end_date": end_date, }, extra_params=kwargs, ) @@ -1107,83 +841,57 @@ def gdpnom( **inputs, ) + @validate - def gdpreal( - self, - units: typing_extensions.Annotated[ - Literal["idx", "qoq", "yoy"], - OpenBBCustomParameter( - description="The unit of measurement for the data. Either idx (indicating 2015=100), qoq (previous period) or yoy (same period, previous year).)" - ), - ] = "yoy", - start_date: typing_extensions.Annotated[ - Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), - ] = None, - end_date: typing_extensions.Annotated[ - Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), - ] = None, - provider: Union[Literal["oecd"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def gdpreal(self, units: typing_extensions.Annotated[Literal['idx', 'qoq', 'yoy'], OpenBBCustomParameter(description='The unit of measurement for the data. Either idx (indicating 2015=100), qoq (previous period) or yoy (same period, previous year).)')] = 'yoy', start_date: typing_extensions.Annotated[Union[datetime.date, None, str], OpenBBCustomParameter(description='Start date of the data, in YYYY-MM-DD format.')] = None, end_date: typing_extensions.Annotated[Union[datetime.date, None, str], OpenBBCustomParameter(description='End date of the data, in YYYY-MM-DD format.')] = None, provider: Union[Literal['oecd'], None] = None, **kwargs) -> OBBject[List[Data]]: """GDP Data. - Parameters - ---------- - units : Literal['idx', 'qoq', 'yoy'] - The unit of measurement for the data. Either idx (indicating 2015=100), qoq (previous period) or yoy (same period, previous year).) - start_date : Union[datetime.date, None] - Start date of the data, in YYYY-MM-DD format. - end_date : Union[datetime.date, None] - End date of the data, in YYYY-MM-DD format. - provider : Union[Literal['oecd'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'oecd' if there is - no default. - country : Literal['G20', 'G7', 'argentina', 'australia', 'austria', 'belgium', 'brazil', 'bulgaria', 'canada', 'chile', 'china', 'colombia', 'costa_rica', 'croatia', 'czech_republic', 'denmark', 'estonia', 'euro_area_19', 'europe', 'european_union_27', 'finland', 'france', 'germany', 'greece', 'hungary', 'iceland', 'india', 'indonesia', 'ireland', 'israel', 'italy', 'japan', 'korea', 'latvia', 'lithuania', 'luxembourg', 'mexico', 'netherlands', 'new_zealand', 'norway', 'oecd_total', 'poland', 'portugal', 'romania', 'russia', 'saudi_arabia', 'slovak_republic', 'slovenia', 'south_africa', 'spain', 'sweden', 'switzerland', 'turkey', 'united_kingdom', 'united_states'] - Country to get GDP for. (provider: oecd) - - Returns - ------- - OBBject - results : Union[List[GDPReal]] - Serializable results. - provider : Union[Literal['oecd'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - GDPReal - ------- - date : Optional[Union[date]] - The date of the data. - value : Optional[Union[float]] - Nominal GDP value on the date. - - Example - ------- - >>> from openbb import obb - >>> obb.economy.gdpreal(units="yoy") - """ # noqa: E501 +Parameters +---------- +units : Literal['idx', 'qoq', 'yoy'] + The unit of measurement for the data. Either idx (indicating 2015=100), qoq (previous period) or yoy (same period, previous year).) +start_date : Union[datetime.date, None] + Start date of the data, in YYYY-MM-DD format. +end_date : Union[datetime.date, None] + End date of the data, in YYYY-MM-DD format. +provider : Union[Literal['oecd'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'oecd' if there is + no default. +country : Literal['G20', 'G7', 'argentina', 'australia', 'austria', 'belgium', 'brazil', 'bulgaria', 'canada', 'chile', 'china', 'colombia', 'costa_rica', 'croatia', 'czech_republic', 'denmark', 'estonia', 'euro_area_19', 'europe', 'european_union_27', 'finland', 'france', 'germany', 'greece', 'hungary', 'iceland', 'india', 'indonesia', 'ireland', 'israel', 'italy', 'japan', 'korea', 'latvia', 'lithuania', 'luxembourg', 'mexico', 'netherlands', 'new_zealand', 'norway', 'oecd_total', 'poland', 'portugal', 'romania', 'russia', 'saudi_arabia', 'slovak_republic', 'slovenia', 'south_africa', 'spain', 'sweden', 'switzerland', 'turkey', 'united_kingdom', 'united_states'] + Country to get GDP for. (provider: oecd) + +Returns +------- +OBBject + results : Union[List[GDPReal]] + Serializable results. + provider : Union[Literal['oecd'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +GDPReal +------- +date : Optional[Union[date]] + The date of the data. +value : Optional[Union[float]] + Nominal GDP value on the date. + +Example +------- +>>> from openbb import obb +>>> obb.economy.gdpreal(units="yoy") + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "units": units, - "start_date": start_date, - "end_date": end_date, - }, + provider_choices={"provider": provider, }, + standard_params={"units": units, "start_date": start_date, "end_date": end_date, }, extra_params=kwargs, ) @@ -1192,127 +900,103 @@ def gdpreal( **inputs, ) + @validate - def index( - self, - symbol: typing_extensions.Annotated[ - Union[str, List[str]], - OpenBBCustomParameter(description="Symbol to get data for."), - ], - start_date: typing_extensions.Annotated[ - Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), - ] = None, - end_date: typing_extensions.Annotated[ - Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), - ] = None, - provider: Union[Literal["cboe", "fmp", "polygon", "yfinance"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def index(self, symbol: typing_extensions.Annotated[Union[str, List[str]], OpenBBCustomParameter(description='Symbol to get data for.')], start_date: typing_extensions.Annotated[Union[datetime.date, None, str], OpenBBCustomParameter(description='Start date of the data, in YYYY-MM-DD format.')] = None, end_date: typing_extensions.Annotated[Union[datetime.date, None, str], OpenBBCustomParameter(description='End date of the data, in YYYY-MM-DD format.')] = None, provider: Union[Literal['cboe', 'fmp', 'polygon', 'yfinance'], None] = None, **kwargs) -> OBBject[List[Data]]: """Major Indices Historical. Historical levels for an index. - Parameters - ---------- - symbol : str - Symbol to get data for. - start_date : Union[datetime.date, None] - Start date of the data, in YYYY-MM-DD format. - end_date : Union[datetime.date, None] - End date of the data, in YYYY-MM-DD format. - provider : Union[Literal['cboe', 'fmp', 'polygon', 'yfinance'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'cboe' if there is - no default. - interval : Optional[Union[Literal['1d', '1m'], Literal['1min', '5min', '15min', '30min', '1hour', '4hour', '1day'], Literal['1m', '2m', '5m', '15m', '30m', '60m', '90m', '1h', '1d', '5d', '1wk', '1mo', '3mo']]] - Use interval, 1m, for intraday prices during the most recent trading period. (provider: cboe); Data granularity. (provider: fmp); Data granularity. (provider: yfinance) - timeseries : Optional[Union[typing_extensions.Annotated[int, Ge(ge=0)]]] - Number of days to look back. (provider: fmp) - timespan : Literal['minute', 'hour', 'day', 'week', 'month', 'quarter', 'year'] - Timespan of the data. (provider: polygon) - sort : Literal['asc', 'desc'] - Sort order of the data. (provider: polygon) - limit : int - The number of data entries to return. (provider: polygon) - adjusted : bool - Whether the data is adjusted. (provider: polygon) - multiplier : int - Multiplier of the timespan. (provider: polygon) - period : Optional[Union[Literal['1d', '5d', '1mo', '3mo', '6mo', '1y', '2y', '5y', '10y', 'ytd', 'max']]] - Time period of the data to return. (provider: yfinance) - prepost : bool - Include Pre and Post market data. (provider: yfinance) - rounding : bool - Round prices to two decimals? (provider: yfinance) - - Returns - ------- - OBBject - results : Union[List[MajorIndicesHistorical]] - Serializable results. - provider : Union[Literal['cboe', 'fmp', 'polygon', 'yfinance'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - MajorIndicesHistorical - ---------------------- - date : datetime - The date of the data. - open : float - The open price of the symbol. - high : float - The high price of the symbol. - low : float - The low price of the symbol. - close : float - The close price of the symbol. - volume : Optional[Union[typing_extensions.Annotated[int, Strict(strict=True)]]] - The volume of the symbol. - calls_volume : Optional[Union[float]] - Number of calls traded during the most recent trading period. Only valid if interval is 1m. (provider: cboe) - puts_volume : Optional[Union[float]] - Number of puts traded during the most recent trading period. Only valid if interval is 1m. (provider: cboe) - total_options_volume : Optional[Union[float]] - Total number of options traded during the most recent trading period. Only valid if interval is 1m. (provider: cboe) - adj_close : Optional[Union[float]] - Adjusted Close Price of the symbol. (provider: fmp) - unadjusted_volume : Optional[Union[float]] - Unadjusted volume of the symbol. (provider: fmp) - change : Optional[Union[float]] - Change in the price of the symbol from the previous day. (provider: fmp) - change_percent : Optional[Union[float]] - Change % in the price of the symbol. (provider: fmp) - label : Optional[Union[str]] - Human readable format of the date. (provider: fmp) - change_over_time : Optional[Union[float]] - Change % in the price of the symbol over a period of time. (provider: fmp) - transactions : Optional[Union[typing_extensions.Annotated[int, Gt(gt=0)]]] - Number of transactions for the symbol in the time period. (provider: polygon) - - Example - ------- - >>> from openbb import obb - >>> obb.economy.index(symbol="SPX") - """ # noqa: E501 +Parameters +---------- +symbol : str + Symbol to get data for. +start_date : Union[datetime.date, None] + Start date of the data, in YYYY-MM-DD format. +end_date : Union[datetime.date, None] + End date of the data, in YYYY-MM-DD format. +provider : Union[Literal['cboe', 'fmp', 'polygon', 'yfinance'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'cboe' if there is + no default. +interval : Optional[Union[Literal['1d', '1m'], Literal['1min', '5min', '15min', '30min', '1hour', '4hour', '1day'], Literal['1m', '2m', '5m', '15m', '30m', '60m', '90m', '1h', '1d', '5d', '1wk', '1mo', '3mo']]] + Use interval, 1m, for intraday prices during the most recent trading period. (provider: cboe); Data granularity. (provider: fmp); Data granularity. (provider: yfinance) +timeseries : Optional[Union[typing_extensions.Annotated[int, Ge(ge=0)]]] + Number of days to look back. (provider: fmp) +timespan : Literal['minute', 'hour', 'day', 'week', 'month', 'quarter', 'year'] + Timespan of the data. (provider: polygon) +sort : Literal['asc', 'desc'] + Sort order of the data. (provider: polygon) +limit : int + The number of data entries to return. (provider: polygon) +adjusted : bool + Whether the data is adjusted. (provider: polygon) +multiplier : int + Multiplier of the timespan. (provider: polygon) +period : Optional[Union[Literal['1d', '5d', '1mo', '3mo', '6mo', '1y', '2y', '5y', '10y', 'ytd', 'max']]] + Time period of the data to return. (provider: yfinance) +prepost : bool + Include Pre and Post market data. (provider: yfinance) +rounding : bool + Round prices to two decimals? (provider: yfinance) + +Returns +------- +OBBject + results : Union[List[MajorIndicesHistorical]] + Serializable results. + provider : Union[Literal['cboe', 'fmp', 'polygon', 'yfinance'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +MajorIndicesHistorical +---------------------- +date : datetime + The date of the data. +open : float + The open price of the symbol. +high : float + The high price of the symbol. +low : float + The low price of the symbol. +close : float + The close price of the symbol. +volume : Optional[Union[typing_extensions.Annotated[int, Strict(strict=True)]]] + The volume of the symbol. +calls_volume : Optional[Union[float]] + Number of calls traded during the most recent trading period. Only valid if interval is 1m. (provider: cboe) +puts_volume : Optional[Union[float]] + Number of puts traded during the most recent trading period. Only valid if interval is 1m. (provider: cboe) +total_options_volume : Optional[Union[float]] + Total number of options traded during the most recent trading period. Only valid if interval is 1m. (provider: cboe) +adj_close : Optional[Union[float]] + Adjusted Close Price of the symbol. (provider: fmp) +unadjusted_volume : Optional[Union[float]] + Unadjusted volume of the symbol. (provider: fmp) +change : Optional[Union[float]] + Change in the price of the symbol from the previous day. (provider: fmp) +change_percent : Optional[Union[float]] + Change % in the price of the symbol. (provider: fmp) +label : Optional[Union[str]] + Human readable format of the date. (provider: fmp) +change_over_time : Optional[Union[float]] + Change % in the price of the symbol over a period of time. (provider: fmp) +transactions : Optional[Union[typing_extensions.Annotated[int, Gt(gt=0)]]] + Number of transactions for the symbol in the time period. (provider: polygon) + +Example +------- +>>> from openbb import obb +>>> obb.economy.index(symbol="SPX") + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, - "start_date": start_date, - "end_date": end_date, - }, + provider_choices={"provider": provider, }, + standard_params={"symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, "start_date": start_date, "end_date": end_date, }, extra_params=kwargs, ) @@ -1321,91 +1005,77 @@ def index( **inputs, ) + @validate - def index_search( - self, - query: typing_extensions.Annotated[ - str, OpenBBCustomParameter(description="Search query.") - ] = "", - is_symbol: typing_extensions.Annotated[ - bool, - OpenBBCustomParameter(description="Whether to search by ticker symbol."), - ] = False, - provider: Union[Literal["cboe"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def index_search(self, query: typing_extensions.Annotated[str, OpenBBCustomParameter(description='Search query.')] = '', is_symbol: typing_extensions.Annotated[bool, OpenBBCustomParameter(description='Whether to search by ticker symbol.')] = False, provider: Union[Literal['cboe'], None] = None, **kwargs) -> OBBject[List[Data]]: """Index Search. Search for indices. - Parameters - ---------- - query : str - Search query. - is_symbol : bool - Whether to search by ticker symbol. - provider : Union[Literal['cboe'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'cboe' if there is - no default. - europe : bool - Filter for European indices. False for US indices. (provider: cboe) - - Returns - ------- - OBBject - results : Union[List[IndexSearch]] - Serializable results. - provider : Union[Literal['cboe'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - IndexSearch - ----------- - symbol : str - Symbol representing the entity requested in the data. - name : str - Name of the index. - isin : Optional[Union[str]] - ISIN code for the index. Valid only for European indices. (provider: cboe) - region : Optional[Union[str]] - Region for the index. Valid only for European indices (provider: cboe) - description : Optional[Union[str]] - Description for the index. (provider: cboe) - data_delay : Optional[Union[int]] - Data delay for the index. Valid only for US indices. (provider: cboe) - currency : Optional[Union[str]] - Currency for the index. (provider: cboe) - time_zone : Optional[Union[str]] - Time zone for the index. Valid only for US indices. (provider: cboe) - open_time : Optional[Union[datetime.time]] - Opening time for the index. Valid only for US indices. (provider: cboe) - close_time : Optional[Union[datetime.time]] - Closing time for the index. Valid only for US indices. (provider: cboe) - tick_days : Optional[Union[str]] - The trading days for the index. Valid only for US indices. (provider: cboe) - tick_frequency : Optional[Union[str]] - Tick frequency for the index. Valid only for US indices. (provider: cboe) - tick_period : Optional[Union[str]] - Tick period for the index. Valid only for US indices. (provider: cboe) - - Example - ------- - >>> from openbb import obb - >>> obb.economy.index_search() - """ # noqa: E501 +Parameters +---------- +query : str + Search query. +is_symbol : bool + Whether to search by ticker symbol. +provider : Union[Literal['cboe'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'cboe' if there is + no default. +europe : bool + Filter for European indices. False for US indices. (provider: cboe) + +Returns +------- +OBBject + results : Union[List[IndexSearch]] + Serializable results. + provider : Union[Literal['cboe'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +IndexSearch +----------- +symbol : str + Symbol representing the entity requested in the data. +name : str + Name of the index. +isin : Optional[Union[str]] + ISIN code for the index. Valid only for European indices. (provider: cboe) +region : Optional[Union[str]] + Region for the index. Valid only for European indices (provider: cboe) +description : Optional[Union[str]] + Description for the index. (provider: cboe) +data_delay : Optional[Union[int]] + Data delay for the index. Valid only for US indices. (provider: cboe) +currency : Optional[Union[str]] + Currency for the index. (provider: cboe) +time_zone : Optional[Union[str]] + Time zone for the index. Valid only for US indices. (provider: cboe) +open_time : Optional[Union[datetime.time]] + Opening time for the index. Valid only for US indices. (provider: cboe) +close_time : Optional[Union[datetime.time]] + Closing time for the index. Valid only for US indices. (provider: cboe) +tick_days : Optional[Union[str]] + The trading days for the index. Valid only for US indices. (provider: cboe) +tick_frequency : Optional[Union[str]] + Tick frequency for the index. Valid only for US indices. (provider: cboe) +tick_period : Optional[Union[str]] + Tick period for the index. Valid only for US indices. (provider: cboe) + +Example +------- +>>> from openbb import obb +>>> obb.economy.index_search() + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "query": query, - "is_symbol": is_symbol, - }, + provider_choices={"provider": provider, }, + standard_params={"query": query, "is_symbol": is_symbol, }, extra_params=kwargs, ) @@ -1414,85 +1084,73 @@ def index_search( **inputs, ) + @validate - def index_snapshots( - self, - region: typing_extensions.Annotated[ - Union[Literal["US", "EU"], None], - OpenBBCustomParameter( - description="The region to return. Currently supports US and EU." - ), - ] = "US", - provider: Union[Literal["cboe"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def index_snapshots(self, region: typing_extensions.Annotated[Union[Literal['US', 'EU'], None], OpenBBCustomParameter(description='The region to return. Currently supports US and EU.')] = 'US', provider: Union[Literal['cboe'], None] = None, **kwargs) -> OBBject[List[Data]]: """Index Snapshots. Current levels for all indices from a provider. - Parameters - ---------- - region : Union[Literal['US', 'EU'], None] - The region to return. Currently supports US and EU. - provider : Union[Literal['cboe'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'cboe' if there is - no default. - - Returns - ------- - OBBject - results : Union[List[IndexSnapshots]] - Serializable results. - provider : Union[Literal['cboe'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - IndexSnapshots - -------------- - symbol : str - Symbol representing the entity requested in the data. - name : Optional[Union[str]] - Name of the index. - currency : Optional[Union[str]] - Currency of the index. - price : Optional[Union[float]] - Current price of the index. - open : Optional[Union[float]] - The open price of the symbol. - high : Optional[Union[float]] - The high price of the symbol. - low : Optional[Union[float]] - The low price of the symbol. - close : Optional[Union[float]] - The close price of the symbol. - prev_close : Optional[Union[float]] - Previous closing price of the index. - change : Optional[Union[float]] - Change of the index. - change_percent : Optional[Union[float]] - Change percent of the index. - isin : Optional[Union[str]] - ISIN code for the index. Valid only for European indices. (provider: cboe) - last_trade_timestamp : Optional[Union[datetime]] - Last trade timestamp for the index. (provider: cboe) - - Example - ------- - >>> from openbb import obb - >>> obb.economy.index_snapshots(region="US") - """ # noqa: E501 +Parameters +---------- +region : Union[Literal['US', 'EU'], None] + The region to return. Currently supports US and EU. +provider : Union[Literal['cboe'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'cboe' if there is + no default. + +Returns +------- +OBBject + results : Union[List[IndexSnapshots]] + Serializable results. + provider : Union[Literal['cboe'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +IndexSnapshots +-------------- +symbol : str + Symbol representing the entity requested in the data. +name : Optional[Union[str]] + Name of the index. +currency : Optional[Union[str]] + Currency of the index. +price : Optional[Union[float]] + Current price of the index. +open : Optional[Union[float]] + The open price of the symbol. +high : Optional[Union[float]] + The high price of the symbol. +low : Optional[Union[float]] + The low price of the symbol. +close : Optional[Union[float]] + The close price of the symbol. +prev_close : Optional[Union[float]] + Previous closing price of the index. +change : Optional[Union[float]] + Change of the index. +change_percent : Optional[Union[float]] + Change percent of the index. +isin : Optional[Union[str]] + ISIN code for the index. Valid only for European indices. (provider: cboe) +last_trade_timestamp : Optional[Union[datetime]] + Last trade timestamp for the index. (provider: cboe) + +Example +------- +>>> from openbb import obb +>>> obb.economy.index_snapshots(region="US") + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "region": region, - }, + provider_choices={"provider": provider, }, + standard_params={"region": region, }, extra_params=kwargs, ) @@ -1501,54 +1159,52 @@ def index_snapshots( **inputs, ) + @validate - def risk( - self, provider: Union[Literal["fmp"], None] = None, **kwargs - ) -> OBBject[List[Data]]: + def risk(self, provider: Union[Literal['fmp'], None] = None, **kwargs) -> OBBject[List[Data]]: """Market Risk Premium. Historical market risk premium. - Parameters - ---------- - provider : Union[Literal['fmp'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'fmp' if there is - no default. - - Returns - ------- - OBBject - results : Union[List[RiskPremium]] - Serializable results. - provider : Union[Literal['fmp'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - RiskPremium - ----------- - country : str - Market country. - continent : Optional[Union[str]] - Continent of the country. - total_equity_risk_premium : Optional[Union[typing_extensions.Annotated[float, Gt(gt=0)]]] - Total equity risk premium for the country. - country_risk_premium : Optional[Union[typing_extensions.Annotated[float, Ge(ge=0)]]] - Country-specific risk premium. - - Example - ------- - >>> from openbb import obb - >>> obb.economy.risk() - """ # noqa: E501 +Parameters +---------- +provider : Union[Literal['fmp'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fmp' if there is + no default. + +Returns +------- +OBBject + results : Union[List[RiskPremium]] + Serializable results. + provider : Union[Literal['fmp'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +RiskPremium +----------- +country : str + Market country. +continent : Optional[Union[str]] + Continent of the country. +total_equity_risk_premium : Optional[Union[typing_extensions.Annotated[float, Gt(gt=0)]]] + Total equity risk premium for the country. +country_risk_premium : Optional[Union[typing_extensions.Annotated[float, Ge(ge=0)]]] + Country-specific risk premium. + +Example +------- +>>> from openbb import obb +>>> obb.economy.risk() + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, + provider_choices={"provider": provider, }, standard_params={}, extra_params=kwargs, ) @@ -1558,134 +1214,59 @@ def risk( **inputs, ) + @validate - def sp500_multiples( - self, - series_name: typing_extensions.Annotated[ - Literal[ - "Shiller PE Ratio by Month", - "Shiller PE Ratio by Year", - "PE Ratio by Year", - "PE Ratio by Month", - "Dividend by Year", - "Dividend by Month", - "Dividend Growth by Quarter", - "Dividend Growth by Year", - "Dividend Yield by Year", - "Dividend Yield by Month", - "Earnings by Year", - "Earnings by Month", - "Earnings Growth by Year", - "Earnings Growth by Quarter", - "Real Earnings Growth by Year", - "Real Earnings Growth by Quarter", - "Earnings Yield by Year", - "Earnings Yield by Month", - "Real Price by Year", - "Real Price by Month", - "Inflation Adjusted Price by Year", - "Inflation Adjusted Price by Month", - "Sales by Year", - "Sales by Quarter", - "Sales Growth by Year", - "Sales Growth by Quarter", - "Real Sales by Year", - "Real Sales by Quarter", - "Real Sales Growth by Year", - "Real Sales Growth by Quarter", - "Price to Sales Ratio by Year", - "Price to Sales Ratio by Quarter", - "Price to Book Value Ratio by Year", - "Price to Book Value Ratio by Quarter", - "Book Value per Share by Year", - "Book Value per Share by Quarter", - ], - OpenBBCustomParameter( - description="The name of the series. Defaults to 'PE Ratio by Month'." - ), - ] = "PE Ratio by Month", - start_date: typing_extensions.Annotated[ - Union[str, None], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), - ] = "", - end_date: typing_extensions.Annotated[ - Union[str, None], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), - ] = "", - collapse: typing_extensions.Annotated[ - Union[Literal["daily", "weekly", "monthly", "quarterly", "annual"], None], - OpenBBCustomParameter( - description="Collapse the frequency of the time series." - ), - ] = "monthly", - transform: typing_extensions.Annotated[ - Union[Literal["diff", "rdiff", "cumul", "normalize"], None], - OpenBBCustomParameter(description="The transformation of the time series."), - ] = None, - provider: Union[Literal["quandl"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def sp500_multiples(self, series_name: typing_extensions.Annotated[Literal['Shiller PE Ratio by Month', 'Shiller PE Ratio by Year', 'PE Ratio by Year', 'PE Ratio by Month', 'Dividend by Year', 'Dividend by Month', 'Dividend Growth by Quarter', 'Dividend Growth by Year', 'Dividend Yield by Year', 'Dividend Yield by Month', 'Earnings by Year', 'Earnings by Month', 'Earnings Growth by Year', 'Earnings Growth by Quarter', 'Real Earnings Growth by Year', 'Real Earnings Growth by Quarter', 'Earnings Yield by Year', 'Earnings Yield by Month', 'Real Price by Year', 'Real Price by Month', 'Inflation Adjusted Price by Year', 'Inflation Adjusted Price by Month', 'Sales by Year', 'Sales by Quarter', 'Sales Growth by Year', 'Sales Growth by Quarter', 'Real Sales by Year', 'Real Sales by Quarter', 'Real Sales Growth by Year', 'Real Sales Growth by Quarter', 'Price to Sales Ratio by Year', 'Price to Sales Ratio by Quarter', 'Price to Book Value Ratio by Year', 'Price to Book Value Ratio by Quarter', 'Book Value per Share by Year', 'Book Value per Share by Quarter'], OpenBBCustomParameter(description="The name of the series. Defaults to 'PE Ratio by Month'.")] = 'PE Ratio by Month', start_date: typing_extensions.Annotated[Union[str, None], OpenBBCustomParameter(description='Start date of the data, in YYYY-MM-DD format.')] = '', end_date: typing_extensions.Annotated[Union[str, None], OpenBBCustomParameter(description='End date of the data, in YYYY-MM-DD format.')] = '', collapse: typing_extensions.Annotated[Union[Literal['daily', 'weekly', 'monthly', 'quarterly', 'annual'], None], OpenBBCustomParameter(description='Collapse the frequency of the time series.')] = 'monthly', transform: typing_extensions.Annotated[Union[Literal['diff', 'rdiff', 'cumul', 'normalize'], None], OpenBBCustomParameter(description='The transformation of the time series.')] = None, provider: Union[Literal['quandl'], None] = None, **kwargs) -> OBBject[List[Data]]: """S&P 500 Multiples. Historical S&P 500 multiples and Shiller PE ratios. - Parameters - ---------- - series_name : Literal['Shiller PE Ratio by Month', 'Shiller PE Ratio by Year', 'PE Rat... - The name of the series. Defaults to 'PE Ratio by Month'. - start_date : Union[str, None] - Start date of the data, in YYYY-MM-DD format. - end_date : Union[str, None] - End date of the data, in YYYY-MM-DD format. - collapse : Union[Literal['daily', 'weekly', 'monthly', 'quarterly', 'annual'... - Collapse the frequency of the time series. - transform : Union[Literal['diff', 'rdiff', 'cumul', 'normalize'], None] - The transformation of the time series. - provider : Union[Literal['quandl'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'quandl' if there is - no default. - - Returns - ------- - OBBject - results : Union[List[SP500Multiples]] - Serializable results. - provider : Union[Literal['quandl'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - SP500Multiples - -------------- - date : str - The date of the data. - value : float - The data value for the time series. - - Example - ------- - >>> from openbb import obb - >>> obb.economy.sp500_multiples(series_name="PE Ratio by Month", collapse="monthly") - """ # noqa: E501 +Parameters +---------- +series_name : Literal['Shiller PE Ratio by Month', 'Shiller PE Ratio by Year', 'PE Rat... + The name of the series. Defaults to 'PE Ratio by Month'. +start_date : Union[str, None] + Start date of the data, in YYYY-MM-DD format. +end_date : Union[str, None] + End date of the data, in YYYY-MM-DD format. +collapse : Union[Literal['daily', 'weekly', 'monthly', 'quarterly', 'annual'... + Collapse the frequency of the time series. +transform : Union[Literal['diff', 'rdiff', 'cumul', 'normalize'], None] + The transformation of the time series. +provider : Union[Literal['quandl'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'quandl' if there is + no default. + +Returns +------- +OBBject + results : Union[List[SP500Multiples]] + Serializable results. + provider : Union[Literal['quandl'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +SP500Multiples +-------------- +date : str + The date of the data. +value : float + The data value for the time series. + +Example +------- +>>> from openbb import obb +>>> obb.economy.sp500_multiples(series_name="PE Ratio by Month", collapse="monthly") + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "series_name": series_name, - "start_date": start_date, - "end_date": end_date, - "collapse": collapse, - "transform": transform, - }, + provider_choices={"provider": provider, }, + standard_params={"series_name": series_name, "start_date": start_date, "end_date": end_date, "collapse": collapse, "transform": transform, }, extra_params=kwargs, ) @@ -1693,3 +1274,4 @@ def sp500_multiples( "/economy/sp500_multiples", **inputs, ) + diff --git a/openbb_platform/openbb/package/extension_map.json b/openbb_platform/openbb/package/extension_map.json index a02bde669a54..d5892f5670a7 100644 --- a/openbb_platform/openbb/package/extension_map.json +++ b/openbb_platform/openbb/package/extension_map.json @@ -3,12 +3,14 @@ "crypto@0.1.0a4", "econometrics@0.1.0a4", "economy@0.1.0a4", + "etf@0.1.0a3", "fixedincome@0.1.0a4", "forex@0.1.0a4", "futures@0.1.0a4", "news@0.1.0a4", "openbb_charting@0.1.0a4", "qa@0.1.0a4", + "regulators@0.1.0a4", "stocks@0.1.0a4", "ta@0.1.0a4" ], @@ -20,10 +22,14 @@ "fmp@0.1.0a4", "fred@0.1.0a4", "intrinio@0.1.0a4", + "nasdaq@0.1.0a4", "oecd@0.1.0a4", "polygon@0.1.0a4", "quandl@0.1.0a4", + "sec@0.1.0a4", + "seeking_alpha@0.1.0a4", "tradingeconomics@0.1.0a4", + "wsj@0.1.0a4", "yfinance@0.1.0a4" ] } \ No newline at end of file diff --git a/openbb_platform/openbb/package/fixedincome.py b/openbb_platform/openbb/package/fixedincome.py index f7ece0001f36..8cc7553d4f7f 100644 --- a/openbb_platform/openbb/package/fixedincome.py +++ b/openbb_platform/openbb/package/fixedincome.py @@ -1,105 +1,95 @@ ### THIS FILE IS AUTO-GENERATED. DO NOT EDIT. ### +from openbb_core.app.static.container import Container +from openbb_core.app.model.obbject import OBBject +from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +import openbb_provider +import pandas import datetime -from typing import List, Literal, Union - +import pydantic +from pydantic import BaseModel +from inspect import Parameter +import typing +from typing import List, Dict, Union, Optional, Literal +from annotated_types import Ge, Le, Gt, Lt import typing_extensions -from openbb_core.app.model.custom_parameter import OpenBBCustomParameter -from openbb_core.app.model.obbject import OBBject -from openbb_core.app.static.container import Container +from openbb_core.app.utils import df_to_basemodel from openbb_core.app.static.decorators import validate + from openbb_core.app.static.filters import filter_inputs -from openbb_provider.abstract.data import Data +from openbb_provider.abstract.data import Data +import openbb_core.app.model.command_context +import openbb_core.app.model.obbject +import types class ROUTER_fixedincome(Container): """/fixedincome - ameribor - estr - fed - iorb - projections - sofr - sonia - treasury - ycrv +ameribor +estr +fed +iorb +projections +sofr +sonia +treasury +ycrv """ - def __repr__(self) -> str: return self.__doc__ or "" @validate - def ameribor( - self, - start_date: typing_extensions.Annotated[ - Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), - ] = None, - end_date: typing_extensions.Annotated[ - Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), - ] = None, - provider: Union[Literal["fred"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def ameribor(self, start_date: typing_extensions.Annotated[Union[datetime.date, None, str], OpenBBCustomParameter(description='Start date of the data, in YYYY-MM-DD format.')] = None, end_date: typing_extensions.Annotated[Union[datetime.date, None, str], OpenBBCustomParameter(description='End date of the data, in YYYY-MM-DD format.')] = None, provider: Union[Literal['fred'], None] = None, **kwargs) -> OBBject[List[Data]]: """ - Ameribor. - Ameribor (short for the American interbank offered rate) is a benchmark interest rate that reflects the true cost of - short-term interbank borrowing. This rate is based on transactions in overnight unsecured loans conducted on the - American Financial Exchange (AFX). - - Parameters - ---------- - start_date : Union[datetime.date, None] - Start date of the data, in YYYY-MM-DD format. - end_date : Union[datetime.date, None] - End date of the data, in YYYY-MM-DD format. - provider : Union[Literal['fred'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'fred' if there is - no default. - parameter : Literal['overnight', 'term_30', 'term_90', '1_week_term_structure', '1_month_term_structure', '3_month_term_structure', '6_month_term_structure', '1_year_term_structure', '2_year_term_structure', '30_day_ma', '90_day_ma'] - Period of AMERIBOR rate. (provider: fred) - - Returns - ------- - OBBject - results : Union[List[AMERIBOR]] - Serializable results. - provider : Union[Literal['fred'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - AMERIBOR - -------- - date : date - The date of the data. - rate : Union[float] - AMERIBOR rate. - - Example - ------- - >>> from openbb import obb - >>> obb.fixedincome.ameribor() - """ # noqa: E501 + Ameribor. + Ameribor (short for the American interbank offered rate) is a benchmark interest rate that reflects the true cost of + short-term interbank borrowing. This rate is based on transactions in overnight unsecured loans conducted on the + American Financial Exchange (AFX). + +Parameters +---------- +start_date : Union[datetime.date, None] + Start date of the data, in YYYY-MM-DD format. +end_date : Union[datetime.date, None] + End date of the data, in YYYY-MM-DD format. +provider : Union[Literal['fred'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fred' if there is + no default. +parameter : Literal['overnight', 'term_30', 'term_90', '1_week_term_structure', '1_month_term_structure', '3_month_term_structure', '6_month_term_structure', '1_year_term_structure', '2_year_term_structure', '30_day_ma', '90_day_ma'] + Period of AMERIBOR rate. (provider: fred) + +Returns +------- +OBBject + results : Union[List[AMERIBOR]] + Serializable results. + provider : Union[Literal['fred'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +AMERIBOR +-------- +date : date + The date of the data. +rate : Union[float] + AMERIBOR rate. + +Example +------- +>>> from openbb import obb +>>> obb.fixedincome.ameribor() + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "start_date": start_date, - "end_date": end_date, - }, + provider_choices={"provider": provider, }, + standard_params={"start_date": start_date, "end_date": end_date, }, extra_params=kwargs, ) @@ -108,79 +98,60 @@ def ameribor( **inputs, ) + @validate - def estr( - self, - start_date: typing_extensions.Annotated[ - Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), - ] = None, - end_date: typing_extensions.Annotated[ - Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), - ] = None, - provider: Union[Literal["fred"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def estr(self, start_date: typing_extensions.Annotated[Union[datetime.date, None, str], OpenBBCustomParameter(description='Start date of the data, in YYYY-MM-DD format.')] = None, end_date: typing_extensions.Annotated[Union[datetime.date, None, str], OpenBBCustomParameter(description='End date of the data, in YYYY-MM-DD format.')] = None, provider: Union[Literal['fred'], None] = None, **kwargs) -> OBBject[List[Data]]: """ - Euro Short-Term Rate. - The euro short-term rate (€STR) reflects the wholesale euro unsecured overnight borrowing costs of banks located in - the euro area. The €STR is published on each TARGET2 business day based on transactions conducted and settled on - the previous TARGET2 business day (the reporting date “T”) with a maturity date of T+1 which are deemed to have been - executed at arm’s length and thus reflect market rates in an unbiased way. - - Parameters - ---------- - start_date : Union[datetime.date, None] - Start date of the data, in YYYY-MM-DD format. - end_date : Union[datetime.date, None] - End date of the data, in YYYY-MM-DD format. - provider : Union[Literal['fred'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'fred' if there is - no default. - parameter : Literal['volume_weighted_trimmed_mean_rate', 'number_of_transactions', 'number_of_active_banks', 'total_volume', 'share_of_volume_of_the_5_largest_active_banks', 'rate_at_75th_percentile_of_volume', 'rate_at_25th_percentile_of_volume'] - Period of ESTR rate. (provider: fred) - - Returns - ------- - OBBject - results : Union[List[ESTR]] - Serializable results. - provider : Union[Literal['fred'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - ESTR - ---- - date : date - The date of the data. - rate : Union[float] - ESTR rate. - - Example - ------- - >>> from openbb import obb - >>> obb.fixedincome.estr() - """ # noqa: E501 + Euro Short-Term Rate. + The euro short-term rate (€STR) reflects the wholesale euro unsecured overnight borrowing costs of banks located in + the euro area. The €STR is published on each TARGET2 business day based on transactions conducted and settled on + the previous TARGET2 business day (the reporting date “T”) with a maturity date of T+1 which are deemed to have been + executed at arm’s length and thus reflect market rates in an unbiased way. + +Parameters +---------- +start_date : Union[datetime.date, None] + Start date of the data, in YYYY-MM-DD format. +end_date : Union[datetime.date, None] + End date of the data, in YYYY-MM-DD format. +provider : Union[Literal['fred'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fred' if there is + no default. +parameter : Literal['volume_weighted_trimmed_mean_rate', 'number_of_transactions', 'number_of_active_banks', 'total_volume', 'share_of_volume_of_the_5_largest_active_banks', 'rate_at_75th_percentile_of_volume', 'rate_at_25th_percentile_of_volume'] + Period of ESTR rate. (provider: fred) + +Returns +------- +OBBject + results : Union[List[ESTR]] + Serializable results. + provider : Union[Literal['fred'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +ESTR +---- +date : date + The date of the data. +rate : Union[float] + ESTR rate. + +Example +------- +>>> from openbb import obb +>>> obb.fixedincome.estr() + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "start_date": start_date, - "end_date": end_date, - }, + provider_choices={"provider": provider, }, + standard_params={"start_date": start_date, "end_date": end_date, }, extra_params=kwargs, ) @@ -189,79 +160,60 @@ def estr( **inputs, ) + @validate - def fed( - self, - start_date: typing_extensions.Annotated[ - Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), - ] = None, - end_date: typing_extensions.Annotated[ - Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), - ] = None, - provider: Union[Literal["fred"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def fed(self, start_date: typing_extensions.Annotated[Union[datetime.date, None, str], OpenBBCustomParameter(description='Start date of the data, in YYYY-MM-DD format.')] = None, end_date: typing_extensions.Annotated[Union[datetime.date, None, str], OpenBBCustomParameter(description='End date of the data, in YYYY-MM-DD format.')] = None, provider: Union[Literal['fred'], None] = None, **kwargs) -> OBBject[List[Data]]: """ - Fed Funds Rate. - Get Effective Federal Funds Rate data. A bank rate is the interest rate a nation's central bank charges to its - domestic banks to borrow money. The rates central banks charge are set to stabilize the economy. In the - United States, the Federal Reserve System's Board of Governors set the bank rate, also known as the discount rate. - - - Parameters - ---------- - start_date : Union[datetime.date, None] - Start date of the data, in YYYY-MM-DD format. - end_date : Union[datetime.date, None] - End date of the data, in YYYY-MM-DD format. - provider : Union[Literal['fred'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'fred' if there is - no default. - parameter : Literal['monthly', 'daily', 'weekly', 'daily_excl_weekend', 'annual', 'biweekly', 'volume'] - Period of FED rate. (provider: fred) - - Returns - ------- - OBBject - results : Union[List[FEDFUNDS]] - Serializable results. - provider : Union[Literal['fred'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - FEDFUNDS - -------- - date : date - The date of the data. - rate : Union[float] - FED rate. - - Example - ------- - >>> from openbb import obb - >>> obb.fixedincome.fed() - """ # noqa: E501 + Fed Funds Rate. + Get Effective Federal Funds Rate data. A bank rate is the interest rate a nation's central bank charges to its + domestic banks to borrow money. The rates central banks charge are set to stabilize the economy. In the + United States, the Federal Reserve System's Board of Governors set the bank rate, also known as the discount rate. + + +Parameters +---------- +start_date : Union[datetime.date, None] + Start date of the data, in YYYY-MM-DD format. +end_date : Union[datetime.date, None] + End date of the data, in YYYY-MM-DD format. +provider : Union[Literal['fred'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fred' if there is + no default. +parameter : Literal['monthly', 'daily', 'weekly', 'daily_excl_weekend', 'annual', 'biweekly', 'volume'] + Period of FED rate. (provider: fred) + +Returns +------- +OBBject + results : Union[List[FEDFUNDS]] + Serializable results. + provider : Union[Literal['fred'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +FEDFUNDS +-------- +date : date + The date of the data. +rate : Union[float] + FED rate. + +Example +------- +>>> from openbb import obb +>>> obb.fixedincome.fed() + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "start_date": start_date, - "end_date": end_date, - }, + provider_choices={"provider": provider, }, + standard_params={"start_date": start_date, "end_date": end_date, }, extra_params=kwargs, ) @@ -270,77 +222,58 @@ def fed( **inputs, ) + @validate - def iorb( - self, - start_date: typing_extensions.Annotated[ - Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), - ] = None, - end_date: typing_extensions.Annotated[ - Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), - ] = None, - provider: Union[Literal["fred"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def iorb(self, start_date: typing_extensions.Annotated[Union[datetime.date, None, str], OpenBBCustomParameter(description='Start date of the data, in YYYY-MM-DD format.')] = None, end_date: typing_extensions.Annotated[Union[datetime.date, None, str], OpenBBCustomParameter(description='End date of the data, in YYYY-MM-DD format.')] = None, provider: Union[Literal['fred'], None] = None, **kwargs) -> OBBject[List[Data]]: """ - Interest on Reserve Balances. - Get Interest Rate on Reserve Balances data A bank rate is the interest rate a nation's central bank charges to its - domestic banks to borrow money. The rates central banks charge are set to stabilize the economy. In the - United States, the Federal Reserve System's Board of Governors set the bank rate, also known as the discount rate. - - - Parameters - ---------- - start_date : Union[datetime.date, None] - Start date of the data, in YYYY-MM-DD format. - end_date : Union[datetime.date, None] - End date of the data, in YYYY-MM-DD format. - provider : Union[Literal['fred'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'fred' if there is - no default. - - Returns - ------- - OBBject - results : Union[List[IORB]] - Serializable results. - provider : Union[Literal['fred'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - IORB - ---- - date : date - The date of the data. - rate : Union[float] - IORB rate. - - Example - ------- - >>> from openbb import obb - >>> obb.fixedincome.iorb() - """ # noqa: E501 + Interest on Reserve Balances. + Get Interest Rate on Reserve Balances data A bank rate is the interest rate a nation's central bank charges to its + domestic banks to borrow money. The rates central banks charge are set to stabilize the economy. In the + United States, the Federal Reserve System's Board of Governors set the bank rate, also known as the discount rate. + + +Parameters +---------- +start_date : Union[datetime.date, None] + Start date of the data, in YYYY-MM-DD format. +end_date : Union[datetime.date, None] + End date of the data, in YYYY-MM-DD format. +provider : Union[Literal['fred'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fred' if there is + no default. + +Returns +------- +OBBject + results : Union[List[IORB]] + Serializable results. + provider : Union[Literal['fred'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +IORB +---- +date : date + The date of the data. +rate : Union[float] + IORB rate. + +Example +------- +>>> from openbb import obb +>>> obb.fixedincome.iorb() + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "start_date": start_date, - "end_date": end_date, - }, + provider_choices={"provider": provider, }, + standard_params={"start_date": start_date, "end_date": end_date, }, extra_params=kwargs, ) @@ -349,70 +282,68 @@ def iorb( **inputs, ) + @validate - def projections( - self, provider: Union[Literal["fred"], None] = None, **kwargs - ) -> OBBject[List[Data]]: + def projections(self, provider: Union[Literal['fred'], None] = None, **kwargs) -> OBBject[List[Data]]: """ - Fed Funds Rate Projections. - The projections for the federal funds rate are the value of the midpoint of the - projected appropriate target range for the federal funds rate or the projected - appropriate target level for the federal funds rate at the end of the specified - calendar year or over the longer run. - - - Parameters - ---------- - provider : Union[Literal['fred'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'fred' if there is - no default. - long_run : bool - Flag to show long run projections (provider: fred) - - Returns - ------- - OBBject - results : Union[List[PROJECTIONS]] - Serializable results. - provider : Union[Literal['fred'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - PROJECTIONS - ----------- - date : date - The date of the data. - range_high : Union[float] - High projection of rates. - central_tendency_high : Union[float] - Central tendency of high projection of rates. - median : Union[float] - Median projection of rates. - range_midpoint : Union[float] - Midpoint projection of rates. - central_tendency_midpoint : Union[float] - Central tendency of midpoint projection of rates. - range_low : Union[float] - Low projection of rates. - central_tendency_low : Union[float] - Central tendency of low projection of rates. - - Example - ------- - >>> from openbb import obb - >>> obb.fixedincome.projections() - """ # noqa: E501 + Fed Funds Rate Projections. + The projections for the federal funds rate are the value of the midpoint of the + projected appropriate target range for the federal funds rate or the projected + appropriate target level for the federal funds rate at the end of the specified + calendar year or over the longer run. + + +Parameters +---------- +provider : Union[Literal['fred'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fred' if there is + no default. +long_run : bool + Flag to show long run projections (provider: fred) + +Returns +------- +OBBject + results : Union[List[PROJECTIONS]] + Serializable results. + provider : Union[Literal['fred'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +PROJECTIONS +----------- +date : date + The date of the data. +range_high : Union[float] + High projection of rates. +central_tendency_high : Union[float] + Central tendency of high projection of rates. +median : Union[float] + Median projection of rates. +range_midpoint : Union[float] + Midpoint projection of rates. +central_tendency_midpoint : Union[float] + Central tendency of midpoint projection of rates. +range_low : Union[float] + Low projection of rates. +central_tendency_low : Union[float] + Central tendency of low projection of rates. + +Example +------- +>>> from openbb import obb +>>> obb.fixedincome.projections() + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, + provider_choices={"provider": provider, }, standard_params={}, extra_params=kwargs, ) @@ -422,78 +353,59 @@ def projections( **inputs, ) + @validate - def sofr( - self, - start_date: typing_extensions.Annotated[ - Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), - ] = None, - end_date: typing_extensions.Annotated[ - Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), - ] = None, - provider: Union[Literal["fred"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def sofr(self, start_date: typing_extensions.Annotated[Union[datetime.date, None, str], OpenBBCustomParameter(description='Start date of the data, in YYYY-MM-DD format.')] = None, end_date: typing_extensions.Annotated[Union[datetime.date, None, str], OpenBBCustomParameter(description='End date of the data, in YYYY-MM-DD format.')] = None, provider: Union[Literal['fred'], None] = None, **kwargs) -> OBBject[List[Data]]: """ - Secured Overnight Financing Rate. - The Secured Overnight Financing Rate (SOFR) is a broad measure of the cost of - borrowing cash overnight collateralized by Treasury securities. - - - Parameters - ---------- - start_date : Union[datetime.date, None] - Start date of the data, in YYYY-MM-DD format. - end_date : Union[datetime.date, None] - End date of the data, in YYYY-MM-DD format. - provider : Union[Literal['fred'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'fred' if there is - no default. - period : Literal['overnight', '30_day', '90_day', '180_day', 'index'] - Period of SOFR rate. (provider: fred) - - Returns - ------- - OBBject - results : Union[List[SOFR]] - Serializable results. - provider : Union[Literal['fred'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - SOFR - ---- - date : date - The date of the data. - rate : Union[float] - SOFR rate. - - Example - ------- - >>> from openbb import obb - >>> obb.fixedincome.sofr() - """ # noqa: E501 + Secured Overnight Financing Rate. + The Secured Overnight Financing Rate (SOFR) is a broad measure of the cost of + borrowing cash overnight collateralized by Treasury securities. + + +Parameters +---------- +start_date : Union[datetime.date, None] + Start date of the data, in YYYY-MM-DD format. +end_date : Union[datetime.date, None] + End date of the data, in YYYY-MM-DD format. +provider : Union[Literal['fred'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fred' if there is + no default. +period : Literal['overnight', '30_day', '90_day', '180_day', 'index'] + Period of SOFR rate. (provider: fred) + +Returns +------- +OBBject + results : Union[List[SOFR]] + Serializable results. + provider : Union[Literal['fred'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +SOFR +---- +date : date + The date of the data. +rate : Union[float] + SOFR rate. + +Example +------- +>>> from openbb import obb +>>> obb.fixedincome.sofr() + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "start_date": start_date, - "end_date": end_date, - }, + provider_choices={"provider": provider, }, + standard_params={"start_date": start_date, "end_date": end_date, }, extra_params=kwargs, ) @@ -502,78 +414,59 @@ def sofr( **inputs, ) + @validate - def sonia( - self, - start_date: typing_extensions.Annotated[ - Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), - ] = None, - end_date: typing_extensions.Annotated[ - Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), - ] = None, - provider: Union[Literal["fred"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def sonia(self, start_date: typing_extensions.Annotated[Union[datetime.date, None, str], OpenBBCustomParameter(description='Start date of the data, in YYYY-MM-DD format.')] = None, end_date: typing_extensions.Annotated[Union[datetime.date, None, str], OpenBBCustomParameter(description='End date of the data, in YYYY-MM-DD format.')] = None, provider: Union[Literal['fred'], None] = None, **kwargs) -> OBBject[List[Data]]: """ - Sterling Overnight Index Average. - SONIA (Sterling Overnight Index Average) is an important interest rate benchmark. SONIA is based on actual - transactions and reflects the average of the interest rates that banks pay to borrow sterling overnight from other - financial institutions and other institutional investors. - - Parameters - ---------- - start_date : Union[datetime.date, None] - Start date of the data, in YYYY-MM-DD format. - end_date : Union[datetime.date, None] - End date of the data, in YYYY-MM-DD format. - provider : Union[Literal['fred'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'fred' if there is - no default. - parameter : Literal['rate', 'index', '10th_percentile', '25th_percentile', '75th_percentile', '90th_percentile', 'total_nominal_value'] - Period of SONIA rate. (provider: fred) - - Returns - ------- - OBBject - results : Union[List[SONIA]] - Serializable results. - provider : Union[Literal['fred'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - SONIA - ----- - date : date - The date of the data. - rate : Union[float] - SONIA rate. - - Example - ------- - >>> from openbb import obb - >>> obb.fixedincome.sonia() - """ # noqa: E501 + Sterling Overnight Index Average. + SONIA (Sterling Overnight Index Average) is an important interest rate benchmark. SONIA is based on actual + transactions and reflects the average of the interest rates that banks pay to borrow sterling overnight from other + financial institutions and other institutional investors. + +Parameters +---------- +start_date : Union[datetime.date, None] + Start date of the data, in YYYY-MM-DD format. +end_date : Union[datetime.date, None] + End date of the data, in YYYY-MM-DD format. +provider : Union[Literal['fred'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fred' if there is + no default. +parameter : Literal['rate', 'index', '10th_percentile', '25th_percentile', '75th_percentile', '90th_percentile', 'total_nominal_value'] + Period of SONIA rate. (provider: fred) + +Returns +------- +OBBject + results : Union[List[SONIA]] + Serializable results. + provider : Union[Literal['fred'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +SONIA +----- +date : date + The date of the data. +rate : Union[float] + SONIA rate. + +Example +------- +>>> from openbb import obb +>>> obb.fixedincome.sonia() + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "start_date": start_date, - "end_date": end_date, - }, + provider_choices={"provider": provider, }, + standard_params={"start_date": start_date, "end_date": end_date, }, extra_params=kwargs, ) @@ -582,94 +475,75 @@ def sonia( **inputs, ) + @validate - def treasury( - self, - start_date: typing_extensions.Annotated[ - Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), - ] = None, - end_date: typing_extensions.Annotated[ - Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), - ] = None, - provider: Union[Literal["fmp"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def treasury(self, start_date: typing_extensions.Annotated[Union[datetime.date, None, str], OpenBBCustomParameter(description='Start date of the data, in YYYY-MM-DD format.')] = None, end_date: typing_extensions.Annotated[Union[datetime.date, None, str], OpenBBCustomParameter(description='End date of the data, in YYYY-MM-DD format.')] = None, provider: Union[Literal['fmp'], None] = None, **kwargs) -> OBBject[List[Data]]: """Treasury Rates. Treasury rates data. - Parameters - ---------- - start_date : Union[datetime.date, None] - Start date of the data, in YYYY-MM-DD format. - end_date : Union[datetime.date, None] - End date of the data, in YYYY-MM-DD format. - provider : Union[Literal['fmp'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'fmp' if there is - no default. - - Returns - ------- - OBBject - results : Union[List[TreasuryRates]] - Serializable results. - provider : Union[Literal['fmp'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - TreasuryRates - ------------- - date : date - The date of the data. - month_1 : float - 1 month treasury rate. - month_2 : float - 2 month treasury rate. - month_3 : float - 3 month treasury rate. - month_6 : float - 6 month treasury rate. - year_1 : float - 1 year treasury rate. - year_2 : float - 2 year treasury rate. - year_3 : float - 3 year treasury rate. - year_5 : float - 5 year treasury rate. - year_7 : float - 7 year treasury rate. - year_10 : float - 10 year treasury rate. - year_20 : float - 20 year treasury rate. - year_30 : float - 30 year treasury rate. - - Example - ------- - >>> from openbb import obb - >>> obb.fixedincome.treasury() - """ # noqa: E501 +Parameters +---------- +start_date : Union[datetime.date, None] + Start date of the data, in YYYY-MM-DD format. +end_date : Union[datetime.date, None] + End date of the data, in YYYY-MM-DD format. +provider : Union[Literal['fmp'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fmp' if there is + no default. + +Returns +------- +OBBject + results : Union[List[TreasuryRates]] + Serializable results. + provider : Union[Literal['fmp'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +TreasuryRates +------------- +date : date + The date of the data. +month_1 : float + 1 month treasury rate. +month_2 : float + 2 month treasury rate. +month_3 : float + 3 month treasury rate. +month_6 : float + 6 month treasury rate. +year_1 : float + 1 year treasury rate. +year_2 : float + 2 year treasury rate. +year_3 : float + 3 year treasury rate. +year_5 : float + 5 year treasury rate. +year_7 : float + 7 year treasury rate. +year_10 : float + 10 year treasury rate. +year_20 : float + 20 year treasury rate. +year_30 : float + 30 year treasury rate. + +Example +------- +>>> from openbb import obb +>>> obb.fixedincome.treasury() + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "start_date": start_date, - "end_date": end_date, - }, + provider_choices={"provider": provider, }, + standard_params={"start_date": start_date, "end_date": end_date, }, extra_params=kwargs, ) @@ -678,70 +552,53 @@ def treasury( **inputs, ) + @validate - def ycrv( - self, - date: typing_extensions.Annotated[ - Union[datetime.date, None], - OpenBBCustomParameter( - description="A specific date to get data for. Defaults to the most recent FRED entry." - ), - ] = None, - inflation_adjusted: typing_extensions.Annotated[ - Union[bool, None], - OpenBBCustomParameter(description="Get inflation adjusted rates."), - ] = False, - provider: Union[Literal["fred"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def ycrv(self, date: typing_extensions.Annotated[Union[datetime.date, None], OpenBBCustomParameter(description='A specific date to get data for. Defaults to the most recent FRED entry.')] = None, inflation_adjusted: typing_extensions.Annotated[Union[bool, None], OpenBBCustomParameter(description='Get inflation adjusted rates.')] = False, provider: Union[Literal['fred'], None] = None, **kwargs) -> OBBject[List[Data]]: """US Yield Curve. Get United States yield curve. - Parameters - ---------- - date : Union[datetime.date, None] - A specific date to get data for. Defaults to the most recent FRED entry. - inflation_adjusted : Union[bool, None] - Get inflation adjusted rates. - provider : Union[Literal['fred'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'fred' if there is - no default. - - Returns - ------- - OBBject - results : Union[List[USYieldCurve]] - Serializable results. - provider : Union[Literal['fred'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - USYieldCurve - ------------ - maturity : float - Maturity of the treasury rate in years. - rate : float - Associated rate given in decimal form (0.05 is 5%) - - Example - ------- - >>> from openbb import obb - >>> obb.fixedincome.ycrv() - """ # noqa: E501 +Parameters +---------- +date : Union[datetime.date, None] + A specific date to get data for. Defaults to the most recent FRED entry. +inflation_adjusted : Union[bool, None] + Get inflation adjusted rates. +provider : Union[Literal['fred'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fred' if there is + no default. + +Returns +------- +OBBject + results : Union[List[USYieldCurve]] + Serializable results. + provider : Union[Literal['fred'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +USYieldCurve +------------ +maturity : float + Maturity of the treasury rate in years. +rate : float + Associated rate given in decimal form (0.05 is 5%) + +Example +------- +>>> from openbb import obb +>>> obb.fixedincome.ycrv() + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "date": date, - "inflation_adjusted": inflation_adjusted, - }, + provider_choices={"provider": provider, }, + standard_params={"date": date, "inflation_adjusted": inflation_adjusted, }, extra_params=kwargs, ) @@ -749,3 +606,4 @@ def ycrv( "/fixedincome/ycrv", **inputs, ) + diff --git a/openbb_platform/openbb/package/forex.py b/openbb_platform/openbb/package/forex.py index 0b3adc2c570f..f4ad577ec9d8 100644 --- a/openbb_platform/openbb/package/forex.py +++ b/openbb_platform/openbb/package/forex.py @@ -1,139 +1,122 @@ ### THIS FILE IS AUTO-GENERATED. DO NOT EDIT. ### +from openbb_core.app.static.container import Container +from openbb_core.app.model.obbject import OBBject +from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +import openbb_provider +import pandas import datetime -from typing import List, Literal, Union - +import pydantic +from pydantic import BaseModel +from inspect import Parameter +import typing +from typing import List, Dict, Union, Optional, Literal +from annotated_types import Ge, Le, Gt, Lt import typing_extensions -from openbb_core.app.model.custom_parameter import OpenBBCustomParameter -from openbb_core.app.model.obbject import OBBject -from openbb_core.app.static.container import Container +from openbb_core.app.utils import df_to_basemodel from openbb_core.app.static.decorators import validate + from openbb_core.app.static.filters import filter_inputs -from openbb_provider.abstract.data import Data +from openbb_provider.abstract.data import Data +import openbb_core.app.model.command_context +import openbb_core.app.model.obbject +import types class ROUTER_forex(Container): """/forex - load - pairs +load +pairs """ - def __repr__(self) -> str: return self.__doc__ or "" @validate - def load( - self, - symbol: typing_extensions.Annotated[ - Union[str, List[str]], - OpenBBCustomParameter( - description="Symbol to get data for. Can use CURR1-CURR2 or CURR1CURR2 format." - ), - ], - start_date: typing_extensions.Annotated[ - Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), - ] = None, - end_date: typing_extensions.Annotated[ - Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), - ] = None, - provider: Union[Literal["fmp", "polygon", "yfinance"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def load(self, symbol: typing_extensions.Annotated[Union[str, List[str]], OpenBBCustomParameter(description='Symbol to get data for. Can use CURR1-CURR2 or CURR1CURR2 format.')], start_date: typing_extensions.Annotated[Union[datetime.date, None, str], OpenBBCustomParameter(description='Start date of the data, in YYYY-MM-DD format.')] = None, end_date: typing_extensions.Annotated[Union[datetime.date, None, str], OpenBBCustomParameter(description='End date of the data, in YYYY-MM-DD format.')] = None, provider: Union[Literal['fmp', 'polygon', 'yfinance'], None] = None, **kwargs) -> OBBject[List[Data]]: """Forex Historical Price. Forex historical data. - Parameters - ---------- - symbol : str - Symbol to get data for. Can use CURR1-CURR2 or CURR1CURR2 format. - start_date : Union[datetime.date, None] - Start date of the data, in YYYY-MM-DD format. - end_date : Union[datetime.date, None] - End date of the data, in YYYY-MM-DD format. - provider : Union[Literal['fmp', 'polygon', 'yfinance'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'fmp' if there is - no default. - interval : Optional[Union[Literal['1min', '5min', '15min', '30min', '1hour', '4hour', '1day'], Literal['1m', '2m', '5m', '15m', '30m', '60m', '90m', '1h', '1d', '5d', '1wk', '1mo', '3mo']]] - Data granularity. (provider: fmp, yfinance) - multiplier : int - Multiplier of the timespan. (provider: polygon) - timespan : Literal['minute', 'hour', 'day', 'week', 'month', 'quarter', 'year'] - Timespan of the data. (provider: polygon) - sort : Literal['asc', 'desc'] - Sort order of the data. (provider: polygon) - limit : int - The number of data entries to return. (provider: polygon) - adjusted : bool - Whether the data is adjusted. (provider: polygon) - period : Optional[Union[Literal['1d', '5d', '1mo', '3mo', '6mo', '1y', '2y', '5y', '10y', 'ytd', 'max']]] - Time period of the data to return. (provider: yfinance) - - Returns - ------- - OBBject - results : Union[List[ForexHistorical]] - Serializable results. - provider : Union[Literal['fmp', 'polygon', 'yfinance'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - ForexHistorical - --------------- - date : datetime - The date of the data. - open : float - The open price of the symbol. - high : float - The high price of the symbol. - low : float - The low price of the symbol. - close : float - The close price of the symbol. - volume : float - The volume of the symbol. - vwap : Optional[Union[typing_extensions.Annotated[float, Gt(gt=0)]]] - Volume Weighted Average Price of the symbol. - adj_close : Optional[Union[float]] - Adjusted Close Price of the symbol. (provider: fmp) - unadjusted_volume : Optional[Union[float]] - Unadjusted volume of the symbol. (provider: fmp) - change : Optional[Union[float]] - Change in the price of the symbol from the previous day. (provider: fmp) - change_percent : Optional[Union[float]] - Change % in the price of the symbol. (provider: fmp) - label : Optional[Union[str]] - Human readable format of the date. (provider: fmp) - change_over_time : Optional[Union[float]] - Change % in the price of the symbol over a period of time. (provider: fmp) - transactions : Optional[Union[typing_extensions.Annotated[int, Gt(gt=0)]]] - Number of transactions for the symbol in the time period. (provider: polygon) - - Example - ------- - >>> from openbb import obb - >>> obb.forex.load(symbol="EURUSD") - """ # noqa: E501 +Parameters +---------- +symbol : str + Symbol to get data for. Can use CURR1-CURR2 or CURR1CURR2 format. +start_date : Union[datetime.date, None] + Start date of the data, in YYYY-MM-DD format. +end_date : Union[datetime.date, None] + End date of the data, in YYYY-MM-DD format. +provider : Union[Literal['fmp', 'polygon', 'yfinance'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fmp' if there is + no default. +interval : Optional[Union[Literal['1min', '5min', '15min', '30min', '1hour', '4hour', '1day'], Literal['1m', '2m', '5m', '15m', '30m', '60m', '90m', '1h', '1d', '5d', '1wk', '1mo', '3mo']]] + Data granularity. (provider: fmp, yfinance) +multiplier : int + Multiplier of the timespan. (provider: polygon) +timespan : Literal['minute', 'hour', 'day', 'week', 'month', 'quarter', 'year'] + Timespan of the data. (provider: polygon) +sort : Literal['asc', 'desc'] + Sort order of the data. (provider: polygon) +limit : int + The number of data entries to return. (provider: polygon) +adjusted : bool + Whether the data is adjusted. (provider: polygon) +period : Optional[Union[Literal['1d', '5d', '1mo', '3mo', '6mo', '1y', '2y', '5y', '10y', 'ytd', 'max']]] + Time period of the data to return. (provider: yfinance) + +Returns +------- +OBBject + results : Union[List[ForexHistorical]] + Serializable results. + provider : Union[Literal['fmp', 'polygon', 'yfinance'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +ForexHistorical +--------------- +date : datetime + The date of the data. +open : float + The open price of the symbol. +high : float + The high price of the symbol. +low : float + The low price of the symbol. +close : float + The close price of the symbol. +volume : float + The volume of the symbol. +vwap : Optional[Union[typing_extensions.Annotated[float, Gt(gt=0)]]] + Volume Weighted Average Price of the symbol. +adj_close : Optional[Union[float]] + Adjusted Close Price of the symbol. (provider: fmp) +unadjusted_volume : Optional[Union[float]] + Unadjusted volume of the symbol. (provider: fmp) +change : Optional[Union[float]] + Change in the price of the symbol from the previous day. (provider: fmp) +change_percent : Optional[Union[float]] + Change % in the price of the symbol. (provider: fmp) +label : Optional[Union[str]] + Human readable format of the date. (provider: fmp) +change_over_time : Optional[Union[float]] + Change % in the price of the symbol over a period of time. (provider: fmp) +transactions : Optional[Union[typing_extensions.Annotated[int, Gt(gt=0)]]] + Number of transactions for the symbol in the time period. (provider: polygon) + +Example +------- +>>> from openbb import obb +>>> obb.forex.load(symbol="EURUSD") + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, - "start_date": start_date, - "end_date": end_date, - }, + provider_choices={"provider": provider, }, + standard_params={"symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, "start_date": start_date, "end_date": end_date, }, extra_params=kwargs, ) @@ -142,94 +125,90 @@ def load( **inputs, ) + @validate - def pairs( - self, - provider: Union[Literal["fmp", "intrinio", "polygon"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def pairs(self, provider: Union[Literal['fmp', 'intrinio', 'polygon'], None] = None, **kwargs) -> OBBject[List[Data]]: """Forex Pairs. Forex available pairs. - Parameters - ---------- - provider : Union[Literal['fmp', 'intrinio', 'polygon'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'fmp' if there is - no default. - symbol : Optional[Union[str]] - Symbol of the pair to search. (provider: polygon) - date : Optional[Union[datetime.date]] - A specific date to get data for. (provider: polygon) - search : Optional[Union[str]] - Search for terms within the ticker and/or company name. (provider: polygon) - active : Optional[Union[bool]] - Specify if the tickers returned should be actively traded on the queried date. (provider: polygon) - order : Optional[Union[Literal['asc', 'desc']]] - Order data by ascending or descending. (provider: polygon) - sort : Optional[Union[Literal['ticker', 'name', 'market', 'locale', 'currency_symbol', 'currency_name', 'base_currency_symbol', 'base_currency_name', 'last_updated_utc', 'delisted_utc']]] - Sort field used for ordering. (provider: polygon) - limit : Optional[Union[typing_extensions.Annotated[int, Gt(gt=0)]]] - The number of data entries to return. (provider: polygon) - - Returns - ------- - OBBject - results : Union[List[ForexPairs]] - Serializable results. - provider : Union[Literal['fmp', 'intrinio', 'polygon'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - ForexPairs - ---------- - name : str - Name of the currency pair. - symbol : Optional[Union[str]] - Symbol of the currency pair. (provider: fmp) - currency : Optional[Union[str]] - Base currency of the currency pair. (provider: fmp) - stock_exchange : Optional[Union[str]] - Stock exchange of the currency pair. (provider: fmp) - exchange_short_name : Optional[Union[str]] - Short name of the stock exchange of the currency pair. (provider: fmp) - code : Optional[Union[str]] - Code of the currency pair. (provider: intrinio) - base_currency : Optional[Union[str]] - ISO 4217 currency code of the base currency. (provider: intrinio) - quote_currency : Optional[Union[str]] - ISO 4217 currency code of the quote currency. (provider: intrinio) - market : Optional[Union[str]] - Name of the trading market. Always 'fx'. (provider: polygon) - locale : Optional[Union[str]] - Locale of the currency pair. (provider: polygon) - currency_symbol : Optional[Union[str]] - The symbol of the quote currency. (provider: polygon) - currency_name : Optional[Union[str]] - Name of the quote currency. (provider: polygon) - base_currency_symbol : Optional[Union[str]] - The symbol of the base currency. (provider: polygon) - base_currency_name : Optional[Union[str]] - Name of the base currency. (provider: polygon) - last_updated_utc : Optional[Union[datetime]] - The last updated timestamp in UTC. (provider: polygon) - delisted_utc : Optional[Union[datetime]] - The delisted timestamp in UTC. (provider: polygon) - - Example - ------- - >>> from openbb import obb - >>> obb.forex.pairs() - """ # noqa: E501 +Parameters +---------- +provider : Union[Literal['fmp', 'intrinio', 'polygon'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fmp' if there is + no default. +symbol : Optional[Union[str]] + Symbol of the pair to search. (provider: polygon) +date : Optional[Union[datetime.date]] + A specific date to get data for. (provider: polygon) +search : Optional[Union[str]] + Search for terms within the ticker and/or company name. (provider: polygon) +active : Optional[Union[bool]] + Specify if the tickers returned should be actively traded on the queried date. (provider: polygon) +order : Optional[Union[Literal['asc', 'desc']]] + Order data by ascending or descending. (provider: polygon) +sort : Optional[Union[Literal['ticker', 'name', 'market', 'locale', 'currency_symbol', 'currency_name', 'base_currency_symbol', 'base_currency_name', 'last_updated_utc', 'delisted_utc']]] + Sort field used for ordering. (provider: polygon) +limit : Optional[Union[typing_extensions.Annotated[int, Gt(gt=0)]]] + The number of data entries to return. (provider: polygon) + +Returns +------- +OBBject + results : Union[List[ForexPairs]] + Serializable results. + provider : Union[Literal['fmp', 'intrinio', 'polygon'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +ForexPairs +---------- +name : str + Name of the currency pair. +symbol : Optional[Union[str]] + Symbol of the currency pair. (provider: fmp) +currency : Optional[Union[str]] + Base currency of the currency pair. (provider: fmp) +stock_exchange : Optional[Union[str]] + Stock exchange of the currency pair. (provider: fmp) +exchange_short_name : Optional[Union[str]] + Short name of the stock exchange of the currency pair. (provider: fmp) +code : Optional[Union[str]] + Code of the currency pair. (provider: intrinio) +base_currency : Optional[Union[str]] + ISO 4217 currency code of the base currency. (provider: intrinio) +quote_currency : Optional[Union[str]] + ISO 4217 currency code of the quote currency. (provider: intrinio) +market : Optional[Union[str]] + Name of the trading market. Always 'fx'. (provider: polygon) +locale : Optional[Union[str]] + Locale of the currency pair. (provider: polygon) +currency_symbol : Optional[Union[str]] + The symbol of the quote currency. (provider: polygon) +currency_name : Optional[Union[str]] + Name of the quote currency. (provider: polygon) +base_currency_symbol : Optional[Union[str]] + The symbol of the base currency. (provider: polygon) +base_currency_name : Optional[Union[str]] + Name of the base currency. (provider: polygon) +last_updated_utc : Optional[Union[datetime]] + The last updated timestamp in UTC. (provider: polygon) +delisted_utc : Optional[Union[datetime]] + The delisted timestamp in UTC. (provider: polygon) + +Example +------- +>>> from openbb import obb +>>> obb.forex.pairs() + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, + provider_choices={"provider": provider, }, standard_params={}, extra_params=kwargs, ) @@ -238,3 +217,4 @@ def pairs( "/forex/pairs", **inputs, ) + diff --git a/openbb_platform/openbb/package/futures.py b/openbb_platform/openbb/package/futures.py index 39b7dd4776d6..c8c640741310 100644 --- a/openbb_platform/openbb/package/futures.py +++ b/openbb_platform/openbb/package/futures.py @@ -1,90 +1,84 @@ ### THIS FILE IS AUTO-GENERATED. DO NOT EDIT. ### +from openbb_core.app.static.container import Container +from openbb_core.app.model.obbject import OBBject +from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +import openbb_provider +import pandas import datetime -from typing import List, Literal, Union - +import pydantic +from pydantic import BaseModel +from inspect import Parameter +import typing +from typing import List, Dict, Union, Optional, Literal +from annotated_types import Ge, Le, Gt, Lt import typing_extensions -from openbb_core.app.model.custom_parameter import OpenBBCustomParameter -from openbb_core.app.model.obbject import OBBject -from openbb_core.app.static.container import Container +from openbb_core.app.utils import df_to_basemodel from openbb_core.app.static.decorators import validate + from openbb_core.app.static.filters import filter_inputs -from openbb_provider.abstract.data import Data +from openbb_provider.abstract.data import Data +import openbb_core.app.model.command_context +import openbb_core.app.model.obbject +import types class ROUTER_futures(Container): """/futures - curve - load +curve +load """ - def __repr__(self) -> str: return self.__doc__ or "" @validate - def curve( - self, - symbol: typing_extensions.Annotated[ - Union[str, List[str]], - OpenBBCustomParameter(description="Symbol to get data for."), - ], - date: typing_extensions.Annotated[ - Union[datetime.date, None], - OpenBBCustomParameter(description="A specific date to get data for."), - ] = None, - provider: Union[Literal["cboe", "yfinance"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def curve(self, symbol: typing_extensions.Annotated[Union[str, List[str]], OpenBBCustomParameter(description='Symbol to get data for.')], date: typing_extensions.Annotated[Union[datetime.date, None], OpenBBCustomParameter(description='A specific date to get data for.')] = None, provider: Union[Literal['cboe', 'yfinance'], None] = None, **kwargs) -> OBBject[List[Data]]: """Futures Historical Price. Futures historical data. - Parameters - ---------- - symbol : str - Symbol to get data for. - date : Union[datetime.date, None] - A specific date to get data for. - provider : Union[Literal['cboe', 'yfinance'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'cboe' if there is - no default. - - Returns - ------- - OBBject - results : Union[List[FuturesCurve]] - Serializable results. - provider : Union[Literal['cboe', 'yfinance'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - FuturesCurve - ------------ - expiration : str - Futures expiration month. - price : Optional[Union[float]] - The close price of the symbol. - symbol : Optional[Union[str]] - The trading symbol for the tenor of future. (provider: cboe) - - Example - ------- - >>> from openbb import obb - >>> obb.futures.curve(symbol="VX") - """ # noqa: E501 +Parameters +---------- +symbol : str + Symbol to get data for. +date : Union[datetime.date, None] + A specific date to get data for. +provider : Union[Literal['cboe', 'yfinance'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'cboe' if there is + no default. + +Returns +------- +OBBject + results : Union[List[FuturesCurve]] + Serializable results. + provider : Union[Literal['cboe', 'yfinance'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +FuturesCurve +------------ +expiration : str + Futures expiration month. +price : Optional[Union[float]] + The close price of the symbol. +symbol : Optional[Union[str]] + The trading symbol for the tenor of future. (provider: cboe) + +Example +------- +>>> from openbb import obb +>>> obb.futures.curve(symbol="VX") + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, - "date": date, - }, + provider_choices={"provider": provider, }, + standard_params={"symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, "date": date, }, extra_params=kwargs, ) @@ -93,104 +87,75 @@ def curve( **inputs, ) + @validate - def load( - self, - symbol: typing_extensions.Annotated[ - Union[str, List[str]], - OpenBBCustomParameter(description="Symbol to get data for."), - ], - start_date: typing_extensions.Annotated[ - Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), - ] = None, - end_date: typing_extensions.Annotated[ - Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), - ] = None, - expiration: typing_extensions.Annotated[ - Union[str, None], - OpenBBCustomParameter(description="Future expiry date with format YYYY-MM"), - ] = None, - provider: Union[Literal["yfinance"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def load(self, symbol: typing_extensions.Annotated[Union[str, List[str]], OpenBBCustomParameter(description='Symbol to get data for.')], start_date: typing_extensions.Annotated[Union[datetime.date, None, str], OpenBBCustomParameter(description='Start date of the data, in YYYY-MM-DD format.')] = None, end_date: typing_extensions.Annotated[Union[datetime.date, None, str], OpenBBCustomParameter(description='End date of the data, in YYYY-MM-DD format.')] = None, expiration: typing_extensions.Annotated[Union[str, None], OpenBBCustomParameter(description='Future expiry date with format YYYY-MM')] = None, provider: Union[Literal['yfinance'], None] = None, **kwargs) -> OBBject[List[Data]]: """Futures Historical Price. Futures historical data. - Parameters - ---------- - symbol : str - Symbol to get data for. - start_date : Union[datetime.date, None] - Start date of the data, in YYYY-MM-DD format. - end_date : Union[datetime.date, None] - End date of the data, in YYYY-MM-DD format. - expiration : Union[str, None] - Future expiry date with format YYYY-MM - provider : Union[Literal['yfinance'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'yfinance' if there is - no default. - interval : Optional[Union[Literal['1m', '2m', '5m', '15m', '30m', '60m', '90m', '1h', '1d', '5d', '1wk', '1mo', '3mo']]] - Data granularity. (provider: yfinance) - period : Optional[Union[Literal['1d', '5d', '1mo', '3mo', '6mo', '1y', '2y', '5y', '10y', 'ytd', 'max']]] - Time period of the data to return. (provider: yfinance) - prepost : bool - Include Pre and Post market data. (provider: yfinance) - adjust : bool - Adjust all the data automatically. (provider: yfinance) - back_adjust : bool - Back-adjusted data to mimic true historical prices. (provider: yfinance) - - Returns - ------- - OBBject - results : Union[List[FuturesHistorical]] - Serializable results. - provider : Union[Literal['yfinance'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - FuturesHistorical - ----------------- - date : datetime - The date of the data. - open : float - The open price of the symbol. - high : float - The high price of the symbol. - low : float - The low price of the symbol. - close : float - The close price of the symbol. - volume : float - The volume of the symbol. - - Example - ------- - >>> from openbb import obb - >>> obb.futures.load(symbol="ES") - """ # noqa: E501 +Parameters +---------- +symbol : str + Symbol to get data for. +start_date : Union[datetime.date, None] + Start date of the data, in YYYY-MM-DD format. +end_date : Union[datetime.date, None] + End date of the data, in YYYY-MM-DD format. +expiration : Union[str, None] + Future expiry date with format YYYY-MM +provider : Union[Literal['yfinance'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'yfinance' if there is + no default. +interval : Optional[Union[Literal['1m', '2m', '5m', '15m', '30m', '60m', '90m', '1h', '1d', '5d', '1wk', '1mo', '3mo']]] + Data granularity. (provider: yfinance) +period : Optional[Union[Literal['1d', '5d', '1mo', '3mo', '6mo', '1y', '2y', '5y', '10y', 'ytd', 'max']]] + Time period of the data to return. (provider: yfinance) +prepost : bool + Include Pre and Post market data. (provider: yfinance) +adjust : bool + Adjust all the data automatically. (provider: yfinance) +back_adjust : bool + Back-adjusted data to mimic true historical prices. (provider: yfinance) + +Returns +------- +OBBject + results : Union[List[FuturesHistorical]] + Serializable results. + provider : Union[Literal['yfinance'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +FuturesHistorical +----------------- +date : datetime + The date of the data. +open : float + The open price of the symbol. +high : float + The high price of the symbol. +low : float + The low price of the symbol. +close : float + The close price of the symbol. +volume : float + The volume of the symbol. + +Example +------- +>>> from openbb import obb +>>> obb.futures.load(symbol="ES") + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, - "start_date": start_date, - "end_date": end_date, - "expiration": expiration, - }, + provider_choices={"provider": provider, }, + standard_params={"symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, "start_date": start_date, "end_date": end_date, "expiration": expiration, }, extra_params=kwargs, ) @@ -198,3 +163,4 @@ def load( "/futures/load", **inputs, ) + diff --git a/openbb_platform/openbb/package/module_map.json b/openbb_platform/openbb/package/module_map.json index c4f58d5557aa..74c636ab6cb6 100644 --- a/openbb_platform/openbb/package/module_map.json +++ b/openbb_platform/openbb/package/module_map.json @@ -35,6 +35,20 @@ "economy_index_snapshots": "/economy/index_snapshots", "economy_risk": "/economy/risk", "economy_sp500_multiples": "/economy/sp500_multiples", + "etf": "/etf", + "etf_countries": "/etf/countries", + "etf_disc": "/etf/disc", + "etf_disc_active": "/etf/disc/active", + "etf_disc_gainers": "/etf/disc/gainers", + "etf_disc_losers": "/etf/disc/losers", + "etf_historical": "/etf/historical", + "etf_holdings": "/etf/holdings", + "etf_holdings_date": "/etf/holdings_date", + "etf_holdings_performance": "/etf/holdings_performance", + "etf_info": "/etf/info", + "etf_price_performance": "/etf/price_performance", + "etf_search": "/etf/search", + "etf_sectors": "/etf/sectors", "fixedincome": "/fixedincome", "fixedincome_ameribor": "/fixedincome/ameribor", "fixedincome_estr": "/fixedincome/estr", @@ -64,14 +78,34 @@ "qa_so": "/qa/so", "qa_summary": "/qa/summary", "qa_unitroot": "/qa/unitroot", + "regulators": "/regulators", + "regulators_sec": "/regulators/sec", + "regulators_sec_cik_map": "/regulators/sec/cik_map", + "regulators_sec_filings": "/regulators/sec/filings", + "regulators_sec_institutions_search": "/regulators/sec/institutions_search", + "regulators_sec_rss_litigation": "/regulators/sec/rss_litigation", + "regulators_sec_schema_files": "/regulators/sec/schema_files", + "regulators_sec_sic_search": "/regulators/sec/sic_search", + "regulators_sec_symbol_map": "/regulators/sec/symbol_map", "stocks": "/stocks", "stocks_ca": "/stocks/ca", "stocks_ca_peers": "/stocks/ca/peers", + "stocks_calendar_dividend": "/stocks/calendar_dividend", "stocks_calendar_ipo": "/stocks/calendar_ipo", + "stocks_disc": "/stocks/disc", + "stocks_disc_active": "/stocks/disc/active", + "stocks_disc_aggressive_small_caps": "/stocks/disc/aggressive_small_caps", + "stocks_disc_filings": "/stocks/disc/filings", + "stocks_disc_gainers": "/stocks/disc/gainers", + "stocks_disc_growth_tech_equities": "/stocks/disc/growth_tech_equities", + "stocks_disc_losers": "/stocks/disc/losers", + "stocks_disc_top_retail": "/stocks/disc/top_retail", + "stocks_disc_undervalued_growth_equities": "/stocks/disc/undervalued_growth_equities", + "stocks_disc_undervalued_large_caps": "/stocks/disc/undervalued_large_caps", + "stocks_disc_upcoming_release_days": "/stocks/disc/upcoming_release_days", "stocks_fa": "/stocks/fa", "stocks_fa_balance": "/stocks/fa/balance", "stocks_fa_balance_growth": "/stocks/fa/balance_growth", - "stocks_fa_cal": "/stocks/fa/cal", "stocks_fa_cash": "/stocks/fa/cash", "stocks_fa_cash_growth": "/stocks/fa/cash_growth", "stocks_fa_comp": "/stocks/fa/comp", @@ -97,6 +131,7 @@ "stocks_fa_shrs": "/stocks/fa/shrs", "stocks_fa_split": "/stocks/fa/split", "stocks_fa_transcript": "/stocks/fa/transcript", + "stocks_ftd": "/stocks/ftd", "stocks_info": "/stocks/info", "stocks_load": "/stocks/load", "stocks_multiples": "/stocks/multiples", diff --git a/openbb_platform/openbb/package/news.py b/openbb_platform/openbb/package/news.py index a0558f2b48ac..86098252325e 100644 --- a/openbb_platform/openbb/package/news.py +++ b/openbb_platform/openbb/package/news.py @@ -1,145 +1,143 @@ ### THIS FILE IS AUTO-GENERATED. DO NOT EDIT. ### -from typing import List, Literal, Union - -import typing_extensions -from openbb_core.app.model.custom_parameter import OpenBBCustomParameter -from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container +from openbb_core.app.model.obbject import OBBject +from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +import openbb_provider +import pandas +import datetime +import pydantic +from pydantic import BaseModel +from inspect import Parameter +import typing +from typing import List, Dict, Union, Optional, Literal +from annotated_types import Ge, Le, Gt, Lt +import typing_extensions +from openbb_core.app.utils import df_to_basemodel from openbb_core.app.static.decorators import validate + from openbb_core.app.static.filters import filter_inputs -from openbb_provider.abstract.data import Data +from openbb_provider.abstract.data import Data +import openbb_core.app.model.command_context +import openbb_core.app.model.obbject +import types class ROUTER_news(Container): """/news - globalnews +globalnews """ - def __repr__(self) -> str: return self.__doc__ or "" @validate - def globalnews( - self, - limit: typing_extensions.Annotated[ - int, - OpenBBCustomParameter( - description="The number of data entries to return. Here its the no. of articles to return." - ), - ] = 20, - provider: Union[Literal["benzinga", "biztoc", "fmp", "intrinio"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def globalnews(self, limit: typing_extensions.Annotated[int, OpenBBCustomParameter(description='The number of data entries to return. Here its the no. of articles to return.')] = 20, provider: Union[Literal['benzinga', 'biztoc', 'fmp', 'intrinio'], None] = None, **kwargs) -> OBBject[List[Data]]: """Global News. Global news data. - Parameters - ---------- - limit : int - The number of data entries to return. Here its the no. of articles to return. - provider : Union[Literal['benzinga', 'biztoc', 'fmp', 'intrinio'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'benzinga' if there is - no default. - display : Literal['headline', 'abstract', 'full'] - Specify headline only (headline), headline + teaser (abstract), or headline + full body (full). (provider: benzinga) - date : Optional[Union[str]] - Date of the news to retrieve. (provider: benzinga) - start_date : Optional[Union[str]] - Start date of the news to retrieve. (provider: benzinga) - end_date : Optional[Union[str]] - End date of the news to retrieve. (provider: benzinga) - updated_since : Optional[Union[int]] - Number of seconds since the news was updated. (provider: benzinga) - published_since : Optional[Union[int]] - Number of seconds since the news was published. (provider: benzinga) - sort : Optional[Union[Literal['id', 'created', 'updated']]] - Key to sort the news by. (provider: benzinga) - order : Optional[Union[Literal['asc', 'desc']]] - Order to sort the news by. (provider: benzinga) - isin : Optional[Union[str]] - The ISIN of the news to retrieve. (provider: benzinga) - cusip : Optional[Union[str]] - The CUSIP of the news to retrieve. (provider: benzinga) - channels : Optional[Union[str]] - Channels of the news to retrieve. (provider: benzinga) - topics : Optional[Union[str]] - Topics of the news to retrieve. (provider: benzinga) - authors : Optional[Union[str]] - Authors of the news to retrieve. (provider: benzinga) - content_types : Optional[Union[str]] - Content types of the news to retrieve. (provider: benzinga) - filter : Literal['crypto', 'hot', 'latest', 'main', 'media', 'source', 'tag'] - Filter by type of news. (provider: biztoc) - source : str - Filter by a specific publisher. Only valid when filter is set to source. (provider: biztoc) - tag : Optional[Union[str]] - Tag, topic, to filter articles by. Only valid when filter is set to tag. (provider: biztoc) - term : Optional[Union[str]] - Search term to filter articles by. This overrides all other filters. (provider: biztoc) +Parameters +---------- +limit : int + The number of data entries to return. Here its the no. of articles to return. +provider : Union[Literal['benzinga', 'biztoc', 'fmp', 'intrinio'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'benzinga' if there is + no default. +display : Literal['headline', 'abstract', 'full'] + Specify headline only (headline), headline + teaser (abstract), or headline + full body (full). (provider: benzinga) +date : Optional[Union[str]] + Date of the news to retrieve. (provider: benzinga) +start_date : Optional[Union[str]] + Start date of the news to retrieve. (provider: benzinga) +end_date : Optional[Union[str]] + End date of the news to retrieve. (provider: benzinga) +updated_since : Optional[Union[int]] + Number of seconds since the news was updated. (provider: benzinga) +published_since : Optional[Union[int]] + Number of seconds since the news was published. (provider: benzinga) +sort : Optional[Union[Literal['id', 'created', 'updated']]] + Key to sort the news by. (provider: benzinga) +order : Optional[Union[Literal['asc', 'desc']]] + Order to sort the news by. (provider: benzinga) +isin : Optional[Union[str]] + The ISIN of the news to retrieve. (provider: benzinga) +cusip : Optional[Union[str]] + The CUSIP of the news to retrieve. (provider: benzinga) +channels : Optional[Union[str]] + Channels of the news to retrieve. (provider: benzinga) +topics : Optional[Union[str]] + Topics of the news to retrieve. (provider: benzinga) +authors : Optional[Union[str]] + Authors of the news to retrieve. (provider: benzinga) +content_types : Optional[Union[str]] + Content types of the news to retrieve. (provider: benzinga) +filter : Literal['crypto', 'hot', 'latest', 'main', 'media', 'source', 'tag'] + Filter by type of news. (provider: biztoc) +source : str + Filter by a specific publisher. Only valid when filter is set to source. (provider: biztoc) +tag : Optional[Union[str]] + Tag, topic, to filter articles by. Only valid when filter is set to tag. (provider: biztoc) +term : Optional[Union[str]] + Search term to filter articles by. This overrides all other filters. (provider: biztoc) + +Returns +------- +OBBject + results : Union[List[GlobalNews]] + Serializable results. + provider : Union[Literal['benzinga', 'biztoc', 'fmp', 'intrinio'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. - Returns - ------- - OBBject - results : Union[List[GlobalNews]] - Serializable results. - provider : Union[Literal['benzinga', 'biztoc', 'fmp', 'intrinio'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. +GlobalNews +---------- +date : datetime + The date of the data. Here it is the published date of the news. +title : str + Title of the news. +images : Optional[Union[List[Dict[str, str]]]] + Images associated with the news. +text : Optional[Union[str]] + Text/body of the news. +url : Optional[Union[str]] + URL of the news. +id : Optional[Union[str]] + ID of the news. (provider: benzinga); Unique Article ID. (provider: biztoc); Article ID. (provider: intrinio) +author : Optional[Union[str]] + Author of the news. (provider: benzinga) +teaser : Optional[Union[str]] + Teaser of the news. (provider: benzinga) +channels : Optional[Union[str]] + Channels associated with the news. (provider: benzinga) +stocks : Optional[Union[str]] + Stocks associated with the news. (provider: benzinga) +tags : Optional[Union[str, List[str]]] + Tags associated with the news. (provider: benzinga); Tags for the article. (provider: biztoc) +updated : Optional[Union[datetime]] + None +favicon : Optional[Union[str]] + Icon image for the source of the article. (provider: biztoc) +score : Optional[Union[float]] + Search relevance score for the article. (provider: biztoc) +site : Optional[Union[str]] + Site of the news. (provider: fmp) +company : Optional[Union[Dict[str, Any]]] + Company details related to the news article. (provider: intrinio) - GlobalNews - ---------- - date : datetime - The date of the data. Here it is the published date of the news. - title : str - Title of the news. - images : Optional[Union[List[Dict[str, str]]]] - Images associated with the news. - text : Optional[Union[str]] - Text/body of the news. - url : Optional[Union[str]] - URL of the news. - id : Optional[Union[str]] - ID of the news. (provider: benzinga); Unique Article ID. (provider: biztoc); Article ID. (provider: intrinio) - author : Optional[Union[str]] - Author of the news. (provider: benzinga) - teaser : Optional[Union[str]] - Teaser of the news. (provider: benzinga) - channels : Optional[Union[str]] - Channels associated with the news. (provider: benzinga) - stocks : Optional[Union[str]] - Stocks associated with the news. (provider: benzinga) - tags : Optional[Union[str, List[str]]] - Tags associated with the news. (provider: benzinga); Tags for the article. (provider: biztoc) - updated : Optional[Union[datetime]] - None - favicon : Optional[Union[str]] - Icon image for the source of the article. (provider: biztoc) - score : Optional[Union[float]] - Search relevance score for the article. (provider: biztoc) - site : Optional[Union[str]] - Site of the news. (provider: fmp) - company : Optional[Union[Dict[str, Any]]] - Company details related to the news article. (provider: intrinio) +Example +------- +>>> from openbb import obb +>>> obb.news.globalnews(limit=20) - Example - ------- - >>> from openbb import obb - >>> obb.news.globalnews(limit=20) - """ # noqa: E501 +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "limit": limit, - }, + provider_choices={"provider": provider, }, + standard_params={"limit": limit, }, extra_params=kwargs, ) @@ -147,3 +145,4 @@ def globalnews( "/news/globalnews", **inputs, ) + diff --git a/openbb_platform/openbb/package/qa.py b/openbb_platform/openbb/package/qa.py index 0be073b7b4c3..0c73dd8288de 100644 --- a/openbb_platform/openbb/package/qa.py +++ b/openbb_platform/openbb/package/qa.py @@ -1,45 +1,46 @@ ### THIS FILE IS AUTO-GENERATED. DO NOT EDIT. ### -from typing import List, Literal, Union - +from openbb_core.app.static.container import Container +from openbb_core.app.model.obbject import OBBject +from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +import openbb_provider import pandas +import datetime +import pydantic +from pydantic import BaseModel +from inspect import Parameter +import typing +from typing import List, Dict, Union, Optional, Literal +from annotated_types import Ge, Le, Gt, Lt import typing_extensions -from annotated_types import Ge, Gt -from openbb_core.app.model.obbject import OBBject -from openbb_core.app.static.container import Container +from openbb_core.app.utils import df_to_basemodel from openbb_core.app.static.decorators import validate + from openbb_core.app.static.filters import filter_inputs -from openbb_provider.abstract.data import Data -from openbb_qa.qa_models import ( - CAPMModel, - NormalityModel, - OmegaModel, - SummaryModel, - UnitRootModel, -) +from openbb_provider.abstract.data import Data +from openbb_qa.qa_models import (CAPMModel,NormalityModel,OmegaModel,SummaryModel,UnitRootModel) +import openbb_core.app.model.obbject +import typing class ROUTER_qa(Container): """/qa - capm - kurtosis - normality - om - quantile - sh - skew - so - summary - unitroot +capm +kurtosis +normality +om +quantile +sh +skew +so +summary +unitroot """ - def __repr__(self) -> str: return self.__doc__ or "" @validate(config=dict(arbitrary_types_allowed=True)) - def capm( - self, data: Union[List[Data], pandas.DataFrame], target: str - ) -> OBBject[CAPMModel]: + def capm(self, data: Union[List[Data], pandas.DataFrame], target: str) -> OBBject[CAPMModel]: """Get Capital Asset Pricing Model.""" # noqa: E501 inputs = filter_inputs( @@ -52,29 +53,25 @@ def capm( **inputs, ) + @validate(config=dict(arbitrary_types_allowed=True)) - def kurtosis( - self, - data: Union[List[Data], pandas.DataFrame], - target: str, - window: typing_extensions.Annotated[int, Gt(gt=0)], - ) -> OBBject[List[Data]]: + def kurtosis(self, data: Union[List[Data], pandas.DataFrame], target: str, window: typing_extensions.Annotated[int, Gt(gt=0)]) -> OBBject[List[Data]]: """Get the Kurtosis. - Parameters - ---------- - data : List[Data] - Time series data. - target : str - Target column name. - window : PositiveInt - Window size. - - Returns - ------- - OBBject[List[Data]] - Kurtosis. - """ # noqa: E501 + Parameters + ---------- + data : List[Data] + Time series data. + target : str + Target column name. + window : PositiveInt + Window size. + + Returns + ------- + OBBject[List[Data]] + Kurtosis. + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -87,30 +84,29 @@ def kurtosis( **inputs, ) + @validate(config=dict(arbitrary_types_allowed=True)) - def normality( - self, data: Union[List[Data], pandas.DataFrame], target: str - ) -> OBBject[NormalityModel]: + def normality(self, data: Union[List[Data], pandas.DataFrame], target: str) -> OBBject[NormalityModel]: """Get Normality Statistics. - - **Kurtosis**: whether the kurtosis of a sample differs from the normal distribution. - - **Skewness**: whether the skewness of a sample differs from the normal distribution. - - **Jarque-Bera**: whether the sample data has the skewness and kurtosis matching a normal distribution. - - **Shapiro-Wilk**: whether a random sample comes from a normal distribution. - - **Kolmogorov-Smirnov**: whether two underlying one-dimensional probability distributions differ. - - Parameters - ---------- - data : List[Data] - Time series data. - target : str - Target column name. - - Returns - ------- - OBBject[NormalityModel] - Normality tests summary. See qa_models.NormalityModel for details. - """ # noqa: E501 + - **Kurtosis**: whether the kurtosis of a sample differs from the normal distribution. + - **Skewness**: whether the skewness of a sample differs from the normal distribution. + - **Jarque-Bera**: whether the sample data has the skewness and kurtosis matching a normal distribution. + - **Shapiro-Wilk**: whether a random sample comes from a normal distribution. + - **Kolmogorov-Smirnov**: whether two underlying one-dimensional probability distributions differ. + + Parameters + ---------- + data : List[Data] + Time series data. + target : str + Target column name. + + Returns + ------- + OBBject[NormalityModel] + Normality tests summary. See qa_models.NormalityModel for details. + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -122,32 +118,27 @@ def normality( **inputs, ) + @validate(config=dict(arbitrary_types_allowed=True)) - def om( - self, - data: Union[List[Data], pandas.DataFrame], - target: str, - threshold_start: float = 0.0, - threshold_end: float = 1.5, - ) -> OBBject[List[OmegaModel]]: + def om(self, data: Union[List[Data], pandas.DataFrame], target: str, threshold_start: float = 0.0, threshold_end: float = 1.5) -> OBBject[List[OmegaModel]]: """Calculate the Omega Ratio. - Parameters - ---------- - data : List[Data] - Time series data. - target : str - Target column name. - threshold_start : float, optional - Start threshold, by default 0.0 - threshold_end : float, optional - End threshold, by default 1.5 - - Returns - ------- - OBBject[List[OmegaModel]] - Omega ratios. - """ # noqa: E501 + Parameters + ---------- + data : List[Data] + Time series data. + target : str + Target column name. + threshold_start : float, optional + Start threshold, by default 0.0 + threshold_end : float, optional + End threshold, by default 1.5 + + Returns + ------- + OBBject[List[OmegaModel]] + Omega ratios. + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -161,32 +152,27 @@ def om( **inputs, ) + @validate(config=dict(arbitrary_types_allowed=True)) - def quantile( - self, - data: Union[List[Data], pandas.DataFrame], - target: str, - window: typing_extensions.Annotated[int, Gt(gt=0)], - quantile_pct: typing_extensions.Annotated[float, Ge(ge=0)] = 0.5, - ) -> OBBject[List[Data]]: + def quantile(self, data: Union[List[Data], pandas.DataFrame], target: str, window: typing_extensions.Annotated[int, Gt(gt=0)], quantile_pct: typing_extensions.Annotated[float, Ge(ge=0)] = 0.5) -> OBBject[List[Data]]: """Get Quantile. - Parameters - ---------- - data : List[Data] - Time series data. - target : str - Target column name. - window : PositiveInt - Window size. - quantile_pct : NonNegativeFloat, optional - Quantile percentage, by default 0.5 - - Returns - ------- - OBBject[List[Data]] - Quantile. - """ # noqa: E501 + Parameters + ---------- + data : List[Data] + Time series data. + target : str + Target column name. + window : PositiveInt + Window size. + quantile_pct : NonNegativeFloat, optional + Quantile percentage, by default 0.5 + + Returns + ------- + OBBject[List[Data]] + Quantile. + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -200,32 +186,27 @@ def quantile( **inputs, ) + @validate(config=dict(arbitrary_types_allowed=True)) - def sh( - self, - data: Union[List[Data], pandas.DataFrame], - target: str, - rfr: float = 0.0, - window: typing_extensions.Annotated[int, Gt(gt=0)] = 252, - ) -> OBBject[List[Data]]: + def sh(self, data: Union[List[Data], pandas.DataFrame], target: str, rfr: float = 0.0, window: typing_extensions.Annotated[int, Gt(gt=0)] = 252) -> OBBject[List[Data]]: """Get Sharpe Ratio. - Parameters - ---------- - data : List[Data] - Time series data. - target : str - Target column name. - rfr : float, optional - Risk-free rate, by default 0.0 - window : PositiveInt, optional - Window size, by default 252 - - Returns - ------- - OBBject[List[Data]] - Sharpe ratio. - """ # noqa: E501 + Parameters + ---------- + data : List[Data] + Time series data. + target : str + Target column name. + rfr : float, optional + Risk-free rate, by default 0.0 + window : PositiveInt, optional + Window size, by default 252 + + Returns + ------- + OBBject[List[Data]] + Sharpe ratio. + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -239,29 +220,25 @@ def sh( **inputs, ) + @validate(config=dict(arbitrary_types_allowed=True)) - def skew( - self, - data: Union[List[Data], pandas.DataFrame], - target: str, - window: typing_extensions.Annotated[int, Gt(gt=0)], - ) -> OBBject[List[Data]]: + def skew(self, data: Union[List[Data], pandas.DataFrame], target: str, window: typing_extensions.Annotated[int, Gt(gt=0)]) -> OBBject[List[Data]]: """Get Skewness. - Parameters - ---------- - data : List[Data] - Time series data. - target : str - Target column name. - window : PositiveInt - Window size. - - Returns - ------- - OBBject[List[Data]] - Skewness. - """ # noqa: E501 + Parameters + ---------- + data : List[Data] + Time series data. + target : str + Target column name. + window : PositiveInt + Window size. + + Returns + ------- + OBBject[List[Data]] + Skewness. + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -274,37 +251,31 @@ def skew( **inputs, ) + @validate(config=dict(arbitrary_types_allowed=True)) - def so( - self, - data: Union[List[Data], pandas.DataFrame], - target: str, - target_return: float = 0.0, - window: typing_extensions.Annotated[int, Gt(gt=0)] = 252, - adjusted: bool = False, - ) -> OBBject[List[Data]]: + def so(self, data: Union[List[Data], pandas.DataFrame], target: str, target_return: float = 0.0, window: typing_extensions.Annotated[int, Gt(gt=0)] = 252, adjusted: bool = False) -> OBBject[List[Data]]: """Get Sortino Ratio. - For method & terminology see: http://www.redrockcapital.com/Sortino__A__Sharper__Ratio_Red_Rock_Capital.pdf - - Parameters - ---------- - data : List[Data] - Time series data. - target : str - Target column name. - target_return : float, optional - Target return, by default 0.0 - window : PositiveInt, optional - Window size, by default 252 - adjusted : bool, optional - Adjust sortino ratio to compare it to sharpe ratio, by default False - - Returns - ------- - OBBject[List[Data]] - Sortino ratio. - """ # noqa: E501 + For method & terminology see: http://www.redrockcapital.com/Sortino__A__Sharper__Ratio_Red_Rock_Capital.pdf + + Parameters + ---------- + data : List[Data] + Time series data. + target : str + Target column name. + target_return : float, optional + Target return, by default 0.0 + window : PositiveInt, optional + Window size, by default 252 + adjusted : bool, optional + Adjust sortino ratio to compare it to sharpe ratio, by default False + + Returns + ------- + OBBject[List[Data]] + Sortino ratio. + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -319,24 +290,23 @@ def so( **inputs, ) + @validate(config=dict(arbitrary_types_allowed=True)) - def summary( - self, data: Union[List[Data], pandas.DataFrame], target: str - ) -> OBBject[SummaryModel]: + def summary(self, data: Union[List[Data], pandas.DataFrame], target: str) -> OBBject[SummaryModel]: """Get Summary Statistics. - Parameters - ---------- - data : List[Data] - Time series data. - target : str - Target column name. + Parameters + ---------- + data : List[Data] + Time series data. + target : str + Target column name. - Returns - ------- - OBBject[SummaryModel] - Summary table. - """ # noqa: E501 + Returns + ------- + OBBject[SummaryModel] + Summary table. + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -348,35 +318,30 @@ def summary( **inputs, ) + @validate(config=dict(arbitrary_types_allowed=True)) - def unitroot( - self, - data: Union[List[Data], pandas.DataFrame], - target: str, - fuller_reg: Literal["c", "ct", "ctt", "nc", "c"] = "c", - kpss_reg: Literal["c", "ct"] = "c", - ) -> OBBject[UnitRootModel]: + def unitroot(self, data: Union[List[Data], pandas.DataFrame], target: str, fuller_reg: Literal['c', 'ct', 'ctt', 'nc', 'c'] = 'c', kpss_reg: Literal['c', 'ct'] = 'c') -> OBBject[UnitRootModel]: """Get Unit Root Test. - Augmented Dickey-Fuller test for unit root. - Kwiatkowski-Phillips-Schmidt-Shin test for unit root. - - Parameters - ---------- - data : List[Data] - Time series data. - target : str - Target column name. - fuller_reg : Literal["c", "ct", "ctt", "nc", "c"] - Regression type for ADF test. - kpss_reg : Literal["c", "ct"] - Regression type for KPSS test. - - Returns - ------- - OBBject[UnitRootModel] - Unit root tests summary. - """ # noqa: E501 + Augmented Dickey-Fuller test for unit root. + Kwiatkowski-Phillips-Schmidt-Shin test for unit root. + + Parameters + ---------- + data : List[Data] + Time series data. + target : str + Target column name. + fuller_reg : Literal["c", "ct", "ctt", "nc", "c"] + Regression type for ADF test. + kpss_reg : Literal["c", "ct"] + Regression type for KPSS test. + + Returns + ------- + OBBject[UnitRootModel] + Unit root tests summary. + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -389,3 +354,4 @@ def unitroot( "/qa/unitroot", **inputs, ) + diff --git a/openbb_platform/openbb/package/stocks.py b/openbb_platform/openbb/package/stocks.py index 38ff7d9df958..af38bd8a38ae 100644 --- a/openbb_platform/openbb/package/stocks.py +++ b/openbb_platform/openbb/package/stocks.py @@ -1,159 +1,458 @@ ### THIS FILE IS AUTO-GENERATED. DO NOT EDIT. ### +from openbb_core.app.static.container import Container +from openbb_core.app.model.obbject import OBBject +from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +import openbb_provider +import pandas import datetime -from typing import List, Literal, Union - +import pydantic +from pydantic import BaseModel +from inspect import Parameter +import typing +from typing import List, Dict, Union, Optional, Literal +from annotated_types import Ge, Le, Gt, Lt import typing_extensions -from annotated_types import Ge -from openbb_core.app.model.custom_parameter import OpenBBCustomParameter -from openbb_core.app.model.obbject import OBBject -from openbb_core.app.static.container import Container +from openbb_core.app.utils import df_to_basemodel from openbb_core.app.static.decorators import validate + from openbb_core.app.static.filters import filter_inputs -from openbb_provider.abstract.data import Data +from openbb_provider.abstract.data import Data +import openbb_core.app.model.command_context +import openbb_core.app.model.obbject +import types class ROUTER_stocks(Container): """/stocks - /ca - /fa - info - load - multiples - news - /options - quote - search +/ca +calendar_dividend +calendar_ipo +/disc +/fa +ftd +info +load +multiples +news +/options +price_performance +quote +search """ - def __repr__(self) -> str: return self.__doc__ or "" @property def ca(self): # route = "/stocks/ca" from . import stocks_ca - return stocks_ca.ROUTER_stocks_ca(command_runner=self._command_runner) + @validate + def calendar_dividend(self, start_date: typing_extensions.Annotated[Union[datetime.date, None, str], OpenBBCustomParameter(description='Start date of the data, in YYYY-MM-DD format.')] = None, end_date: typing_extensions.Annotated[Union[datetime.date, None, str], OpenBBCustomParameter(description='End date of the data, in YYYY-MM-DD format.')] = None, provider: Union[Literal['fmp', 'nasdaq'], None] = None, **kwargs) -> OBBject[List[Data]]: + """Upcoming and Historical Dividend Calendar. + +Parameters +---------- +start_date : Union[datetime.date, None] + Start date of the data, in YYYY-MM-DD format. +end_date : Union[datetime.date, None] + End date of the data, in YYYY-MM-DD format. +provider : Union[Literal['fmp', 'nasdaq'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fmp' if there is + no default. + +Returns +------- +OBBject + results : Union[List[CalendarDividend]] + Serializable results. + provider : Union[Literal['fmp', 'nasdaq'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +CalendarDividend +---------------- +date : date + The date of the data. (Ex-Dividend) +symbol : str + Symbol representing the entity requested in the data. +name : Optional[Union[str]] + Name of the entity. +record_date : Optional[Union[date]] + The record date of ownership for eligibility. +payment_date : Optional[Union[date]] + The payment date of the dividend. +declaration_date : Optional[Union[date]] + Declaration date of the dividend. +amount : Optional[Union[float]] + Dividend amount, per-share. +adjusted_amount : Optional[Union[float]] + The adjusted-dividend amount. (provider: fmp) +label : Optional[Union[str]] + Ex-dividend date formatted for display. (provider: fmp) +annualized_amount : Optional[Union[float]] + The indicated annualized dividend amount. (provider: nasdaq) + +Example +------- +>>> from openbb import obb +>>> obb.stocks.calendar_dividend() + +""" # noqa: E501 + + inputs = filter_inputs( + provider_choices={"provider": provider, }, + standard_params={"start_date": start_date, "end_date": end_date, }, + extra_params=kwargs, + ) + + return self._run( + "/stocks/calendar_dividend", + **inputs, + ) + + + @validate + def calendar_ipo(self, symbol: typing_extensions.Annotated[Union[str, None, List[str]], OpenBBCustomParameter(description='Symbol to get data for.')] = None, start_date: typing_extensions.Annotated[Union[datetime.date, None, str], OpenBBCustomParameter(description='Start date of the data, in YYYY-MM-DD format.')] = None, end_date: typing_extensions.Annotated[Union[datetime.date, None, str], OpenBBCustomParameter(description='End date of the data, in YYYY-MM-DD format.')] = None, limit: typing_extensions.Annotated[Union[int, None], OpenBBCustomParameter(description='The number of data entries to return.')] = 100, provider: Union[Literal['intrinio', 'nasdaq'], None] = None, **kwargs) -> OBBject[List[Data]]: + """Upcoming and Historical IPO Calendar. + +Parameters +---------- +symbol : Union[str, None] + Symbol to get data for. +start_date : Union[datetime.date, None] + Start date of the data, in YYYY-MM-DD format. +end_date : Union[datetime.date, None] + End date of the data, in YYYY-MM-DD format. +limit : Union[int, None] + The number of data entries to return. +provider : Union[Literal['intrinio', 'nasdaq'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'intrinio' if there is + no default. +status : Optional[Union[Literal['upcoming', 'priced', 'withdrawn'], Literal['upcoming', 'priced', 'filed', 'withdrawn']]] + Status of the IPO. [upcoming, priced, or withdrawn] (provider: intrinio); The status of the IPO. (provider: nasdaq) +min_value : Optional[Union[int]] + Return IPOs with an offer dollar amount greater than the given amount. (provider: intrinio) +max_value : Optional[Union[int]] + Return IPOs with an offer dollar amount less than the given amount. (provider: intrinio) +is_spo : bool + If True, returns data for secondary public offerings (SPOs). (provider: nasdaq) + +Returns +------- +OBBject + results : Union[List[CalendarIpo]] + Serializable results. + provider : Union[Literal['intrinio', 'nasdaq'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +CalendarIpo +----------- +symbol : Optional[Union[str]] + Symbol representing the entity requested in the data. +ipo_date : Optional[Union[date]] + The date of the IPO, when the stock first trades on a major exchange. +status : Optional[Union[Literal['upcoming', 'priced', 'withdrawn']]] + + The status of the IPO. Upcoming IPOs have not taken place yet but are expected to. + Priced IPOs have taken place. + Withdrawn IPOs were expected to take place, but were subsequently withdrawn and did not take place + (provider: intrinio) +exchange : Optional[Union[str]] + + The acronym of the stock exchange that the company is going to trade publicly on. + Typically NYSE or NASDAQ. + (provider: intrinio) +offer_amount : Optional[Union[float]] + The total dollar amount of shares offered in the IPO. Typically this is share price * share count (provider: intrinio); The dollar value of the shares offered. (provider: nasdaq) +share_price : Optional[Union[float]] + The price per share at which the IPO was offered. (provider: intrinio) +share_price_lowest : Optional[Union[float]] + + The expected lowest price per share at which the IPO will be offered. + Before an IPO is priced, companies typically provide a range of prices per share at which + they expect to offer the IPO (typically available for upcoming IPOs). + (provider: intrinio) +share_price_highest : Optional[Union[float]] + + The expected highest price per share at which the IPO will be offered. + Before an IPO is priced, companies typically provide a range of prices per share at which + they expect to offer the IPO (typically available for upcoming IPOs). + (provider: intrinio) +share_count : Optional[Union[int]] + The number of shares offered in the IPO. (provider: intrinio, nasdaq) +share_count_lowest : Optional[Union[int]] + + The expected lowest number of shares that will be offered in the IPO. Before an IPO is priced, + companies typically provide a range of shares that they expect to offer in the IPO + (typically available for upcoming IPOs). + (provider: intrinio) +share_count_highest : Optional[Union[int]] + + The expected highest number of shares that will be offered in the IPO. Before an IPO is priced, + companies typically provide a range of shares that they expect to offer in the IPO + (typically available for upcoming IPOs). + (provider: intrinio) +announcement_url : Optional[Union[str]] + The URL to the company's announcement of the IPO (provider: intrinio) +sec_report_url : Optional[Union[str]] + + The URL to the company's S-1, S-1/A, F-1, or F-1/A SEC filing, + which is required to be filed before an IPO takes place. + (provider: intrinio) +open_price : Optional[Union[float]] + The opening price at the beginning of the first trading day (only available for priced IPOs). (provider: intrinio) +close_price : Optional[Union[float]] + The closing price at the end of the first trading day (only available for priced IPOs). (provider: intrinio) +volume : Optional[Union[int]] + The volume at the end of the first trading day (only available for priced IPOs). (provider: intrinio) +day_change : Optional[Union[float]] + + The percentage change between the open price and the close price on the first trading day + (only available for priced IPOs). + (provider: intrinio) +week_change : Optional[Union[float]] + + The percentage change between the open price on the first trading day and the close price approximately + a week after the first trading day (only available for priced IPOs). + (provider: intrinio) +month_change : Optional[Union[float]] + + The percentage change between the open price on the first trading day and the close price approximately + a month after the first trading day (only available for priced IPOs). + (provider: intrinio) +id : Optional[Union[str]] + The Intrinio ID of the IPO. (provider: intrinio) +company : Optional[Union[openbb_intrinio.utils.references.IntrinioCompany]] + The company that is going public via the IPO. (provider: intrinio) +security : Optional[Union[openbb_intrinio.utils.references.IntrinioSecurity]] + The primary Security for the Company that is going public via the IPO (provider: intrinio) +name : Optional[Union[str]] + The name of the company. (provider: nasdaq) +expected_price_date : Optional[Union[date]] + The date the pricing is expected. (provider: nasdaq) +filed_date : Optional[Union[date]] + The date the IPO was filed. (provider: nasdaq) +withdraw_date : Optional[Union[date]] + The date the IPO was withdrawn. (provider: nasdaq) +deal_status : Optional[Union[str]] + The status of the deal. (provider: nasdaq) + +Example +------- +>>> from openbb import obb +>>> obb.stocks.calendar_ipo(limit=100) + +""" # noqa: E501 + + inputs = filter_inputs( + provider_choices={"provider": provider, }, + standard_params={"symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, "start_date": start_date, "end_date": end_date, "limit": limit, }, + extra_params=kwargs, + ) + + return self._run( + "/stocks/calendar_ipo", + **inputs, + ) + + + @property + def disc(self): # route = "/stocks/disc" + from . import stocks_disc + return stocks_disc.ROUTER_stocks_disc(command_runner=self._command_runner) + @property def fa(self): # route = "/stocks/fa" from . import stocks_fa - return stocks_fa.ROUTER_stocks_fa(command_runner=self._command_runner) @validate - def info( - self, - symbol: typing_extensions.Annotated[ - Union[str, List[str]], - OpenBBCustomParameter(description="Symbol to get data for."), - ], - provider: Union[Literal["cboe"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def ftd(self, symbol: typing_extensions.Annotated[Union[str, List[str]], OpenBBCustomParameter(description='Symbol to get data for.')], provider: Union[Literal['sec'], None] = None, **kwargs) -> OBBject[List[Data]]: + """Get reported Fail-to-deliver (FTD) data. + +Parameters +---------- +symbol : str + Symbol to get data for. +provider : Union[Literal['sec'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'sec' if there is + no default. +limit : Optional[Union[int]] + + Limit the number of reports to parse, from most recent. + Approximately 24 reports per year, going back to 2009. + (provider: sec) +skip_reports : Optional[Union[int]] + + Skip N number of reports from current. A value of 1 will skip the most recent report. + (provider: sec) + +Returns +------- +OBBject + results : Union[List[StockFTD]] + Serializable results. + provider : Union[Literal['sec'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +StockFTD +-------- +settlement_date : Optional[Union[date]] + The settlement date of the fail. +symbol : Optional[Union[str]] + Symbol representing the entity requested in the data. +cusip : Optional[Union[str]] + CUSIP of the Security. +quantity : Optional[Union[int]] + The number of fails on that settlement date. +price : Optional[Union[float]] + The price at the previous closing price from the settlement date. +description : Optional[Union[str]] + The description of the Security. + +Example +------- +>>> from openbb import obb +>>> obb.stocks.ftd(symbol="AAPL") + +""" # noqa: E501 + + inputs = filter_inputs( + provider_choices={"provider": provider, }, + standard_params={"symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, }, + extra_params=kwargs, + ) + + return self._run( + "/stocks/ftd", + **inputs, + ) + + + @validate + def info(self, symbol: typing_extensions.Annotated[Union[str, List[str]], OpenBBCustomParameter(description='Symbol to get data for.')], provider: Union[Literal['cboe'], None] = None, **kwargs) -> OBBject[List[Data]]: """Stock Info. Get general price and performance metrics of a stock. - Parameters - ---------- - symbol : str - Symbol to get data for. - provider : Union[Literal['cboe'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'cboe' if there is - no default. - - Returns - ------- - OBBject - results : Union[List[StockInfo]] - Serializable results. - provider : Union[Literal['cboe'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - StockInfo - --------- - symbol : str - Symbol representing the entity requested in the data. - name : str - Name associated with the ticker symbol. - price : Optional[Union[float]] - Last transaction price. - open : Optional[Union[float]] - The open price of the symbol. - high : Optional[Union[float]] - The high price of the symbol. - low : Optional[Union[float]] - The low price of the symbol. - close : Optional[Union[float]] - The close price of the symbol. - change : Optional[Union[float]] - Change in price over the current trading period. - change_percent : Optional[Union[float]] - Percent change in price over the current trading period. - prev_close : Optional[Union[float]] - Previous closing price. - type : Optional[Union[str]] - Type of asset. (provider: cboe) - exchange_id : Optional[Union[int]] - The Exchange ID number. (provider: cboe) - tick : Optional[Union[str]] - Whether the last sale was an up or down tick. (provider: cboe) - bid : Optional[Union[float]] - Current bid price. (provider: cboe) - bid_size : Optional[Union[float]] - Bid lot size. (provider: cboe) - ask : Optional[Union[float]] - Current ask price. (provider: cboe) - ask_size : Optional[Union[float]] - Ask lot size. (provider: cboe) - volume : Optional[Union[float]] - Stock volume for the current trading day. (provider: cboe) - iv30 : Optional[Union[float]] - The 30-day implied volatility of the stock. (provider: cboe) - iv30_change : Optional[Union[float]] - Change in 30-day implied volatility of the stock. (provider: cboe) - last_trade_timestamp : Optional[Union[datetime]] - Last trade timestamp for the stock. (provider: cboe) - iv30_annual_high : Optional[Union[float]] - The 1-year high of implied volatility. (provider: cboe) - hv30_annual_high : Optional[Union[float]] - The 1-year high of realized volatility. (provider: cboe) - iv30_annual_low : Optional[Union[float]] - The 1-year low of implied volatility. (provider: cboe) - hv30_annual_low : Optional[Union[float]] - The 1-year low of realized volatility. (provider: cboe) - iv60_annual_high : Optional[Union[float]] - The 60-day high of implied volatility. (provider: cboe) - hv60_annual_high : Optional[Union[float]] - The 60-day high of realized volatility. (provider: cboe) - iv60_annual_low : Optional[Union[float]] - The 60-day low of implied volatility. (provider: cboe) - hv60_annual_low : Optional[Union[float]] - The 60-day low of realized volatility. (provider: cboe) - iv90_annual_high : Optional[Union[float]] - The 90-day high of implied volatility. (provider: cboe) - hv90_annual_high : Optional[Union[float]] - The 90-day high of realized volatility. (provider: cboe) - - Example - ------- - >>> from openbb import obb - >>> obb.stocks.info(symbol="AAPL") - """ # noqa: E501 +Parameters +---------- +symbol : str + Symbol to get data for. +provider : Union[Literal['cboe'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'cboe' if there is + no default. + +Returns +------- +OBBject + results : Union[List[StockInfo]] + Serializable results. + provider : Union[Literal['cboe'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +StockInfo +--------- +symbol : str + Symbol representing the entity requested in the data. +name : str + Name associated with the ticker symbol. +price : Optional[Union[float]] + Last transaction price. +open : Optional[Union[float]] + The open price of the symbol. +high : Optional[Union[float]] + The high price of the symbol. +low : Optional[Union[float]] + The low price of the symbol. +close : Optional[Union[float]] + The close price of the symbol. +change : Optional[Union[float]] + Change in price over the current trading period. +change_percent : Optional[Union[float]] + Percent change in price over the current trading period. +prev_close : Optional[Union[float]] + Previous closing price. +type : Optional[Union[str]] + Type of asset. (provider: cboe) +exchange_id : Optional[Union[int]] + The Exchange ID number. (provider: cboe) +tick : Optional[Union[str]] + Whether the last sale was an up or down tick. (provider: cboe) +bid : Optional[Union[float]] + Current bid price. (provider: cboe) +bid_size : Optional[Union[float]] + Bid lot size. (provider: cboe) +ask : Optional[Union[float]] + Current ask price. (provider: cboe) +ask_size : Optional[Union[float]] + Ask lot size. (provider: cboe) +volume : Optional[Union[float]] + Stock volume for the current trading day. (provider: cboe) +iv30 : Optional[Union[float]] + The 30-day implied volatility of the stock. (provider: cboe) +iv30_change : Optional[Union[float]] + Change in 30-day implied volatility of the stock. (provider: cboe) +last_trade_timestamp : Optional[Union[datetime]] + Last trade timestamp for the stock. (provider: cboe) +iv30_annual_high : Optional[Union[float]] + The 1-year high of implied volatility. (provider: cboe) +hv30_annual_high : Optional[Union[float]] + The 1-year high of realized volatility. (provider: cboe) +iv30_annual_low : Optional[Union[float]] + The 1-year low of implied volatility. (provider: cboe) +hv30_annual_low : Optional[Union[float]] + The 1-year low of realized volatility. (provider: cboe) +iv60_annual_high : Optional[Union[float]] + The 60-day high of implied volatility. (provider: cboe) +hv60_annual_high : Optional[Union[float]] + The 60-day high of realized volatility. (provider: cboe) +iv60_annual_low : Optional[Union[float]] + The 60-day low of implied volatility. (provider: cboe) +hv60_annual_low : Optional[Union[float]] + The 60-day low of realized volatility. (provider: cboe) +iv90_annual_high : Optional[Union[float]] + The 90-day high of implied volatility. (provider: cboe) +hv90_annual_high : Optional[Union[float]] + The 90-day high of realized volatility. (provider: cboe) + +Example +------- +>>> from openbb import obb +>>> obb.stocks.info(symbol="AAPL") + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, - }, + provider_choices={"provider": provider, }, + standard_params={"symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, }, extra_params=kwargs, ) @@ -162,182 +461,149 @@ def info( **inputs, ) + @validate - def load( - self, - symbol: typing_extensions.Annotated[ - Union[str, List[str]], - OpenBBCustomParameter(description="Symbol to get data for."), - ], - interval: typing_extensions.Annotated[ - Union[str, None], - OpenBBCustomParameter(description="Time interval of the data to return."), - ] = "1d", - start_date: typing_extensions.Annotated[ - Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), - ] = None, - end_date: typing_extensions.Annotated[ - Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), - ] = None, - chart: bool = False, - provider: Union[ - Literal["alpha_vantage", "cboe", "fmp", "intrinio", "polygon", "yfinance"], - None, - ] = None, - **kwargs - ) -> OBBject[List[Data]]: + def load(self, symbol: typing_extensions.Annotated[Union[str, List[str]], OpenBBCustomParameter(description='Symbol to get data for.')], interval: typing_extensions.Annotated[Union[str, None], OpenBBCustomParameter(description='Time interval of the data to return.')] = '1d', start_date: typing_extensions.Annotated[Union[datetime.date, None, str], OpenBBCustomParameter(description='Start date of the data, in YYYY-MM-DD format.')] = None, end_date: typing_extensions.Annotated[Union[datetime.date, None, str], OpenBBCustomParameter(description='End date of the data, in YYYY-MM-DD format.')] = None, chart: bool = False, provider: Union[Literal['alpha_vantage', 'cboe', 'fmp', 'intrinio', 'polygon', 'yfinance'], None] = None, **kwargs) -> OBBject[List[Data]]: """Stock Historical price. Load stock data for a specific ticker. - Parameters - ---------- - symbol : str - Symbol to get data for. - interval : Union[str, None] - Time interval of the data to return. - start_date : Union[datetime.date, None] - Start date of the data, in YYYY-MM-DD format. - end_date : Union[datetime.date, None] - End date of the data, in YYYY-MM-DD format. - chart : bool - Whether to create a chart or not, by default False. - provider : Union[Literal['alpha_vantage', 'cboe', 'fmp', 'intrinio', 'polygo... - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'alpha_vantage' if there is - no default. - adjusted : Optional[Union[bool]] - Output time series is adjusted by historical split and dividend events. (provider: alpha_vantage, polygon); Adjust all OHLC data automatically. (provider: yfinance) - extended_hours : Optional[Union[bool]] - Extended trading hours during pre-market and after-hours.Only available for intraday data. (provider: alpha_vantage) - month : Optional[Union[str]] - Query a specific month in history (in YYYY-MM format). (provider: alpha_vantage) - output_size : Optional[Union[Literal['compact', 'full']]] - Compact returns only the latest 100 data points in the intraday time series; full returns trailing 30 days of the most recent intraday data if the month parameter is not specified, or the full intraday data for aspecific month in history if the month parameter is specified. (provider: alpha_vantage) - limit : Optional[Union[typing_extensions.Annotated[int, Ge(ge=0)], int]] - Number of days to look back (Only for interval 1d). (provider: fmp); The number of data entries to return. (provider: polygon) - start_time : Optional[Union[datetime.time]] - Return intervals starting at the specified time on the `start_date` formatted as 'HH:MM:SS'. (provider: intrinio) - end_time : Optional[Union[datetime.time]] - Return intervals stopping at the specified time on the `end_date` formatted as 'HH:MM:SS'. (provider: intrinio) - timezone : str - Timezone of the data, in the IANA format (Continent/City). (provider: intrinio) - source : Optional[Union[Literal['realtime', 'delayed', 'nasdaq_basic']]] - The source of the data. (provider: intrinio) - sort : Literal['asc', 'desc'] - Sort order of the data. (provider: polygon) - prepost : bool - Include Pre and Post market data. (provider: yfinance) - include : bool - Include Dividends and Stock Splits in results. (provider: yfinance) - back_adjust : bool - Attempt to adjust all the data automatically. (provider: yfinance) - ignore_tz : bool - When combining from different timezones, ignore that part of datetime. (provider: yfinance) - - Returns - ------- - OBBject - results : Union[List[StockHistorical]] - Serializable results. - provider : Union[Literal['alpha_vantage', 'cboe', 'fmp', 'intrinio', 'polygon', 'yfinance'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - StockHistorical - --------------- - date : datetime - The date of the data. - open : float - The open price of the symbol. - high : float - The high price of the symbol. - low : float - The low price of the symbol. - close : float - The close price of the symbol. - volume : Union[float, int] - The volume of the symbol. - vwap : Optional[Union[typing_extensions.Annotated[float, Gt(gt=0)]]] - Volume Weighted Average Price of the symbol. - adj_close : Optional[Union[typing_extensions.Annotated[float, Gt(gt=0)], float]] - The adjusted close price of the symbol. (provider: alpha_vantage, fmp); Adjusted closing price during the period. (provider: intrinio) - dividend_amount : Optional[Union[typing_extensions.Annotated[float, Ge(ge=0)]]] - Dividend amount paid for the corresponding date. (provider: alpha_vantage) - split_coefficient : Optional[Union[typing_extensions.Annotated[float, Ge(ge=0)]]] - Split coefficient for the corresponding date. (provider: alpha_vantage) - calls_volume : Optional[Union[float]] - Number of calls traded during the most recent trading period. Only valid if interval is 1m. (provider: cboe) - puts_volume : Optional[Union[float]] - Number of puts traded during the most recent trading period. Only valid if interval is 1m. (provider: cboe) - total_options_volume : Optional[Union[float]] - Total number of options traded during the most recent trading period. Only valid if interval is 1m. (provider: cboe) - label : Optional[Union[str]] - Human readable format of the date. (provider: fmp) - unadjusted_volume : Optional[Union[float]] - Unadjusted volume of the symbol. (provider: fmp) - change : Optional[Union[float]] - Change in the price of the symbol from the previous day. (provider: fmp, intrinio) - change_percent : Optional[Union[float]] - Change % in the price of the symbol. (provider: fmp) - change_over_time : Optional[Union[float]] - Change % in the price of the symbol over a period of time. (provider: fmp) - close_time : Optional[Union[datetime]] - The timestamp that represents the end of the interval span. (provider: intrinio) - interval : Optional[Union[str]] - The data time frequency. (provider: intrinio) - average : Optional[Union[float]] - Average trade price of an individual stock during the interval. (provider: intrinio) - intra_period : Optional[Union[bool]] - If true, the stock price represents an unfinished period (be it day, week, quarter, month, or year), meaning that the close price is the latest price available, not the official close price for the period (provider: intrinio) - adj_open : Optional[Union[float]] - Adjusted open price during the period. (provider: intrinio) - adj_high : Optional[Union[float]] - Adjusted high price during the period. (provider: intrinio) - adj_low : Optional[Union[float]] - Adjusted low price during the period. (provider: intrinio) - adj_volume : Optional[Union[float]] - Adjusted volume during the period. (provider: intrinio) - factor : Optional[Union[float]] - factor by which to multiply stock prices before this date, in order to calculate historically-adjusted stock prices. (provider: intrinio) - split_ratio : Optional[Union[float]] - Ratio of the stock split, if a stock split occurred. (provider: intrinio) - dividend : Optional[Union[float]] - Dividend amount, if a dividend was paid. (provider: intrinio) - percent_change : Optional[Union[float]] - Percent change in the price of the symbol from the previous day. (provider: intrinio) - fifty_two_week_high : Optional[Union[float]] - 52 week high price for the symbol. (provider: intrinio) - fifty_two_week_low : Optional[Union[float]] - 52 week low price for the symbol. (provider: intrinio) - transactions : Optional[Union[typing_extensions.Annotated[int, Gt(gt=0)]]] - Number of transactions for the symbol in the time period. (provider: polygon) - - Example - ------- - >>> from openbb import obb - >>> obb.stocks.load(symbol="AAPL", interval="1d") - """ # noqa: E501 +Parameters +---------- +symbol : str + Symbol to get data for. +interval : Union[str, None] + Time interval of the data to return. +start_date : Union[datetime.date, None] + Start date of the data, in YYYY-MM-DD format. +end_date : Union[datetime.date, None] + End date of the data, in YYYY-MM-DD format. +chart : bool + Whether to create a chart or not, by default False. +provider : Union[Literal['alpha_vantage', 'cboe', 'fmp', 'intrinio', 'polygo... + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'alpha_vantage' if there is + no default. +adjusted : Optional[Union[bool]] + Output time series is adjusted by historical split and dividend events. (provider: alpha_vantage, polygon); Adjust all OHLC data automatically. (provider: yfinance) +extended_hours : Optional[Union[bool]] + Extended trading hours during pre-market and after-hours.Only available for intraday data. (provider: alpha_vantage) +month : Optional[Union[str]] + Query a specific month in history (in YYYY-MM format). (provider: alpha_vantage) +output_size : Optional[Union[Literal['compact', 'full']]] + Compact returns only the latest 100 data points in the intraday time series; full returns trailing 30 days of the most recent intraday data if the month parameter is not specified, or the full intraday data for aspecific month in history if the month parameter is specified. (provider: alpha_vantage) +limit : Optional[Union[typing_extensions.Annotated[int, Ge(ge=0)], int]] + Number of days to look back (Only for interval 1d). (provider: fmp); The number of data entries to return. (provider: polygon) +start_time : Optional[Union[datetime.time]] + Return intervals starting at the specified time on the `start_date` formatted as 'HH:MM:SS'. (provider: intrinio) +end_time : Optional[Union[datetime.time]] + Return intervals stopping at the specified time on the `end_date` formatted as 'HH:MM:SS'. (provider: intrinio) +timezone : str + Timezone of the data, in the IANA format (Continent/City). (provider: intrinio) +source : Optional[Union[Literal['realtime', 'delayed', 'nasdaq_basic']]] + The source of the data. (provider: intrinio) +sort : Literal['asc', 'desc'] + Sort order of the data. (provider: polygon) +prepost : bool + Include Pre and Post market data. (provider: yfinance) +include : bool + Include Dividends and Stock Splits in results. (provider: yfinance) +back_adjust : bool + Attempt to adjust all the data automatically. (provider: yfinance) +ignore_tz : bool + When combining from different timezones, ignore that part of datetime. (provider: yfinance) + +Returns +------- +OBBject + results : Union[List[StockHistorical]] + Serializable results. + provider : Union[Literal['alpha_vantage', 'cboe', 'fmp', 'intrinio', 'polygon', 'yfinance'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +StockHistorical +--------------- +date : datetime + The date of the data. +open : float + The open price of the symbol. +high : float + The high price of the symbol. +low : float + The low price of the symbol. +close : float + The close price of the symbol. +volume : Union[float, int] + The volume of the symbol. +vwap : Optional[Union[typing_extensions.Annotated[float, Gt(gt=0)]]] + Volume Weighted Average Price of the symbol. +adj_close : Optional[Union[typing_extensions.Annotated[float, Gt(gt=0)], float]] + The adjusted close price of the symbol. (provider: alpha_vantage, fmp); Adjusted closing price during the period. (provider: intrinio) +dividend_amount : Optional[Union[typing_extensions.Annotated[float, Ge(ge=0)]]] + Dividend amount paid for the corresponding date. (provider: alpha_vantage) +split_coefficient : Optional[Union[typing_extensions.Annotated[float, Ge(ge=0)]]] + Split coefficient for the corresponding date. (provider: alpha_vantage) +calls_volume : Optional[Union[float]] + Number of calls traded during the most recent trading period. Only valid if interval is 1m. (provider: cboe) +puts_volume : Optional[Union[float]] + Number of puts traded during the most recent trading period. Only valid if interval is 1m. (provider: cboe) +total_options_volume : Optional[Union[float]] + Total number of options traded during the most recent trading period. Only valid if interval is 1m. (provider: cboe) +label : Optional[Union[str]] + Human readable format of the date. (provider: fmp) +unadjusted_volume : Optional[Union[float]] + Unadjusted volume of the symbol. (provider: fmp) +change : Optional[Union[float]] + Change in the price of the symbol from the previous day. (provider: fmp, intrinio) +change_percent : Optional[Union[float]] + Change % in the price of the symbol. (provider: fmp) +change_over_time : Optional[Union[float]] + Change % in the price of the symbol over a period of time. (provider: fmp) +close_time : Optional[Union[datetime]] + The timestamp that represents the end of the interval span. (provider: intrinio) +interval : Optional[Union[str]] + The data time frequency. (provider: intrinio) +average : Optional[Union[float]] + Average trade price of an individual stock during the interval. (provider: intrinio) +intra_period : Optional[Union[bool]] + If true, the stock price represents an unfinished period (be it day, week, quarter, month, or year), meaning that the close price is the latest price available, not the official close price for the period (provider: intrinio) +adj_open : Optional[Union[float]] + Adjusted open price during the period. (provider: intrinio) +adj_high : Optional[Union[float]] + Adjusted high price during the period. (provider: intrinio) +adj_low : Optional[Union[float]] + Adjusted low price during the period. (provider: intrinio) +adj_volume : Optional[Union[float]] + Adjusted volume during the period. (provider: intrinio) +factor : Optional[Union[float]] + factor by which to multiply stock prices before this date, in order to calculate historically-adjusted stock prices. (provider: intrinio) +split_ratio : Optional[Union[float]] + Ratio of the stock split, if a stock split occurred. (provider: intrinio) +dividend : Optional[Union[float]] + Dividend amount, if a dividend was paid. (provider: intrinio) +percent_change : Optional[Union[float]] + Percent change in the price of the symbol from the previous day. (provider: intrinio) +fifty_two_week_high : Optional[Union[float]] + 52 week high price for the symbol. (provider: intrinio) +fifty_two_week_low : Optional[Union[float]] + 52 week low price for the symbol. (provider: intrinio) +transactions : Optional[Union[typing_extensions.Annotated[int, Gt(gt=0)]]] + Number of transactions for the symbol in the time period. (provider: polygon) + +Example +------- +>>> from openbb import obb +>>> obb.stocks.load(symbol="AAPL", interval="1d") + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, - "interval": interval, - "start_date": start_date, - "end_date": end_date, - }, + provider_choices={"provider": provider, }, + standard_params={"symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, "interval": interval, "start_date": start_date, "end_date": end_date, }, extra_params=kwargs, chart=chart, ) @@ -347,187 +613,171 @@ def load( **inputs, ) + @validate - def multiples( - self, - symbol: typing_extensions.Annotated[ - Union[str, List[str]], - OpenBBCustomParameter(description="Symbol to get data for."), - ], - limit: typing_extensions.Annotated[ - Union[int, None], - OpenBBCustomParameter(description="The number of data entries to return."), - ] = 100, - chart: bool = False, - provider: Union[Literal["fmp"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def multiples(self, symbol: typing_extensions.Annotated[Union[str, List[str]], OpenBBCustomParameter(description='Symbol to get data for.')], limit: typing_extensions.Annotated[Union[int, None], OpenBBCustomParameter(description='The number of data entries to return.')] = 100, chart: bool = False, provider: Union[Literal['fmp'], None] = None, **kwargs) -> OBBject[List[Data]]: """Stock Multiples. Valuation multiples for a stock ticker. - Parameters - ---------- - symbol : str - Symbol to get data for. - limit : Union[int, None] - The number of data entries to return. - chart : bool - Whether to create a chart or not, by default False. - provider : Union[Literal['fmp'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'fmp' if there is - no default. - - Returns - ------- - OBBject - results : Union[List[StockMultiples]] - Serializable results. - provider : Union[Literal['fmp'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - StockMultiples - -------------- - revenue_per_share_ttm : Optional[Union[float]] - Revenue per share calculated as trailing twelve months. - net_income_per_share_ttm : Optional[Union[float]] - Net income per share calculated as trailing twelve months. - operating_cash_flow_per_share_ttm : Optional[Union[float]] - Operating cash flow per share calculated as trailing twelve months. - free_cash_flow_per_share_ttm : Optional[Union[float]] - Free cash flow per share calculated as trailing twelve months. - cash_per_share_ttm : Optional[Union[float]] - Cash per share calculated as trailing twelve months. - book_value_per_share_ttm : Optional[Union[float]] - Book value per share calculated as trailing twelve months. - tangible_book_value_per_share_ttm : Optional[Union[float]] - Tangible book value per share calculated as trailing twelve months. - shareholders_equity_per_share_ttm : Optional[Union[float]] - Shareholders equity per share calculated as trailing twelve months. - interest_debt_per_share_ttm : Optional[Union[float]] - Interest debt per share calculated as trailing twelve months. - market_cap_ttm : Optional[Union[float]] - Market capitalization calculated as trailing twelve months. - enterprise_value_ttm : Optional[Union[float]] - Enterprise value calculated as trailing twelve months. - pe_ratio_ttm : Optional[Union[float]] - Price-to-earnings ratio (P/E ratio) calculated as trailing twelve months. - price_to_sales_ratio_ttm : Optional[Union[float]] - Price-to-sales ratio calculated as trailing twelve months. - pocf_ratio_ttm : Optional[Union[float]] - Price-to-operating cash flow ratio calculated as trailing twelve months. - pfcf_ratio_ttm : Optional[Union[float]] - Price-to-free cash flow ratio calculated as trailing twelve months. - pb_ratio_ttm : Optional[Union[float]] - Price-to-book ratio calculated as trailing twelve months. - ptb_ratio_ttm : Optional[Union[float]] - Price-to-tangible book ratio calculated as trailing twelve months. - ev_to_sales_ttm : Optional[Union[float]] - Enterprise value-to-sales ratio calculated as trailing twelve months. - enterprise_value_over_ebitda_ttm : Optional[Union[float]] - Enterprise value-to-EBITDA ratio calculated as trailing twelve months. - ev_to_operating_cash_flow_ttm : Optional[Union[float]] - Enterprise value-to-operating cash flow ratio calculated as trailing twelve months. - ev_to_free_cash_flow_ttm : Optional[Union[float]] - Enterprise value-to-free cash flow ratio calculated as trailing twelve months. - earnings_yield_ttm : Optional[Union[float]] - Earnings yield calculated as trailing twelve months. - free_cash_flow_yield_ttm : Optional[Union[float]] - Free cash flow yield calculated as trailing twelve months. - debt_to_equity_ttm : Optional[Union[float]] - Debt-to-equity ratio calculated as trailing twelve months. - debt_to_assets_ttm : Optional[Union[float]] - Debt-to-assets ratio calculated as trailing twelve months. - net_debt_to_ebitda_ttm : Optional[Union[float]] - Net debt-to-EBITDA ratio calculated as trailing twelve months. - current_ratio_ttm : Optional[Union[float]] - Current ratio calculated as trailing twelve months. - interest_coverage_ttm : Optional[Union[float]] - Interest coverage calculated as trailing twelve months. - income_quality_ttm : Optional[Union[float]] - Income quality calculated as trailing twelve months. - dividend_yield_ttm : Optional[Union[float]] - Dividend yield calculated as trailing twelve months. - dividend_yield_percentage_ttm : Optional[Union[float]] - Dividend yield percentage calculated as trailing twelve months. - dividend_to_market_cap_ttm : Optional[Union[float]] - Dividend to market capitalization ratio calculated as trailing twelve months. - dividend_per_share_ttm : Optional[Union[float]] - Dividend per share calculated as trailing twelve months. - payout_ratio_ttm : Optional[Union[float]] - Payout ratio calculated as trailing twelve months. - sales_general_and_administrative_to_revenue_ttm : Optional[Union[float]] - Sales general and administrative expenses-to-revenue ratio calculated as trailing twelve months. - research_and_development_to_revenue_ttm : Optional[Union[float]] - Research and development expenses-to-revenue ratio calculated as trailing twelve months. - intangibles_to_total_assets_ttm : Optional[Union[float]] - Intangibles-to-total assets ratio calculated as trailing twelve months. - capex_to_operating_cash_flow_ttm : Optional[Union[float]] - Capital expenditures-to-operating cash flow ratio calculated as trailing twelve months. - capex_to_revenue_ttm : Optional[Union[float]] - Capital expenditures-to-revenue ratio calculated as trailing twelve months. - capex_to_depreciation_ttm : Optional[Union[float]] - Capital expenditures-to-depreciation ratio calculated as trailing twelve months. - stock_based_compensation_to_revenue_ttm : Optional[Union[float]] - Stock-based compensation-to-revenue ratio calculated as trailing twelve months. - graham_number_ttm : Optional[Union[float]] - Graham number calculated as trailing twelve months. - roic_ttm : Optional[Union[float]] - Return on invested capital calculated as trailing twelve months. - return_on_tangible_assets_ttm : Optional[Union[float]] - Return on tangible assets calculated as trailing twelve months. - graham_net_net_ttm : Optional[Union[float]] - Graham net-net working capital calculated as trailing twelve months. - working_capital_ttm : Optional[Union[float]] - Working capital calculated as trailing twelve months. - tangible_asset_value_ttm : Optional[Union[float]] - Tangible asset value calculated as trailing twelve months. - net_current_asset_value_ttm : Optional[Union[float]] - Net current asset value calculated as trailing twelve months. - invested_capital_ttm : Optional[Union[float]] - Invested capital calculated as trailing twelve months. - average_receivables_ttm : Optional[Union[float]] - Average receivables calculated as trailing twelve months. - average_payables_ttm : Optional[Union[float]] - Average payables calculated as trailing twelve months. - average_inventory_ttm : Optional[Union[float]] - Average inventory calculated as trailing twelve months. - days_sales_outstanding_ttm : Optional[Union[float]] - Days sales outstanding calculated as trailing twelve months. - days_payables_outstanding_ttm : Optional[Union[float]] - Days payables outstanding calculated as trailing twelve months. - days_of_inventory_on_hand_ttm : Optional[Union[float]] - Days of inventory on hand calculated as trailing twelve months. - receivables_turnover_ttm : Optional[Union[float]] - Receivables turnover calculated as trailing twelve months. - payables_turnover_ttm : Optional[Union[float]] - Payables turnover calculated as trailing twelve months. - inventory_turnover_ttm : Optional[Union[float]] - Inventory turnover calculated as trailing twelve months. - roe_ttm : Optional[Union[float]] - Return on equity calculated as trailing twelve months. - capex_per_share_ttm : Optional[Union[float]] - Capital expenditures per share calculated as trailing twelve months. - - Example - ------- - >>> from openbb import obb - >>> obb.stocks.multiples(symbol="AAPL", limit=100) - """ # noqa: E501 +Parameters +---------- +symbol : str + Symbol to get data for. +limit : Union[int, None] + The number of data entries to return. +chart : bool + Whether to create a chart or not, by default False. +provider : Union[Literal['fmp'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fmp' if there is + no default. + +Returns +------- +OBBject + results : Union[List[StockMultiples]] + Serializable results. + provider : Union[Literal['fmp'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +StockMultiples +-------------- +revenue_per_share_ttm : Optional[Union[float]] + Revenue per share calculated as trailing twelve months. +net_income_per_share_ttm : Optional[Union[float]] + Net income per share calculated as trailing twelve months. +operating_cash_flow_per_share_ttm : Optional[Union[float]] + Operating cash flow per share calculated as trailing twelve months. +free_cash_flow_per_share_ttm : Optional[Union[float]] + Free cash flow per share calculated as trailing twelve months. +cash_per_share_ttm : Optional[Union[float]] + Cash per share calculated as trailing twelve months. +book_value_per_share_ttm : Optional[Union[float]] + Book value per share calculated as trailing twelve months. +tangible_book_value_per_share_ttm : Optional[Union[float]] + Tangible book value per share calculated as trailing twelve months. +shareholders_equity_per_share_ttm : Optional[Union[float]] + Shareholders equity per share calculated as trailing twelve months. +interest_debt_per_share_ttm : Optional[Union[float]] + Interest debt per share calculated as trailing twelve months. +market_cap_ttm : Optional[Union[float]] + Market capitalization calculated as trailing twelve months. +enterprise_value_ttm : Optional[Union[float]] + Enterprise value calculated as trailing twelve months. +pe_ratio_ttm : Optional[Union[float]] + Price-to-earnings ratio (P/E ratio) calculated as trailing twelve months. +price_to_sales_ratio_ttm : Optional[Union[float]] + Price-to-sales ratio calculated as trailing twelve months. +pocf_ratio_ttm : Optional[Union[float]] + Price-to-operating cash flow ratio calculated as trailing twelve months. +pfcf_ratio_ttm : Optional[Union[float]] + Price-to-free cash flow ratio calculated as trailing twelve months. +pb_ratio_ttm : Optional[Union[float]] + Price-to-book ratio calculated as trailing twelve months. +ptb_ratio_ttm : Optional[Union[float]] + Price-to-tangible book ratio calculated as trailing twelve months. +ev_to_sales_ttm : Optional[Union[float]] + Enterprise value-to-sales ratio calculated as trailing twelve months. +enterprise_value_over_ebitda_ttm : Optional[Union[float]] + Enterprise value-to-EBITDA ratio calculated as trailing twelve months. +ev_to_operating_cash_flow_ttm : Optional[Union[float]] + Enterprise value-to-operating cash flow ratio calculated as trailing twelve months. +ev_to_free_cash_flow_ttm : Optional[Union[float]] + Enterprise value-to-free cash flow ratio calculated as trailing twelve months. +earnings_yield_ttm : Optional[Union[float]] + Earnings yield calculated as trailing twelve months. +free_cash_flow_yield_ttm : Optional[Union[float]] + Free cash flow yield calculated as trailing twelve months. +debt_to_equity_ttm : Optional[Union[float]] + Debt-to-equity ratio calculated as trailing twelve months. +debt_to_assets_ttm : Optional[Union[float]] + Debt-to-assets ratio calculated as trailing twelve months. +net_debt_to_ebitda_ttm : Optional[Union[float]] + Net debt-to-EBITDA ratio calculated as trailing twelve months. +current_ratio_ttm : Optional[Union[float]] + Current ratio calculated as trailing twelve months. +interest_coverage_ttm : Optional[Union[float]] + Interest coverage calculated as trailing twelve months. +income_quality_ttm : Optional[Union[float]] + Income quality calculated as trailing twelve months. +dividend_yield_ttm : Optional[Union[float]] + Dividend yield calculated as trailing twelve months. +dividend_yield_percentage_ttm : Optional[Union[float]] + Dividend yield percentage calculated as trailing twelve months. +dividend_to_market_cap_ttm : Optional[Union[float]] + Dividend to market capitalization ratio calculated as trailing twelve months. +dividend_per_share_ttm : Optional[Union[float]] + Dividend per share calculated as trailing twelve months. +payout_ratio_ttm : Optional[Union[float]] + Payout ratio calculated as trailing twelve months. +sales_general_and_administrative_to_revenue_ttm : Optional[Union[float]] + Sales general and administrative expenses-to-revenue ratio calculated as trailing twelve months. +research_and_development_to_revenue_ttm : Optional[Union[float]] + Research and development expenses-to-revenue ratio calculated as trailing twelve months. +intangibles_to_total_assets_ttm : Optional[Union[float]] + Intangibles-to-total assets ratio calculated as trailing twelve months. +capex_to_operating_cash_flow_ttm : Optional[Union[float]] + Capital expenditures-to-operating cash flow ratio calculated as trailing twelve months. +capex_to_revenue_ttm : Optional[Union[float]] + Capital expenditures-to-revenue ratio calculated as trailing twelve months. +capex_to_depreciation_ttm : Optional[Union[float]] + Capital expenditures-to-depreciation ratio calculated as trailing twelve months. +stock_based_compensation_to_revenue_ttm : Optional[Union[float]] + Stock-based compensation-to-revenue ratio calculated as trailing twelve months. +graham_number_ttm : Optional[Union[float]] + Graham number calculated as trailing twelve months. +roic_ttm : Optional[Union[float]] + Return on invested capital calculated as trailing twelve months. +return_on_tangible_assets_ttm : Optional[Union[float]] + Return on tangible assets calculated as trailing twelve months. +graham_net_net_ttm : Optional[Union[float]] + Graham net-net working capital calculated as trailing twelve months. +working_capital_ttm : Optional[Union[float]] + Working capital calculated as trailing twelve months. +tangible_asset_value_ttm : Optional[Union[float]] + Tangible asset value calculated as trailing twelve months. +net_current_asset_value_ttm : Optional[Union[float]] + Net current asset value calculated as trailing twelve months. +invested_capital_ttm : Optional[Union[float]] + Invested capital calculated as trailing twelve months. +average_receivables_ttm : Optional[Union[float]] + Average receivables calculated as trailing twelve months. +average_payables_ttm : Optional[Union[float]] + Average payables calculated as trailing twelve months. +average_inventory_ttm : Optional[Union[float]] + Average inventory calculated as trailing twelve months. +days_sales_outstanding_ttm : Optional[Union[float]] + Days sales outstanding calculated as trailing twelve months. +days_payables_outstanding_ttm : Optional[Union[float]] + Days payables outstanding calculated as trailing twelve months. +days_of_inventory_on_hand_ttm : Optional[Union[float]] + Days of inventory on hand calculated as trailing twelve months. +receivables_turnover_ttm : Optional[Union[float]] + Receivables turnover calculated as trailing twelve months. +payables_turnover_ttm : Optional[Union[float]] + Payables turnover calculated as trailing twelve months. +inventory_turnover_ttm : Optional[Union[float]] + Inventory turnover calculated as trailing twelve months. +roe_ttm : Optional[Union[float]] + Return on equity calculated as trailing twelve months. +capex_per_share_ttm : Optional[Union[float]] + Capital expenditures per share calculated as trailing twelve months. + +Example +------- +>>> from openbb import obb +>>> obb.stocks.multiples(symbol="AAPL", limit=100) + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, - "limit": limit, - }, + provider_choices={"provider": provider, }, + standard_params={"symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, "limit": limit, }, extra_params=kwargs, chart=chart, ) @@ -537,151 +787,131 @@ def multiples( **inputs, ) + @validate - def news( - self, - symbols: typing_extensions.Annotated[ - str, - OpenBBCustomParameter( - description=" Here it is a separated list of symbols." - ), - ], - limit: typing_extensions.Annotated[ - Union[typing_extensions.Annotated[int, Ge(ge=0)], None], - OpenBBCustomParameter(description="The number of data entries to return."), - ] = 20, - chart: bool = False, - provider: Union[ - Literal["benzinga", "fmp", "intrinio", "polygon", "yfinance"], None - ] = None, - **kwargs - ) -> OBBject[List[Data]]: + def news(self, symbols: typing_extensions.Annotated[str, OpenBBCustomParameter(description=' Here it is a separated list of symbols.')], limit: typing_extensions.Annotated[Union[typing_extensions.Annotated[int, Ge(ge=0)], None], OpenBBCustomParameter(description='The number of data entries to return.')] = 20, chart: bool = False, provider: Union[Literal['benzinga', 'fmp', 'intrinio', 'polygon', 'yfinance'], None] = None, **kwargs) -> OBBject[List[Data]]: """Stock News. Get news for one or more stock tickers. - Parameters - ---------- - symbols : str - Here it is a separated list of symbols. - limit : Union[typing_extensions.Annotated[int, Ge(ge=0)], None] - The number of data entries to return. - chart : bool - Whether to create a chart or not, by default False. - provider : Union[Literal['benzinga', 'fmp', 'intrinio', 'polygon', 'yfinance... - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'benzinga' if there is - no default. - display : Literal['headline', 'abstract', 'full'] - Specify headline only (headline), headline + teaser (abstract), or headline + full body (full). (provider: benzinga) - date : Optional[Union[str]] - Date of the news to retrieve. (provider: benzinga) - start_date : Optional[Union[str]] - Start date of the news to retrieve. (provider: benzinga) - end_date : Optional[Union[str]] - End date of the news to retrieve. (provider: benzinga) - updated_since : Optional[Union[int]] - Number of seconds since the news was updated. (provider: benzinga) - published_since : Optional[Union[int]] - Number of seconds since the news was published. (provider: benzinga) - sort : Optional[Union[Literal['id', 'created', 'updated']]] - Key to sort the news by. (provider: benzinga) - order : Optional[Union[Literal['asc', 'desc']]] - Order to sort the news by. (provider: benzinga); Sort order of the articles. (provider: polygon) - isin : Optional[Union[str]] - The ISIN of the news to retrieve. (provider: benzinga) - cusip : Optional[Union[str]] - The CUSIP of the news to retrieve. (provider: benzinga) - channels : Optional[Union[str]] - Channels of the news to retrieve. (provider: benzinga) - topics : Optional[Union[str]] - Topics of the news to retrieve. (provider: benzinga) - authors : Optional[Union[str]] - Authors of the news to retrieve. (provider: benzinga) - content_types : Optional[Union[str]] - Content types of the news to retrieve. (provider: benzinga) - page : Optional[Union[int]] - Page number of the results. Use in combination with limit. (provider: fmp) - published_utc : Optional[Union[str]] - Date query to fetch articles. Supports operators <, <=, >, >= (provider: polygon) - - Returns - ------- - OBBject - results : Union[List[StockNews]] - Serializable results. - provider : Union[Literal['benzinga', 'fmp', 'intrinio', 'polygon', 'yfinance'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - StockNews - --------- - date : datetime - The date of the data. Here it is the date of the news. - title : str - Title of the news. - image : Optional[Union[str]] - Image URL of the news. - text : Optional[Union[str]] - Text/body of the news. - url : str - URL of the news. - id : Optional[Union[str]] - ID of the news. (provider: benzinga); Intrinio ID for the article. (provider: intrinio); Article ID. (provider: polygon) - author : Optional[Union[str]] - Author of the news. (provider: benzinga); Author of the article. (provider: polygon) - teaser : Optional[Union[str]] - Teaser of the news. (provider: benzinga) - images : Optional[Union[List[Dict[str, str]], List[str], str]] - Images associated with the news. (provider: benzinga); URL to the images of the news. (provider: fmp) - channels : Optional[Union[str]] - Channels associated with the news. (provider: benzinga) - stocks : Optional[Union[str]] - Stocks associated with the news. (provider: benzinga) - tags : Optional[Union[str]] - Tags associated with the news. (provider: benzinga) - updated : Optional[Union[datetime]] - None - symbol : Optional[Union[str]] - Ticker of the fetched news. (provider: fmp) - site : Optional[Union[str]] - Name of the news source. (provider: fmp) - amp_url : Optional[Union[str]] - AMP URL. (provider: polygon) - image_url : Optional[Union[str]] - Image URL. (provider: polygon) - keywords : Optional[Union[List[str]]] - Keywords in the article (provider: polygon) - publisher : Optional[Union[openbb_polygon.models.stock_news.PolygonPublisher, str]] - Publisher of the article. (provider: polygon, yfinance) - tickers : Optional[Union[List[str]]] - Tickers covered in the article. (provider: polygon) - uuid : Optional[Union[str]] - Unique identifier for the news article (provider: yfinance) - type : Optional[Union[str]] - Type of the news article (provider: yfinance) - thumbnail : Optional[Union[List]] - Thumbnail related data to the ticker news article. (provider: yfinance) - related_tickers : Optional[Union[str]] - Tickers related to the news article. (provider: yfinance) - - Example - ------- - >>> from openbb import obb - >>> obb.stocks.news(symbols="AAPL,MSFT", limit=20) - """ # noqa: E501 +Parameters +---------- +symbols : str + Here it is a separated list of symbols. +limit : Union[typing_extensions.Annotated[int, Ge(ge=0)], None] + The number of data entries to return. +chart : bool + Whether to create a chart or not, by default False. +provider : Union[Literal['benzinga', 'fmp', 'intrinio', 'polygon', 'yfinance... + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'benzinga' if there is + no default. +display : Literal['headline', 'abstract', 'full'] + Specify headline only (headline), headline + teaser (abstract), or headline + full body (full). (provider: benzinga) +date : Optional[Union[str]] + Date of the news to retrieve. (provider: benzinga) +start_date : Optional[Union[str]] + Start date of the news to retrieve. (provider: benzinga) +end_date : Optional[Union[str]] + End date of the news to retrieve. (provider: benzinga) +updated_since : Optional[Union[int]] + Number of seconds since the news was updated. (provider: benzinga) +published_since : Optional[Union[int]] + Number of seconds since the news was published. (provider: benzinga) +sort : Optional[Union[Literal['id', 'created', 'updated']]] + Key to sort the news by. (provider: benzinga) +order : Optional[Union[Literal['asc', 'desc']]] + Order to sort the news by. (provider: benzinga); Sort order of the articles. (provider: polygon) +isin : Optional[Union[str]] + The ISIN of the news to retrieve. (provider: benzinga) +cusip : Optional[Union[str]] + The CUSIP of the news to retrieve. (provider: benzinga) +channels : Optional[Union[str]] + Channels of the news to retrieve. (provider: benzinga) +topics : Optional[Union[str]] + Topics of the news to retrieve. (provider: benzinga) +authors : Optional[Union[str]] + Authors of the news to retrieve. (provider: benzinga) +content_types : Optional[Union[str]] + Content types of the news to retrieve. (provider: benzinga) +page : Optional[Union[int]] + Page number of the results. Use in combination with limit. (provider: fmp) +published_utc : Optional[Union[str]] + Date query to fetch articles. Supports operators <, <=, >, >= (provider: polygon) + +Returns +------- +OBBject + results : Union[List[StockNews]] + Serializable results. + provider : Union[Literal['benzinga', 'fmp', 'intrinio', 'polygon', 'yfinance'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +StockNews +--------- +date : datetime + The date of the data. Here it is the date of the news. +title : str + Title of the news. +image : Optional[Union[str]] + Image URL of the news. +text : Optional[Union[str]] + Text/body of the news. +url : str + URL of the news. +id : Optional[Union[str]] + ID of the news. (provider: benzinga); Intrinio ID for the article. (provider: intrinio); Article ID. (provider: polygon) +author : Optional[Union[str]] + Author of the news. (provider: benzinga); Author of the article. (provider: polygon) +teaser : Optional[Union[str]] + Teaser of the news. (provider: benzinga) +images : Optional[Union[List[Dict[str, str]], List[str], str]] + Images associated with the news. (provider: benzinga); URL to the images of the news. (provider: fmp) +channels : Optional[Union[str]] + Channels associated with the news. (provider: benzinga) +stocks : Optional[Union[str]] + Stocks associated with the news. (provider: benzinga) +tags : Optional[Union[str]] + Tags associated with the news. (provider: benzinga) +updated : Optional[Union[datetime]] + None +symbol : Optional[Union[str]] + Ticker of the fetched news. (provider: fmp) +site : Optional[Union[str]] + Name of the news source. (provider: fmp) +amp_url : Optional[Union[str]] + AMP URL. (provider: polygon) +image_url : Optional[Union[str]] + Image URL. (provider: polygon) +keywords : Optional[Union[List[str]]] + Keywords in the article (provider: polygon) +publisher : Optional[Union[openbb_polygon.models.stock_news.PolygonPublisher, str]] + Publisher of the article. (provider: polygon, yfinance) +tickers : Optional[Union[List[str]]] + Tickers covered in the article. (provider: polygon) +uuid : Optional[Union[str]] + Unique identifier for the news article (provider: yfinance) +type : Optional[Union[str]] + Type of the news article (provider: yfinance) +thumbnail : Optional[Union[List]] + Thumbnail related data to the ticker news article. (provider: yfinance) +related_tickers : Optional[Union[str]] + Tickers related to the news article. (provider: yfinance) + +Example +------- +>>> from openbb import obb +>>> obb.stocks.news(symbols="AAPL,MSFT", limit=20) + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "symbols": symbols, - "limit": limit, - }, + provider_choices={"provider": provider, }, + standard_params={"symbols": symbols, "limit": limit, }, extra_params=kwargs, chart=chart, ) @@ -691,155 +921,221 @@ def news( **inputs, ) + @property def options(self): # route = "/stocks/options" from . import stocks_options - return stocks_options.ROUTER_stocks_options(command_runner=self._command_runner) @validate - def quote( - self, - symbol: typing_extensions.Annotated[ - Union[str, List[str]], - OpenBBCustomParameter( - description="Symbol to get data for. In this case, the comma separated list of symbols." - ), - ], - provider: Union[Literal["fmp", "intrinio"], None] = None, - **kwargs - ) -> OBBject[Union[List[Data], Data]]: + def price_performance(self, symbol: typing_extensions.Annotated[Union[str, List[str]], OpenBBCustomParameter(description='Symbol to get data for.')], provider: Union[Literal['fmp'], None] = None, **kwargs) -> OBBject[List[Data]]: + """Price performance as a return, over different periods. + +Parameters +---------- +symbol : str + Symbol to get data for. +provider : Union[Literal['fmp'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fmp' if there is + no default. + +Returns +------- +OBBject + results : Union[List[PricePerformance]] + Serializable results. + provider : Union[Literal['fmp'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +PricePerformance +---------------- +one_day : Optional[Union[float]] + One-day return. +wtd : Optional[Union[float]] + Week to date return. +one_week : Optional[Union[float]] + One-week return. +mtd : Optional[Union[float]] + Month to date return. +one_month : Optional[Union[float]] + One-month return. +qtd : Optional[Union[float]] + Quarter to date return. +three_month : Optional[Union[float]] + Three-month return. +six_month : Optional[Union[float]] + Six-month return. +ytd : Optional[Union[float]] + Year to date return. +one_year : Optional[Union[float]] + One-year return. +three_year : Optional[Union[float]] + Three-year return. +five_year : Optional[Union[float]] + Five-year return. +ten_year : Optional[Union[float]] + Ten-year return. +max : Optional[Union[float]] + Return from the beginning of the time series. +symbol : Optional[Union[str]] + The ticker symbol. (provider: fmp) + +Example +------- +>>> from openbb import obb +>>> obb.etf.price_performance(symbol="AAPL") + +""" # noqa: E501 + + inputs = filter_inputs( + provider_choices={"provider": provider, }, + standard_params={"symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, }, + extra_params=kwargs, + ) + + return self._run( + "/stocks/price_performance", + **inputs, + ) + + + @validate + def quote(self, symbol: typing_extensions.Annotated[Union[str, List[str]], OpenBBCustomParameter(description='Symbol to get data for. In this case, the comma separated list of symbols.')], provider: Union[Literal['fmp', 'intrinio'], None] = None, **kwargs) -> OBBject[Union[List[Data], Data]]: """Stock Quote. Load stock data for a specific ticker. - Parameters - ---------- - symbol : str - Symbol to get data for. In this case, the comma separated list of symbols. - provider : Union[Literal['fmp', 'intrinio'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'fmp' if there is - no default. - source : Literal['iex', 'bats', 'bats_delayed', 'utp_delayed', 'cta_a_delayed', 'cta_b_delayed', 'intrinio_mx', 'intrinio_mx_plus', 'delayed_sip'] - Source of the data. (provider: intrinio) - - Returns - ------- - OBBject - results : Union[List[StockQuote], StockQuote] - Serializable results. - provider : Union[Literal['fmp', 'intrinio'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - StockQuote - ---------- - day_low : Optional[Union[float]] - Lowest price of the stock in the current trading day. - day_high : Optional[Union[float]] - Highest price of the stock in the current trading day. - date : Optional[Union[datetime]] - The date of the data. - symbol : Optional[Union[str]] - Symbol of the company. (provider: fmp) - name : Optional[Union[str]] - Name of the company. (provider: fmp) - price : Optional[Union[float]] - Current trading price of the stock. (provider: fmp) - changes_percentage : Optional[Union[float]] - Change percentage of the stock price. (provider: fmp) - change : Optional[Union[float]] - Change in the stock price. (provider: fmp) - year_high : Optional[Union[float]] - Highest price of the stock in the last 52 weeks. (provider: fmp) - year_low : Optional[Union[float]] - Lowest price of the stock in the last 52 weeks. (provider: fmp) - market_cap : Optional[Union[float]] - Market cap of the company. (provider: fmp) - price_avg50 : Optional[Union[float]] - 50 days average price of the stock. (provider: fmp) - price_avg200 : Optional[int] - 200 days average price of the stock. (provider: fmp) - volume : Optional[int] - Volume of the stock in the current trading day. (provider: fmp) - avg_volume : Optional[int] - Average volume of the stock in the last 10 trading days. (provider: fmp) - exchange : Optional[Union[str]] - Exchange the stock is traded on. (provider: fmp) - open : Optional[Union[float]] - Opening price of the stock in the current trading day. (provider: fmp) - previous_close : Optional[Union[float]] - Previous closing price of the stock. (provider: fmp) - eps : Optional[Union[float]] - Earnings per share of the stock. (provider: fmp) - pe : Optional[Union[float]] - Price earnings ratio of the stock. (provider: fmp) - earnings_announcement : Optional[Union[str]] - Earnings announcement date of the stock. (provider: fmp) - shares_outstanding : Optional[int] - Number of shares outstanding of the stock. (provider: fmp) - last_price : Optional[Union[float]] - Price of the last trade. (provider: intrinio) - last_time : Optional[Union[datetime]] - Date and Time when the last trade occurred. (provider: intrinio) - last_size : Optional[Union[int]] - Size of the last trade. (provider: intrinio) - bid_price : Optional[Union[float]] - Price of the top bid order. (provider: intrinio) - bid_size : Optional[Union[int]] - Size of the top bid order. (provider: intrinio) - ask_price : Optional[Union[float]] - Price of the top ask order. (provider: intrinio) - ask_size : Optional[Union[int]] - Size of the top ask order. (provider: intrinio) - open_price : Optional[Union[float]] - Open price for the trading day. (provider: intrinio) - close_price : Optional[Union[float]] - Closing price for the trading day (IEX source only). (provider: intrinio) - high_price : Optional[Union[float]] - High Price for the trading day. (provider: intrinio) - low_price : Optional[Union[float]] - Low Price for the trading day. (provider: intrinio) - exchange_volume : Optional[Union[int]] - Number of shares exchanged during the trading day on the exchange. (provider: intrinio) - market_volume : Optional[Union[int]] - Number of shares exchanged during the trading day for the whole market. (provider: intrinio) - updated_on : Optional[Union[datetime]] - Date and Time when the data was last updated. (provider: intrinio) - source : Optional[Union[str]] - Source of the data. (provider: intrinio) - listing_venue : Optional[Union[str]] - Listing venue where the trade took place (SIP source only). (provider: intrinio) - sales_conditions : Optional[Union[str]] - Indicates any sales condition modifiers associated with the trade. (provider: intrinio) - quote_conditions : Optional[Union[str]] - Indicates any quote condition modifiers associated with the trade. (provider: intrinio) - market_center_code : Optional[Union[str]] - Market center character code. (provider: intrinio) - is_darkpool : Optional[Union[bool]] - Whether or not the current trade is from a darkpool. (provider: intrinio) - messages : Optional[Union[List[str]]] - Messages associated with the endpoint. (provider: intrinio) - security : Optional[Union[Dict[str, Any]]] - Security details related to the quote. (provider: intrinio) - - Example - ------- - >>> from openbb import obb - >>> obb.stocks.quote(symbol="AAPL") - """ # noqa: E501 +Parameters +---------- +symbol : str + Symbol to get data for. In this case, the comma separated list of symbols. +provider : Union[Literal['fmp', 'intrinio'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fmp' if there is + no default. +source : Literal['iex', 'bats', 'bats_delayed', 'utp_delayed', 'cta_a_delayed', 'cta_b_delayed', 'intrinio_mx', 'intrinio_mx_plus', 'delayed_sip'] + Source of the data. (provider: intrinio) + +Returns +------- +OBBject + results : Union[List[StockQuote], StockQuote] + Serializable results. + provider : Union[Literal['fmp', 'intrinio'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +StockQuote +---------- +day_low : Optional[Union[float]] + Lowest price of the stock in the current trading day. +day_high : Optional[Union[float]] + Highest price of the stock in the current trading day. +date : Optional[Union[datetime]] + The date of the data. +symbol : Optional[Union[str]] + Symbol of the company. (provider: fmp) +name : Optional[Union[str]] + Name of the company. (provider: fmp) +price : Optional[Union[float]] + Current trading price of the stock. (provider: fmp) +changes_percentage : Optional[Union[float]] + Change percentage of the stock price. (provider: fmp) +change : Optional[Union[float]] + Change in the stock price. (provider: fmp) +year_high : Optional[Union[float]] + Highest price of the stock in the last 52 weeks. (provider: fmp) +year_low : Optional[Union[float]] + Lowest price of the stock in the last 52 weeks. (provider: fmp) +market_cap : Optional[Union[float]] + Market cap of the company. (provider: fmp) +price_avg50 : Optional[Union[float]] + 50 days average price of the stock. (provider: fmp) +price_avg200 : Optional[int] + 200 days average price of the stock. (provider: fmp) +volume : Optional[int] + Volume of the stock in the current trading day. (provider: fmp) +avg_volume : Optional[int] + Average volume of the stock in the last 10 trading days. (provider: fmp) +exchange : Optional[Union[str]] + Exchange the stock is traded on. (provider: fmp) +open : Optional[Union[float]] + Opening price of the stock in the current trading day. (provider: fmp) +previous_close : Optional[Union[float]] + Previous closing price of the stock. (provider: fmp) +eps : Optional[Union[float]] + Earnings per share of the stock. (provider: fmp) +pe : Optional[Union[float]] + Price earnings ratio of the stock. (provider: fmp) +earnings_announcement : Optional[Union[str]] + Earnings announcement date of the stock. (provider: fmp) +shares_outstanding : Optional[int] + Number of shares outstanding of the stock. (provider: fmp) +last_price : Optional[Union[float]] + Price of the last trade. (provider: intrinio) +last_time : Optional[Union[datetime]] + Date and Time when the last trade occurred. (provider: intrinio) +last_size : Optional[Union[int]] + Size of the last trade. (provider: intrinio) +bid_price : Optional[Union[float]] + Price of the top bid order. (provider: intrinio) +bid_size : Optional[Union[int]] + Size of the top bid order. (provider: intrinio) +ask_price : Optional[Union[float]] + Price of the top ask order. (provider: intrinio) +ask_size : Optional[Union[int]] + Size of the top ask order. (provider: intrinio) +open_price : Optional[Union[float]] + Open price for the trading day. (provider: intrinio) +close_price : Optional[Union[float]] + Closing price for the trading day (IEX source only). (provider: intrinio) +high_price : Optional[Union[float]] + High Price for the trading day. (provider: intrinio) +low_price : Optional[Union[float]] + Low Price for the trading day. (provider: intrinio) +exchange_volume : Optional[Union[int]] + Number of shares exchanged during the trading day on the exchange. (provider: intrinio) +market_volume : Optional[Union[int]] + Number of shares exchanged during the trading day for the whole market. (provider: intrinio) +updated_on : Optional[Union[datetime]] + Date and Time when the data was last updated. (provider: intrinio) +source : Optional[Union[str]] + Source of the data. (provider: intrinio) +listing_venue : Optional[Union[str]] + Listing venue where the trade took place (SIP source only). (provider: intrinio) +sales_conditions : Optional[Union[str]] + Indicates any sales condition modifiers associated with the trade. (provider: intrinio) +quote_conditions : Optional[Union[str]] + Indicates any quote condition modifiers associated with the trade. (provider: intrinio) +market_center_code : Optional[Union[str]] + Market center character code. (provider: intrinio) +is_darkpool : Optional[Union[bool]] + Whether or not the current trade is from a darkpool. (provider: intrinio) +messages : Optional[Union[List[str]]] + Messages associated with the endpoint. (provider: intrinio) +security : Optional[Union[Dict[str, Any]]] + Security details related to the quote. (provider: intrinio) + +Example +------- +>>> from openbb import obb +>>> obb.stocks.quote(symbol="AAPL") + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, - }, + provider_choices={"provider": provider, }, + standard_params={"symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, }, extra_params=kwargs, ) @@ -848,71 +1144,121 @@ def quote( **inputs, ) + @validate - def search( - self, - query: typing_extensions.Annotated[ - str, OpenBBCustomParameter(description="Search query.") - ] = "", - is_symbol: typing_extensions.Annotated[ - bool, - OpenBBCustomParameter(description="Whether to search by ticker symbol."), - ] = False, - provider: Union[Literal["cboe"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def search(self, query: typing_extensions.Annotated[str, OpenBBCustomParameter(description='Search query.')] = '', is_symbol: typing_extensions.Annotated[bool, OpenBBCustomParameter(description='Whether to search by ticker symbol.')] = False, provider: Union[Literal['cboe', 'fmp', 'sec'], None] = None, **kwargs) -> OBBject[List[Data]]: """Stock Search. Search for a company or stock ticker. - Parameters - ---------- - query : str - Search query. - is_symbol : bool - Whether to search by ticker symbol. - provider : Union[Literal['cboe'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'cboe' if there is - no default. - - Returns - ------- - OBBject - results : Union[List[StockSearch]] - Serializable results. - provider : Union[Literal['cboe'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - StockSearch - ----------- - symbol : str - Symbol representing the entity requested in the data. - name : str - Name of the company. - dpm_name : Optional[Union[str]] - Name of the primary market maker. (provider: cboe) - post_station : Optional[Union[str]] - Post and station location on the CBOE trading floor. (provider: cboe) - - Example - ------- - >>> from openbb import obb - >>> obb.stocks.search() - """ # noqa: E501 +Parameters +---------- +query : str + Search query. +is_symbol : bool + Whether to search by ticker symbol. +provider : Union[Literal['cboe', 'fmp', 'sec'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'cboe' if there is + no default. +mktcap_min : Optional[Union[int]] + Filter by market cap greater than this value. (provider: fmp) +mktcap_max : Optional[Union[int]] + Filter by market cap less than this value. (provider: fmp) +price_min : Optional[Union[float]] + Filter by price greater than this value. (provider: fmp) +price_max : Optional[Union[float]] + Filter by price less than this value. (provider: fmp) +beta_min : Optional[Union[float]] + Filter by a beta greater than this value. (provider: fmp) +beta_max : Optional[Union[float]] + Filter by a beta less than this value. (provider: fmp) +volume_min : Optional[Union[int]] + Filter by volume greater than this value. (provider: fmp) +volume_max : Optional[Union[int]] + Filter by volume less than this value. (provider: fmp) +dividend_min : Optional[Union[float]] + Filter by dividend amount greater than this value. (provider: fmp) +dividend_max : Optional[Union[float]] + Filter by dividend amount less than this value. (provider: fmp) +is_etf : Optional[Union[bool]] + If true, returns only ETFs. (provider: fmp) +is_active : Optional[Union[bool]] + If false, returns only inactive tickers. (provider: fmp) +sector : Optional[Union[Literal['Consumer Cyclical', 'Energy', 'Technology', 'Industrials', 'Financial Services', 'Basic Materials', 'Communication Services', 'Consumer Defensive', 'Healthcare', 'Real Estate', 'Utilities', 'Industrial Goods', 'Financial', 'Services', 'Conglomerates']]] + Filter by sector. (provider: fmp) +industry : Optional[Union[str]] + Filter by industry. (provider: fmp) +country : Optional[Union[str]] + Filter by country, as a two-letter country code. (provider: fmp) +exchange : Optional[Union[Literal['amex', 'ase', 'asx', 'ath', 'bme', 'bru', 'bud', 'bue', 'cai', 'cnq', 'cph', 'dfm', 'doh', 'etf', 'euronext', 'hel', 'hkse', 'ice', 'iob', 'ist', 'jkt', 'jnb', 'jpx', 'kls', 'koe', 'ksc', 'kuw', 'lse', 'mex', 'nasdaq', 'neo', 'nse', 'nyse', 'nze', 'osl', 'otc', 'pnk', 'pra', 'ris', 'sao', 'sau', 'set', 'sgo', 'shh', 'shz', 'six', 'sto', 'tai', 'tlv', 'tsx', 'two', 'vie', 'wse', 'xetra']]] + Filter by exchange. (provider: fmp) +limit : Optional[Union[int]] + Limit the number of results to return. (provider: fmp) +is_fund : bool + Whether to direct the search to the list of mutual funds and ETFs. (provider: sec) +use_cache : bool + Whether to use the cache or not. Company names, tickers, and CIKs are cached for seven days. (provider: sec) + +Returns +------- +OBBject + results : Union[List[StockSearch]] + Serializable results. + provider : Union[Literal['cboe', 'fmp', 'sec'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +StockSearch +----------- +symbol : str + Symbol representing the entity requested in the data. +name : str + Name of the company. +dpm_name : Optional[Union[str]] + Name of the primary market maker. (provider: cboe) +post_station : Optional[Union[str]] + Post and station location on the CBOE trading floor. (provider: cboe) +market_cap : Optional[Union[int]] + The market cap of ticker. (provider: fmp) +sector : Optional[Union[str]] + The sector the ticker belongs to. (provider: fmp) +industry : Optional[Union[str]] + The industry ticker belongs to. (provider: fmp) +beta : Optional[Union[float]] + The beta of the ETF. (provider: fmp) +price : Optional[Union[float]] + The current price. (provider: fmp) +last_annual_dividend : Optional[Union[float]] + The last annual amount dividend paid. (provider: fmp) +volume : Optional[Union[int]] + The current trading volume. (provider: fmp) +exchange : Optional[Union[str]] + The exchange code the asset trades on. (provider: fmp) +exchange_name : Optional[Union[str]] + The full name of the primary exchange. (provider: fmp) +country : Optional[Union[str]] + The two-letter country abbreviation where the head office is located. (provider: fmp) +is_etf : Optional[Union[Literal[True, False]]] + Whether the ticker is an ETF. (provider: fmp) +actively_trading : Optional[Union[Literal[True, False]]] + Whether the ETF is actively trading. (provider: fmp) +cik : Optional[Union[str]] + Central Index Key (provider: sec) + +Example +------- +>>> from openbb import obb +>>> obb.stocks.search() + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "query": query, - "is_symbol": is_symbol, - }, + provider_choices={"provider": provider, }, + standard_params={"query": query, "is_symbol": is_symbol, }, extra_params=kwargs, ) @@ -920,3 +1266,4 @@ def search( "/stocks/search", **inputs, ) + diff --git a/openbb_platform/openbb/package/stocks_ca.py b/openbb_platform/openbb/package/stocks_ca.py index 73bfdc83d399..af72f1d54ded 100644 --- a/openbb_platform/openbb/package/stocks_ca.py +++ b/openbb_platform/openbb/package/stocks_ca.py @@ -1,77 +1,77 @@ ### THIS FILE IS AUTO-GENERATED. DO NOT EDIT. ### -from typing import List, Literal, Union - -import typing_extensions -from openbb_core.app.model.custom_parameter import OpenBBCustomParameter -from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container +from openbb_core.app.model.obbject import OBBject +from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +import openbb_provider +import pandas +import datetime +import pydantic +from pydantic import BaseModel +from inspect import Parameter +import typing +from typing import List, Dict, Union, Optional, Literal +from annotated_types import Ge, Le, Gt, Lt +import typing_extensions +from openbb_core.app.utils import df_to_basemodel from openbb_core.app.static.decorators import validate + from openbb_core.app.static.filters import filter_inputs -from openbb_provider.abstract.data import Data +from openbb_provider.abstract.data import Data +import openbb_core.app.model.command_context +import openbb_core.app.model.obbject +import types class ROUTER_stocks_ca(Container): """/stocks/ca - peers +peers """ - def __repr__(self) -> str: return self.__doc__ or "" @validate - def peers( - self, - symbol: typing_extensions.Annotated[ - Union[str, List[str]], - OpenBBCustomParameter(description="Symbol to get data for."), - ], - provider: Union[Literal["fmp"], None] = None, - **kwargs - ) -> OBBject[Data]: + def peers(self, symbol: typing_extensions.Annotated[Union[str, List[str]], OpenBBCustomParameter(description='Symbol to get data for.')], provider: Union[Literal['fmp'], None] = None, **kwargs) -> OBBject[Data]: """Stock Peers. Company peers. - Parameters - ---------- - symbol : str - Symbol to get data for. - provider : Union[Literal['fmp'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'fmp' if there is - no default. +Parameters +---------- +symbol : str + Symbol to get data for. +provider : Union[Literal['fmp'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fmp' if there is + no default. + +Returns +------- +OBBject + results : Union[StockPeers] + Serializable results. + provider : Union[Literal['fmp'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. - Returns - ------- - OBBject - results : Union[StockPeers] - Serializable results. - provider : Union[Literal['fmp'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. +StockPeers +---------- +peers_list : List[str] + A list of stock peers based on sector, exchange and market cap. - StockPeers - ---------- - peers_list : List[str] - A list of stock peers based on sector, exchange and market cap. +Example +------- +>>> from openbb import obb +>>> obb.stocks.ca.peers(symbol="AAPL") - Example - ------- - >>> from openbb import obb - >>> obb.stocks.ca.peers(symbol="AAPL") - """ # noqa: E501 +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, - }, + provider_choices={"provider": provider, }, + standard_params={"symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, }, extra_params=kwargs, ) @@ -79,3 +79,4 @@ def peers( "/stocks/ca/peers", **inputs, ) + diff --git a/openbb_platform/openbb/package/stocks_fa.py b/openbb_platform/openbb/package/stocks_fa.py index 14369dbed478..8921310f352f 100644 --- a/openbb_platform/openbb/package/stocks_fa.py +++ b/openbb_platform/openbb/package/stocks_fa.py @@ -1,269 +1,247 @@ ### THIS FILE IS AUTO-GENERATED. DO NOT EDIT. ### +from openbb_core.app.static.container import Container +from openbb_core.app.model.obbject import OBBject +from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +import openbb_provider +import pandas import datetime -from typing import List, Literal, Union - +import pydantic +from pydantic import BaseModel +from inspect import Parameter +import typing +from typing import List, Dict, Union, Optional, Literal +from annotated_types import Ge, Le, Gt, Lt import typing_extensions -from openbb_core.app.model.custom_parameter import OpenBBCustomParameter -from openbb_core.app.model.obbject import OBBject -from openbb_core.app.static.container import Container +from openbb_core.app.utils import df_to_basemodel from openbb_core.app.static.decorators import validate + from openbb_core.app.static.filters import filter_inputs -from openbb_provider.abstract.data import Data +from openbb_provider.abstract.data import Data +import openbb_core.app.model.command_context +import openbb_core.app.model.obbject +import types class ROUTER_stocks_fa(Container): """/stocks/fa - balance - balance_growth - cal - cash - cash_growth - comp - comsplit - divs - earning - emp - est - filings - income - income_growth - ins - ins_own - metrics - mgmt - overview - own - pt - pta - ratios - revgeo - revseg - shrs - split - transcript +balance +balance_growth +cash +cash_growth +comp +comsplit +divs +earning +emp +est +filings +income +income_growth +ins +ins_own +metrics +mgmt +overview +own +pt +pta +ratios +revgeo +revseg +shrs +split +transcript """ - def __repr__(self) -> str: return self.__doc__ or "" @validate - def balance( - self, - symbol: typing_extensions.Annotated[ - Union[str, List[str]], - OpenBBCustomParameter(description="Symbol to get data for."), - ], - period: typing_extensions.Annotated[ - Literal["annual", "quarter"], - OpenBBCustomParameter(description="Time period of the data to return."), - ] = "annual", - limit: typing_extensions.Annotated[ - int, - OpenBBCustomParameter(description="The number of data entries to return."), - ] = 12, - provider: Union[Literal["fmp", "intrinio", "polygon", "yfinance"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def balance(self, symbol: typing_extensions.Annotated[Union[str, List[str]], OpenBBCustomParameter(description='Symbol to get data for.')], period: typing_extensions.Annotated[Union[Literal['annual', 'quarter'], None], OpenBBCustomParameter(description='Time period of the data to return.')] = 'annual', limit: typing_extensions.Annotated[Union[typing_extensions.Annotated[int, Ge(ge=0)], None], OpenBBCustomParameter(description='The number of data entries to return.')] = 5, provider: Union[Literal['fmp', 'intrinio', 'polygon', 'yfinance'], None] = None, **kwargs) -> OBBject[List[Data]]: """Balance Sheet. Balance sheet statement. - Parameters - ---------- - symbol : str - Symbol to get data for. - period : Literal['annual', 'quarter'] - Time period of the data to return. - limit : int - The number of data entries to return. - provider : Union[Literal['fmp', 'intrinio', 'polygon', 'yfinance'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'fmp' if there is - no default. - cik : Optional[Union[str]] - Central Index Key (CIK) of the company. (provider: fmp) - type : Literal['reported', 'standardized'] - Type of the statement to be fetched. (provider: intrinio) - year : Optional[Union[int]] - Year of the statement to be fetched. (provider: intrinio) - company_name : Optional[Union[str]] - Name of the company. (provider: polygon) - company_name_search : Optional[Union[str]] - Name of the company to search. (provider: polygon) - sic : Optional[Union[str]] - The Standard Industrial Classification (SIC) of the company. (provider: polygon) - filing_date : Optional[Union[datetime.date]] - Filing date of the financial statement. (provider: polygon) - filing_date_lt : Optional[Union[datetime.date]] - Filing date less than the given date. (provider: polygon) - filing_date_lte : Optional[Union[datetime.date]] - Filing date less than or equal to the given date. (provider: polygon) - filing_date_gt : Optional[Union[datetime.date]] - Filing date greater than the given date. (provider: polygon) - filing_date_gte : Optional[Union[datetime.date]] - Filing date greater than or equal to the given date. (provider: polygon) - period_of_report_date : Optional[Union[datetime.date]] - Period of report date of the financial statement. (provider: polygon) - period_of_report_date_lt : Optional[Union[datetime.date]] - Period of report date less than the given date. (provider: polygon) - period_of_report_date_lte : Optional[Union[datetime.date]] - Period of report date less than or equal to the given date. (provider: polygon) - period_of_report_date_gt : Optional[Union[datetime.date]] - Period of report date greater than the given date. (provider: polygon) - period_of_report_date_gte : Optional[Union[datetime.date]] - Period of report date greater than or equal to the given date. (provider: polygon) - include_sources : Optional[Union[bool]] - Whether to include the sources of the financial statement. (provider: polygon) - order : Optional[Union[Literal['asc', 'desc']]] - Order of the financial statement. (provider: polygon) - sort : Optional[Union[Literal['filing_date', 'period_of_report_date']]] - Sort of the financial statement. (provider: polygon) - - Returns - ------- - OBBject - results : Union[List[BalanceSheet]] - Serializable results. - provider : Union[Literal['fmp', 'intrinio', 'polygon', 'yfinance'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - BalanceSheet - ------------ - symbol : Optional[Union[str]] - Symbol representing the entity requested in the data. - date : date - The date of the data. - cik : Optional[Union[str]] - Central Index Key (CIK) of the company. - currency : Optional[Union[str]] - Reporting currency. - filling_date : Optional[Union[date]] - Filling date. - accepted_date : Optional[Union[datetime]] - Accepted date. - period : Optional[Union[str]] - Reporting period of the statement. - cash_and_cash_equivalents : Optional[int] - Cash and cash equivalents - short_term_investments : Optional[int] - Short-term investments - long_term_investments : Optional[int] - Long-term investments - inventory : Optional[int] - Inventory - net_receivables : Optional[int] - Receivables, net - marketable_securities : Optional[int] - Marketable securities - property_plant_equipment_net : Optional[int] - Property, plant and equipment, net - goodwill : Optional[int] - Goodwill - assets : Optional[int] - Total assets - current_assets : Optional[int] - Total current assets - other_current_assets : Optional[int] - Other current assets - intangible_assets : Optional[int] - Intangible assets - tax_assets : Optional[int] - Accrued income taxes - other_assets : Optional[int] - Other assets - non_current_assets : Optional[int] - Total non-current assets - other_non_current_assets : Optional[int] - Other non-current assets - account_payables : Optional[int] - Accounts payable - tax_payables : Optional[int] - Accrued income taxes - deferred_revenue : Optional[int] - Accrued income taxes, other deferred revenue - total_assets : Optional[int] - Total assets - long_term_debt : Optional[int] - Long-term debt, Operating lease obligations, Long-term finance lease obligations - short_term_debt : Optional[int] - Short-term borrowings, Long-term debt due within one year, Operating lease obligations due within one year, Finance lease obligations due within one year - liabilities : Optional[int] - Total liabilities - other_current_liabilities : Optional[int] - Other current liabilities - current_liabilities : Optional[int] - Total current liabilities - total_liabilities_and_total_equity : Optional[int] - Total liabilities and total equity - other_liabilities : Optional[int] - Other liabilities - other_non_current_liabilities : Optional[int] - Other non-current liabilities - non_current_liabilities : Optional[int] - Total non-current liabilities - total_liabilities_and_stockholders_equity : Optional[int] - Total liabilities and stockholders' equity - other_stockholder_equity : Optional[int] - Other stockholders equity - total_stockholders_equity : Optional[int] - Total stockholders' equity - total_liabilities : Optional[int] - Total liabilities - common_stock : Optional[int] - Common stock - preferred_stock : Optional[int] - Preferred stock - accumulated_other_comprehensive_income_loss : Optional[int] - Accumulated other comprehensive income (loss) - retained_earnings : Optional[int] - Retained earnings - minority_interest : Optional[int] - Minority interest - total_equity : Optional[int] - Total equity - calendar_year : Optional[int] - Calendar Year (provider: fmp) - cash_and_short_term_investments : Optional[int] - Cash and Short Term Investments (provider: fmp) - goodwill_and_intangible_assets : Optional[int] - Goodwill and Intangible Assets (provider: fmp) - deferred_revenue_non_current : Optional[int] - Deferred Revenue Non Current (provider: fmp) - total_investments : Optional[int] - Total investments (provider: fmp) - capital_lease_obligations : Optional[int] - Capital lease obligations (provider: fmp) - deferred_tax_liabilities_non_current : Optional[int] - Deferred Tax Liabilities Non Current (provider: fmp) - total_debt : Optional[int] - Total Debt (provider: fmp) - net_debt : Optional[int] - Net Debt (provider: fmp) - link : Optional[Union[str]] - Link to the statement. (provider: fmp) - final_link : Optional[Union[str]] - Link to the final statement. (provider: fmp) - - Example - ------- - >>> from openbb import obb - >>> obb.stocks.fa.balance(symbol="AAPL", period="annual", limit=12) - """ # noqa: E501 +Parameters +---------- +symbol : str + Symbol to get data for. +period : Union[Literal['annual', 'quarter'], None] + Time period of the data to return. +limit : Union[typing_extensions.Annotated[int, Ge(ge=0)], None] + The number of data entries to return. +provider : Union[Literal['fmp', 'intrinio', 'polygon', 'yfinance'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fmp' if there is + no default. +cik : Optional[Union[str]] + Central Index Key (CIK) of the company. (provider: fmp) +filing_date : Optional[Union[datetime.date]] + Filing date of the financial statement. (provider: polygon) +filing_date_lt : Optional[Union[datetime.date]] + Filing date less than the given date. (provider: polygon) +filing_date_lte : Optional[Union[datetime.date]] + Filing date less than or equal to the given date. (provider: polygon) +filing_date_gt : Optional[Union[datetime.date]] + Filing date greater than the given date. (provider: polygon) +filing_date_gte : Optional[Union[datetime.date]] + Filing date greater than or equal to the given date. (provider: polygon) +period_of_report_date : Optional[Union[datetime.date]] + Period of report date of the financial statement. (provider: polygon) +period_of_report_date_lt : Optional[Union[datetime.date]] + Period of report date less than the given date. (provider: polygon) +period_of_report_date_lte : Optional[Union[datetime.date]] + Period of report date less than or equal to the given date. (provider: polygon) +period_of_report_date_gt : Optional[Union[datetime.date]] + Period of report date greater than the given date. (provider: polygon) +period_of_report_date_gte : Optional[Union[datetime.date]] + Period of report date greater than or equal to the given date. (provider: polygon) +include_sources : Optional[Union[bool]] + Whether to include the sources of the financial statement. (provider: polygon) +order : Optional[Union[Literal['asc', 'desc']]] + Order of the financial statement. (provider: polygon) +sort : Optional[Union[Literal['filing_date', 'period_of_report_date']]] + Sort of the financial statement. (provider: polygon) + +Returns +------- +OBBject + results : Union[List[BalanceSheet]] + Serializable results. + provider : Union[Literal['fmp', 'intrinio', 'polygon', 'yfinance'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +BalanceSheet +------------ +symbol : Optional[Union[str]] + Symbol representing the entity requested in the data. +date : date + The date of the data. +cik : Optional[Union[str]] + Central Index Key (CIK) of the company. +currency : Optional[Union[str]] + Reporting currency. +filling_date : Optional[Union[date]] + Filling date. +accepted_date : Optional[Union[datetime]] + Accepted date. +period : Optional[Union[str]] + Reporting period of the statement. +cash_and_cash_equivalents : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Cash and cash equivalents +short_term_investments : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Short-term investments +long_term_investments : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Long-term investments +inventory : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Inventory +net_receivables : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Receivables, net +marketable_securities : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Marketable securities +property_plant_equipment_net : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Property, plant and equipment, net +goodwill : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Goodwill +assets : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Total assets +current_assets : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Total current assets +other_current_assets : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Other current assets +intangible_assets : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Intangible assets +tax_assets : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Accrued income taxes +non_current_assets : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Total non-current assets +other_non_current_assets : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Other non-current assets +account_payables : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Accounts payable +tax_payables : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Accrued income taxes +deferred_revenue : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Accrued income taxes, other deferred revenue +other_assets : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Other assets +total_assets : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Total assets +long_term_debt : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Long-term debt, Operating lease obligations, Long-term finance lease obligations +short_term_debt : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Short-term borrowings, Long-term debt due within one year, Operating lease obligations due within one year, Finance lease obligations due within one year +liabilities : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Total liabilities +other_current_liabilities : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Other current liabilities +current_liabilities : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Total current liabilities +total_liabilities_and_total_equity : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Total liabilities and total equity +other_non_current_liabilities : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Other non-current liabilities +non_current_liabilities : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Total non-current liabilities +total_liabilities_and_stockholders_equity : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Total liabilities and stockholders' equity +other_stockholder_equity : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Other stockholders equity +total_stockholders_equity : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Total stockholders' equity +other_liabilities : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Other liabilities +total_liabilities : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Total liabilities +common_stock : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Common stock +preferred_stock : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Preferred stock +accumulated_other_comprehensive_income_loss : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Accumulated other comprehensive income (loss) +retained_earnings : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Retained earnings +minority_interest : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Minority interest +total_equity : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Total equity +calendar_year : Optional[int] + Calendar Year (provider: fmp) +cash_and_short_term_investments : Optional[int] + Cash and Short Term Investments (provider: fmp) +goodwill_and_intangible_assets : Optional[int] + Goodwill and Intangible Assets (provider: fmp) +deferred_revenue_non_current : Optional[int] + Deferred Revenue Non Current (provider: fmp) +total_investments : Optional[int] + Total investments (provider: fmp) +capital_lease_obligations : Optional[int] + Capital lease obligations (provider: fmp) +deferred_tax_liabilities_non_current : Optional[int] + Deferred Tax Liabilities Non Current (provider: fmp) +total_debt : Optional[int] + Total Debt (provider: fmp) +net_debt : Optional[int] + Net Debt (provider: fmp) +link : Optional[Union[str]] + Link to the statement. (provider: fmp) +final_link : Optional[Union[str]] + Link to the final statement. (provider: fmp) + +Example +------- +>>> from openbb import obb +>>> obb.stocks.fa.balance(symbol="AAPL", period="annual", limit=5) + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, - "period": period, - "limit": limit, - }, + provider_choices={"provider": provider, }, + standard_params={"symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, "period": period, "limit": limit, }, extra_params=kwargs, ) @@ -272,148 +250,133 @@ def balance( **inputs, ) + @validate - def balance_growth( - self, - symbol: typing_extensions.Annotated[ - Union[str, List[str]], - OpenBBCustomParameter(description="Symbol to get data for."), - ], - limit: typing_extensions.Annotated[ - int, - OpenBBCustomParameter(description="The number of data entries to return."), - ] = 10, - provider: Union[Literal["fmp"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def balance_growth(self, symbol: typing_extensions.Annotated[Union[str, List[str]], OpenBBCustomParameter(description='Symbol to get data for.')], limit: typing_extensions.Annotated[int, OpenBBCustomParameter(description='The number of data entries to return.')] = 10, provider: Union[Literal['fmp'], None] = None, **kwargs) -> OBBject[List[Data]]: """Balance Sheet Statement Growth. Information about the growth of the company balance sheet. - Parameters - ---------- - symbol : str - Symbol to get data for. - limit : int - The number of data entries to return. - provider : Union[Literal['fmp'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'fmp' if there is - no default. - - Returns - ------- - OBBject - results : Union[List[BalanceSheetGrowth]] - Serializable results. - provider : Union[Literal['fmp'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - BalanceSheetGrowth - ------------------ - symbol : Optional[Union[str]] - Symbol representing the entity requested in the data. - date : date - The date of the data. - period : str - Reporting period. - growth_cash_and_cash_equivalents : float - Growth rate of cash and cash equivalents. - growth_short_term_investments : float - Growth rate of short-term investments. - growth_cash_and_short_term_investments : float - Growth rate of cash and short-term investments. - growth_net_receivables : float - Growth rate of net receivables. - growth_inventory : float - Growth rate of inventory. - growth_other_current_assets : float - Growth rate of other current assets. - growth_total_current_assets : float - Growth rate of total current assets. - growth_property_plant_equipment_net : float - Growth rate of net property, plant, and equipment. - growth_goodwill : float - Growth rate of goodwill. - growth_intangible_assets : float - Growth rate of intangible assets. - growth_goodwill_and_intangible_assets : float - Growth rate of goodwill and intangible assets. - growth_long_term_investments : float - Growth rate of long-term investments. - growth_tax_assets : float - Growth rate of tax assets. - growth_other_non_current_assets : float - Growth rate of other non-current assets. - growth_total_non_current_assets : float - Growth rate of total non-current assets. - growth_other_assets : float - Growth rate of other assets. - growth_total_assets : float - Growth rate of total assets. - growth_account_payables : float - Growth rate of accounts payable. - growth_short_term_debt : float - Growth rate of short-term debt. - growth_tax_payables : float - Growth rate of tax payables. - growth_deferred_revenue : float - Growth rate of deferred revenue. - growth_other_current_liabilities : float - Growth rate of other current liabilities. - growth_total_current_liabilities : float - Growth rate of total current liabilities. - growth_long_term_debt : float - Growth rate of long-term debt. - growth_deferred_revenue_non_current : float - Growth rate of non-current deferred revenue. - growth_deferrred_tax_liabilities_non_current : float - Growth rate of non-current deferred tax liabilities. - growth_other_non_current_liabilities : float - Growth rate of other non-current liabilities. - growth_total_non_current_liabilities : float - Growth rate of total non-current liabilities. - growth_other_liabilities : float - Growth rate of other liabilities. - growth_total_liabilities : float - Growth rate of total liabilities. - growth_common_stock : float - Growth rate of common stock. - growth_retained_earnings : float - Growth rate of retained earnings. - growth_accumulated_other_comprehensive_income_loss : float - Growth rate of accumulated other comprehensive income/loss. - growth_othertotal_stockholders_equity : float - Growth rate of other total stockholders' equity. - growth_total_stockholders_equity : float - Growth rate of total stockholders' equity. - growth_total_liabilities_and_stockholders_equity : float - Growth rate of total liabilities and stockholders' equity. - growth_total_investments : float - Growth rate of total investments. - growth_total_debt : float - Growth rate of total debt. - growth_net_debt : float - Growth rate of net debt. - - Example - ------- - >>> from openbb import obb - >>> obb.stocks.fa.balance_growth(symbol="AAPL", limit=10) - """ # noqa: E501 +Parameters +---------- +symbol : str + Symbol to get data for. +limit : int + The number of data entries to return. +provider : Union[Literal['fmp'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fmp' if there is + no default. + +Returns +------- +OBBject + results : Union[List[BalanceSheetGrowth]] + Serializable results. + provider : Union[Literal['fmp'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +BalanceSheetGrowth +------------------ +symbol : Optional[Union[str]] + Symbol representing the entity requested in the data. +date : date + The date of the data. +period : str + Reporting period. +growth_cash_and_cash_equivalents : float + Growth rate of cash and cash equivalents. +growth_short_term_investments : float + Growth rate of short-term investments. +growth_cash_and_short_term_investments : float + Growth rate of cash and short-term investments. +growth_net_receivables : float + Growth rate of net receivables. +growth_inventory : float + Growth rate of inventory. +growth_other_current_assets : float + Growth rate of other current assets. +growth_total_current_assets : float + Growth rate of total current assets. +growth_property_plant_equipment_net : float + Growth rate of net property, plant, and equipment. +growth_goodwill : float + Growth rate of goodwill. +growth_intangible_assets : float + Growth rate of intangible assets. +growth_goodwill_and_intangible_assets : float + Growth rate of goodwill and intangible assets. +growth_long_term_investments : float + Growth rate of long-term investments. +growth_tax_assets : float + Growth rate of tax assets. +growth_other_non_current_assets : float + Growth rate of other non-current assets. +growth_total_non_current_assets : float + Growth rate of total non-current assets. +growth_other_assets : float + Growth rate of other assets. +growth_total_assets : float + Growth rate of total assets. +growth_account_payables : float + Growth rate of accounts payable. +growth_short_term_debt : float + Growth rate of short-term debt. +growth_tax_payables : float + Growth rate of tax payables. +growth_deferred_revenue : float + Growth rate of deferred revenue. +growth_other_current_liabilities : float + Growth rate of other current liabilities. +growth_total_current_liabilities : float + Growth rate of total current liabilities. +growth_long_term_debt : float + Growth rate of long-term debt. +growth_deferred_revenue_non_current : float + Growth rate of non-current deferred revenue. +growth_deferrred_tax_liabilities_non_current : float + Growth rate of non-current deferred tax liabilities. +growth_other_non_current_liabilities : float + Growth rate of other non-current liabilities. +growth_total_non_current_liabilities : float + Growth rate of total non-current liabilities. +growth_other_liabilities : float + Growth rate of other liabilities. +growth_total_liabilities : float + Growth rate of total liabilities. +growth_common_stock : float + Growth rate of common stock. +growth_retained_earnings : float + Growth rate of retained earnings. +growth_accumulated_other_comprehensive_income_loss : float + Growth rate of accumulated other comprehensive income/loss. +growth_othertotal_stockholders_equity : float + Growth rate of other total stockholders' equity. +growth_total_stockholders_equity : float + Growth rate of total stockholders' equity. +growth_total_liabilities_and_stockholders_equity : float + Growth rate of total liabilities and stockholders' equity. +growth_total_investments : float + Growth rate of total investments. +growth_total_debt : float + Growth rate of total debt. +growth_net_debt : float + Growth rate of net debt. + +Example +------- +>>> from openbb import obb +>>> obb.stocks.fa.balance_growth(symbol="AAPL", limit=10) + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, - "limit": limit, - }, + provider_choices={"provider": provider, }, + standard_params={"symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, "limit": limit, }, extra_params=kwargs, ) @@ -422,289 +385,173 @@ def balance_growth( **inputs, ) - @validate - def cal( - self, - start_date: typing_extensions.Annotated[ - Union[datetime.date, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), - ], - end_date: typing_extensions.Annotated[ - Union[datetime.date, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), - ], - provider: Union[Literal["fmp"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: - """Dividend Calendar. Show Dividend Calendar for a given start and end dates. - - Parameters - ---------- - start_date : date - Start date of the data, in YYYY-MM-DD format. - end_date : date - End date of the data, in YYYY-MM-DD format. - provider : Union[Literal['fmp'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'fmp' if there is - no default. - - Returns - ------- - OBBject - results : Union[List[DividendCalendar]] - Serializable results. - provider : Union[Literal['fmp'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - DividendCalendar - ---------------- - symbol : str - Symbol representing the entity requested in the data. - date : date - The date of the data. - label : str - Date in human readable form in the calendar. - adj_dividend : Optional[Union[float]] - Adjusted dividend on a date in the calendar. - dividend : Optional[Union[float]] - Dividend amount in the calendar. - record_date : Optional[Union[date]] - Record date of the dividend in the calendar. - payment_date : Optional[Union[date]] - Payment date of the dividend in the calendar. - declaration_date : Optional[Union[date]] - Declaration date of the dividend in the calendar. - - Example - ------- - >>> from openbb import obb - >>> obb.stocks.fa.cal(start_date="2023-01-01", end_date="2023-06-06") - """ # noqa: E501 - - inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "start_date": start_date, - "end_date": end_date, - }, - extra_params=kwargs, - ) - - return self._run( - "/stocks/fa/cal", - **inputs, - ) @validate - def cash( - self, - symbol: typing_extensions.Annotated[ - Union[str, List[str]], - OpenBBCustomParameter(description="Symbol to get data for."), - ], - period: typing_extensions.Annotated[ - Literal["annual", "quarter"], - OpenBBCustomParameter(description="Time period of the data to return."), - ] = "annual", - limit: typing_extensions.Annotated[ - int, - OpenBBCustomParameter(description="The number of data entries to return."), - ] = 12, - provider: Union[Literal["fmp", "intrinio", "polygon", "yfinance"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def cash(self, symbol: typing_extensions.Annotated[Union[str, List[str]], OpenBBCustomParameter(description='Symbol to get data for.')], period: typing_extensions.Annotated[Union[Literal['annual', 'quarter'], None], OpenBBCustomParameter(description='Time period of the data to return.')] = 'annual', limit: typing_extensions.Annotated[Union[typing_extensions.Annotated[int, Ge(ge=0)], None], OpenBBCustomParameter(description='The number of data entries to return.')] = 5, provider: Union[Literal['fmp', 'intrinio', 'polygon', 'yfinance'], None] = None, **kwargs) -> OBBject[List[Data]]: """Cash Flow Statement. Information about the cash flow statement. - Parameters - ---------- - symbol : str - Symbol to get data for. - period : Literal['annual', 'quarter'] - Time period of the data to return. - limit : int - The number of data entries to return. - provider : Union[Literal['fmp', 'intrinio', 'polygon', 'yfinance'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'fmp' if there is - no default. - cik : Optional[Union[str]] - Central Index Key (CIK) of the company. (provider: fmp) - type : Literal['reported', 'standardized'] - Type of the statement to be fetched. (provider: intrinio) - year : Optional[Union[int]] - Year of the statement to be fetched. (provider: intrinio) - company_name : Optional[Union[str]] - Name of the company. (provider: polygon) - company_name_search : Optional[Union[str]] - Name of the company to search. (provider: polygon) - sic : Optional[Union[str]] - The Standard Industrial Classification (SIC) of the company. (provider: polygon) - filing_date : Optional[Union[datetime.date]] - Filing date of the financial statement. (provider: polygon) - filing_date_lt : Optional[Union[datetime.date]] - Filing date less than the given date. (provider: polygon) - filing_date_lte : Optional[Union[datetime.date]] - Filing date less than or equal to the given date. (provider: polygon) - filing_date_gt : Optional[Union[datetime.date]] - Filing date greater than the given date. (provider: polygon) - filing_date_gte : Optional[Union[datetime.date]] - Filing date greater than or equal to the given date. (provider: polygon) - period_of_report_date : Optional[Union[datetime.date]] - Period of report date of the financial statement. (provider: polygon) - period_of_report_date_lt : Optional[Union[datetime.date]] - Period of report date less than the given date. (provider: polygon) - period_of_report_date_lte : Optional[Union[datetime.date]] - Period of report date less than or equal to the given date. (provider: polygon) - period_of_report_date_gt : Optional[Union[datetime.date]] - Period of report date greater than the given date. (provider: polygon) - period_of_report_date_gte : Optional[Union[datetime.date]] - Period of report date greater than or equal to the given date. (provider: polygon) - include_sources : Optional[Union[bool]] - Whether to include the sources of the financial statement. (provider: polygon) - order : Optional[Union[Literal['asc', 'desc']]] - Order of the financial statement. (provider: polygon) - sort : Optional[Union[Literal['filing_date', 'period_of_report_date']]] - Sort of the financial statement. (provider: polygon) - - Returns - ------- - OBBject - results : Union[List[CashFlowStatement]] - Serializable results. - provider : Union[Literal['fmp', 'intrinio', 'polygon', 'yfinance'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - CashFlowStatement - ----------------- - symbol : Optional[Union[str]] - Symbol representing the entity requested in the data. - date : date - The date of the data. - period : Optional[Union[str]] - Reporting period of the statement. - cik : Optional[Union[str]] - Central Index Key (CIK) of the company. - net_income : Optional[int] - Net income. - depreciation_and_amortization : Optional[int] - Depreciation and amortization. - stock_based_compensation : Optional[int] - Stock based compensation. - deferred_income_tax : Optional[int] - Deferred income tax. - other_non_cash_items : Optional[int] - Other non-cash items. - changes_in_operating_assets_and_liabilities : Optional[int] - Changes in operating assets and liabilities. - accounts_receivables : Optional[int] - Accounts receivables. - inventory : Optional[int] - Inventory. - vendor_non_trade_receivables : Optional[int] - Vendor non-trade receivables. - other_current_and_non_current_assets : Optional[int] - Other current and non-current assets. - accounts_payables : Optional[int] - Accounts payables. - deferred_revenue : Optional[int] - Deferred revenue. - other_current_and_non_current_liabilities : Optional[int] - Other current and non-current liabilities. - net_cash_flow_from_operating_activities : Optional[int] - Net cash flow from operating activities. - purchases_of_marketable_securities : Optional[int] - Purchases of investments. - sales_from_maturities_of_investments : Optional[int] - Sales and maturities of investments. - investments_in_property_plant_and_equipment : Optional[int] - Investments in property, plant, and equipment. - payments_from_acquisitions : Optional[int] - Acquisitions, net of cash acquired, and other - other_investing_activities : Optional[int] - Other investing activities - net_cash_flow_from_investing_activities : Optional[int] - Net cash used for investing activities. - taxes_paid_on_net_share_settlement : Optional[int] - Taxes paid on net share settlement of equity awards. - dividends_paid : Optional[int] - Payments for dividends and dividend equivalents - common_stock_repurchased : Optional[int] - Payments related to repurchase of common stock - debt_proceeds : Optional[int] - Proceeds from issuance of term debt - debt_repayment : Optional[int] - Payments of long-term debt - other_financing_activities : Optional[int] - Other financing activities, net - net_cash_flow_from_financing_activities : Optional[int] - Net cash flow from financing activities. - net_change_in_cash : Optional[int] - Net increase (decrease) in cash, cash equivalents, and restricted cash - reported_currency : Optional[Union[str]] - Reported currency in the statement. (provider: fmp) - filling_date : Optional[Union[date]] - Filling date. (provider: fmp) - accepted_date : Optional[Union[datetime]] - Accepted date. (provider: fmp) - calendar_year : Optional[int] - Calendar year. (provider: fmp) - change_in_working_capital : Optional[int] - Change in working capital. (provider: fmp) - other_working_capital : Optional[int] - Other working capital. (provider: fmp) - common_stock_issued : Optional[int] - Common stock issued. (provider: fmp) - effect_of_forex_changes_on_cash : Optional[int] - Effect of forex changes on cash. (provider: fmp) - cash_at_beginning_of_period : Optional[int] - Cash at beginning of period. (provider: fmp) - cash_at_end_of_period : Optional[int] - Cash, cash equivalents, and restricted cash at end of period (provider: fmp) - operating_cash_flow : Optional[int] - Operating cash flow. (provider: fmp) - capital_expenditure : Optional[int] - Capital expenditure. (provider: fmp) - free_cash_flow : Optional[int] - Free cash flow. (provider: fmp) - link : Optional[Union[str]] - Link to the statement. (provider: fmp) - final_link : Optional[Union[str]] - Link to the final statement. (provider: fmp) - - Example - ------- - >>> from openbb import obb - >>> obb.stocks.fa.cash(symbol="AAPL", period="annual", limit=12) - """ # noqa: E501 +Parameters +---------- +symbol : str + Symbol to get data for. +period : Union[Literal['annual', 'quarter'], None] + Time period of the data to return. +limit : Union[typing_extensions.Annotated[int, Ge(ge=0)], None] + The number of data entries to return. +provider : Union[Literal['fmp', 'intrinio', 'polygon', 'yfinance'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fmp' if there is + no default. +cik : Optional[Union[str]] + Central Index Key (CIK) of the company. (provider: fmp) +filing_date : Optional[Union[datetime.date]] + Filing date of the financial statement. (provider: polygon) +filing_date_lt : Optional[Union[datetime.date]] + Filing date less than the given date. (provider: polygon) +filing_date_lte : Optional[Union[datetime.date]] + Filing date less than or equal to the given date. (provider: polygon) +filing_date_gt : Optional[Union[datetime.date]] + Filing date greater than the given date. (provider: polygon) +filing_date_gte : Optional[Union[datetime.date]] + Filing date greater than or equal to the given date. (provider: polygon) +period_of_report_date : Optional[Union[datetime.date]] + Period of report date of the financial statement. (provider: polygon) +period_of_report_date_lt : Optional[Union[datetime.date]] + Period of report date less than the given date. (provider: polygon) +period_of_report_date_lte : Optional[Union[datetime.date]] + Period of report date less than or equal to the given date. (provider: polygon) +period_of_report_date_gt : Optional[Union[datetime.date]] + Period of report date greater than the given date. (provider: polygon) +period_of_report_date_gte : Optional[Union[datetime.date]] + Period of report date greater than or equal to the given date. (provider: polygon) +include_sources : Optional[Union[bool]] + Whether to include the sources of the financial statement. (provider: polygon) +order : Optional[Union[Literal['asc', 'desc']]] + Order of the financial statement. (provider: polygon) +sort : Optional[Union[Literal['filing_date', 'period_of_report_date']]] + Sort of the financial statement. (provider: polygon) + +Returns +------- +OBBject + results : Union[List[CashFlowStatement]] + Serializable results. + provider : Union[Literal['fmp', 'intrinio', 'polygon', 'yfinance'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +CashFlowStatement +----------------- +symbol : Optional[Union[str]] + Symbol representing the entity requested in the data. +date : date + The date of the data. +period : Optional[Union[str]] + Reporting period of the statement. +cik : Optional[Union[str]] + Central Index Key (CIK) of the company. +net_income : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Net income. +depreciation_and_amortization : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Depreciation and amortization. +stock_based_compensation : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Stock based compensation. +deferred_income_tax : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Deferred income tax. +other_non_cash_items : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Other non-cash items. +changes_in_operating_assets_and_liabilities : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Changes in operating assets and liabilities. +accounts_receivables : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Accounts receivables. +inventory : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Inventory. +vendor_non_trade_receivables : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Vendor non-trade receivables. +other_current_and_non_current_assets : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Other current and non-current assets. +accounts_payables : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Accounts payables. +deferred_revenue : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Deferred revenue. +other_current_and_non_current_liabilities : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Other current and non-current liabilities. +net_cash_flow_from_operating_activities : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Net cash flow from operating activities. +purchases_of_marketable_securities : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Purchases of investments. +sales_from_maturities_of_investments : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Sales and maturities of investments. +investments_in_property_plant_and_equipment : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Investments in property, plant, and equipment. +payments_from_acquisitions : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Acquisitions, net of cash acquired, and other +other_investing_activities : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Other investing activities +net_cash_flow_from_investing_activities : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Net cash used for investing activities. +taxes_paid_on_net_share_settlement : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Taxes paid on net share settlement of equity awards. +dividends_paid : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Payments for dividends and dividend equivalents +common_stock_repurchased : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Payments related to repurchase of common stock +debt_proceeds : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Proceeds from issuance of term debt +debt_repayment : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Payments of long-term debt +other_financing_activities : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Other financing activities, net +net_cash_flow_from_financing_activities : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Net cash flow from financing activities. +net_change_in_cash : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Net increase (decrease) in cash, cash equivalents, and restricted cash +reported_currency : Optional[Union[str]] + Reported currency in the statement. (provider: fmp) +filling_date : Optional[Union[date]] + Filling date. (provider: fmp) +accepted_date : Optional[Union[datetime]] + Accepted date. (provider: fmp) +calendar_year : Optional[int] + Calendar year. (provider: fmp) +change_in_working_capital : Optional[int] + Change in working capital. (provider: fmp) +other_working_capital : Optional[int] + Other working capital. (provider: fmp) +common_stock_issued : Optional[int] + Common stock issued. (provider: fmp) +effect_of_forex_changes_on_cash : Optional[int] + Effect of forex changes on cash. (provider: fmp) +cash_at_beginning_of_period : Optional[int] + Cash at beginning of period. (provider: fmp) +cash_at_end_of_period : Optional[int] + Cash, cash equivalents, and restricted cash at end of period (provider: fmp) +operating_cash_flow : Optional[int] + Operating cash flow. (provider: fmp) +capital_expenditure : Optional[int] + Capital expenditure. (provider: fmp) +free_cash_flow : Optional[int] + Free cash flow. (provider: fmp) +link : Optional[Union[str]] + Link to the statement. (provider: fmp) +final_link : Optional[Union[str]] + Link to the final statement. (provider: fmp) + +Example +------- +>>> from openbb import obb +>>> obb.stocks.fa.cash(symbol="AAPL", period="annual", limit=5) + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, - "period": period, - "limit": limit, - }, + provider_choices={"provider": provider, }, + standard_params={"symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, "period": period, "limit": limit, }, extra_params=kwargs, ) @@ -713,130 +560,115 @@ def cash( **inputs, ) + @validate - def cash_growth( - self, - symbol: typing_extensions.Annotated[ - Union[str, List[str]], - OpenBBCustomParameter(description="Symbol to get data for."), - ], - limit: typing_extensions.Annotated[ - int, - OpenBBCustomParameter(description="The number of data entries to return."), - ] = 10, - provider: Union[Literal["fmp"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def cash_growth(self, symbol: typing_extensions.Annotated[Union[str, List[str]], OpenBBCustomParameter(description='Symbol to get data for.')], limit: typing_extensions.Annotated[int, OpenBBCustomParameter(description='The number of data entries to return.')] = 10, provider: Union[Literal['fmp'], None] = None, **kwargs) -> OBBject[List[Data]]: """Cash Flow Statement Growth. Information about the growth of the company cash flow statement. - Parameters - ---------- - symbol : str - Symbol to get data for. - limit : int - The number of data entries to return. - provider : Union[Literal['fmp'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'fmp' if there is - no default. - - Returns - ------- - OBBject - results : Union[List[CashFlowStatementGrowth]] - Serializable results. - provider : Union[Literal['fmp'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - CashFlowStatementGrowth - ----------------------- - symbol : Optional[Union[str]] - Symbol representing the entity requested in the data. - date : date - The date of the data. - period : str - Period the statement is returned for. - growth_net_income : float - Growth rate of net income. - growth_depreciation_and_amortization : float - Growth rate of depreciation and amortization. - growth_deferred_income_tax : float - Growth rate of deferred income tax. - growth_stock_based_compensation : float - Growth rate of stock-based compensation. - growth_change_in_working_capital : float - Growth rate of change in working capital. - growth_accounts_receivables : float - Growth rate of accounts receivables. - growth_inventory : float - Growth rate of inventory. - growth_accounts_payables : float - Growth rate of accounts payables. - growth_other_working_capital : float - Growth rate of other working capital. - growth_other_non_cash_items : float - Growth rate of other non-cash items. - growth_net_cash_provided_by_operating_activities : float - Growth rate of net cash provided by operating activities. - growth_investments_in_property_plant_and_equipment : float - Growth rate of investments in property, plant, and equipment. - growth_acquisitions_net : float - Growth rate of net acquisitions. - growth_purchases_of_investments : float - Growth rate of purchases of investments. - growth_sales_maturities_of_investments : float - Growth rate of sales maturities of investments. - growth_other_investing_activities : float - Growth rate of other investing activities. - growth_net_cash_used_for_investing_activities : float - Growth rate of net cash used for investing activities. - growth_debt_repayment : float - Growth rate of debt repayment. - growth_common_stock_issued : float - Growth rate of common stock issued. - growth_common_stock_repurchased : float - Growth rate of common stock repurchased. - growth_dividends_paid : float - Growth rate of dividends paid. - growth_other_financing_activities : float - Growth rate of other financing activities. - growth_net_cash_used_provided_by_financing_activities : float - Growth rate of net cash used/provided by financing activities. - growth_effect_of_forex_changes_on_cash : float - Growth rate of the effect of foreign exchange changes on cash. - growth_net_change_in_cash : float - Growth rate of net change in cash. - growth_cash_at_end_of_period : float - Growth rate of cash at the end of the period. - growth_cash_at_beginning_of_period : float - Growth rate of cash at the beginning of the period. - growth_operating_cash_flow : float - Growth rate of operating cash flow. - growth_capital_expenditure : float - Growth rate of capital expenditure. - growth_free_cash_flow : float - Growth rate of free cash flow. - - Example - ------- - >>> from openbb import obb - >>> obb.stocks.fa.cash_growth(symbol="AAPL", limit=10) - """ # noqa: E501 +Parameters +---------- +symbol : str + Symbol to get data for. +limit : int + The number of data entries to return. +provider : Union[Literal['fmp'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fmp' if there is + no default. + +Returns +------- +OBBject + results : Union[List[CashFlowStatementGrowth]] + Serializable results. + provider : Union[Literal['fmp'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +CashFlowStatementGrowth +----------------------- +symbol : Optional[Union[str]] + Symbol representing the entity requested in the data. +date : date + The date of the data. +period : str + Period the statement is returned for. +growth_net_income : float + Growth rate of net income. +growth_depreciation_and_amortization : float + Growth rate of depreciation and amortization. +growth_deferred_income_tax : float + Growth rate of deferred income tax. +growth_stock_based_compensation : float + Growth rate of stock-based compensation. +growth_change_in_working_capital : float + Growth rate of change in working capital. +growth_accounts_receivables : float + Growth rate of accounts receivables. +growth_inventory : float + Growth rate of inventory. +growth_accounts_payables : float + Growth rate of accounts payables. +growth_other_working_capital : float + Growth rate of other working capital. +growth_other_non_cash_items : float + Growth rate of other non-cash items. +growth_net_cash_provided_by_operating_activities : float + Growth rate of net cash provided by operating activities. +growth_investments_in_property_plant_and_equipment : float + Growth rate of investments in property, plant, and equipment. +growth_acquisitions_net : float + Growth rate of net acquisitions. +growth_purchases_of_investments : float + Growth rate of purchases of investments. +growth_sales_maturities_of_investments : float + Growth rate of sales maturities of investments. +growth_other_investing_activities : float + Growth rate of other investing activities. +growth_net_cash_used_for_investing_activities : float + Growth rate of net cash used for investing activities. +growth_debt_repayment : float + Growth rate of debt repayment. +growth_common_stock_issued : float + Growth rate of common stock issued. +growth_common_stock_repurchased : float + Growth rate of common stock repurchased. +growth_dividends_paid : float + Growth rate of dividends paid. +growth_other_financing_activities : float + Growth rate of other financing activities. +growth_net_cash_used_provided_by_financing_activities : float + Growth rate of net cash used/provided by financing activities. +growth_effect_of_forex_changes_on_cash : float + Growth rate of the effect of foreign exchange changes on cash. +growth_net_change_in_cash : float + Growth rate of net change in cash. +growth_cash_at_end_of_period : float + Growth rate of cash at the end of the period. +growth_cash_at_beginning_of_period : float + Growth rate of cash at the beginning of the period. +growth_operating_cash_flow : float + Growth rate of operating cash flow. +growth_capital_expenditure : float + Growth rate of capital expenditure. +growth_free_cash_flow : float + Growth rate of free cash flow. + +Example +------- +>>> from openbb import obb +>>> obb.stocks.fa.cash_growth(symbol="AAPL", limit=10) + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, - "limit": limit, - }, + provider_choices={"provider": provider, }, + standard_params={"symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, "limit": limit, }, extra_params=kwargs, ) @@ -845,83 +677,73 @@ def cash_growth( **inputs, ) + @validate - def comp( - self, - symbol: typing_extensions.Annotated[ - Union[str, List[str]], - OpenBBCustomParameter(description="Symbol to get data for."), - ], - provider: Union[Literal["fmp"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def comp(self, symbol: typing_extensions.Annotated[Union[str, List[str]], OpenBBCustomParameter(description='Symbol to get data for.')], provider: Union[Literal['fmp'], None] = None, **kwargs) -> OBBject[List[Data]]: """Executive Compensation. Information about the executive compensation for a given company. - Parameters - ---------- - symbol : str - Symbol to get data for. - provider : Union[Literal['fmp'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'fmp' if there is - no default. - - Returns - ------- - OBBject - results : Union[List[ExecutiveCompensation]] - Serializable results. - provider : Union[Literal['fmp'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - ExecutiveCompensation - --------------------- - symbol : str - Symbol representing the entity requested in the data. - cik : Optional[Union[str]] - Central Index Key (CIK) of the company. - filing_date : date - Date of the filing. - accepted_date : datetime - Date the filing was accepted. - name_and_position : str - Name and position of the executive. - year : int - Year of the compensation. - salary : float - Salary of the executive. - bonus : float - Bonus of the executive. - stock_award : float - Stock award of the executive. - incentive_plan_compensation : float - Incentive plan compensation of the executive. - all_other_compensation : float - All other compensation of the executive. - total : float - Total compensation of the executive. - url : str - URL of the filing data. - - Example - ------- - >>> from openbb import obb - >>> obb.stocks.fa.comp(symbol="AAPL") - """ # noqa: E501 +Parameters +---------- +symbol : str + Symbol to get data for. +provider : Union[Literal['fmp'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fmp' if there is + no default. + +Returns +------- +OBBject + results : Union[List[ExecutiveCompensation]] + Serializable results. + provider : Union[Literal['fmp'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +ExecutiveCompensation +--------------------- +symbol : str + Symbol representing the entity requested in the data. +cik : Optional[Union[str]] + Central Index Key (CIK) of the company. +filing_date : date + Date of the filing. +accepted_date : datetime + Date the filing was accepted. +name_and_position : str + Name and position of the executive. +year : int + Year of the compensation. +salary : float + Salary of the executive. +bonus : float + Bonus of the executive. +stock_award : float + Stock award of the executive. +incentive_plan_compensation : float + Incentive plan compensation of the executive. +all_other_compensation : float + All other compensation of the executive. +total : float + Total compensation of the executive. +url : str + URL of the filing data. + +Example +------- +>>> from openbb import obb +>>> obb.stocks.fa.comp(symbol="AAPL") + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, - }, + provider_choices={"provider": provider, }, + standard_params={"symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, }, extra_params=kwargs, ) @@ -930,78 +752,59 @@ def comp( **inputs, ) + @validate - def comsplit( - self, - start_date: typing_extensions.Annotated[ - Union[datetime.date, None, str], - OpenBBCustomParameter( - description="Start date of the data, in YYYY-MM-DD format." - ), - ] = None, - end_date: typing_extensions.Annotated[ - Union[datetime.date, None, str], - OpenBBCustomParameter( - description="End date of the data, in YYYY-MM-DD format." - ), - ] = None, - provider: Union[Literal["fmp"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def comsplit(self, start_date: typing_extensions.Annotated[Union[datetime.date, None, str], OpenBBCustomParameter(description='Start date of the data, in YYYY-MM-DD format.')] = None, end_date: typing_extensions.Annotated[Union[datetime.date, None, str], OpenBBCustomParameter(description='End date of the data, in YYYY-MM-DD format.')] = None, provider: Union[Literal['fmp'], None] = None, **kwargs) -> OBBject[List[Data]]: """Stock Split Calendar. Show Stock Split Calendar. - Parameters - ---------- - start_date : Union[datetime.date, None] - Start date of the data, in YYYY-MM-DD format. - end_date : Union[datetime.date, None] - End date of the data, in YYYY-MM-DD format. - provider : Union[Literal['fmp'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'fmp' if there is - no default. - - Returns - ------- - OBBject - results : Union[List[StockSplitCalendar]] - Serializable results. - provider : Union[Literal['fmp'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - StockSplitCalendar - ------------------ - date : date - The date of the data. - label : str - Label of the stock splits. - symbol : str - Symbol representing the entity requested in the data. - numerator : float - Numerator of the stock splits. - denominator : float - Denominator of the stock splits. - - Example - ------- - >>> from openbb import obb - >>> obb.stocks.fa.comsplit() - """ # noqa: E501 +Parameters +---------- +start_date : Union[datetime.date, None] + Start date of the data, in YYYY-MM-DD format. +end_date : Union[datetime.date, None] + End date of the data, in YYYY-MM-DD format. +provider : Union[Literal['fmp'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fmp' if there is + no default. + +Returns +------- +OBBject + results : Union[List[StockSplitCalendar]] + Serializable results. + provider : Union[Literal['fmp'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +StockSplitCalendar +------------------ +date : date + The date of the data. +label : str + Label of the stock splits. +symbol : str + Symbol representing the entity requested in the data. +numerator : float + Numerator of the stock splits. +denominator : float + Denominator of the stock splits. + +Example +------- +>>> from openbb import obb +>>> obb.stocks.fa.comsplit() + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "start_date": start_date, - "end_date": end_date, - }, + provider_choices={"provider": provider, }, + standard_params={"start_date": start_date, "end_date": end_date, }, extra_params=kwargs, ) @@ -1010,71 +813,61 @@ def comsplit( **inputs, ) + @validate - def divs( - self, - symbol: typing_extensions.Annotated[ - Union[str, List[str]], - OpenBBCustomParameter(description="Symbol to get data for."), - ], - provider: Union[Literal["fmp"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def divs(self, symbol: typing_extensions.Annotated[Union[str, List[str]], OpenBBCustomParameter(description='Symbol to get data for.')], provider: Union[Literal['fmp'], None] = None, **kwargs) -> OBBject[List[Data]]: """Historical Dividends. Historical dividends data for a given company. - Parameters - ---------- - symbol : str - Symbol to get data for. - provider : Union[Literal['fmp'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'fmp' if there is - no default. - - Returns - ------- - OBBject - results : Union[List[HistoricalDividends]] - Serializable results. - provider : Union[Literal['fmp'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - HistoricalDividends - ------------------- - date : date - The date of the data. - label : str - Label of the historical dividends. - adj_dividend : float - Adjusted dividend of the historical dividends. - dividend : float - Dividend of the historical dividends. - record_date : Optional[Union[date]] - Record date of the historical dividends. - payment_date : Optional[Union[date]] - Payment date of the historical dividends. - declaration_date : Optional[Union[date]] - Declaration date of the historical dividends. - - Example - ------- - >>> from openbb import obb - >>> obb.stocks.fa.divs(symbol="AAPL") - """ # noqa: E501 +Parameters +---------- +symbol : str + Symbol to get data for. +provider : Union[Literal['fmp'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fmp' if there is + no default. + +Returns +------- +OBBject + results : Union[List[HistoricalDividends]] + Serializable results. + provider : Union[Literal['fmp'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +HistoricalDividends +------------------- +date : date + The date of the data. +label : str + Label of the historical dividends. +adj_dividend : float + Adjusted dividend of the historical dividends. +dividend : float + Dividend of the historical dividends. +record_date : Optional[Union[date]] + Record date of the historical dividends. +payment_date : Optional[Union[date]] + Payment date of the historical dividends. +declaration_date : Optional[Union[date]] + Declaration date of the historical dividends. + +Example +------- +>>> from openbb import obb +>>> obb.stocks.fa.divs(symbol="AAPL") + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, - }, + provider_choices={"provider": provider, }, + standard_params={"symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, }, extra_params=kwargs, ) @@ -1083,82 +876,67 @@ def divs( **inputs, ) + @validate - def earning( - self, - symbol: typing_extensions.Annotated[ - Union[str, List[str]], - OpenBBCustomParameter(description="Symbol to get data for."), - ], - limit: typing_extensions.Annotated[ - Union[int, None], - OpenBBCustomParameter(description="The number of data entries to return."), - ] = 50, - provider: Union[Literal["fmp"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def earning(self, symbol: typing_extensions.Annotated[Union[str, List[str]], OpenBBCustomParameter(description='Symbol to get data for.')], limit: typing_extensions.Annotated[Union[int, None], OpenBBCustomParameter(description='The number of data entries to return.')] = 50, provider: Union[Literal['fmp'], None] = None, **kwargs) -> OBBject[List[Data]]: """Earnings Calendar. Earnings calendar for a given company. - Parameters - ---------- - symbol : str - Symbol to get data for. - limit : Union[int, None] - The number of data entries to return. - provider : Union[Literal['fmp'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'fmp' if there is - no default. - - Returns - ------- - OBBject - results : Union[List[EarningsCalendar]] - Serializable results. - provider : Union[Literal['fmp'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - EarningsCalendar - ---------------- - symbol : str - Symbol representing the entity requested in the data. - date : date - The date of the data. - eps : Optional[Union[float]] - EPS of the earnings calendar. - eps_estimated : Optional[Union[float]] - Estimated EPS of the earnings calendar. - time : str - Time of the earnings calendar. - revenue : Optional[Union[float]] - Revenue of the earnings calendar. - revenue_estimated : Optional[Union[float]] - Estimated revenue of the earnings calendar. - updated_from_date : Optional[date] - Updated from date of the earnings calendar. - fiscal_date_ending : date - Fiscal date ending of the earnings calendar. - - Example - ------- - >>> from openbb import obb - >>> obb.stocks.fa.earning(symbol="AAPL", limit=50) - """ # noqa: E501 +Parameters +---------- +symbol : str + Symbol to get data for. +limit : Union[int, None] + The number of data entries to return. +provider : Union[Literal['fmp'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fmp' if there is + no default. + +Returns +------- +OBBject + results : Union[List[EarningsCalendar]] + Serializable results. + provider : Union[Literal['fmp'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +EarningsCalendar +---------------- +symbol : str + Symbol representing the entity requested in the data. +date : date + The date of the data. +eps : Optional[Union[float]] + EPS of the earnings calendar. +eps_estimated : Optional[Union[float]] + Estimated EPS of the earnings calendar. +time : str + Time of the earnings calendar. +revenue : Optional[Union[float]] + Revenue of the earnings calendar. +revenue_estimated : Optional[Union[float]] + Estimated revenue of the earnings calendar. +updated_from_date : Optional[date] + Updated from date of the earnings calendar. +fiscal_date_ending : date + Fiscal date ending of the earnings calendar. + +Example +------- +>>> from openbb import obb +>>> obb.stocks.fa.earning(symbol="AAPL", limit=50) + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, - "limit": limit, - }, + provider_choices={"provider": provider, }, + standard_params={"symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, "limit": limit, }, extra_params=kwargs, ) @@ -1167,75 +945,65 @@ def earning( **inputs, ) + @validate - def emp( - self, - symbol: typing_extensions.Annotated[ - Union[str, List[str]], - OpenBBCustomParameter(description="Symbol to get data for."), - ], - provider: Union[Literal["fmp"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def emp(self, symbol: typing_extensions.Annotated[Union[str, List[str]], OpenBBCustomParameter(description='Symbol to get data for.')], provider: Union[Literal['fmp'], None] = None, **kwargs) -> OBBject[List[Data]]: """Historical Employees. Historical number of employees. - Parameters - ---------- - symbol : str - Symbol to get data for. - provider : Union[Literal['fmp'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'fmp' if there is - no default. - - Returns - ------- - OBBject - results : Union[List[HistoricalEmployees]] - Serializable results. - provider : Union[Literal['fmp'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - HistoricalEmployees - ------------------- - symbol : str - Symbol representing the entity requested in the data. - cik : int - CIK of the company to retrieve the historical employees of. - acceptance_time : datetime - Time of acceptance of the company employee. - period_of_report : date - Date of reporting of the company employee. - company_name : str - Registered name of the company to retrieve the historical employees of. - form_type : str - Form type of the company employee. - filing_date : date - Filing date of the company employee - employee_count : int - Count of employees of the company. - source : str - Source URL which retrieves this data for the company. - - Example - ------- - >>> from openbb import obb - >>> obb.stocks.fa.emp(symbol="AAPL") - """ # noqa: E501 +Parameters +---------- +symbol : str + Symbol to get data for. +provider : Union[Literal['fmp'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fmp' if there is + no default. + +Returns +------- +OBBject + results : Union[List[HistoricalEmployees]] + Serializable results. + provider : Union[Literal['fmp'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +HistoricalEmployees +------------------- +symbol : str + Symbol representing the entity requested in the data. +cik : int + CIK of the company to retrieve the historical employees of. +acceptance_time : datetime + Time of acceptance of the company employee. +period_of_report : date + Date of reporting of the company employee. +company_name : str + Registered name of the company to retrieve the historical employees of. +form_type : str + Form type of the company employee. +filing_date : date + Filing date of the company employee +employee_count : int + Count of employees of the company. +source : str + Source URL which retrieves this data for the company. + +Example +------- +>>> from openbb import obb +>>> obb.stocks.fa.emp(symbol="AAPL") + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, - }, + provider_choices={"provider": provider, }, + standard_params={"symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, }, extra_params=kwargs, ) @@ -1244,115 +1012,95 @@ def emp( **inputs, ) + @validate - def est( - self, - symbol: typing_extensions.Annotated[ - Union[str, List[str]], - OpenBBCustomParameter(description="Symbol to get data for."), - ], - period: typing_extensions.Annotated[ - Literal["quarter", "annual"], - OpenBBCustomParameter(description="Time period of the data to return."), - ] = "annual", - limit: typing_extensions.Annotated[ - int, - OpenBBCustomParameter(description="The number of data entries to return."), - ] = 30, - provider: Union[Literal["fmp"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def est(self, symbol: typing_extensions.Annotated[Union[str, List[str]], OpenBBCustomParameter(description='Symbol to get data for.')], period: typing_extensions.Annotated[Literal['quarter', 'annual'], OpenBBCustomParameter(description='Time period of the data to return.')] = 'annual', limit: typing_extensions.Annotated[int, OpenBBCustomParameter(description='The number of data entries to return.')] = 30, provider: Union[Literal['fmp'], None] = None, **kwargs) -> OBBject[List[Data]]: """Analyst Estimates. Analyst stock recommendations. - Parameters - ---------- - symbol : str - Symbol to get data for. - period : Literal['quarter', 'annual'] - Time period of the data to return. - limit : int - The number of data entries to return. - provider : Union[Literal['fmp'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'fmp' if there is - no default. - - Returns - ------- - OBBject - results : Union[List[AnalystEstimates]] - Serializable results. - provider : Union[Literal['fmp'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - AnalystEstimates - ---------------- - symbol : str - Symbol representing the entity requested in the data. - date : date - The date of the data. - estimated_revenue_low : int - Estimated revenue low. - estimated_revenue_high : int - Estimated revenue high. - estimated_revenue_avg : int - Estimated revenue average. - estimated_ebitda_low : int - Estimated EBITDA low. - estimated_ebitda_high : int - Estimated EBITDA high. - estimated_ebitda_avg : int - Estimated EBITDA average. - estimated_ebit_low : int - Estimated EBIT low. - estimated_ebit_high : int - Estimated EBIT high. - estimated_ebit_avg : int - Estimated EBIT average. - estimated_net_income_low : int - Estimated net income low. - estimated_net_income_high : int - Estimated net income high. - estimated_net_income_avg : int - Estimated net income average. - estimated_sga_expense_low : int - Estimated SGA expense low. - estimated_sga_expense_high : int - Estimated SGA expense high. - estimated_sga_expense_avg : int - Estimated SGA expense average. - estimated_eps_avg : float - Estimated EPS average. - estimated_eps_high : float - Estimated EPS high. - estimated_eps_low : float - Estimated EPS low. - number_analyst_estimated_revenue : int - Number of analysts who estimated revenue. - number_analysts_estimated_eps : int - Number of analysts who estimated EPS. - - Example - ------- - >>> from openbb import obb - >>> obb.stocks.fa.est(symbol="AAPL", period="annual", limit=30) - """ # noqa: E501 +Parameters +---------- +symbol : str + Symbol to get data for. +period : Literal['quarter', 'annual'] + Time period of the data to return. +limit : int + The number of data entries to return. +provider : Union[Literal['fmp'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fmp' if there is + no default. + +Returns +------- +OBBject + results : Union[List[AnalystEstimates]] + Serializable results. + provider : Union[Literal['fmp'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +AnalystEstimates +---------------- +symbol : str + Symbol representing the entity requested in the data. +date : date + The date of the data. +estimated_revenue_low : int + Estimated revenue low. +estimated_revenue_high : int + Estimated revenue high. +estimated_revenue_avg : int + Estimated revenue average. +estimated_ebitda_low : int + Estimated EBITDA low. +estimated_ebitda_high : int + Estimated EBITDA high. +estimated_ebitda_avg : int + Estimated EBITDA average. +estimated_ebit_low : int + Estimated EBIT low. +estimated_ebit_high : int + Estimated EBIT high. +estimated_ebit_avg : int + Estimated EBIT average. +estimated_net_income_low : int + Estimated net income low. +estimated_net_income_high : int + Estimated net income high. +estimated_net_income_avg : int + Estimated net income average. +estimated_sga_expense_low : int + Estimated SGA expense low. +estimated_sga_expense_high : int + Estimated SGA expense high. +estimated_sga_expense_avg : int + Estimated SGA expense average. +estimated_eps_avg : float + Estimated EPS average. +estimated_eps_high : float + Estimated EPS high. +estimated_eps_low : float + Estimated EPS low. +number_analyst_estimated_revenue : int + Number of analysts who estimated revenue. +number_analysts_estimated_eps : int + Number of analysts who estimated EPS. + +Example +------- +>>> from openbb import obb +>>> obb.stocks.fa.est(symbol="AAPL", period="annual", limit=30) + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, - "period": period, - "limit": limit, - }, + provider_choices={"provider": provider, }, + standard_params={"symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, "period": period, "limit": limit, }, extra_params=kwargs, ) @@ -1361,82 +1109,99 @@ def est( **inputs, ) + @validate - def filings( - self, - symbol: typing_extensions.Annotated[ - Union[str, List[str]], - OpenBBCustomParameter(description="Symbol to get data for."), - ], - limit: typing_extensions.Annotated[ - Union[int, None], - OpenBBCustomParameter(description="The number of data entries to return."), - ] = 100, - provider: Union[Literal["fmp"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def filings(self, symbol: typing_extensions.Annotated[Union[str, None, List[str]], OpenBBCustomParameter(description='Symbol to get data for.')] = None, limit: typing_extensions.Annotated[Union[int, None], OpenBBCustomParameter(description='The number of data entries to return.')] = 300, provider: Union[Literal['fmp', 'sec'], None] = None, **kwargs) -> OBBject[List[Data]]: """Company Filings. Company filings data. - Parameters - ---------- - symbol : str - Symbol to get data for. - limit : Union[int, None] - The number of data entries to return. - provider : Union[Literal['fmp'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'fmp' if there is - no default. - type : Optional[Union[Literal['1', '1-A', '1-E', '1-K', '1-N', '1-SA', '1-U', '1-Z', '10', '10-D', '10-K', '10-M', '10-Q', '11-K', '12b-25', '13F', '13H', '144', '15', '15F', '17-H', '18', '18-K', '19b-4', '19b-4(e)', '19b-7', '2-E', '20-F', '24F-2', '25', '3', '4', '40-F', '5', '6-K', '7-M', '8-A', '8-K', '8-M', '9-M', 'ABS-15G', 'ABS-EE', 'ABS DD-15E', 'ADV', 'ADV-E', 'ADV-H', 'ADV-NR', 'ADV-W', 'ATS', 'ATS-N', 'ATS-R', 'BD', 'BD-N', 'BDW', 'C', 'CA-1', 'CB', 'CFPORTAL', 'CRS', 'CUSTODY', 'D', 'F-1', 'F-10', 'F-3', 'F-4', 'F-6', 'F-7', 'F-8', 'F-80', 'F-N', 'F-X', 'ID', 'MA', 'MA-I', 'MA-NR', 'MA-W', 'MSD', 'MSDW', 'N-14', 'N-17D-1', 'N-17f-1', 'N-17f-2', 'N-18f-1', 'N-1A', 'N-2', 'N-23c-3', 'N-27D-1', 'N-3', 'N-4', 'N-5', 'N-54A', 'N-54C', 'N-6', 'N-6EI-1', 'N-6F', 'N-8A', 'N-8B-2', 'N-8B-4', 'N-8F', 'N-CEN']]] - Type of the SEC filing form. (provider: fmp) - page : Optional[Union[int]] - Page number of the results. (provider: fmp) - - Returns - ------- - OBBject - results : Union[List[CompanyFilings]] - Serializable results. - provider : Union[Literal['fmp'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - CompanyFilings - -------------- - date : date - The date of the data. In this case, it is the date of the filing. - type : str - Type of document. - link : str - URL to the document. - symbol : Optional[Union[str]] - The ticker symbol of the company. (provider: fmp) - cik : Optional[Union[str]] - CIK of the SEC filing. (provider: fmp) - accepted_date : Optional[Union[datetime]] - Accepted date of the SEC filing. (provider: fmp) - final_link : Optional[Union[str]] - Final link of the SEC filing. (provider: fmp) - - Example - ------- - >>> from openbb import obb - >>> obb.stocks.fa.filings(symbol="AAPL", limit=100) - """ # noqa: E501 +Parameters +---------- +symbol : Union[str, None] + Symbol to get data for. +limit : Union[int, None] + The number of data entries to return. +provider : Union[Literal['fmp', 'sec'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fmp' if there is + no default. +type : Optional[Union[Literal['1', '1-A', '1-E', '1-K', '1-N', '1-SA', '1-U', '1-Z', '10', '10-D', '10-K', '10-M', '10-Q', '11-K', '12b-25', '13F', '13H', '144', '15', '15F', '17-H', '18', '18-K', '19b-4', '19b-4(e)', '19b-7', '2-E', '20-F', '24F-2', '25', '3', '4', '40-F', '5', '6-K', '7-M', '8-A', '8-K', '8-M', '9-M', 'ABS-15G', 'ABS-EE', 'ABS DD-15E', 'ADV', 'ADV-E', 'ADV-H', 'ADV-NR', 'ADV-W', 'ATS', 'ATS-N', 'ATS-R', 'BD', 'BD-N', 'BDW', 'C', 'CA-1', 'CB', 'CFPORTAL', 'CRS', 'CUSTODY', 'D', 'F-1', 'F-10', 'F-3', 'F-4', 'F-6', 'F-7', 'F-8', 'F-80', 'F-N', 'F-X', 'ID', 'MA', 'MA-I', 'MA-NR', 'MA-W', 'MSD', 'MSDW', 'N-14', 'N-17D-1', 'N-17f-1', 'N-17f-2', 'N-18f-1', 'N-1A', 'N-2', 'N-23c-3', 'N-27D-1', 'N-3', 'N-4', 'N-5', 'N-54A', 'N-54C', 'N-6', 'N-6EI-1', 'N-6F', 'N-8A', 'N-8B-2', 'N-8B-4', 'N-8F', 'N-CEN'], Literal['1', '1-A', '1-A POS', '1-A-W', '1-E', '1-E AD', '1-K', '1-SA', '1-U', '1-Z', '1-Z-W', '10-12B', '10-12G', '10-D', '10-K', '10-KT', '10-Q', '10-QT', '11-K', '11-KT', '13F-HR', '13F-NT', '13FCONP', '144', '15-12B', '15-12G', '15-15D', '15F-12B', '15F-12G', '15F-15D', '18-12B', '18-K', '19B-4E', '2-A', '2-AF', '2-E', '20-F', '20FR12B', '20FR12G', '24F-2NT', '25', '25-NSE', '253G1', '253G2', '253G3', '253G4', '3', '305B2', '34-12H', '4', '40-17F1', '40-17F2', '40-17G', '40-17GCS', '40-202A', '40-203A', '40-206A', '40-24B2', '40-33', '40-6B', '40-8B25', '40-8F-2', '40-APP', '40-F', '40-OIP', '40FR12B', '40FR12G', '424A', '424B1', '424B2', '424B3', '424B4', '424B5', '424B7', '424B8', '424H', '425', '485APOS', '485BPOS', '485BXT', '486APOS', '486BPOS', '486BXT', '487', '497', '497AD', '497H2', '497J', '497K', '497VPI', '497VPU', '5', '6-K', '6B NTC', '6B ORDR', '8-A12B', '8-A12G', '8-K', '8-K12B', '8-K12G3', '8-K15D5', '8-M', '8F-2 NTC', '8F-2 ORDR', '9-M', 'ABS-15G', 'ABS-EE', 'ADN-MTL', 'ADV-E', 'ADV-H-C', 'ADV-H-T', 'ADV-NR', 'ANNLRPT', 'APP NTC', 'APP ORDR', 'APP WD', 'APP WDG', 'ARS', 'ATS-N', 'ATS-N-C', 'ATS-N/UA', 'AW', 'AW WD', 'C', 'C-AR', 'C-AR-W', 'C-TR', 'C-TR-W', 'C-U', 'C-U-W', 'C-W', 'CB', 'CERT', 'CERTARCA', 'CERTBATS', 'CERTCBO', 'CERTNAS', 'CERTNYS', 'CERTPAC', 'CFPORTAL', 'CFPORTAL-W', 'CORRESP', 'CT ORDER', 'D', 'DEF 14A', 'DEF 14C', 'DEFA14A', 'DEFA14C', 'DEFC14A', 'DEFC14C', 'DEFM14A', 'DEFM14C', 'DEFN14A', 'DEFR14A', 'DEFR14C', 'DEL AM', 'DFAN14A', 'DFRN14A', 'DOS', 'DOSLTR', 'DRS', 'DRSLTR', 'DSTRBRPT', 'EFFECT', 'F-1', 'F-10', 'F-10EF', 'F-10POS', 'F-1MEF', 'F-3', 'F-3ASR', 'F-3D', 'F-3DPOS', 'F-3MEF', 'F-4', 'F-4 POS', 'F-4MEF', 'F-6', 'F-6 POS', 'F-6EF', 'F-7', 'F-7 POS', 'F-8', 'F-8 POS', 'F-80', 'F-80POS', 'F-9', 'F-9 POS', 'F-N', 'F-X', 'FOCUSN', 'FWP', 'G-405', 'G-405N', 'G-FIN', 'G-FINW', 'IRANNOTICE', 'MA', 'MA-A', 'MA-I', 'MA-W', 'MSD', 'MSDCO', 'MSDW', 'N-1', 'N-14', 'N-14 8C', 'N-14MEF', 'N-18F1', 'N-1A', 'N-2', 'N-2 POSASR', 'N-23C-2', 'N-23C3A', 'N-23C3B', 'N-23C3C', 'N-2ASR', 'N-2MEF', 'N-30B-2', 'N-30D', 'N-4', 'N-5', 'N-54A', 'N-54C', 'N-6', 'N-6F', 'N-8A', 'N-8B-2', 'N-8F', 'N-8F NTC', 'N-8F ORDR', 'N-CEN', 'N-CR', 'N-CSR', 'N-CSRS', 'N-MFP', 'N-MFP1', 'N-MFP2', 'N-PX', 'N-Q', 'N-VP', 'N-VPFS', 'NO ACT', 'NPORT-EX', 'NPORT-NP', 'NPORT-P', 'NRSRO-CE', 'NRSRO-UPD', 'NSAR-A', 'NSAR-AT', 'NSAR-B', 'NSAR-BT', 'NSAR-U', 'NT 10-D', 'NT 10-K', 'NT 10-Q', 'NT 11-K', 'NT 20-F', 'NT N-CEN', 'NT N-MFP', 'NT N-MFP1', 'NT N-MFP2', 'NT NPORT-EX', 'NT NPORT-P', 'NT-NCEN', 'NT-NCSR', 'NT-NSAR', 'NTFNCEN', 'NTFNCSR', 'NTFNSAR', 'NTN 10D', 'NTN 10K', 'NTN 10Q', 'NTN 20F', 'OIP NTC', 'OIP ORDR', 'POS 8C', 'POS AM', 'POS AMI', 'POS EX', 'POS462B', 'POS462C', 'POSASR', 'PRE 14A', 'PRE 14C', 'PREC14A', 'PREC14C', 'PREM14A', 'PREM14C', 'PREN14A', 'PRER14A', 'PRER14C', 'PRRN14A', 'PX14A6G', 'PX14A6N', 'QRTLYRPT', 'QUALIF', 'REG-NR', 'REVOKED', 'RW', 'RW WD', 'S-1', 'S-11', 'S-11MEF', 'S-1MEF', 'S-20', 'S-3', 'S-3ASR', 'S-3D', 'S-3DPOS', 'S-3MEF', 'S-4', 'S-4 POS', 'S-4EF', 'S-4MEF', 'S-6', 'S-8', 'S-8 POS', 'S-B', 'S-BMEF', 'SBSE', 'SBSE-A', 'SBSE-BD', 'SBSE-C', 'SBSE-W', 'SC 13D', 'SC 13E1', 'SC 13E3', 'SC 13G', 'SC 14D9', 'SC 14F1', 'SC 14N', 'SC TO-C', 'SC TO-I', 'SC TO-T', 'SC13E4F', 'SC14D1F', 'SC14D9C', 'SC14D9F', 'SD', 'SDR', 'SE', 'SEC ACTION', 'SEC STAFF ACTION', 'SEC STAFF LETTER', 'SF-1', 'SF-3', 'SL', 'SP 15D2', 'STOP ORDER', 'SUPPL', 'T-3', 'TA-1', 'TA-2', 'TA-W', 'TACO', 'TH', 'TTW', 'UNDER', 'UPLOAD', 'WDL-REQ', 'X-17A-5']]] + Type of the SEC filing form. (provider: fmp, sec) +page : Optional[Union[int]] + Page number of the results. (provider: fmp) +cik : Optional[Union[str, int]] + Lookup filings by Central Index Key (CIK) instead of by symbol. (provider: sec) +use_cache : bool + Whether or not to use cache. If True, cache will store for one day. (provider: sec) + +Returns +------- +OBBject + results : Union[List[CompanyFilings]] + Serializable results. + provider : Union[Literal['fmp', 'sec'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +CompanyFilings +-------------- +date : date + The date of the data. In this case, it is the date of the filing. +type : str + Type of document. +link : str + URL to the document. +symbol : Optional[Union[str]] + The ticker symbol of the company. (provider: fmp) +cik : Optional[Union[str]] + CIK of the SEC filing. (provider: fmp) +accepted_date : Optional[Union[datetime]] + Accepted date of the SEC filing. (provider: fmp, sec) +final_link : Optional[Union[str]] + Final link of the SEC filing. (provider: fmp) +report_date : Optional[Union[date]] + The date of the filing. (provider: sec) +act : Optional[Union[str, int]] + The SEC Act number. (provider: sec) +items : Optional[Union[str, float]] + The SEC Item numbers. (provider: sec) +primary_doc_description : Optional[Union[str]] + The description of the primary document. (provider: sec) +primary_doc : Optional[Union[str]] + The filename of the primary document. (provider: sec) +accession_number : Optional[Union[str, int]] + The accession number. (provider: sec) +file_number : Optional[Union[str, int]] + The file number. (provider: sec) +film_number : Optional[Union[str, int]] + The film number. (provider: sec) +is_inline_xbrl : Optional[Union[str, int]] + Whether the filing is an inline XBRL filing. (provider: sec) +is_xbrl : Optional[Union[str, int]] + Whether the filing is an XBRL filing. (provider: sec) +size : Optional[Union[str, int]] + The size of the filing. (provider: sec) +complete_submission_url : Optional[Union[str]] + The URL to the complete filing submission. (provider: sec) +filing_detail_url : Optional[Union[str]] + The URL to the filing details. (provider: sec) +xml : Optional[Union[str]] + The URL to the primary XML document. (provider: sec) + +Example +------- +>>> from openbb import obb +>>> obb.stocks.fa.filings(limit=300) + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, - "limit": limit, - }, + provider_choices={"provider": provider, }, + standard_params={"symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, "limit": limit, }, extra_params=kwargs, ) @@ -1445,203 +1210,173 @@ def filings( **inputs, ) + @validate - def income( - self, - symbol: typing_extensions.Annotated[ - Union[str, List[str]], - OpenBBCustomParameter(description="Symbol to get data for."), - ], - period: typing_extensions.Annotated[ - Literal["annual", "quarter"], - OpenBBCustomParameter(description="Time period of the data to return."), - ] = "annual", - limit: typing_extensions.Annotated[ - int, - OpenBBCustomParameter(description="The number of data entries to return."), - ] = 12, - provider: Union[Literal["fmp", "intrinio", "polygon", "yfinance"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def income(self, symbol: typing_extensions.Annotated[Union[str, List[str]], OpenBBCustomParameter(description='Symbol to get data for.')], period: typing_extensions.Annotated[Union[Literal['annual', 'quarter'], None], OpenBBCustomParameter(description='Time period of the data to return.')] = 'annual', limit: typing_extensions.Annotated[Union[typing_extensions.Annotated[int, Ge(ge=0)], None], OpenBBCustomParameter(description='The number of data entries to return.')] = 5, provider: Union[Literal['fmp', 'intrinio', 'polygon', 'yfinance'], None] = None, **kwargs) -> OBBject[List[Data]]: """Income Statement. Report on a company's finanacial performance. - Parameters - ---------- - symbol : str - Symbol to get data for. - period : Literal['annual', 'quarter'] - Time period of the data to return. - limit : int - The number of data entries to return. - provider : Union[Literal['fmp', 'intrinio', 'polygon', 'yfinance'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'fmp' if there is - no default. - cik : Optional[Union[str]] - The CIK of the company if no symbol is provided. (provider: fmp) - type : Literal['reported', 'standardized'] - Type of the statement to be fetched. (provider: intrinio) - year : Optional[Union[int]] - Year of the statement to be fetched. (provider: intrinio) - company_name : Optional[Union[str]] - Name of the company. (provider: polygon) - company_name_search : Optional[Union[str]] - Name of the company to search. (provider: polygon) - sic : Optional[Union[str]] - The Standard Industrial Classification (SIC) of the company. (provider: polygon) - filing_date : Optional[Union[datetime.date]] - Filing date of the financial statement. (provider: polygon) - filing_date_lt : Optional[Union[datetime.date]] - Filing date less than the given date. (provider: polygon) - filing_date_lte : Optional[Union[datetime.date]] - Filing date less than or equal to the given date. (provider: polygon) - filing_date_gt : Optional[Union[datetime.date]] - Filing date greater than the given date. (provider: polygon) - filing_date_gte : Optional[Union[datetime.date]] - Filing date greater than or equal to the given date. (provider: polygon) - period_of_report_date : Optional[Union[datetime.date]] - Period of report date of the financial statement. (provider: polygon) - period_of_report_date_lt : Optional[Union[datetime.date]] - Period of report date less than the given date. (provider: polygon) - period_of_report_date_lte : Optional[Union[datetime.date]] - Period of report date less than or equal to the given date. (provider: polygon) - period_of_report_date_gt : Optional[Union[datetime.date]] - Period of report date greater than the given date. (provider: polygon) - period_of_report_date_gte : Optional[Union[datetime.date]] - Period of report date greater than or equal to the given date. (provider: polygon) - include_sources : Optional[Union[bool]] - Whether to include the sources of the financial statement. (provider: polygon) - order : Optional[Union[Literal['asc', 'desc']]] - Order of the financial statement. (provider: polygon) - sort : Optional[Union[Literal['filing_date', 'period_of_report_date']]] - Sort of the financial statement. (provider: polygon) - - Returns - ------- - OBBject - results : Union[List[IncomeStatement]] - Serializable results. - provider : Union[Literal['fmp', 'intrinio', 'polygon', 'yfinance'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - IncomeStatement - --------------- - symbol : Optional[Union[str]] - Symbol representing the entity requested in the data. - date : date - The date of the data. In this case, the date of the income statement. - period : Optional[Union[str]] - Period of the income statement. - cik : Optional[Union[str]] - Central Index Key. - revenue : Optional[int] - Revenue. - cost_of_revenue : Optional[int] - Cost of revenue. - gross_profit : Optional[int] - Gross profit. - cost_and_expenses : Optional[int] - Cost and expenses. - gross_profit_ratio : Optional[Union[float]] - Gross profit ratio. - research_and_development_expenses : Optional[int] - Research and development expenses. - general_and_administrative_expenses : Optional[int] - General and administrative expenses. - selling_and_marketing_expenses : Optional[Union[float]] - Selling and marketing expenses. - selling_general_and_administrative_expenses : Optional[int] - Selling, general and administrative expenses. - other_expenses : Optional[int] - Other expenses. - operating_expenses : Optional[int] - Operating expenses. - depreciation_and_amortization : Optional[int] - Depreciation and amortization. - ebitda : Optional[int] - Earnings before interest, taxes, depreciation and amortization. - ebitda_ratio : Optional[Union[float]] - Earnings before interest, taxes, depreciation and amortization ratio. - operating_income : Optional[int] - Operating income. - operating_income_ratio : Optional[Union[float]] - Operating income ratio. - interest_income : Optional[int] - Interest income. - interest_expense : Optional[int] - Interest expense. - total_other_income_expenses_net : Optional[int] - Total other income expenses net. - income_before_tax : Optional[int] - Income before tax. - income_before_tax_ratio : Optional[Union[float]] - Income before tax ratio. - income_tax_expense : Optional[int] - Income tax expense. - net_income : Optional[int] - Net income. - net_income_ratio : Optional[Union[float]] - Net income ratio. - eps : Optional[Union[float]] - Earnings per share. - eps_diluted : Optional[Union[float]] - Earnings per share diluted. - weighted_average_shares_outstanding : Optional[int] - Weighted average shares outstanding. - weighted_average_shares_outstanding_dil : Optional[int] - Weighted average shares outstanding diluted. - link : Optional[Union[str]] - Link to the income statement. - final_link : Optional[Union[str]] - Final link to the income statement. - reported_currency : Optional[Union[str]] - Reporting currency. (provider: fmp) - filling_date : Optional[Union[date]] - Filling date. (provider: fmp) - accepted_date : Optional[Union[datetime]] - Accepted date. (provider: fmp) - calendar_year : Optional[Union[int]] - Calendar year. (provider: fmp) - income_loss_from_continuing_operations_before_tax : Optional[Union[float]] - Income/Loss From Continuing Operations After Tax (provider: polygon) - income_loss_from_continuing_operations_after_tax : Optional[Union[float]] - Income (loss) from continuing operations after tax (provider: polygon) - benefits_costs_expenses : Optional[Union[float]] - Benefits, costs and expenses (provider: polygon) - net_income_loss_attributable_to_noncontrolling_interest : Optional[int] - Net income (loss) attributable to noncontrolling interest (provider: polygon) - net_income_loss_attributable_to_parent : Optional[Union[float]] - Net income (loss) attributable to parent (provider: polygon) - net_income_loss_available_to_common_stockholders_basic : Optional[Union[float]] - Net Income/Loss Available To Common Stockholders Basic (provider: polygon) - participating_securities_distributed_and_undistributed_earnings_loss_basic : Optional[Union[float]] - Participating Securities Distributed And Undistributed Earnings Loss Basic (provider: polygon) - nonoperating_income_loss : Optional[Union[float]] - Nonoperating Income Loss (provider: polygon) - preferred_stock_dividends_and_other_adjustments : Optional[Union[float]] - Preferred stock dividends and other adjustments (provider: polygon) - - Example - ------- - >>> from openbb import obb - >>> obb.stocks.fa.income(symbol="AAPL", period="annual", limit=12) - """ # noqa: E501 +Parameters +---------- +symbol : str + Symbol to get data for. +period : Union[Literal['annual', 'quarter'], None] + Time period of the data to return. +limit : Union[typing_extensions.Annotated[int, Ge(ge=0)], None] + The number of data entries to return. +provider : Union[Literal['fmp', 'intrinio', 'polygon', 'yfinance'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fmp' if there is + no default. +cik : Optional[Union[str]] + The CIK of the company if no symbol is provided. (provider: fmp) +filing_date : Optional[Union[datetime.date]] + Filing date of the financial statement. (provider: polygon) +filing_date_lt : Optional[Union[datetime.date]] + Filing date less than the given date. (provider: polygon) +filing_date_lte : Optional[Union[datetime.date]] + Filing date less than or equal to the given date. (provider: polygon) +filing_date_gt : Optional[Union[datetime.date]] + Filing date greater than the given date. (provider: polygon) +filing_date_gte : Optional[Union[datetime.date]] + Filing date greater than or equal to the given date. (provider: polygon) +period_of_report_date : Optional[Union[datetime.date]] + Period of report date of the financial statement. (provider: polygon) +period_of_report_date_lt : Optional[Union[datetime.date]] + Period of report date less than the given date. (provider: polygon) +period_of_report_date_lte : Optional[Union[datetime.date]] + Period of report date less than or equal to the given date. (provider: polygon) +period_of_report_date_gt : Optional[Union[datetime.date]] + Period of report date greater than the given date. (provider: polygon) +period_of_report_date_gte : Optional[Union[datetime.date]] + Period of report date greater than or equal to the given date. (provider: polygon) +include_sources : Optional[Union[bool]] + Whether to include the sources of the financial statement. (provider: polygon) +order : Optional[Union[Literal['asc', 'desc']]] + Order of the financial statement. (provider: polygon) +sort : Optional[Union[Literal['filing_date', 'period_of_report_date']]] + Sort of the financial statement. (provider: polygon) + +Returns +------- +OBBject + results : Union[List[IncomeStatement]] + Serializable results. + provider : Union[Literal['fmp', 'intrinio', 'polygon', 'yfinance'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +IncomeStatement +--------------- +symbol : Optional[Union[str]] + Symbol representing the entity requested in the data. +date : date + The date of the data. In this case, the date of the income statement. +period : Optional[Union[str]] + Period of the income statement. +cik : Optional[Union[str]] + Central Index Key. +revenue : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Revenue. +cost_of_revenue : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Cost of revenue. +gross_profit : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Gross profit. +cost_and_expenses : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Cost and expenses. +gross_profit_ratio : Optional[Union[float]] + Gross profit ratio. +research_and_development_expenses : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Research and development expenses. +general_and_administrative_expenses : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + General and administrative expenses. +selling_and_marketing_expenses : Optional[Union[float]] + Selling and marketing expenses. +selling_general_and_administrative_expenses : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Selling, general and administrative expenses. +other_expenses : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Other expenses. +operating_expenses : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Operating expenses. +depreciation_and_amortization : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Depreciation and amortization. +ebitda : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Earnings before interest, taxes, depreciation and amortization. +ebitda_ratio : Optional[Union[float]] + Earnings before interest, taxes, depreciation and amortization ratio. +operating_income : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Operating income. +operating_income_ratio : Optional[Union[float]] + Operating income ratio. +interest_income : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Interest income. +interest_expense : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Interest expense. +total_other_income_expenses_net : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Total other income expenses net. +income_before_tax : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Income before tax. +income_before_tax_ratio : Optional[Union[float]] + Income before tax ratio. +income_tax_expense : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Income tax expense. +net_income : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Net income. +net_income_ratio : Optional[Union[float]] + Net income ratio. +eps : Optional[Union[float]] + Earnings per share. +eps_diluted : Optional[Union[float]] + Earnings per share diluted. +weighted_average_shares_outstanding : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Weighted average shares outstanding. +weighted_average_shares_outstanding_dil : Optional[Union[typing_extensions.Annotated[float, Strict(strict=True)]]] + Weighted average shares outstanding diluted. +link : Optional[Union[str]] + Link to the income statement. +final_link : Optional[Union[str]] + Final link to the income statement. +reported_currency : Optional[Union[str]] + Reporting currency. (provider: fmp) +filling_date : Optional[Union[date]] + Filling date. (provider: fmp) +accepted_date : Optional[Union[datetime]] + Accepted date. (provider: fmp) +calendar_year : Optional[Union[int]] + Calendar year. (provider: fmp) +income_loss_from_continuing_operations_before_tax : Optional[Union[float]] + Income/Loss From Continuing Operations After Tax (provider: polygon) +income_loss_from_continuing_operations_after_tax : Optional[Union[float]] + Income (loss) from continuing operations after tax (provider: polygon) +benefits_costs_expenses : Optional[Union[float]] + Benefits, costs and expenses (provider: polygon) +net_income_loss_attributable_to_noncontrolling_interest : Optional[int] + Net income (loss) attributable to noncontrolling interest (provider: polygon) +net_income_loss_attributable_to_parent : Optional[Union[float]] + Net income (loss) attributable to parent (provider: polygon) +net_income_loss_available_to_common_stockholders_basic : Optional[Union[float]] + Net Income/Loss Available To Common Stockholders Basic (provider: polygon) +participating_securities_distributed_and_undistributed_earnings_loss_basic : Optional[Union[float]] + Participating Securities Distributed And Undistributed Earnings Loss Basic (provider: polygon) +nonoperating_income_loss : Optional[Union[float]] + Nonoperating Income Loss (provider: polygon) +preferred_stock_dividends_and_other_adjustments : Optional[Union[float]] + Preferred stock dividends and other adjustments (provider: polygon) + +Example +------- +>>> from openbb import obb +>>> obb.stocks.fa.income(symbol="AAPL", period="annual", limit=5) + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, - "period": period, - "limit": limit, - }, + provider_choices={"provider": provider, }, + standard_params={"symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, "period": period, "limit": limit, }, extra_params=kwargs, ) @@ -1650,129 +1385,109 @@ def income( **inputs, ) + @validate - def income_growth( - self, - symbol: typing_extensions.Annotated[ - Union[str, List[str]], - OpenBBCustomParameter(description="Symbol to get data for."), - ], - limit: typing_extensions.Annotated[ - int, - OpenBBCustomParameter(description="The number of data entries to return."), - ] = 10, - period: typing_extensions.Annotated[ - Literal["annual", "quarter"], - OpenBBCustomParameter(description="Time period of the data to return."), - ] = "annual", - provider: Union[Literal["fmp"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def income_growth(self, symbol: typing_extensions.Annotated[Union[str, List[str]], OpenBBCustomParameter(description='Symbol to get data for.')], limit: typing_extensions.Annotated[int, OpenBBCustomParameter(description='The number of data entries to return.')] = 10, period: typing_extensions.Annotated[Literal['annual', 'quarter'], OpenBBCustomParameter(description='Time period of the data to return.')] = 'annual', provider: Union[Literal['fmp'], None] = None, **kwargs) -> OBBject[List[Data]]: """Income Statement Growth. Information about the growth of the company income statement. - Parameters - ---------- - symbol : str - Symbol to get data for. - limit : int - The number of data entries to return. - period : Literal['annual', 'quarter'] - Time period of the data to return. - provider : Union[Literal['fmp'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'fmp' if there is - no default. - - Returns - ------- - OBBject - results : Union[List[IncomeStatementGrowth]] - Serializable results. - provider : Union[Literal['fmp'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - IncomeStatementGrowth - --------------------- - symbol : Optional[Union[str]] - Symbol representing the entity requested in the data. - date : date - The date of the data. - period : str - Period the statement is returned for. - growth_revenue : float - Growth rate of total revenue. - growth_cost_of_revenue : float - Growth rate of cost of goods sold. - growth_gross_profit : float - Growth rate of gross profit. - growth_gross_profit_ratio : float - Growth rate of gross profit as a percentage of revenue. - growth_research_and_development_expenses : float - Growth rate of expenses on research and development. - growth_general_and_administrative_expenses : float - Growth rate of general and administrative expenses. - growth_selling_and_marketing_expenses : float - Growth rate of expenses on selling and marketing activities. - growth_other_expenses : float - Growth rate of other operating expenses. - growth_operating_expenses : float - Growth rate of total operating expenses. - growth_cost_and_expenses : float - Growth rate of total costs and expenses. - growth_interest_expense : float - Growth rate of interest expenses. - growth_depreciation_and_amortization : float - Growth rate of depreciation and amortization expenses. - growth_ebitda : float - Growth rate of Earnings Before Interest, Taxes, Depreciation, and Amortization. - growth_ebitda_ratio : float - Growth rate of EBITDA as a percentage of revenue. - growth_operating_income : float - Growth rate of operating income. - growth_operating_income_ratio : float - Growth rate of operating income as a percentage of revenue. - growth_total_other_income_expenses_net : float - Growth rate of net total other income and expenses. - growth_income_before_tax : float - Growth rate of income before taxes. - growth_income_before_tax_ratio : float - Growth rate of income before taxes as a percentage of revenue. - growth_income_tax_expense : float - Growth rate of income tax expenses. - growth_net_income : float - Growth rate of net income. - growth_net_income_ratio : float - Growth rate of net income as a percentage of revenue. - growth_eps : float - Growth rate of Earnings Per Share (EPS). - growth_eps_diluted : float - Growth rate of diluted Earnings Per Share (EPS). - growth_weighted_average_shs_out : float - Growth rate of weighted average shares outstanding. - growth_weighted_average_shs_out_dil : float - Growth rate of diluted weighted average shares outstanding. - - Example - ------- - >>> from openbb import obb - >>> obb.stocks.fa.income_growth(symbol="AAPL", limit=10, period="annual") - """ # noqa: E501 +Parameters +---------- +symbol : str + Symbol to get data for. +limit : int + The number of data entries to return. +period : Literal['annual', 'quarter'] + Time period of the data to return. +provider : Union[Literal['fmp'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fmp' if there is + no default. + +Returns +------- +OBBject + results : Union[List[IncomeStatementGrowth]] + Serializable results. + provider : Union[Literal['fmp'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +IncomeStatementGrowth +--------------------- +symbol : Optional[Union[str]] + Symbol representing the entity requested in the data. +date : date + The date of the data. +period : str + Period the statement is returned for. +growth_revenue : float + Growth rate of total revenue. +growth_cost_of_revenue : float + Growth rate of cost of goods sold. +growth_gross_profit : float + Growth rate of gross profit. +growth_gross_profit_ratio : float + Growth rate of gross profit as a percentage of revenue. +growth_research_and_development_expenses : float + Growth rate of expenses on research and development. +growth_general_and_administrative_expenses : float + Growth rate of general and administrative expenses. +growth_selling_and_marketing_expenses : float + Growth rate of expenses on selling and marketing activities. +growth_other_expenses : float + Growth rate of other operating expenses. +growth_operating_expenses : float + Growth rate of total operating expenses. +growth_cost_and_expenses : float + Growth rate of total costs and expenses. +growth_interest_expense : float + Growth rate of interest expenses. +growth_depreciation_and_amortization : float + Growth rate of depreciation and amortization expenses. +growth_ebitda : float + Growth rate of Earnings Before Interest, Taxes, Depreciation, and Amortization. +growth_ebitda_ratio : float + Growth rate of EBITDA as a percentage of revenue. +growth_operating_income : float + Growth rate of operating income. +growth_operating_income_ratio : float + Growth rate of operating income as a percentage of revenue. +growth_total_other_income_expenses_net : float + Growth rate of net total other income and expenses. +growth_income_before_tax : float + Growth rate of income before taxes. +growth_income_before_tax_ratio : float + Growth rate of income before taxes as a percentage of revenue. +growth_income_tax_expense : float + Growth rate of income tax expenses. +growth_net_income : float + Growth rate of net income. +growth_net_income_ratio : float + Growth rate of net income as a percentage of revenue. +growth_eps : float + Growth rate of Earnings Per Share (EPS). +growth_eps_diluted : float + Growth rate of diluted Earnings Per Share (EPS). +growth_weighted_average_shs_out : float + Growth rate of weighted average shares outstanding. +growth_weighted_average_shs_out_dil : float + Growth rate of diluted weighted average shares outstanding. + +Example +------- +>>> from openbb import obb +>>> obb.stocks.fa.income_growth(symbol="AAPL", limit=10, period="annual") + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, - "limit": limit, - "period": period, - }, + provider_choices={"provider": provider, }, + standard_params={"symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, "limit": limit, "period": period, }, extra_params=kwargs, ) @@ -1781,126 +1496,81 @@ def income_growth( **inputs, ) + @validate - def ins( - self, - symbol: typing_extensions.Annotated[ - Union[str, List[str]], - OpenBBCustomParameter(description="Symbol to get data for."), - ], - transactionType: typing_extensions.Annotated[ - Union[ - List[ - Literal[ - "A-Award", - "C-Conversion", - "D-Return", - "E-ExpireShort", - "F-InKind", - "G-Gift", - "H-ExpireLong", - "I-Discretionary", - "J-Other", - "L-Small", - "M-Exempt", - "O-OutOfTheMoney", - "P-Purchase", - "S-Sale", - "U-Tender", - "W-Will", - "X-InTheMoney", - "Z-Trust", - ] - ], - str, - None, - ], - OpenBBCustomParameter(description="Type of the transaction."), - ] = ["P-Purchase"], - page: typing_extensions.Annotated[ - Union[int, None], - OpenBBCustomParameter(description="Page number of the data to fetch."), - ] = 0, - provider: Union[Literal["fmp"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def ins(self, symbol: typing_extensions.Annotated[Union[str, List[str]], OpenBBCustomParameter(description='Symbol to get data for.')], transaction_type: typing_extensions.Annotated[Union[List[Literal['A-Award', 'C-Conversion', 'D-Return', 'E-ExpireShort', 'F-InKind', 'G-Gift', 'H-ExpireLong', 'I-Discretionary', 'J-Other', 'L-Small', 'M-Exempt', 'O-OutOfTheMoney', 'P-Purchase', 'S-Sale', 'U-Tender', 'W-Will', 'X-InTheMoney', 'Z-Trust']], str, None], OpenBBCustomParameter(description='Type of the transaction.')] = ['P-Purchase'], limit: typing_extensions.Annotated[int, OpenBBCustomParameter(description='The number of data entries to return.')] = 100, provider: Union[Literal['fmp'], None] = None, **kwargs) -> OBBject[List[Data]]: """Stock Insider Trading. Information about insider trading. - Parameters - ---------- - symbol : str - Symbol to get data for. - transactionType : Union[List[Literal['A-Award', 'C-Conversion', 'D-Return', ... - Type of the transaction. - page : Union[int, None] - Page number of the data to fetch. - provider : Union[Literal['fmp'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'fmp' if there is - no default. - - Returns - ------- - OBBject - results : Union[List[StockInsiderTrading]] - Serializable results. - provider : Union[Literal['fmp'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - StockInsiderTrading - ------------------- - symbol : str - Symbol representing the entity requested in the data. - filing_date : datetime - Filing date of the stock insider trading. - transaction_date : date - Transaction date of the stock insider trading. - reporting_cik : int - Reporting CIK of the stock insider trading. - transaction_type : str - Transaction type of the stock insider trading. - securities_owned : int - Securities owned of the stock insider trading. - company_cik : int - Company CIK of the stock insider trading. - reporting_name : str - Reporting name of the stock insider trading. - type_of_owner : str - Type of owner of the stock insider trading. - acquisition_or_disposition : str - Acquisition or disposition of the stock insider trading. - form_type : str - Form type of the stock insider trading. - securities_transacted : float - Securities transacted of the stock insider trading. - price : float - Price of the stock insider trading. - security_name : str - Security name of the stock insider trading. - link : str - Link of the stock insider trading. - - Example - ------- - >>> from openbb import obb - >>> obb.stocks.fa.ins(symbol="AAPL", transactionType=['P-Purchase']) - """ # noqa: E501 +Parameters +---------- +symbol : str + Symbol to get data for. +transaction_type : Union[List[Literal['A-Award', 'C-Conversion', 'D-Return', ... + Type of the transaction. +limit : int + The number of data entries to return. +provider : Union[Literal['fmp'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fmp' if there is + no default. + +Returns +------- +OBBject + results : Union[List[StockInsiderTrading]] + Serializable results. + provider : Union[Literal['fmp'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +StockInsiderTrading +------------------- +symbol : str + Symbol representing the entity requested in the data. +filing_date : datetime + Filing date of the stock insider trading. +transaction_date : date + Transaction date of the stock insider trading. +reporting_cik : int + Reporting CIK of the stock insider trading. +transaction_type : str + Transaction type of the stock insider trading. +securities_owned : int + Securities owned of the stock insider trading. +company_cik : int + Company CIK of the stock insider trading. +reporting_name : str + Reporting name of the stock insider trading. +type_of_owner : str + Type of owner of the stock insider trading. +acquisition_or_disposition : Optional[Union[str]] + Acquisition or disposition of the stock insider trading. +form_type : str + Form type of the stock insider trading. +securities_transacted : float + Securities transacted of the stock insider trading. +price : Optional[Union[float]] + Price of the stock insider trading. +security_name : str + Security name of the stock insider trading. +link : str + Link of the stock insider trading. + +Example +------- +>>> from openbb import obb +>>> obb.stocks.fa.ins(symbol="AAPL", transaction_type=['P-Purchase'], limit=100) + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, - "transactionType": transactionType, - "page": page, - }, + provider_choices={"provider": provider, }, + standard_params={"symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, "transaction_type": transaction_type, "limit": limit, }, extra_params=kwargs, ) @@ -1909,143 +1579,123 @@ def ins( **inputs, ) + @validate - def ins_own( - self, - symbol: typing_extensions.Annotated[ - Union[str, List[str]], - OpenBBCustomParameter(description="Symbol to get data for."), - ], - include_current_quarter: typing_extensions.Annotated[ - Union[bool, None], - OpenBBCustomParameter(description="Include current quarter data."), - ] = False, - date: typing_extensions.Annotated[ - Union[datetime.date, None], - OpenBBCustomParameter(description="A specific date to get data for."), - ] = None, - provider: Union[Literal["fmp"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def ins_own(self, symbol: typing_extensions.Annotated[Union[str, List[str]], OpenBBCustomParameter(description='Symbol to get data for.')], include_current_quarter: typing_extensions.Annotated[Union[bool, None], OpenBBCustomParameter(description='Include current quarter data.')] = False, date: typing_extensions.Annotated[Union[datetime.date, None], OpenBBCustomParameter(description='A specific date to get data for.')] = None, provider: Union[Literal['fmp'], None] = None, **kwargs) -> OBBject[List[Data]]: """Institutional Ownership. Institutional ownership data. - Parameters - ---------- - symbol : str - Symbol to get data for. - include_current_quarter : Union[bool, None] - Include current quarter data. - date : Union[datetime.date, None] - A specific date to get data for. - provider : Union[Literal['fmp'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'fmp' if there is - no default. - - Returns - ------- - OBBject - results : Union[List[InstitutionalOwnership]] - Serializable results. - provider : Union[Literal['fmp'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - InstitutionalOwnership - ---------------------- - symbol : str - Symbol representing the entity requested in the data. - cik : Optional[Union[str]] - CIK of the company. - date : date - The date of the data. - investors_holding : int - Number of investors holding the stock. - last_investors_holding : int - Number of investors holding the stock in the last quarter. - investors_holding_change : int - Change in the number of investors holding the stock. - number_of_13f_shares : Optional[int] - Number of 13F shares. - last_number_of_13f_shares : Optional[int] - Number of 13F shares in the last quarter. - number_of_13f_shares_change : Optional[int] - Change in the number of 13F shares. - total_invested : float - Total amount invested. - last_total_invested : float - Total amount invested in the last quarter. - total_invested_change : float - Change in the total amount invested. - ownership_percent : float - Ownership percent. - last_ownership_percent : float - Ownership percent in the last quarter. - ownership_percent_change : float - Change in the ownership percent. - new_positions : int - Number of new positions. - last_new_positions : int - Number of new positions in the last quarter. - new_positions_change : int - Change in the number of new positions. - increased_positions : int - Number of increased positions. - last_increased_positions : int - Number of increased positions in the last quarter. - increased_positions_change : int - Change in the number of increased positions. - closed_positions : int - Number of closed positions. - last_closed_positions : int - Number of closed positions in the last quarter. - closed_positions_change : int - Change in the number of closed positions. - reduced_positions : int - Number of reduced positions. - last_reduced_positions : int - Number of reduced positions in the last quarter. - reduced_positions_change : int - Change in the number of reduced positions. - total_calls : int - Total number of call options contracts traded for Apple Inc. on the specified date. - last_total_calls : int - Total number of call options contracts traded for Apple Inc. on the previous reporting date. - total_calls_change : int - Change in the total number of call options contracts traded between the current and previous reporting dates. - total_puts : int - Total number of put options contracts traded for Apple Inc. on the specified date. - last_total_puts : int - Total number of put options contracts traded for Apple Inc. on the previous reporting date. - total_puts_change : int - Change in the total number of put options contracts traded between the current and previous reporting dates. - put_call_ratio : float - Put-call ratio, which is the ratio of the total number of put options to call options traded on the specified date. - last_put_call_ratio : float - Put-call ratio on the previous reporting date. - put_call_ratio_change : float - Change in the put-call ratio between the current and previous reporting dates. - - Example - ------- - >>> from openbb import obb - >>> obb.stocks.fa.ins_own(symbol="AAPL") - """ # noqa: E501 +Parameters +---------- +symbol : str + Symbol to get data for. +include_current_quarter : Union[bool, None] + Include current quarter data. +date : Union[datetime.date, None] + A specific date to get data for. +provider : Union[Literal['fmp'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fmp' if there is + no default. + +Returns +------- +OBBject + results : Union[List[InstitutionalOwnership]] + Serializable results. + provider : Union[Literal['fmp'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +InstitutionalOwnership +---------------------- +symbol : str + Symbol representing the entity requested in the data. +cik : Optional[Union[str]] + CIK of the company. +date : date + The date of the data. +investors_holding : int + Number of investors holding the stock. +last_investors_holding : int + Number of investors holding the stock in the last quarter. +investors_holding_change : int + Change in the number of investors holding the stock. +number_of_13f_shares : Optional[int] + Number of 13F shares. +last_number_of_13f_shares : Optional[int] + Number of 13F shares in the last quarter. +number_of_13f_shares_change : Optional[int] + Change in the number of 13F shares. +total_invested : float + Total amount invested. +last_total_invested : float + Total amount invested in the last quarter. +total_invested_change : float + Change in the total amount invested. +ownership_percent : float + Ownership percent. +last_ownership_percent : float + Ownership percent in the last quarter. +ownership_percent_change : float + Change in the ownership percent. +new_positions : int + Number of new positions. +last_new_positions : int + Number of new positions in the last quarter. +new_positions_change : int + Change in the number of new positions. +increased_positions : int + Number of increased positions. +last_increased_positions : int + Number of increased positions in the last quarter. +increased_positions_change : int + Change in the number of increased positions. +closed_positions : int + Number of closed positions. +last_closed_positions : int + Number of closed positions in the last quarter. +closed_positions_change : int + Change in the number of closed positions. +reduced_positions : int + Number of reduced positions. +last_reduced_positions : int + Number of reduced positions in the last quarter. +reduced_positions_change : int + Change in the number of reduced positions. +total_calls : int + Total number of call options contracts traded for Apple Inc. on the specified date. +last_total_calls : int + Total number of call options contracts traded for Apple Inc. on the previous reporting date. +total_calls_change : int + Change in the total number of call options contracts traded between the current and previous reporting dates. +total_puts : int + Total number of put options contracts traded for Apple Inc. on the specified date. +last_total_puts : int + Total number of put options contracts traded for Apple Inc. on the previous reporting date. +total_puts_change : int + Change in the total number of put options contracts traded between the current and previous reporting dates. +put_call_ratio : float + Put-call ratio, which is the ratio of the total number of put options to call options traded on the specified date. +last_put_call_ratio : float + Put-call ratio on the previous reporting date. +put_call_ratio_change : float + Change in the put-call ratio between the current and previous reporting dates. + +Example +------- +>>> from openbb import obb +>>> obb.stocks.fa.ins_own(symbol="AAPL") + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, - "include_current_quarter": include_current_quarter, - "date": date, - }, + provider_choices={"provider": provider, }, + standard_params={"symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, "include_current_quarter": include_current_quarter, "date": date, }, extra_params=kwargs, ) @@ -2054,195 +1704,175 @@ def ins_own( **inputs, ) + @validate - def metrics( - self, - symbol: typing_extensions.Annotated[ - Union[str, List[str]], - OpenBBCustomParameter(description="Symbol to get data for."), - ], - period: typing_extensions.Annotated[ - Union[Literal["annual", "quarter"], None], - OpenBBCustomParameter(description="Time period of the data to return."), - ] = "annual", - limit: typing_extensions.Annotated[ - Union[int, None], - OpenBBCustomParameter(description="The number of data entries to return."), - ] = 100, - provider: Union[Literal["fmp"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def metrics(self, symbol: typing_extensions.Annotated[Union[str, List[str]], OpenBBCustomParameter(description='Symbol to get data for.')], period: typing_extensions.Annotated[Union[Literal['annual', 'quarter'], None], OpenBBCustomParameter(description='Time period of the data to return.')] = 'annual', limit: typing_extensions.Annotated[Union[int, None], OpenBBCustomParameter(description='The number of data entries to return.')] = 100, provider: Union[Literal['fmp'], None] = None, **kwargs) -> OBBject[List[Data]]: """Key Metrics. Key metrics for a given company. - Parameters - ---------- - symbol : str - Symbol to get data for. - period : Union[Literal['annual', 'quarter'], None] - Time period of the data to return. - limit : Union[int, None] - The number of data entries to return. - provider : Union[Literal['fmp'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'fmp' if there is - no default. - with_ttm : Optional[Union[bool]] - Include trailing twelve months (TTM) data. (provider: fmp) - - Returns - ------- - OBBject - results : Union[List[KeyMetrics]] - Serializable results. - provider : Union[Literal['fmp'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - KeyMetrics - ---------- - symbol : Optional[Union[str]] - Symbol representing the entity requested in the data. - date : date - The date of the data. - period : str - Period of the data. - revenue_per_share : Optional[Union[float]] - Revenue per share - net_income_per_share : Optional[Union[float]] - Net income per share - operating_cash_flow_per_share : Optional[Union[float]] - Operating cash flow per share - free_cash_flow_per_share : Optional[Union[float]] - Free cash flow per share - cash_per_share : Optional[Union[float]] - Cash per share - book_value_per_share : Optional[Union[float]] - Book value per share - tangible_book_value_per_share : Optional[Union[float]] - Tangible book value per share - shareholders_equity_per_share : Optional[Union[float]] - Shareholders equity per share - interest_debt_per_share : Optional[Union[float]] - Interest debt per share - market_cap : Optional[Union[float]] - Market capitalization - enterprise_value : Optional[Union[float]] - Enterprise value - pe_ratio : Optional[Union[float]] - Price-to-earnings ratio (P/E ratio) - price_to_sales_ratio : Optional[Union[float]] - Price-to-sales ratio - pocf_ratio : Optional[Union[float]] - Price-to-operating cash flow ratio - pfcf_ratio : Optional[Union[float]] - Price-to-free cash flow ratio - pb_ratio : Optional[Union[float]] - Price-to-book ratio - ptb_ratio : Optional[Union[float]] - Price-to-tangible book ratio - ev_to_sales : Optional[Union[float]] - Enterprise value-to-sales ratio - enterprise_value_over_ebitda : Optional[Union[float]] - Enterprise value-to-EBITDA ratio - ev_to_operating_cash_flow : Optional[Union[float]] - Enterprise value-to-operating cash flow ratio - ev_to_free_cash_flow : Optional[Union[float]] - Enterprise value-to-free cash flow ratio - earnings_yield : Optional[Union[float]] - Earnings yield - free_cash_flow_yield : Optional[Union[float]] - Free cash flow yield - debt_to_equity : Optional[Union[float]] - Debt-to-equity ratio - debt_to_assets : Optional[Union[float]] - Debt-to-assets ratio - net_debt_to_ebitda : Optional[Union[float]] - Net debt-to-EBITDA ratio - current_ratio : Optional[Union[float]] - Current ratio - interest_coverage : Optional[Union[float]] - Interest coverage - income_quality : Optional[Union[float]] - Income quality - dividend_yield : Optional[Union[float]] - Dividend yield - payout_ratio : Optional[Union[float]] - Payout ratio - sales_general_and_administrative_to_revenue : Optional[Union[float]] - Sales general and administrative expenses-to-revenue ratio - research_and_development_to_revenue : Optional[Union[float]] - Research and development expenses-to-revenue ratio - intangibles_to_total_assets : Optional[Union[float]] - Intangibles-to-total assets ratio - capex_to_operating_cash_flow : Optional[Union[float]] - Capital expenditures-to-operating cash flow ratio - capex_to_revenue : Optional[Union[float]] - Capital expenditures-to-revenue ratio - capex_to_depreciation : Optional[Union[float]] - Capital expenditures-to-depreciation ratio - stock_based_compensation_to_revenue : Optional[Union[float]] - Stock-based compensation-to-revenue ratio - graham_number : Optional[Union[float]] - Graham number - roic : Optional[Union[float]] - Return on invested capital - return_on_tangible_assets : Optional[Union[float]] - Return on tangible assets - graham_net_net : Optional[Union[float]] - Graham net-net working capital - working_capital : Optional[Union[float]] - Working capital - tangible_asset_value : Optional[Union[float]] - Tangible asset value - net_current_asset_value : Optional[Union[float]] - Net current asset value - invested_capital : Optional[Union[float]] - Invested capital - average_receivables : Optional[Union[float]] - Average receivables - average_payables : Optional[Union[float]] - Average payables - average_inventory : Optional[Union[float]] - Average inventory - days_sales_outstanding : Optional[Union[float]] - Days sales outstanding - days_payables_outstanding : Optional[Union[float]] - Days payables outstanding - days_of_inventory_on_hand : Optional[Union[float]] - Days of inventory on hand - receivables_turnover : Optional[Union[float]] - Receivables turnover - payables_turnover : Optional[Union[float]] - Payables turnover - inventory_turnover : Optional[Union[float]] - Inventory turnover - roe : Optional[Union[float]] - Return on equity - capex_per_share : Optional[Union[float]] - Capital expenditures per share - calendar_year : Optional[int] - Calendar year. (provider: fmp) - - Example - ------- - >>> from openbb import obb - >>> obb.stocks.fa.metrics(symbol="AAPL", period="annual", limit=100) - """ # noqa: E501 +Parameters +---------- +symbol : str + Symbol to get data for. +period : Union[Literal['annual', 'quarter'], None] + Time period of the data to return. +limit : Union[int, None] + The number of data entries to return. +provider : Union[Literal['fmp'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fmp' if there is + no default. +with_ttm : Optional[Union[bool]] + Include trailing twelve months (TTM) data. (provider: fmp) + +Returns +------- +OBBject + results : Union[List[KeyMetrics]] + Serializable results. + provider : Union[Literal['fmp'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +KeyMetrics +---------- +symbol : Optional[Union[str]] + Symbol representing the entity requested in the data. +date : date + The date of the data. +period : str + Period of the data. +revenue_per_share : Optional[Union[float]] + Revenue per share +net_income_per_share : Optional[Union[float]] + Net income per share +operating_cash_flow_per_share : Optional[Union[float]] + Operating cash flow per share +free_cash_flow_per_share : Optional[Union[float]] + Free cash flow per share +cash_per_share : Optional[Union[float]] + Cash per share +book_value_per_share : Optional[Union[float]] + Book value per share +tangible_book_value_per_share : Optional[Union[float]] + Tangible book value per share +shareholders_equity_per_share : Optional[Union[float]] + Shareholders equity per share +interest_debt_per_share : Optional[Union[float]] + Interest debt per share +market_cap : Optional[Union[float]] + Market capitalization +enterprise_value : Optional[Union[float]] + Enterprise value +pe_ratio : Optional[Union[float]] + Price-to-earnings ratio (P/E ratio) +price_to_sales_ratio : Optional[Union[float]] + Price-to-sales ratio +pocf_ratio : Optional[Union[float]] + Price-to-operating cash flow ratio +pfcf_ratio : Optional[Union[float]] + Price-to-free cash flow ratio +pb_ratio : Optional[Union[float]] + Price-to-book ratio +ptb_ratio : Optional[Union[float]] + Price-to-tangible book ratio +ev_to_sales : Optional[Union[float]] + Enterprise value-to-sales ratio +enterprise_value_over_ebitda : Optional[Union[float]] + Enterprise value-to-EBITDA ratio +ev_to_operating_cash_flow : Optional[Union[float]] + Enterprise value-to-operating cash flow ratio +ev_to_free_cash_flow : Optional[Union[float]] + Enterprise value-to-free cash flow ratio +earnings_yield : Optional[Union[float]] + Earnings yield +free_cash_flow_yield : Optional[Union[float]] + Free cash flow yield +debt_to_equity : Optional[Union[float]] + Debt-to-equity ratio +debt_to_assets : Optional[Union[float]] + Debt-to-assets ratio +net_debt_to_ebitda : Optional[Union[float]] + Net debt-to-EBITDA ratio +current_ratio : Optional[Union[float]] + Current ratio +interest_coverage : Optional[Union[float]] + Interest coverage +income_quality : Optional[Union[float]] + Income quality +dividend_yield : Optional[Union[float]] + Dividend yield +payout_ratio : Optional[Union[float]] + Payout ratio +sales_general_and_administrative_to_revenue : Optional[Union[float]] + Sales general and administrative expenses-to-revenue ratio +research_and_development_to_revenue : Optional[Union[float]] + Research and development expenses-to-revenue ratio +intangibles_to_total_assets : Optional[Union[float]] + Intangibles-to-total assets ratio +capex_to_operating_cash_flow : Optional[Union[float]] + Capital expenditures-to-operating cash flow ratio +capex_to_revenue : Optional[Union[float]] + Capital expenditures-to-revenue ratio +capex_to_depreciation : Optional[Union[float]] + Capital expenditures-to-depreciation ratio +stock_based_compensation_to_revenue : Optional[Union[float]] + Stock-based compensation-to-revenue ratio +graham_number : Optional[Union[float]] + Graham number +roic : Optional[Union[float]] + Return on invested capital +return_on_tangible_assets : Optional[Union[float]] + Return on tangible assets +graham_net_net : Optional[Union[float]] + Graham net-net working capital +working_capital : Optional[Union[float]] + Working capital +tangible_asset_value : Optional[Union[float]] + Tangible asset value +net_current_asset_value : Optional[Union[float]] + Net current asset value +invested_capital : Optional[Union[float]] + Invested capital +average_receivables : Optional[Union[float]] + Average receivables +average_payables : Optional[Union[float]] + Average payables +average_inventory : Optional[Union[float]] + Average inventory +days_sales_outstanding : Optional[Union[float]] + Days sales outstanding +days_payables_outstanding : Optional[Union[float]] + Days payables outstanding +days_of_inventory_on_hand : Optional[Union[float]] + Days of inventory on hand +receivables_turnover : Optional[Union[float]] + Receivables turnover +payables_turnover : Optional[Union[float]] + Payables turnover +inventory_turnover : Optional[Union[float]] + Inventory turnover +roe : Optional[Union[float]] + Return on equity +capex_per_share : Optional[Union[float]] + Capital expenditures per share +calendar_year : Optional[int] + Calendar year. (provider: fmp) + +Example +------- +>>> from openbb import obb +>>> obb.stocks.fa.metrics(symbol="AAPL", period="annual", limit=100) + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, - "period": period, - "limit": limit, - }, + provider_choices={"provider": provider, }, + standard_params={"symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, "period": period, "limit": limit, }, extra_params=kwargs, ) @@ -2251,71 +1881,61 @@ def metrics( **inputs, ) + @validate - def mgmt( - self, - symbol: typing_extensions.Annotated[ - Union[str, List[str]], - OpenBBCustomParameter(description="Symbol to get data for."), - ], - provider: Union[Literal["fmp"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def mgmt(self, symbol: typing_extensions.Annotated[Union[str, List[str]], OpenBBCustomParameter(description='Symbol to get data for.')], provider: Union[Literal['fmp'], None] = None, **kwargs) -> OBBject[List[Data]]: """Key Executives. Key executives for a given company. - Parameters - ---------- - symbol : str - Symbol to get data for. - provider : Union[Literal['fmp'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'fmp' if there is - no default. - - Returns - ------- - OBBject - results : Union[List[KeyExecutives]] - Serializable results. - provider : Union[Literal['fmp'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - KeyExecutives - ------------- - title : str - Designation of the key executive. - name : str - Name of the key executive. - pay : Optional[int] - Pay of the key executive. - currency_pay : str - Currency of the pay. - gender : Optional[Union[str]] - Gender of the key executive. - year_born : Optional[int] - Birth year of the key executive. - title_since : Optional[int] - Date the tile was held since. - - Example - ------- - >>> from openbb import obb - >>> obb.stocks.fa.mgmt(symbol="AAPL") - """ # noqa: E501 +Parameters +---------- +symbol : str + Symbol to get data for. +provider : Union[Literal['fmp'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fmp' if there is + no default. + +Returns +------- +OBBject + results : Union[List[KeyExecutives]] + Serializable results. + provider : Union[Literal['fmp'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +KeyExecutives +------------- +title : str + Designation of the key executive. +name : str + Name of the key executive. +pay : Optional[int] + Pay of the key executive. +currency_pay : str + Currency of the pay. +gender : Optional[Union[str]] + Gender of the key executive. +year_born : Optional[int] + Birth year of the key executive. +title_since : Optional[int] + Date the tile was held since. + +Example +------- +>>> from openbb import obb +>>> obb.stocks.fa.mgmt(symbol="AAPL") + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, - }, + provider_choices={"provider": provider, }, + standard_params={"symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, }, extra_params=kwargs, ) @@ -2324,129 +1944,119 @@ def mgmt( **inputs, ) + @validate - def overview( - self, - symbol: typing_extensions.Annotated[ - Union[str, List[str]], - OpenBBCustomParameter(description="Symbol to get data for."), - ], - provider: Union[Literal["fmp"], None] = None, - **kwargs - ) -> OBBject[Data]: + def overview(self, symbol: typing_extensions.Annotated[Union[str, List[str]], OpenBBCustomParameter(description='Symbol to get data for.')], provider: Union[Literal['fmp'], None] = None, **kwargs) -> OBBject[Data]: """Company Overview. General information about a company. - Parameters - ---------- - symbol : str - Symbol to get data for. - provider : Union[Literal['fmp'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'fmp' if there is - no default. - - Returns - ------- - OBBject - results : Union[CompanyOverview] - Serializable results. - provider : Union[Literal['fmp'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - CompanyOverview - --------------- - symbol : str - Symbol representing the entity requested in the data. - price : Optional[Union[float]] - Price of the company. - beta : Optional[Union[float]] - Beta of the company. - vol_avg : Optional[int] - Volume average of the company. - mkt_cap : Optional[int] - Market capitalization of the company. - last_div : Optional[Union[float]] - Last dividend of the company. - range : Optional[Union[str]] - Range of the company. - changes : Optional[Union[float]] - Changes of the company. - company_name : Optional[Union[str]] - Company name of the company. - currency : Optional[Union[str]] - Currency of the company. - cik : Optional[Union[str]] - CIK of the company. - isin : Optional[Union[str]] - ISIN of the company. - cusip : Optional[Union[str]] - CUSIP of the company. - exchange : Optional[Union[str]] - Exchange of the company. - exchange_short_name : Optional[Union[str]] - Exchange short name of the company. - industry : Optional[Union[str]] - Industry of the company. - website : Optional[Union[str]] - Website of the company. - description : Optional[Union[str]] - Description of the company. - ceo : Optional[Union[str]] - CEO of the company. - sector : Optional[Union[str]] - Sector of the company. - country : Optional[Union[str]] - Country of the company. - full_time_employees : Optional[Union[str]] - Full time employees of the company. - phone : Optional[Union[str]] - Phone of the company. - address : Optional[Union[str]] - Address of the company. - city : Optional[Union[str]] - City of the company. - state : Optional[Union[str]] - State of the company. - zip : Optional[Union[str]] - Zip of the company. - dcf_diff : Optional[Union[float]] - Discounted cash flow difference of the company. - dcf : Optional[Union[float]] - Discounted cash flow of the company. - image : Optional[Union[str]] - Image of the company. - ipo_date : Optional[Union[date]] - IPO date of the company. - default_image : bool - If the image is the default image. - is_etf : bool - If the company is an ETF. - is_actively_trading : bool - If the company is actively trading. - is_adr : bool - If the company is an ADR. - is_fund : bool - If the company is a fund. - - Example - ------- - >>> from openbb import obb - >>> obb.stocks.fa.overview(symbol="AAPL") - """ # noqa: E501 +Parameters +---------- +symbol : str + Symbol to get data for. +provider : Union[Literal['fmp'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fmp' if there is + no default. + +Returns +------- +OBBject + results : Union[CompanyOverview] + Serializable results. + provider : Union[Literal['fmp'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +CompanyOverview +--------------- +symbol : str + Symbol representing the entity requested in the data. +price : Optional[Union[float]] + Price of the company. +beta : Optional[Union[float]] + Beta of the company. +vol_avg : Optional[int] + Volume average of the company. +mkt_cap : Optional[int] + Market capitalization of the company. +last_div : Optional[Union[float]] + Last dividend of the company. +range : Optional[Union[str]] + Range of the company. +changes : Optional[Union[float]] + Changes of the company. +company_name : Optional[Union[str]] + Company name of the company. +currency : Optional[Union[str]] + Currency of the company. +cik : Optional[Union[str]] + CIK of the company. +isin : Optional[Union[str]] + ISIN of the company. +cusip : Optional[Union[str]] + CUSIP of the company. +exchange : Optional[Union[str]] + Exchange of the company. +exchange_short_name : Optional[Union[str]] + Exchange short name of the company. +industry : Optional[Union[str]] + Industry of the company. +website : Optional[Union[str]] + Website of the company. +description : Optional[Union[str]] + Description of the company. +ceo : Optional[Union[str]] + CEO of the company. +sector : Optional[Union[str]] + Sector of the company. +country : Optional[Union[str]] + Country of the company. +full_time_employees : Optional[Union[str]] + Full time employees of the company. +phone : Optional[Union[str]] + Phone of the company. +address : Optional[Union[str]] + Address of the company. +city : Optional[Union[str]] + City of the company. +state : Optional[Union[str]] + State of the company. +zip : Optional[Union[str]] + Zip of the company. +dcf_diff : Optional[Union[float]] + Discounted cash flow difference of the company. +dcf : Optional[Union[float]] + Discounted cash flow of the company. +image : Optional[Union[str]] + Image of the company. +ipo_date : Optional[Union[date]] + IPO date of the company. +default_image : bool + If the image is the default image. +is_etf : bool + If the company is an ETF. +is_actively_trading : bool + If the company is actively trading. +is_adr : bool + If the company is an ADR. +is_fund : bool + If the company is a fund. + +Example +------- +>>> from openbb import obb +>>> obb.stocks.fa.overview(symbol="AAPL") + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, - }, + provider_choices={"provider": provider, }, + standard_params={"symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, }, extra_params=kwargs, ) @@ -2455,149 +2065,129 @@ def overview( **inputs, ) + @validate - def own( - self, - symbol: typing_extensions.Annotated[ - Union[str, List[str]], - OpenBBCustomParameter(description="Symbol to get data for."), - ], - date: typing_extensions.Annotated[ - Union[datetime.date, None], - OpenBBCustomParameter(description="A specific date to get data for."), - ] = None, - page: typing_extensions.Annotated[ - Union[int, None], - OpenBBCustomParameter(description="Page number of the data to fetch."), - ] = 0, - provider: Union[Literal["fmp"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def own(self, symbol: typing_extensions.Annotated[Union[str, List[str]], OpenBBCustomParameter(description='Symbol to get data for.')], date: typing_extensions.Annotated[Union[datetime.date, None], OpenBBCustomParameter(description='A specific date to get data for.')] = None, page: typing_extensions.Annotated[Union[int, None], OpenBBCustomParameter(description='Page number of the data to fetch.')] = 0, provider: Union[Literal['fmp'], None] = None, **kwargs) -> OBBject[List[Data]]: """Stock Ownership. Information about the company ownership. - Parameters - ---------- - symbol : str - Symbol to get data for. - date : Union[datetime.date, None] - A specific date to get data for. - page : Union[int, None] - Page number of the data to fetch. - provider : Union[Literal['fmp'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'fmp' if there is - no default. - - Returns - ------- - OBBject - results : Union[List[StockOwnership]] - Serializable results. - provider : Union[Literal['fmp'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - StockOwnership - -------------- - date : date - The date of the data. - cik : int - Cik of the stock ownership. - filing_date : date - Filing date of the stock ownership. - investor_name : str - Investor name of the stock ownership. - symbol : str - Symbol representing the entity requested in the data. - security_name : str - Security name of the stock ownership. - type_of_security : str - Type of security of the stock ownership. - security_cusip : str - Security cusip of the stock ownership. - shares_type : str - Shares type of the stock ownership. - put_call_share : str - Put call share of the stock ownership. - investment_discretion : str - Investment discretion of the stock ownership. - industry_title : str - Industry title of the stock ownership. - weight : float - Weight of the stock ownership. - last_weight : float - Last weight of the stock ownership. - change_in_weight : float - Change in weight of the stock ownership. - change_in_weight_percentage : float - Change in weight percentage of the stock ownership. - market_value : int - Market value of the stock ownership. - last_market_value : int - Last market value of the stock ownership. - change_in_market_value : int - Change in market value of the stock ownership. - change_in_market_value_percentage : float - Change in market value percentage of the stock ownership. - shares_number : int - Shares number of the stock ownership. - last_shares_number : int - Last shares number of the stock ownership. - change_in_shares_number : float - Change in shares number of the stock ownership. - change_in_shares_number_percentage : float - Change in shares number percentage of the stock ownership. - quarter_end_price : float - Quarter end price of the stock ownership. - avg_price_paid : float - Average price paid of the stock ownership. - is_new : bool - Is the stock ownership new. - is_sold_out : bool - Is the stock ownership sold out. - ownership : float - How much is the ownership. - last_ownership : float - Last ownership amount. - change_in_ownership : float - Change in ownership amount. - change_in_ownership_percentage : float - Change in ownership percentage. - holding_period : int - Holding period of the stock ownership. - first_added : date - First added date of the stock ownership. - performance : float - Performance of the stock ownership. - performance_percentage : float - Performance percentage of the stock ownership. - last_performance : float - Last performance of the stock ownership. - change_in_performance : float - Change in performance of the stock ownership. - is_counted_for_performance : bool - Is the stock ownership counted for performance. - - Example - ------- - >>> from openbb import obb - >>> obb.stocks.fa.own(symbol="AAPL") - """ # noqa: E501 +Parameters +---------- +symbol : str + Symbol to get data for. +date : Union[datetime.date, None] + A specific date to get data for. +page : Union[int, None] + Page number of the data to fetch. +provider : Union[Literal['fmp'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fmp' if there is + no default. + +Returns +------- +OBBject + results : Union[List[StockOwnership]] + Serializable results. + provider : Union[Literal['fmp'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +StockOwnership +-------------- +date : date + The date of the data. +cik : int + Cik of the stock ownership. +filing_date : date + Filing date of the stock ownership. +investor_name : str + Investor name of the stock ownership. +symbol : str + Symbol representing the entity requested in the data. +security_name : str + Security name of the stock ownership. +type_of_security : str + Type of security of the stock ownership. +security_cusip : str + Security cusip of the stock ownership. +shares_type : str + Shares type of the stock ownership. +put_call_share : str + Put call share of the stock ownership. +investment_discretion : str + Investment discretion of the stock ownership. +industry_title : str + Industry title of the stock ownership. +weight : float + Weight of the stock ownership. +last_weight : float + Last weight of the stock ownership. +change_in_weight : float + Change in weight of the stock ownership. +change_in_weight_percentage : float + Change in weight percentage of the stock ownership. +market_value : int + Market value of the stock ownership. +last_market_value : int + Last market value of the stock ownership. +change_in_market_value : int + Change in market value of the stock ownership. +change_in_market_value_percentage : float + Change in market value percentage of the stock ownership. +shares_number : int + Shares number of the stock ownership. +last_shares_number : int + Last shares number of the stock ownership. +change_in_shares_number : float + Change in shares number of the stock ownership. +change_in_shares_number_percentage : float + Change in shares number percentage of the stock ownership. +quarter_end_price : float + Quarter end price of the stock ownership. +avg_price_paid : float + Average price paid of the stock ownership. +is_new : bool + Is the stock ownership new. +is_sold_out : bool + Is the stock ownership sold out. +ownership : float + How much is the ownership. +last_ownership : float + Last ownership amount. +change_in_ownership : float + Change in ownership amount. +change_in_ownership_percentage : float + Change in ownership percentage. +holding_period : int + Holding period of the stock ownership. +first_added : date + First added date of the stock ownership. +performance : float + Performance of the stock ownership. +performance_percentage : float + Performance percentage of the stock ownership. +last_performance : float + Last performance of the stock ownership. +change_in_performance : float + Change in performance of the stock ownership. +is_counted_for_performance : bool + Is the stock ownership counted for performance. + +Example +------- +>>> from openbb import obb +>>> obb.stocks.fa.own(symbol="AAPL") + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, - "date": date, - "page": page, - }, + provider_choices={"provider": provider, }, + standard_params={"symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, "date": date, "page": page, }, extra_params=kwargs, ) @@ -2606,67 +2196,57 @@ def own( **inputs, ) + @validate - def pt( - self, - symbol: typing_extensions.Annotated[ - Union[str, List[str]], - OpenBBCustomParameter(description="Symbol to get data for."), - ], - provider: Union[Literal["fmp"], None] = None, - **kwargs - ) -> OBBject[Data]: + def pt(self, symbol: typing_extensions.Annotated[Union[str, List[str]], OpenBBCustomParameter(description='Symbol to get data for.')], provider: Union[Literal['fmp'], None] = None, **kwargs) -> OBBject[Data]: """Price Target Consensus. Price target consensus data. - Parameters - ---------- - symbol : str - Symbol to get data for. - provider : Union[Literal['fmp'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'fmp' if there is - no default. - - Returns - ------- - OBBject - results : Union[PriceTargetConsensus] - Serializable results. - provider : Union[Literal['fmp'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - PriceTargetConsensus - -------------------- - symbol : str - Symbol representing the entity requested in the data. - target_high : Optional[Union[float]] - High target of the price target consensus. - target_low : Optional[Union[float]] - Low target of the price target consensus. - target_consensus : Optional[Union[float]] - Consensus target of the price target consensus. - target_median : Optional[Union[float]] - Median target of the price target consensus. - - Example - ------- - >>> from openbb import obb - >>> obb.stocks.fa.pt(symbol="AAPL") - """ # noqa: E501 +Parameters +---------- +symbol : str + Symbol to get data for. +provider : Union[Literal['fmp'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fmp' if there is + no default. + +Returns +------- +OBBject + results : Union[PriceTargetConsensus] + Serializable results. + provider : Union[Literal['fmp'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +PriceTargetConsensus +-------------------- +symbol : str + Symbol representing the entity requested in the data. +target_high : Optional[Union[float]] + High target of the price target consensus. +target_low : Optional[Union[float]] + Low target of the price target consensus. +target_consensus : Optional[Union[float]] + Consensus target of the price target consensus. +target_median : Optional[Union[float]] + Median target of the price target consensus. + +Example +------- +>>> from openbb import obb +>>> obb.stocks.fa.pt(symbol="AAPL") + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, - }, + provider_choices={"provider": provider, }, + standard_params={"symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, }, extra_params=kwargs, ) @@ -2675,87 +2255,77 @@ def pt( **inputs, ) + @validate - def pta( - self, - symbol: typing_extensions.Annotated[ - Union[str, List[str]], - OpenBBCustomParameter(description="Symbol to get data for."), - ], - provider: Union[Literal["fmp"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def pta(self, symbol: typing_extensions.Annotated[Union[str, List[str]], OpenBBCustomParameter(description='Symbol to get data for.')], provider: Union[Literal['fmp'], None] = None, **kwargs) -> OBBject[List[Data]]: """Price Target. Price target data. - Parameters - ---------- - symbol : str - Symbol to get data for. - provider : Union[Literal['fmp'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'fmp' if there is - no default. - with_grade : bool - Include upgrades and downgrades in the response. (provider: fmp) - - Returns - ------- - OBBject - results : Union[List[PriceTarget]] - Serializable results. - provider : Union[Literal['fmp'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - PriceTarget - ----------- - symbol : str - Symbol representing the entity requested in the data. - published_date : datetime - Published date of the price target. - news_url : Optional[Union[str]] - News URL of the price target. - news_title : Optional[Union[str]] - News title of the price target. - analyst_name : Optional[Union[str]] - Analyst name. - analyst_company : Optional[Union[str]] - Analyst company. - price_target : Optional[Union[float]] - Price target. - adj_price_target : Optional[Union[float]] - Adjusted price target. - price_when_posted : Optional[Union[float]] - Price when posted. - news_publisher : Optional[Union[str]] - News publisher of the price target. - news_base_url : Optional[Union[str]] - News base URL of the price target. - new_grade : Optional[Union[str]] - New grade (provider: fmp) - previous_grade : Optional[Union[str]] - Previous grade (provider: fmp) - grading_company : Optional[Union[str]] - Grading company (provider: fmp) - - Example - ------- - >>> from openbb import obb - >>> obb.stocks.fa.pta(symbol="AAPL") - """ # noqa: E501 +Parameters +---------- +symbol : str + Symbol to get data for. +provider : Union[Literal['fmp'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fmp' if there is + no default. +with_grade : bool + Include upgrades and downgrades in the response. (provider: fmp) + +Returns +------- +OBBject + results : Union[List[PriceTarget]] + Serializable results. + provider : Union[Literal['fmp'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +PriceTarget +----------- +symbol : str + Symbol representing the entity requested in the data. +published_date : datetime + Published date of the price target. +news_url : Optional[Union[str]] + News URL of the price target. +news_title : Optional[Union[str]] + News title of the price target. +analyst_name : Optional[Union[str]] + Analyst name. +analyst_company : Optional[Union[str]] + Analyst company. +price_target : Optional[Union[float]] + Price target. +adj_price_target : Optional[Union[float]] + Adjusted price target. +price_when_posted : Optional[Union[float]] + Price when posted. +news_publisher : Optional[Union[str]] + News publisher of the price target. +news_base_url : Optional[Union[str]] + News base URL of the price target. +new_grade : Optional[Union[str]] + New grade (provider: fmp) +previous_grade : Optional[Union[str]] + Previous grade (provider: fmp) +grading_company : Optional[Union[str]] + Grading company (provider: fmp) + +Example +------- +>>> from openbb import obb +>>> obb.stocks.fa.pta(symbol="AAPL") + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, - }, + provider_choices={"provider": provider, }, + standard_params={"symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, }, extra_params=kwargs, ) @@ -2764,187 +2334,167 @@ def pta( **inputs, ) + @validate - def ratios( - self, - symbol: typing_extensions.Annotated[ - Union[str, List[str]], - OpenBBCustomParameter(description="Symbol to get data for."), - ], - period: typing_extensions.Annotated[ - Literal["annual", "quarter"], - OpenBBCustomParameter(description="Time period of the data to return."), - ] = "annual", - limit: typing_extensions.Annotated[ - int, - OpenBBCustomParameter(description="The number of data entries to return."), - ] = 12, - provider: Union[Literal["fmp"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def ratios(self, symbol: typing_extensions.Annotated[Union[str, List[str]], OpenBBCustomParameter(description='Symbol to get data for.')], period: typing_extensions.Annotated[Literal['annual', 'quarter'], OpenBBCustomParameter(description='Time period of the data to return.')] = 'annual', limit: typing_extensions.Annotated[int, OpenBBCustomParameter(description='The number of data entries to return.')] = 12, provider: Union[Literal['fmp'], None] = None, **kwargs) -> OBBject[List[Data]]: """Extensive set of ratios over time. Financial ratios for a given company. - Parameters - ---------- - symbol : str - Symbol to get data for. - period : Literal['annual', 'quarter'] - Time period of the data to return. - limit : int - The number of data entries to return. - provider : Union[Literal['fmp'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'fmp' if there is - no default. - with_ttm : Optional[Union[bool]] - Include trailing twelve months (TTM) data. (provider: fmp) - - Returns - ------- - OBBject - results : Union[List[FinancialRatios]] - Serializable results. - provider : Union[Literal['fmp'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - FinancialRatios - --------------- - symbol : str - Symbol representing the entity requested in the data. - date : str - The date of the data. - period : str - Period of the financial ratios. - current_ratio : Optional[Union[float]] - Current ratio. - quick_ratio : Optional[Union[float]] - Quick ratio. - cash_ratio : Optional[Union[float]] - Cash ratio. - days_of_sales_outstanding : Optional[Union[float]] - Days of sales outstanding. - days_of_inventory_outstanding : Optional[Union[float]] - Days of inventory outstanding. - operating_cycle : Optional[Union[float]] - Operating cycle. - days_of_payables_outstanding : Optional[Union[float]] - Days of payables outstanding. - cash_conversion_cycle : Optional[Union[float]] - Cash conversion cycle. - gross_profit_margin : Optional[Union[float]] - Gross profit margin. - operating_profit_margin : Optional[Union[float]] - Operating profit margin. - pretax_profit_margin : Optional[Union[float]] - Pretax profit margin. - net_profit_margin : Optional[Union[float]] - Net profit margin. - effective_tax_rate : Optional[Union[float]] - Effective tax rate. - return_on_assets : Optional[Union[float]] - Return on assets. - return_on_equity : Optional[Union[float]] - Return on equity. - return_on_capital_employed : Optional[Union[float]] - Return on capital employed. - net_income_per_ebt : Optional[Union[float]] - Net income per EBT. - ebt_per_ebit : Optional[Union[float]] - EBT per EBIT. - ebit_per_revenue : Optional[Union[float]] - EBIT per revenue. - debt_ratio : Optional[Union[float]] - Debt ratio. - debt_equity_ratio : Optional[Union[float]] - Debt equity ratio. - long_term_debt_to_capitalization : Optional[Union[float]] - Long term debt to capitalization. - total_debt_to_capitalization : Optional[Union[float]] - Total debt to capitalization. - interest_coverage : Optional[Union[float]] - Interest coverage. - cash_flow_to_debt_ratio : Optional[Union[float]] - Cash flow to debt ratio. - company_equity_multiplier : Optional[Union[float]] - Company equity multiplier. - receivables_turnover : Optional[Union[float]] - Receivables turnover. - payables_turnover : Optional[Union[float]] - Payables turnover. - inventory_turnover : Optional[Union[float]] - Inventory turnover. - fixed_asset_turnover : Optional[Union[float]] - Fixed asset turnover. - asset_turnover : Optional[Union[float]] - Asset turnover. - operating_cash_flow_per_share : Optional[Union[float]] - Operating cash flow per share. - free_cash_flow_per_share : Optional[Union[float]] - Free cash flow per share. - cash_per_share : Optional[Union[float]] - Cash per share. - payout_ratio : Optional[Union[float]] - Payout ratio. - operating_cash_flow_sales_ratio : Optional[Union[float]] - Operating cash flow sales ratio. - free_cash_flow_operating_cash_flow_ratio : Optional[Union[float]] - Free cash flow operating cash flow ratio. - cash_flow_coverage_ratios : Optional[Union[float]] - Cash flow coverage ratios. - short_term_coverage_ratios : Optional[Union[float]] - Short term coverage ratios. - capital_expenditure_coverage_ratio : Optional[Union[float]] - Capital expenditure coverage ratio. - dividend_paid_and_capex_coverage_ratio : Optional[Union[float]] - Dividend paid and capex coverage ratio. - dividend_payout_ratio : Optional[Union[float]] - Dividend payout ratio. - price_book_value_ratio : Optional[Union[float]] - Price book value ratio. - price_to_book_ratio : Optional[Union[float]] - Price to book ratio. - price_to_sales_ratio : Optional[Union[float]] - Price to sales ratio. - price_earnings_ratio : Optional[Union[float]] - Price earnings ratio. - price_to_free_cash_flows_ratio : Optional[Union[float]] - Price to free cash flows ratio. - price_to_operating_cash_flows_ratio : Optional[Union[float]] - Price to operating cash flows ratio. - price_cash_flow_ratio : Optional[Union[float]] - Price cash flow ratio. - price_earnings_to_growth_ratio : Optional[Union[float]] - Price earnings to growth ratio. - price_sales_ratio : Optional[Union[float]] - Price sales ratio. - dividend_yield : Optional[Union[float]] - Dividend yield. - enterprise_value_multiple : Optional[Union[float]] - Enterprise value multiple. - price_fair_value : Optional[Union[float]] - Price fair value. - - Example - ------- - >>> from openbb import obb - >>> obb.stocks.fa.ratios(symbol="AAPL", period="annual", limit=12) - """ # noqa: E501 +Parameters +---------- +symbol : str + Symbol to get data for. +period : Literal['annual', 'quarter'] + Time period of the data to return. +limit : int + The number of data entries to return. +provider : Union[Literal['fmp'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fmp' if there is + no default. +with_ttm : Optional[Union[bool]] + Include trailing twelve months (TTM) data. (provider: fmp) + +Returns +------- +OBBject + results : Union[List[FinancialRatios]] + Serializable results. + provider : Union[Literal['fmp'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +FinancialRatios +--------------- +symbol : str + Symbol representing the entity requested in the data. +date : str + The date of the data. +period : str + Period of the financial ratios. +current_ratio : Optional[Union[float]] + Current ratio. +quick_ratio : Optional[Union[float]] + Quick ratio. +cash_ratio : Optional[Union[float]] + Cash ratio. +days_of_sales_outstanding : Optional[Union[float]] + Days of sales outstanding. +days_of_inventory_outstanding : Optional[Union[float]] + Days of inventory outstanding. +operating_cycle : Optional[Union[float]] + Operating cycle. +days_of_payables_outstanding : Optional[Union[float]] + Days of payables outstanding. +cash_conversion_cycle : Optional[Union[float]] + Cash conversion cycle. +gross_profit_margin : Optional[Union[float]] + Gross profit margin. +operating_profit_margin : Optional[Union[float]] + Operating profit margin. +pretax_profit_margin : Optional[Union[float]] + Pretax profit margin. +net_profit_margin : Optional[Union[float]] + Net profit margin. +effective_tax_rate : Optional[Union[float]] + Effective tax rate. +return_on_assets : Optional[Union[float]] + Return on assets. +return_on_equity : Optional[Union[float]] + Return on equity. +return_on_capital_employed : Optional[Union[float]] + Return on capital employed. +net_income_per_ebt : Optional[Union[float]] + Net income per EBT. +ebt_per_ebit : Optional[Union[float]] + EBT per EBIT. +ebit_per_revenue : Optional[Union[float]] + EBIT per revenue. +debt_ratio : Optional[Union[float]] + Debt ratio. +debt_equity_ratio : Optional[Union[float]] + Debt equity ratio. +long_term_debt_to_capitalization : Optional[Union[float]] + Long term debt to capitalization. +total_debt_to_capitalization : Optional[Union[float]] + Total debt to capitalization. +interest_coverage : Optional[Union[float]] + Interest coverage. +cash_flow_to_debt_ratio : Optional[Union[float]] + Cash flow to debt ratio. +company_equity_multiplier : Optional[Union[float]] + Company equity multiplier. +receivables_turnover : Optional[Union[float]] + Receivables turnover. +payables_turnover : Optional[Union[float]] + Payables turnover. +inventory_turnover : Optional[Union[float]] + Inventory turnover. +fixed_asset_turnover : Optional[Union[float]] + Fixed asset turnover. +asset_turnover : Optional[Union[float]] + Asset turnover. +operating_cash_flow_per_share : Optional[Union[float]] + Operating cash flow per share. +free_cash_flow_per_share : Optional[Union[float]] + Free cash flow per share. +cash_per_share : Optional[Union[float]] + Cash per share. +payout_ratio : Optional[Union[float]] + Payout ratio. +operating_cash_flow_sales_ratio : Optional[Union[float]] + Operating cash flow sales ratio. +free_cash_flow_operating_cash_flow_ratio : Optional[Union[float]] + Free cash flow operating cash flow ratio. +cash_flow_coverage_ratios : Optional[Union[float]] + Cash flow coverage ratios. +short_term_coverage_ratios : Optional[Union[float]] + Short term coverage ratios. +capital_expenditure_coverage_ratio : Optional[Union[float]] + Capital expenditure coverage ratio. +dividend_paid_and_capex_coverage_ratio : Optional[Union[float]] + Dividend paid and capex coverage ratio. +dividend_payout_ratio : Optional[Union[float]] + Dividend payout ratio. +price_book_value_ratio : Optional[Union[float]] + Price book value ratio. +price_to_book_ratio : Optional[Union[float]] + Price to book ratio. +price_to_sales_ratio : Optional[Union[float]] + Price to sales ratio. +price_earnings_ratio : Optional[Union[float]] + Price earnings ratio. +price_to_free_cash_flows_ratio : Optional[Union[float]] + Price to free cash flows ratio. +price_to_operating_cash_flows_ratio : Optional[Union[float]] + Price to operating cash flows ratio. +price_cash_flow_ratio : Optional[Union[float]] + Price cash flow ratio. +price_earnings_to_growth_ratio : Optional[Union[float]] + Price earnings to growth ratio. +price_sales_ratio : Optional[Union[float]] + Price sales ratio. +dividend_yield : Optional[Union[float]] + Dividend yield. +enterprise_value_multiple : Optional[Union[float]] + Enterprise value multiple. +price_fair_value : Optional[Union[float]] + Price fair value. + +Example +------- +>>> from openbb import obb +>>> obb.stocks.fa.ratios(symbol="AAPL", period="annual", limit=12) + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, - "period": period, - "limit": limit, - }, + provider_choices={"provider": provider, }, + standard_params={"symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, "period": period, "limit": limit, }, extra_params=kwargs, ) @@ -2953,85 +2503,65 @@ def ratios( **inputs, ) + @validate - def revgeo( - self, - symbol: typing_extensions.Annotated[ - Union[str, List[str]], - OpenBBCustomParameter(description="Symbol to get data for."), - ], - period: typing_extensions.Annotated[ - Literal["quarter", "annual"], - OpenBBCustomParameter(description="Time period of the data to return."), - ] = "annual", - structure: typing_extensions.Annotated[ - Literal["hierarchical", "flat"], - OpenBBCustomParameter(description="Structure of the returned data."), - ] = "flat", - provider: Union[Literal["fmp"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def revgeo(self, symbol: typing_extensions.Annotated[Union[str, List[str]], OpenBBCustomParameter(description='Symbol to get data for.')], period: typing_extensions.Annotated[Literal['quarter', 'annual'], OpenBBCustomParameter(description='Time period of the data to return.')] = 'annual', structure: typing_extensions.Annotated[Literal['hierarchical', 'flat'], OpenBBCustomParameter(description='Structure of the returned data.')] = 'flat', provider: Union[Literal['fmp'], None] = None, **kwargs) -> OBBject[List[Data]]: """Revenue Geographic. Geographic revenue data. - Parameters - ---------- - symbol : str - Symbol to get data for. - period : Literal['quarter', 'annual'] - Time period of the data to return. - structure : Literal['hierarchical', 'flat'] - Structure of the returned data. - provider : Union[Literal['fmp'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'fmp' if there is - no default. - - Returns - ------- - OBBject - results : Union[List[RevenueGeographic]] - Serializable results. - provider : Union[Literal['fmp'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - RevenueGeographic - ----------------- - date : date - The date of the data. - geographic_segment : Dict[str, int] - Day level data containing the revenue of the geographic segment. - americas : Optional[int] - Revenue from the the American segment. - europe : Optional[int] - Revenue from the the European segment. - greater_china : Optional[int] - Revenue from the the Greater China segment. - japan : Optional[int] - Revenue from the the Japan segment. - rest_of_asia_pacific : Optional[int] - Revenue from the the Rest of Asia Pacific segment. - - Example - ------- - >>> from openbb import obb - >>> obb.stocks.fa.revgeo(symbol="AAPL", period="annual", structure="flat") - """ # noqa: E501 +Parameters +---------- +symbol : str + Symbol to get data for. +period : Literal['quarter', 'annual'] + Time period of the data to return. +structure : Literal['hierarchical', 'flat'] + Structure of the returned data. +provider : Union[Literal['fmp'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fmp' if there is + no default. + +Returns +------- +OBBject + results : Union[List[RevenueGeographic]] + Serializable results. + provider : Union[Literal['fmp'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +RevenueGeographic +----------------- +date : date + The date of the data. +geographic_segment : Dict[str, int] + Day level data containing the revenue of the geographic segment. +americas : Optional[int] + Revenue from the the American segment. +europe : Optional[int] + Revenue from the the European segment. +greater_china : Optional[int] + Revenue from the the Greater China segment. +japan : Optional[int] + Revenue from the the Japan segment. +rest_of_asia_pacific : Optional[int] + Revenue from the the Rest of Asia Pacific segment. + +Example +------- +>>> from openbb import obb +>>> obb.stocks.fa.revgeo(symbol="AAPL", period="annual", structure="flat") + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, - "period": period, - "structure": structure, - }, + provider_choices={"provider": provider, }, + standard_params={"symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, "period": period, "structure": structure, }, extra_params=kwargs, ) @@ -3040,75 +2570,55 @@ def revgeo( **inputs, ) + @validate - def revseg( - self, - symbol: typing_extensions.Annotated[ - Union[str, List[str]], - OpenBBCustomParameter(description="Symbol to get data for."), - ], - period: typing_extensions.Annotated[ - Literal["quarter", "annual"], - OpenBBCustomParameter(description="Time period of the data to return."), - ] = "annual", - structure: typing_extensions.Annotated[ - Literal["hierarchical", "flat"], - OpenBBCustomParameter(description="Structure of the returned data."), - ] = "flat", - provider: Union[Literal["fmp"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def revseg(self, symbol: typing_extensions.Annotated[Union[str, List[str]], OpenBBCustomParameter(description='Symbol to get data for.')], period: typing_extensions.Annotated[Literal['quarter', 'annual'], OpenBBCustomParameter(description='Time period of the data to return.')] = 'annual', structure: typing_extensions.Annotated[Literal['hierarchical', 'flat'], OpenBBCustomParameter(description='Structure of the returned data.')] = 'flat', provider: Union[Literal['fmp'], None] = None, **kwargs) -> OBBject[List[Data]]: """Revenue Business Line. Business line revenue data. - Parameters - ---------- - symbol : str - Symbol to get data for. - period : Literal['quarter', 'annual'] - Time period of the data to return. - structure : Literal['hierarchical', 'flat'] - Structure of the returned data. - provider : Union[Literal['fmp'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'fmp' if there is - no default. - - Returns - ------- - OBBject - results : Union[List[RevenueBusinessLine]] - Serializable results. - provider : Union[Literal['fmp'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - RevenueBusinessLine - ------------------- - date : date - The date of the data. - business_line : Dict[str, int] - Day level data containing the revenue of the business line. - - Example - ------- - >>> from openbb import obb - >>> obb.stocks.fa.revseg(symbol="AAPL", period="annual", structure="flat") - """ # noqa: E501 +Parameters +---------- +symbol : str + Symbol to get data for. +period : Literal['quarter', 'annual'] + Time period of the data to return. +structure : Literal['hierarchical', 'flat'] + Structure of the returned data. +provider : Union[Literal['fmp'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fmp' if there is + no default. + +Returns +------- +OBBject + results : Union[List[RevenueBusinessLine]] + Serializable results. + provider : Union[Literal['fmp'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +RevenueBusinessLine +------------------- +date : date + The date of the data. +business_line : Dict[str, int] + Day level data containing the revenue of the business line. + +Example +------- +>>> from openbb import obb +>>> obb.stocks.fa.revseg(symbol="AAPL", period="annual", structure="flat") + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, - "period": period, - "structure": structure, - }, + provider_choices={"provider": provider, }, + standard_params={"symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, "period": period, "structure": structure, }, extra_params=kwargs, ) @@ -3117,69 +2627,59 @@ def revseg( **inputs, ) + @validate - def shrs( - self, - symbol: typing_extensions.Annotated[ - Union[str, List[str]], - OpenBBCustomParameter(description="Symbol to get data for."), - ], - provider: Union[Literal["fmp"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def shrs(self, symbol: typing_extensions.Annotated[Union[str, List[str]], OpenBBCustomParameter(description='Symbol to get data for.')], provider: Union[Literal['fmp'], None] = None, **kwargs) -> OBBject[List[Data]]: """Share Statistics. Share statistics for a given company. - Parameters - ---------- - symbol : str - Symbol to get data for. - provider : Union[Literal['fmp'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'fmp' if there is - no default. - - Returns - ------- - OBBject - results : Union[List[ShareStatistics]] - Serializable results. - provider : Union[Literal['fmp'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - ShareStatistics - --------------- - symbol : str - Symbol representing the entity requested in the data. - date : Optional[Union[date]] - The date of the data. - free_float : Optional[Union[float]] - Percentage of unrestricted shares of a publicly-traded company. - float_shares : Optional[Union[float]] - Number of shares available for trading by the general public. - outstanding_shares : Optional[Union[float]] - Total number of shares of a publicly-traded company. - source : Optional[Union[str]] - Source of the received data. - - Example - ------- - >>> from openbb import obb - >>> obb.stocks.fa.shrs(symbol="AAPL") - """ # noqa: E501 +Parameters +---------- +symbol : str + Symbol to get data for. +provider : Union[Literal['fmp'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fmp' if there is + no default. + +Returns +------- +OBBject + results : Union[List[ShareStatistics]] + Serializable results. + provider : Union[Literal['fmp'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +ShareStatistics +--------------- +symbol : str + Symbol representing the entity requested in the data. +date : Optional[Union[date]] + The date of the data. +free_float : Optional[Union[float]] + Percentage of unrestricted shares of a publicly-traded company. +float_shares : Optional[Union[float]] + Number of shares available for trading by the general public. +outstanding_shares : Optional[Union[float]] + Total number of shares of a publicly-traded company. +source : Optional[Union[str]] + Source of the received data. + +Example +------- +>>> from openbb import obb +>>> obb.stocks.fa.shrs(symbol="AAPL") + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, - }, + provider_choices={"provider": provider, }, + standard_params={"symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, }, extra_params=kwargs, ) @@ -3188,65 +2688,55 @@ def shrs( **inputs, ) + @validate - def split( - self, - symbol: typing_extensions.Annotated[ - Union[str, List[str]], - OpenBBCustomParameter(description="Symbol to get data for."), - ], - provider: Union[Literal["fmp"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def split(self, symbol: typing_extensions.Annotated[Union[str, List[str]], OpenBBCustomParameter(description='Symbol to get data for.')], provider: Union[Literal['fmp'], None] = None, **kwargs) -> OBBject[List[Data]]: """Historical Stock Splits. Historical stock splits data. - Parameters - ---------- - symbol : str - Symbol to get data for. - provider : Union[Literal['fmp'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'fmp' if there is - no default. - - Returns - ------- - OBBject - results : Union[List[HistoricalStockSplits]] - Serializable results. - provider : Union[Literal['fmp'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - HistoricalStockSplits - --------------------- - date : date - The date of the data. - label : str - Label of the historical stock splits. - numerator : float - Numerator of the historical stock splits. - denominator : float - Denominator of the historical stock splits. - - Example - ------- - >>> from openbb import obb - >>> obb.stocks.fa.split(symbol="AAPL") - """ # noqa: E501 +Parameters +---------- +symbol : str + Symbol to get data for. +provider : Union[Literal['fmp'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fmp' if there is + no default. + +Returns +------- +OBBject + results : Union[List[HistoricalStockSplits]] + Serializable results. + provider : Union[Literal['fmp'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +HistoricalStockSplits +--------------------- +date : date + The date of the data. +label : str + Label of the historical stock splits. +numerator : float + Numerator of the historical stock splits. +denominator : float + Denominator of the historical stock splits. + +Example +------- +>>> from openbb import obb +>>> obb.stocks.fa.split(symbol="AAPL") + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, - }, + provider_choices={"provider": provider, }, + standard_params={"symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, }, extra_params=kwargs, ) @@ -3255,83 +2745,59 @@ def split( **inputs, ) + @validate - def transcript( - self, - symbol: typing_extensions.Annotated[ - Union[str, List[str]], - OpenBBCustomParameter(description="Symbol to get data for."), - ], - year: typing_extensions.Annotated[ - int, - OpenBBCustomParameter(description="Year of the earnings call transcript."), - ], - quarter: typing_extensions.Annotated[ - int, - OpenBBCustomParameter( - description="Quarter of the earnings call transcript." - ), - ] = 1, - provider: Union[Literal["fmp"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def transcript(self, symbol: typing_extensions.Annotated[Union[str, List[str]], OpenBBCustomParameter(description='Symbol to get data for.')], year: typing_extensions.Annotated[int, OpenBBCustomParameter(description='Year of the earnings call transcript.')], provider: Union[Literal['fmp'], None] = None, **kwargs) -> OBBject[List[Data]]: """Earnings Call Transcript. Earnings call transcript for a given company. - Parameters - ---------- - symbol : str - Symbol to get data for. - year : int - Year of the earnings call transcript. - quarter : int - Quarter of the earnings call transcript. - provider : Union[Literal['fmp'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'fmp' if there is - no default. - - Returns - ------- - OBBject - results : Union[List[EarningsCallTranscript]] - Serializable results. - provider : Union[Literal['fmp'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. - - EarningsCallTranscript - ---------------------- - symbol : str - Symbol representing the entity requested in the data. - quarter : int - Quarter of the earnings call transcript. - year : int - Year of the earnings call transcript. - date : datetime - The date of the data. - content : str - Content of the earnings call transcript. - - Example - ------- - >>> from openbb import obb - >>> obb.stocks.fa.transcript(symbol="AAPL", year=1, quarter=1) - """ # noqa: E501 +Parameters +---------- +symbol : str + Symbol to get data for. +year : int + Year of the earnings call transcript. +provider : Union[Literal['fmp'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'fmp' if there is + no default. + +Returns +------- +OBBject + results : Union[List[EarningsCallTranscript]] + Serializable results. + provider : Union[Literal['fmp'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. + +EarningsCallTranscript +---------------------- +symbol : str + Symbol representing the entity requested in the data. +quarter : int + Quarter of the earnings call transcript. +year : int + Year of the earnings call transcript. +date : datetime + The date of the data. +content : str + Content of the earnings call transcript. + +Example +------- +>>> from openbb import obb +>>> obb.stocks.fa.transcript(symbol="AAPL", year=1) + +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, - "year": year, - "quarter": quarter, - }, + provider_choices={"provider": provider, }, + standard_params={"symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, "year": year, }, extra_params=kwargs, ) @@ -3339,3 +2805,4 @@ def transcript( "/stocks/fa/transcript", **inputs, ) + diff --git a/openbb_platform/openbb/package/stocks_options.py b/openbb_platform/openbb/package/stocks_options.py index 5c2af298509a..2e933cf54b32 100644 --- a/openbb_platform/openbb/package/stocks_options.py +++ b/openbb_platform/openbb/package/stocks_options.py @@ -1,151 +1,151 @@ ### THIS FILE IS AUTO-GENERATED. DO NOT EDIT. ### -from typing import List, Literal, Union - -import typing_extensions -from openbb_core.app.model.custom_parameter import OpenBBCustomParameter -from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container +from openbb_core.app.model.obbject import OBBject +from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +import openbb_provider +import pandas +import datetime +import pydantic +from pydantic import BaseModel +from inspect import Parameter +import typing +from typing import List, Dict, Union, Optional, Literal +from annotated_types import Ge, Le, Gt, Lt +import typing_extensions +from openbb_core.app.utils import df_to_basemodel from openbb_core.app.static.decorators import validate + from openbb_core.app.static.filters import filter_inputs -from openbb_provider.abstract.data import Data +from openbb_provider.abstract.data import Data +import openbb_core.app.model.command_context +import openbb_core.app.model.obbject +import types class ROUTER_stocks_options(Container): """/stocks/options - chains +chains """ - def __repr__(self) -> str: return self.__doc__ or "" @validate - def chains( - self, - symbol: typing_extensions.Annotated[ - Union[str, List[str]], - OpenBBCustomParameter(description="Symbol to get data for."), - ], - provider: Union[Literal["cboe", "intrinio"], None] = None, - **kwargs - ) -> OBBject[List[Data]]: + def chains(self, symbol: typing_extensions.Annotated[Union[str, List[str]], OpenBBCustomParameter(description='Symbol to get data for.')], provider: Union[Literal['cboe', 'intrinio'], None] = None, **kwargs) -> OBBject[List[Data]]: """Get the complete options chain for a ticker. - Parameters - ---------- - symbol : str - Symbol to get data for. - provider : Union[Literal['cboe', 'intrinio'], None] - The provider to use for the query, by default None. - If None, the provider specified in defaults is selected or 'cboe' if there is - no default. - date : Optional[Union[datetime.date]] - Date for which the options chains are returned. (provider: intrinio) +Parameters +---------- +symbol : str + Symbol to get data for. +provider : Union[Literal['cboe', 'intrinio'], None] + The provider to use for the query, by default None. + If None, the provider specified in defaults is selected or 'cboe' if there is + no default. +date : Optional[Union[datetime.date]] + Date for which the options chains are returned. (provider: intrinio) + +Returns +------- +OBBject + results : Union[List[OptionsChains]] + Serializable results. + provider : Union[Literal['cboe', 'intrinio'], None] + Provider name. + warnings : Optional[List[Warning_]] + List of warnings. + chart : Optional[Chart] + Chart object. + extra: Dict[str, Any] + Extra info. - Returns - ------- - OBBject - results : Union[List[OptionsChains]] - Serializable results. - provider : Union[Literal['cboe', 'intrinio'], None] - Provider name. - warnings : Optional[List[Warning_]] - List of warnings. - chart : Optional[Chart] - Chart object. - extra: Dict[str, Any] - Extra info. +OptionsChains +------------- +contract_symbol : str + Contract symbol for the option. +symbol : Optional[Union[str]] + Symbol representing the entity requested in the data. Here its the underlying symbol for the option. +expiration : date + Expiration date of the contract. +strike : float + Strike price of the contract. +option_type : str + Call or Put. +eod_date : Optional[Union[date]] + Date for which the options chains are returned. +close : Optional[Union[float]] + The close price of the symbol. +close_bid : Optional[Union[float]] + The closing bid price for the option that day. +close_ask : Optional[Union[float]] + The closing ask price for the option that day. +volume : Optional[Union[float]] + The volume of the symbol. +open : Optional[Union[float]] + The open price of the symbol. +open_bid : Optional[Union[float]] + The opening bid price for the option that day. +open_ask : Optional[Union[float]] + The opening ask price for the option that day. +open_interest : Optional[Union[float]] + Open interest on the contract. +high : Optional[Union[float]] + The high price of the symbol. +low : Optional[Union[float]] + The low price of the symbol. +mark : Optional[Union[float]] + The mid-price between the latest bid-ask spread. +ask_high : Optional[Union[float]] + The highest ask price for the option that day. +ask_low : Optional[Union[float]] + The lowest ask price for the option that day. +bid_high : Optional[Union[float]] + The highest bid price for the option that day. +bid_low : Optional[Union[float]] + The lowest bid price for the option that day. +implied_volatility : Optional[Union[float]] + Implied volatility of the option. +delta : Optional[Union[float]] + Delta of the option. +gamma : Optional[Union[float]] + Gamma of the option. +theta : Optional[Union[float]] + Theta of the option. +vega : Optional[Union[float]] + Vega of the option. +bid_size : Optional[Union[int]] + Bid size for the option. (provider: cboe) +ask_size : Optional[Union[int]] + Ask size for the option. (provider: cboe) +theoretical : Optional[Union[float]] + Theoretical value of the option. (provider: cboe) +last_trade_price : Optional[Union[float]] + Last trade price of the option. (provider: cboe) +tick : Optional[Union[str]] + Whether the last tick was up or down in price. (provider: cboe) +prev_close : Optional[Union[float]] + Previous closing price of the option. (provider: cboe) +change : Optional[Union[float]] + Change in price of the option. (provider: cboe) +change_percent : Optional[Union[float]] + Change, in percent, of the option. (provider: cboe) +rho : Optional[Union[float]] + Rho of the option. (provider: cboe) +last_trade_timestamp : Optional[Union[datetime]] + Last trade timestamp of the option. (provider: cboe) +dte : Optional[Union[int]] + Days to expiration for the option. (provider: cboe) - OptionsChains - ------------- - contract_symbol : str - Contract symbol for the option. - symbol : Optional[Union[str]] - Symbol representing the entity requested in the data. Here its the underlying symbol for the option. - expiration : date - Expiration date of the contract. - strike : float - Strike price of the contract. - option_type : str - Call or Put. - eod_date : Optional[Union[date]] - Date for which the options chains are returned. - close : Optional[Union[float]] - The close price of the symbol. - close_bid : Optional[Union[float]] - The closing bid price for the option that day. - close_ask : Optional[Union[float]] - The closing ask price for the option that day. - volume : Optional[Union[float]] - The volume of the symbol. - open : Optional[Union[float]] - The open price of the symbol. - open_bid : Optional[Union[float]] - The opening bid price for the option that day. - open_ask : Optional[Union[float]] - The opening ask price for the option that day. - open_interest : Optional[Union[float]] - Open interest on the contract. - high : Optional[Union[float]] - The high price of the symbol. - low : Optional[Union[float]] - The low price of the symbol. - mark : Optional[Union[float]] - The mid-price between the latest bid-ask spread. - ask_high : Optional[Union[float]] - The highest ask price for the option that day. - ask_low : Optional[Union[float]] - The lowest ask price for the option that day. - bid_high : Optional[Union[float]] - The highest bid price for the option that day. - bid_low : Optional[Union[float]] - The lowest bid price for the option that day. - implied_volatility : Optional[Union[float]] - Implied volatility of the option. - delta : Optional[Union[float]] - Delta of the option. - gamma : Optional[Union[float]] - Gamma of the option. - theta : Optional[Union[float]] - Theta of the option. - vega : Optional[Union[float]] - Vega of the option. - bid_size : Optional[Union[int]] - Bid size for the option. (provider: cboe) - ask_size : Optional[Union[int]] - Ask size for the option. (provider: cboe) - theoretical : Optional[Union[float]] - Theoretical value of the option. (provider: cboe) - last_trade_price : Optional[Union[float]] - Last trade price of the option. (provider: cboe) - tick : Optional[Union[str]] - Whether the last tick was up or down in price. (provider: cboe) - prev_close : Optional[Union[float]] - Previous closing price of the option. (provider: cboe) - change : Optional[Union[float]] - Change in price of the option. (provider: cboe) - change_percent : Optional[Union[float]] - Change, in percent, of the option. (provider: cboe) - rho : Optional[Union[float]] - Rho of the option. (provider: cboe) - last_trade_timestamp : Optional[Union[datetime]] - Last trade timestamp of the option. (provider: cboe) - dte : Optional[Union[int]] - Days to expiration for the option. (provider: cboe) +Example +------- +>>> from openbb import obb +>>> obb.stocks.options.chains(symbol="AAPL") - Example - ------- - >>> from openbb import obb - >>> obb.stocks.options.chains(symbol="AAPL") - """ # noqa: E501 +""" # noqa: E501 inputs = filter_inputs( - provider_choices={ - "provider": provider, - }, - standard_params={ - "symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, - }, + provider_choices={"provider": provider, }, + standard_params={"symbol": ",".join(symbol) if isinstance(symbol, list) else symbol, }, extra_params=kwargs, ) @@ -153,3 +153,4 @@ def chains( "/stocks/options/chains", **inputs, ) + diff --git a/openbb_platform/openbb/package/ta.py b/openbb_platform/openbb/package/ta.py index 37a6ef090a14..0b7837a3bc9c 100644 --- a/openbb_platform/openbb/package/ta.py +++ b/openbb_platform/openbb/package/ta.py @@ -1,90 +1,94 @@ ### THIS FILE IS AUTO-GENERATED. DO NOT EDIT. ### -from typing import List, Literal, Union - +from openbb_core.app.static.container import Container +from openbb_core.app.model.obbject import OBBject +from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +import openbb_provider import pandas +import datetime +import pydantic +from pydantic import BaseModel +from inspect import Parameter +import typing +from typing import List, Dict, Union, Optional, Literal +from annotated_types import Ge, Le, Gt, Lt import typing_extensions -from annotated_types import Ge, Gt -from openbb_core.app.model.obbject import OBBject -from openbb_core.app.static.container import Container +from openbb_core.app.utils import df_to_basemodel from openbb_core.app.static.decorators import validate + from openbb_core.app.static.filters import filter_inputs -from openbb_provider.abstract.data import Data +from openbb_provider.abstract.data import Data +import openbb_core.app.model.obbject +import typing class ROUTER_ta(Container): """/ta - ad - adosc - adx - aroon - atr - bbands - cci - cg - clenow - cones - demark - donchian - ema - fib - fisher - hma - ichimoku - kc - macd - obv - rsi - sma - stoch - vwap - wma - zlma +ad +adosc +adx +aroon +atr +bbands +cci +cg +clenow +cones +demark +donchian +ema +fib +fisher +hma +ichimoku +kc +macd +obv +rsi +sma +stoch +vwap +wma +zlma """ - def __repr__(self) -> str: return self.__doc__ or "" @validate(config=dict(arbitrary_types_allowed=True)) - def ad( - self, - data: Union[List[Data], pandas.DataFrame], - index: str = "date", - offset: int = 0, - ) -> OBBject[List[Data]]: + def ad(self, data: Union[List[Data], pandas.DataFrame], index: str = 'date', offset: int = 0) -> OBBject[List[Data]]: """ - The Accumulation/Distribution Line is similar to the On Balance - Volume (OBV), which sums the volume times +1/-1 based on whether the close is - higher than the previous close. The Accumulation/Distribution indicator, however - multiplies the volume by the close location value (CLV). The CLV is based on the - movement of the issue within a single bar and can be +1, -1 or zero. - - - The Accumulation/Distribution Line is interpreted by looking for a divergence in - the direction of the indicator relative to price. If the Accumulation/Distribution - Line is trending upward it indicates that the price may follow. Also, if the - Accumulation/Distribution Line becomes flat while the price is still rising (or falling) - then it signals an impending flattening of the price. - - Parameters - ---------- - data : List[Data] - List of data to be used for the calculation. - index : str, optional - Index column name to use with `data`, by default "date". - offset : int, optional - Offset of the AD, by default 0. - - Returns - ------- - OBBject[List[Data]] - - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> ad_data = obb.ta.ad(data=stock_data.results,offset=0) - """ # noqa: E501 + The Accumulation/Distribution Line is similar to the On Balance + Volume (OBV), which sums the volume times +1/-1 based on whether the close is + higher than the previous close. The Accumulation/Distribution indicator, however + multiplies the volume by the close location value (CLV). The CLV is based on the + movement of the issue within a single bar and can be +1, -1 or zero. + + + The Accumulation/Distribution Line is interpreted by looking for a divergence in + the direction of the indicator relative to price. If the Accumulation/Distribution + Line is trending upward it indicates that the price may follow. Also, if the + Accumulation/Distribution Line becomes flat while the price is still rising (or falling) + then it signals an impending flattening of the price. + + Parameters + ---------- + data : List[Data] + List of data to be used for the calculation. + index : str, optional + Index column name to use with `data`, by default "date". + offset : int, optional + Offset of the AD, by default 0. + + Returns + ------- + OBBject[List[Data]] + + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> ad_data = obb.ta.ad(data=stock_data.results,offset=0) + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -97,45 +101,39 @@ def ad( **inputs, ) + @validate(config=dict(arbitrary_types_allowed=True)) - def adosc( - self, - data: Union[List[Data], pandas.DataFrame], - index: str = "date", - fast: typing_extensions.Annotated[int, Gt(gt=0)] = 3, - slow: typing_extensions.Annotated[int, Gt(gt=0)] = 10, - offset: int = 0, - ) -> OBBject[List[Data]]: + def adosc(self, data: Union[List[Data], pandas.DataFrame], index: str = 'date', fast: typing_extensions.Annotated[int, Gt(gt=0)] = 3, slow: typing_extensions.Annotated[int, Gt(gt=0)] = 10, offset: int = 0) -> OBBject[List[Data]]: """ - Accumulation/Distribution Oscillator, also known as the Chaikin Oscillator - is essentially a momentum indicator, but of the Accumulation-Distribution line - rather than merely price. It looks at both the strength of price moves and the - underlying buying and selling pressure during a given time period. The oscillator - reading above zero indicates net buying pressure, while one below zero registers - net selling pressure. Divergence between the indicator and pure price moves are - the most common signals from the indicator, and often flag market turning points. - - Parameters - ---------- - data : List[Data] - List of data to be used for the calculation. - fast : PositiveInt, optional - Number of periods to be used for the fast calculation, by default 3. - slow : PositiveInt, optional - Number of periods to be used for the slow calculation, by default 10. - offset : int, optional - Offset to be used for the calculation, by default 0. - - Returns - ------- - OBBject[List[Data]] - - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> adosc_data = obb.ta.adosc(data=stock_data.results, fast=3, slow=10, offset=0) - """ # noqa: E501 + Accumulation/Distribution Oscillator, also known as the Chaikin Oscillator + is essentially a momentum indicator, but of the Accumulation-Distribution line + rather than merely price. It looks at both the strength of price moves and the + underlying buying and selling pressure during a given time period. The oscillator + reading above zero indicates net buying pressure, while one below zero registers + net selling pressure. Divergence between the indicator and pure price moves are + the most common signals from the indicator, and often flag market turning points. + + Parameters + ---------- + data : List[Data] + List of data to be used for the calculation. + fast : PositiveInt, optional + Number of periods to be used for the fast calculation, by default 3. + slow : PositiveInt, optional + Number of periods to be used for the slow calculation, by default 10. + offset : int, optional + Offset to be used for the calculation, by default 0. + + Returns + ------- + OBBject[List[Data]] + + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> adosc_data = obb.ta.adosc(data=stock_data.results, fast=3, slow=10, offset=0) + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -150,45 +148,38 @@ def adosc( **inputs, ) + @validate(config=dict(arbitrary_types_allowed=True)) - def adx( - self, - data: Union[List[Data], pandas.DataFrame], - index: str = "date", - length: int = 50, - scalar: float = 100.0, - drift: int = 1, - chart: bool = False, - ) -> OBBject[List[Data]]: + def adx(self, data: Union[List[Data], pandas.DataFrame], index: str = 'date', length: int = 50, scalar: float = 100.0, drift: int = 1, chart: bool = False) -> OBBject[List[Data]]: """ - The ADX is a Welles Wilder style moving average of the Directional Movement Index (DX). - The values range from 0 to 100, but rarely get above 60. To interpret the ADX, consider - a high number to be a strong trend, and a low number, a weak trend. - - Parameters - ---------- - data : List[Data] - List of data to be used for the calculation. - index : str, optional - Index column name to use with `data`, by default "date". - length : int, optional - Number of periods for the ADX, by default 50. - scalar : float, optional - Scalar value for the ADX, by default 100.0. - drift : int, optional - Drift value for the ADX, by default 1. - - Returns - ------- - OBBject[List[Data]] - The calculated data. - - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> adx_data = obb.ta.adx(data=stock_data.results,length=50,scalar=100.0,drift=1) - """ # noqa: E501 + The ADX is a Welles Wilder style moving average of the Directional Movement Index (DX). + The values range from 0 to 100, but rarely get above 60. To interpret the ADX, consider + a high number to be a strong trend, and a low number, a weak trend. + + Parameters + ---------- + data : List[Data] + List of data to be used for the calculation. + index : str, optional + Index column name to use with `data`, by default "date". + length : int, optional + Number of periods for the ADX, by default 50. + scalar : float, optional + Scalar value for the ADX, by default 100.0. + drift : int, optional + Drift value for the ADX, by default 1. + + Returns + ------- + OBBject[List[Data]] + The calculated data. + + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> adx_data = obb.ta.adx(data=stock_data.results,length=50,scalar=100.0,drift=1) + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -204,50 +195,44 @@ def adx( **inputs, ) + @validate(config=dict(arbitrary_types_allowed=True)) - def aroon( - self, - data: Union[List[Data], pandas.DataFrame], - index: str = "date", - length: int = 25, - scalar: int = 100, - chart: bool = False, - ) -> OBBject[List[Data]]: + def aroon(self, data: Union[List[Data], pandas.DataFrame], index: str = 'date', length: int = 25, scalar: int = 100, chart: bool = False) -> OBBject[List[Data]]: """ - The word aroon is Sanskrit for "dawn's early light." The Aroon - indicator attempts to show when a new trend is dawning. The indicator consists - of two lines (Up and Down) that measure how long it has been since the highest - high/lowest low has occurred within an n period range. - - When the Aroon Up is staying between 70 and 100 then it indicates an upward trend. - When the Aroon Down is staying between 70 and 100 then it indicates an downward trend. - A strong upward trend is indicated when the Aroon Up is above 70 while the Aroon Down is below 30. - Likewise, a strong downward trend is indicated when the Aroon Down is above 70 while - the Aroon Up is below 30. Also look for crossovers. When the Aroon Down crosses above - the Aroon Up, it indicates a weakening of the upward trend (and vice versa). - - Parameters - ---------- - data : List[Data] - List of data to be used for the calculation. - index: str, optional - Index column name to use with `data`, by default "date". - length : int, optional - Number of periods to be used for the calculation, by default 25. - scalar : int, optional - Scalar to be used for the calculation, by default 100. - - Returns - ------- - OBBject[List[Data]] - The calculated data. - - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> aroon_data = obb.ta.aroon(data=stock_data.results, length=25, scalar=100) - """ # noqa: E501 + The word aroon is Sanskrit for "dawn's early light." The Aroon + indicator attempts to show when a new trend is dawning. The indicator consists + of two lines (Up and Down) that measure how long it has been since the highest + high/lowest low has occurred within an n period range. + + When the Aroon Up is staying between 70 and 100 then it indicates an upward trend. + When the Aroon Down is staying between 70 and 100 then it indicates an downward trend. + A strong upward trend is indicated when the Aroon Up is above 70 while the Aroon Down is below 30. + Likewise, a strong downward trend is indicated when the Aroon Down is above 70 while + the Aroon Up is below 30. Also look for crossovers. When the Aroon Down crosses above + the Aroon Up, it indicates a weakening of the upward trend (and vice versa). + + Parameters + ---------- + data : List[Data] + List of data to be used for the calculation. + index: str, optional + Index column name to use with `data`, by default "date". + length : int, optional + Number of periods to be used for the calculation, by default 25. + scalar : int, optional + Scalar to be used for the calculation, by default 100. + + Returns + ------- + OBBject[List[Data]] + The calculated data. + + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> aroon_data = obb.ta.aroon(data=stock_data.results, length=25, scalar=100) + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -262,46 +247,39 @@ def aroon( **inputs, ) + @validate(config=dict(arbitrary_types_allowed=True)) - def atr( - self, - data: Union[List[Data], pandas.DataFrame], - index: str = "date", - length: typing_extensions.Annotated[int, Gt(gt=0)] = 14, - mamode: Literal["rma", "ema", "sma", "wma"] = "rma", - drift: typing_extensions.Annotated[int, Ge(ge=0)] = 1, - offset: int = 0, - ) -> OBBject[List[Data]]: + def atr(self, data: Union[List[Data], pandas.DataFrame], index: str = 'date', length: typing_extensions.Annotated[int, Gt(gt=0)] = 14, mamode: Literal['rma', 'ema', 'sma', 'wma'] = 'rma', drift: typing_extensions.Annotated[int, Ge(ge=0)] = 1, offset: int = 0) -> OBBject[List[Data]]: """ - Average True Range is used to measure volatility, especially volatility caused by - gaps or limit moves. - - Parameters - ---------- - data : List[Data] - List of data to apply the indicator to. - index : str, optional - Index column name, by default "date" - length : PositiveInt, optional - It's period, by default 14 - mamode : Literal["rma", "ema", "sma", "wma"], optional - Moving average mode, by default "rma" - drift : NonNegativeInt, optional - The difference period, by default 1 - offset : int, optional - How many periods to offset the result, by default 0 - - Returns - ------- - OBBject[List[Data]] - List of data with the indicator applied. - - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> atr_data = obb.ta.atr(data=stock_data.results) - """ # noqa: E501 + Average True Range is used to measure volatility, especially volatility caused by + gaps or limit moves. + + Parameters + ---------- + data : List[Data] + List of data to apply the indicator to. + index : str, optional + Index column name, by default "date" + length : PositiveInt, optional + It's period, by default 14 + mamode : Literal["rma", "ema", "sma", "wma"], optional + Moving average mode, by default "rma" + drift : NonNegativeInt, optional + The difference period, by default 1 + offset : int, optional + How many periods to offset the result, by default 0 + + Returns + ------- + OBBject[List[Data]] + List of data with the indicator applied. + + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> atr_data = obb.ta.atr(data=stock_data.results) + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -317,61 +295,53 @@ def atr( **inputs, ) + @validate(config=dict(arbitrary_types_allowed=True)) - def bbands( - self, - data: Union[List[Data], pandas.DataFrame], - target: str = "close", - index: str = "date", - length: int = 50, - std: typing_extensions.Annotated[float, Ge(ge=0)] = 2, - mamode: Literal["sma", "ema", "wma", "rma"] = "sma", - offset: int = 0, - ) -> OBBject[List[Data]]: + def bbands(self, data: Union[List[Data], pandas.DataFrame], target: str = 'close', index: str = 'date', length: int = 50, std: typing_extensions.Annotated[float, Ge(ge=0)] = 2, mamode: Literal['sma', 'ema', 'wma', 'rma'] = 'sma', offset: int = 0) -> OBBject[List[Data]]: """ - Bollinger Bands consist of three lines. The middle band is a simple - moving average (generally 20 periods) of the typical price (TP). The upper and lower - bands are F standard deviations (generally 2) above and below the middle band. - The bands widen and narrow when the volatility of the price is higher or lower, - respectively. - - Bollinger Bands do not, in themselves, generate buy or sell signals; - they are an indicator of overbought or oversold conditions. When the price is near the - upper or lower band it indicates that a reversal may be imminent. The middle band - becomes a support or resistance level. The upper and lower bands can also be - interpreted as price targets. When the price bounces off of the lower band and crosses - the middle band, then the upper band becomes the price target. - - Parameters - ---------- - data : List[Data] - List of data to be used for the calculation. - target : str - Target column name. - index : str, optional - Index column name to use with `data`, by default "date". - length : int, optional - Number of periods to be used for the calculation, by default 50. - std : NonNegativeFloat, optional - Standard deviation to be used for the calculation, by default 2. - mamode : Literal["sma", "ema", "wma", "rma"], optional - Moving average mode to be used for the calculation, by default "sma". - offset : int, optional - Offset to be used for the calculation, by default 0. - - Returns - ------- - OBBject[List[Data]] - The calculated data. - - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> bbands = obb.ta.bbands( - >>> data=stock_data.results, target="close", length=50, std=2, mamode="sma", offset=0 - >>> ) - """ # noqa: E501 + Bollinger Bands consist of three lines. The middle band is a simple + moving average (generally 20 periods) of the typical price (TP). The upper and lower + bands are F standard deviations (generally 2) above and below the middle band. + The bands widen and narrow when the volatility of the price is higher or lower, + respectively. + + Bollinger Bands do not, in themselves, generate buy or sell signals; + they are an indicator of overbought or oversold conditions. When the price is near the + upper or lower band it indicates that a reversal may be imminent. The middle band + becomes a support or resistance level. The upper and lower bands can also be + interpreted as price targets. When the price bounces off of the lower band and crosses + the middle band, then the upper band becomes the price target. + + Parameters + ---------- + data : List[Data] + List of data to be used for the calculation. + target : str + Target column name. + index : str, optional + Index column name to use with `data`, by default "date". + length : int, optional + Number of periods to be used for the calculation, by default 50. + std : NonNegativeFloat, optional + Standard deviation to be used for the calculation, by default 2. + mamode : Literal["sma", "ema", "wma", "rma"], optional + Moving average mode to be used for the calculation, by default "sma". + offset : int, optional + Offset to be used for the calculation, by default 0. + + Returns + ------- + OBBject[List[Data]] + The calculated data. + + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> bbands = obb.ta.bbands( + >>> data=stock_data.results, target="close", length=50, std=2, mamode="sma", offset=0 + >>> ) + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -388,37 +358,32 @@ def bbands( **inputs, ) + @validate(config=dict(arbitrary_types_allowed=True)) - def cci( - self, - data: Union[List[Data], pandas.DataFrame], - index: str = "date", - length: typing_extensions.Annotated[int, Gt(gt=0)] = 14, - scalar: typing_extensions.Annotated[float, Gt(gt=0)] = 0.015, - ) -> OBBject[List[Data]]: + def cci(self, data: Union[List[Data], pandas.DataFrame], index: str = 'date', length: typing_extensions.Annotated[int, Gt(gt=0)] = 14, scalar: typing_extensions.Annotated[float, Gt(gt=0)] = 0.015) -> OBBject[List[Data]]: """ - The CCI is designed to detect beginning and ending market trends. - The range of 100 to -100 is the normal trading range. CCI values outside of this - range indicate overbought or oversold conditions. You can also look for price - divergence in the CCI. If the price is making new highs, and the CCI is not, - then a price correction is likely. - - Parameters - ---------- - data : List[Data] - The data to use for the CCI calculation. - index : str, optional - Index column name to use with `data`, by default "date". - length : PositiveInt, optional - The length of the CCI, by default 14. - scalar : PositiveFloat, optional - The scalar of the CCI, by default 0.015. - - Returns - ------- - OBBject[List[Data]] - The CCI data. - """ # noqa: E501 + The CCI is designed to detect beginning and ending market trends. + The range of 100 to -100 is the normal trading range. CCI values outside of this + range indicate overbought or oversold conditions. You can also look for price + divergence in the CCI. If the price is making new highs, and the CCI is not, + then a price correction is likely. + + Parameters + ---------- + data : List[Data] + The data to use for the CCI calculation. + index : str, optional + Index column name to use with `data`, by default "date". + length : PositiveInt, optional + The length of the CCI, by default 14. + scalar : PositiveFloat, optional + The scalar of the CCI, by default 0.015. + + Returns + ------- + OBBject[List[Data]] + The CCI data. + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -432,40 +397,36 @@ def cci( **inputs, ) + @validate(config=dict(arbitrary_types_allowed=True)) - def cg( - self, - data: Union[List[Data], pandas.DataFrame], - index: str = "date", - length: typing_extensions.Annotated[int, Gt(gt=0)] = 14, - ) -> OBBject[List[Data]]: + def cg(self, data: Union[List[Data], pandas.DataFrame], index: str = 'date', length: typing_extensions.Annotated[int, Gt(gt=0)] = 14) -> OBBject[List[Data]]: """ - The Center of Gravity indicator, in short, is used to anticipate future price movements - and to trade on price reversals as soon as they happen. However, just like other oscillators, - the COG indicator returns the best results in range-bound markets and should be avoided when - the price is trending. Traders who use it will be able to closely speculate the upcoming - price change of the asset. - - Parameters - ---------- - data : List[Data] - The data to use for the COG calculation. - index : str, optional - Index column name to use with `data`, by default "date" - length : PositiveInt, optional - The length of the COG, by default 14 - - Returns - ------- - OBBject[List[Data]] - The COG data. - - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> cg_data = obb.ta.cg(data=stock_data.results, length=14) - """ # noqa: E501 + The Center of Gravity indicator, in short, is used to anticipate future price movements + and to trade on price reversals as soon as they happen. However, just like other oscillators, + the COG indicator returns the best results in range-bound markets and should be avoided when + the price is trending. Traders who use it will be able to closely speculate the upcoming + price change of the asset. + + Parameters + ---------- + data : List[Data] + The data to use for the COG calculation. + index : str, optional + Index column name to use with `data`, by default "date" + length : PositiveInt, optional + The length of the COG, by default 14 + + Returns + ------- + OBBject[List[Data]] + The COG data. + + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> cg_data = obb.ta.cg(data=stock_data.results, length=14) + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -478,39 +439,34 @@ def cg( **inputs, ) + @validate(config=dict(arbitrary_types_allowed=True)) - def clenow( - self, - data: Union[List[Data], pandas.DataFrame], - index: str = "date", - target: str = "close", - period: typing_extensions.Annotated[int, Gt(gt=0)] = 90, - ) -> OBBject[List[Data]]: + def clenow(self, data: Union[List[Data], pandas.DataFrame], index: str = 'date', target: str = 'close', period: typing_extensions.Annotated[int, Gt(gt=0)] = 90) -> OBBject[List[Data]]: """ - Clenow Volatility Adjusted Momentum. - - Parameters - ---------- - data : List[Data] - List of data to be used for the calculation. - index : str, optional - Index column name to use with `data`, by default "date". - target : str, optional - Target column name, by default "close". - period : PositiveInt, optional - Number of periods for the momentum, by default 90. - - Returns - ------- - OBBject[List[Data]] - The calculated data. - - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> clenow_data = obb.ta.clenow(data=stock_data.results,period=90) - """ # noqa: E501 + Clenow Volatility Adjusted Momentum. + + Parameters + ---------- + data : List[Data] + List of data to be used for the calculation. + index : str, optional + Index column name to use with `data`, by default "date". + target : str, optional + Target column name, by default "close". + period : PositiveInt, optional + Number of periods for the momentum, by default 90. + + Returns + ------- + OBBject[List[Data]] + The calculated data. + + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> clenow_data = obb.ta.clenow(data=stock_data.results,period=90) + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -524,73 +480,59 @@ def clenow( **inputs, ) + @validate(config=dict(arbitrary_types_allowed=True)) - def cones( - self, - data: Union[List[Data], pandas.DataFrame], - index: str = "date", - lower_q: float = 0.25, - upper_q: float = 0.75, - model: Literal[ - "STD", - "Parkinson", - "Garman-Klass", - "Hodges-Tompkins", - "Rogers-Satchell", - "Yang-Zhang", - ] = "STD", - is_crypto: bool = False, - ) -> OBBject[List[Data]]: + def cones(self, data: Union[List[Data], pandas.DataFrame], index: str = 'date', lower_q: float = 0.25, upper_q: float = 0.75, model: Literal['STD', 'Parkinson', 'Garman-Klass', 'Hodges-Tompkins', 'Rogers-Satchell', 'Yang-Zhang'] = 'STD', is_crypto: bool = False) -> OBBject[List[Data]]: """Calculate the realized volatility quantiles over rolling windows of time. - The model for calculating volatility is selectable. - - Parameters - ---------- - data : List[Data] - The data to use for the calculation. - index : str, optional - Index column name to use with `data`, by default "date" - lower_q : float, optional - The lower quantile value for calculations - upper_q : float, optional - The upper quantile value for calculations - model : Literal["STD", "Parkinson", "Garman-Klass", "Hodges-Tompkins", "Rogers-Satchell", "Yang-Zhang"], optional - The model used to calculate realized volatility - - Standard deviation measures how widely returns are dispersed from the average return. - It is the most common (and biased) estimator of volatility. - - Parkinson volatility uses the high and low price of the day rather than just close to close prices. - It is useful for capturing large price movements during the day. - - Garman-Klass volatility extends Parkinson volatility by taking into account the opening and closing price. - As markets are most active during the opening and closing of a trading session; - it makes volatility estimation more accurate. - - Hodges-Tompkins volatility is a bias correction for estimation using an overlapping data sample. - It produces unbiased estimates and a substantial gain in efficiency. - - Rogers-Satchell is an estimator for measuring the volatility with an average return not equal to zero. - Unlike Parkinson and Garman-Klass estimators, Rogers-Satchell incorporates a drift term, - mean return not equal to zero. - - Yang-Zhang volatility is the combination of the overnight (close-to-open volatility). - It is a weighted average of the Rogers-Satchell volatility and the open-to-close volatility. - is_crypto : bool, optional - Whether the data is crypto or not. If True, volatility is calculated for 365 days instead of 252 - - Returns - ------- - OBBject[List[Data]] - The cones data. - - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> cones_data = obb.ta.cones(data=stock_data.results, lower_q=0.25, upper_q=0.75, model="STD") - """ # noqa: E501 + The model for calculating volatility is selectable. + + Parameters + ---------- + data : List[Data] + The data to use for the calculation. + index : str, optional + Index column name to use with `data`, by default "date" + lower_q : float, optional + The lower quantile value for calculations + upper_q : float, optional + The upper quantile value for calculations + model : Literal["STD", "Parkinson", "Garman-Klass", "Hodges-Tompkins", "Rogers-Satchell", "Yang-Zhang"], optional + The model used to calculate realized volatility + + Standard deviation measures how widely returns are dispersed from the average return. + It is the most common (and biased) estimator of volatility. + + Parkinson volatility uses the high and low price of the day rather than just close to close prices. + It is useful for capturing large price movements during the day. + + Garman-Klass volatility extends Parkinson volatility by taking into account the opening and closing price. + As markets are most active during the opening and closing of a trading session; + it makes volatility estimation more accurate. + + Hodges-Tompkins volatility is a bias correction for estimation using an overlapping data sample. + It produces unbiased estimates and a substantial gain in efficiency. + + Rogers-Satchell is an estimator for measuring the volatility with an average return not equal to zero. + Unlike Parkinson and Garman-Klass estimators, Rogers-Satchell incorporates a drift term, + mean return not equal to zero. + + Yang-Zhang volatility is the combination of the overnight (close-to-open volatility). + It is a weighted average of the Rogers-Satchell volatility and the open-to-close volatility. + is_crypto : bool, optional + Whether the data is crypto or not. If True, volatility is calculated for 365 days instead of 252 + + Returns + ------- + OBBject[List[Data]] + The cones data. + + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> cones_data = obb.ta.cones(data=stock_data.results, lower_q=0.25, upper_q=0.75, model="STD") + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -606,45 +548,38 @@ def cones( **inputs, ) + @validate(config=dict(arbitrary_types_allowed=True)) - def demark( - self, - data: Union[List[Data], pandas.DataFrame], - index: str = "date", - target: str = "close", - show_all: bool = True, - asint: bool = True, - offset: int = 0, - ) -> OBBject[List[Data]]: + def demark(self, data: Union[List[Data], pandas.DataFrame], index: str = 'date', target: str = 'close', show_all: bool = True, asint: bool = True, offset: int = 0) -> OBBject[List[Data]]: """ - Demark sequential indicator - - Parameters - ---------- - data : List[Data] - List of data to be used for the calculation. - index : str, optional - Index column name to use with `data`, by default "date". - target : str, optional - Target column name, by default "close". - show_all : bool, optional - Show 1 - 13. If set to False, show 6 - 9 - asint : bool, optional - If True, fill NAs with 0 and change type to int, by default True. - offset : int, optional - How many periods to offset the result - - Returns - ------- - OBBject[List[Data]] - The calculated data. - - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> demark_data = obb.ta.demark(data=stock_data.results,offset=0) - """ # noqa: E501 + Demark sequential indicator + + Parameters + ---------- + data : List[Data] + List of data to be used for the calculation. + index : str, optional + Index column name to use with `data`, by default "date". + target : str, optional + Target column name, by default "close". + show_all : bool, optional + Show 1 - 13. If set to False, show 6 - 9 + asint : bool, optional + If True, fill NAs with 0 and change type to int, by default True. + offset : int, optional + How many periods to offset the result + + Returns + ------- + OBBject[List[Data]] + The calculated data. + + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> demark_data = obb.ta.demark(data=stock_data.results,offset=0) + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -660,47 +595,41 @@ def demark( **inputs, ) + @validate(config=dict(arbitrary_types_allowed=True)) - def donchian( - self, - data: Union[List[Data], pandas.DataFrame], - index: str = "date", - lower_length: typing_extensions.Annotated[int, Gt(gt=0)] = 20, - upper_length: typing_extensions.Annotated[int, Gt(gt=0)] = 20, - offset: int = 0, - ) -> OBBject[List[Data]]: + def donchian(self, data: Union[List[Data], pandas.DataFrame], index: str = 'date', lower_length: typing_extensions.Annotated[int, Gt(gt=0)] = 20, upper_length: typing_extensions.Annotated[int, Gt(gt=0)] = 20, offset: int = 0) -> OBBject[List[Data]]: """ - Donchian Channels are three lines generated by moving average - calculations that comprise an indicator formed by upper and lower - bands around a midrange or median band. The upper band marks the - highest price of a security over N periods while the lower band - marks the lowest price of a security over N periods. The area - between the upper and lower bands represents the Donchian Channel. - - Parameters - ---------- - data : List[Data] - List of data to be used for the calculation. - index : str, optional - Index column name to use with `data`, by default "date". - lower_length : PositiveInt, optional - Number of periods for the lower band, by default 20. - upper_length : PositiveInt, optional - Number of periods for the upper band, by default 20. - offset : int, optional - Offset of the Donchian Channel, by default 0. - - Returns - ------- - OBBject[List[Data]] - The calculated data. - - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> donchian_data = obb.ta.donchian(data=stock_data.results,lower_length=20,upper_length=20,offset=0) - """ # noqa: E501 + Donchian Channels are three lines generated by moving average + calculations that comprise an indicator formed by upper and lower + bands around a midrange or median band. The upper band marks the + highest price of a security over N periods while the lower band + marks the lowest price of a security over N periods. The area + between the upper and lower bands represents the Donchian Channel. + + Parameters + ---------- + data : List[Data] + List of data to be used for the calculation. + index : str, optional + Index column name to use with `data`, by default "date". + lower_length : PositiveInt, optional + Number of periods for the lower band, by default 20. + upper_length : PositiveInt, optional + Number of periods for the upper band, by default 20. + offset : int, optional + Offset of the Donchian Channel, by default 0. + + Returns + ------- + OBBject[List[Data]] + The calculated data. + + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> donchian_data = obb.ta.donchian(data=stock_data.results,lower_length=20,upper_length=20,offset=0) + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -715,51 +644,44 @@ def donchian( **inputs, ) + @validate(config=dict(arbitrary_types_allowed=True)) - def ema( - self, - data: Union[List[Data], pandas.DataFrame], - target: str = "close", - index: str = "date", - length: int = 50, - offset: int = 0, - chart: bool = False, - ) -> OBBject[List[Data]]: + def ema(self, data: Union[List[Data], pandas.DataFrame], target: str = 'close', index: str = 'date', length: int = 50, offset: int = 0, chart: bool = False) -> OBBject[List[Data]]: """ - The Exponential Moving Average is a staple of technical - analysis and is used in countless technical indicators. In a Simple Moving - Average, each value in the time period carries equal weight, and values outside - of the time period are not included in the average. However, the Exponential - Moving Average is a cumulative calculation, including all data. Past values have - a diminishing contribution to the average, while more recent values have a greater - contribution. This method allows the moving average to be more responsive to changes - in the data. - - Parameters - ---------- - data : List[Data] - The data to use for the calculation. - target : str - Target column name. - index : str, optional - Index column name to use with `data`, by default "date" - length : int, optional - The length of the calculation, by default 50. - offset : int, optional - The offset of the calculation, by default 0. - - Returns - ------- - OBBject[List[Data]] - The calculated data. - - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> ema_data = obb.ta.ema(data=stock_data.results,target="close",length=50,offset=0) - - """ # noqa: E501 + The Exponential Moving Average is a staple of technical + analysis and is used in countless technical indicators. In a Simple Moving + Average, each value in the time period carries equal weight, and values outside + of the time period are not included in the average. However, the Exponential + Moving Average is a cumulative calculation, including all data. Past values have + a diminishing contribution to the average, while more recent values have a greater + contribution. This method allows the moving average to be more responsive to changes + in the data. + + Parameters + ---------- + data : List[Data] + The data to use for the calculation. + target : str + Target column name. + index : str, optional + Index column name to use with `data`, by default "date" + length : int, optional + The length of the calculation, by default 50. + offset : int, optional + The offset of the calculation, by default 0. + + Returns + ------- + OBBject[List[Data]] + The calculated data. + + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> ema_data = obb.ta.ema(data=stock_data.results,target="close",length=50,offset=0) + + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -775,38 +697,31 @@ def ema( **inputs, ) + @validate(config=dict(arbitrary_types_allowed=True)) - def fib( - self, - data: Union[List[Data], pandas.DataFrame], - index: str = "date", - close_column: Literal["close", "adj_close"] = "close", - period: typing_extensions.Annotated[int, Gt(gt=0)] = 120, - start_date: Union[str, None] = None, - end_date: Union[str, None] = None, - ) -> OBBject[List[Data]]: + def fib(self, data: Union[List[Data], pandas.DataFrame], index: str = 'date', close_column: Literal['close', 'adj_close'] = 'close', period: typing_extensions.Annotated[int, Gt(gt=0)] = 120, start_date: Union[str, None] = None, end_date: Union[str, None] = None) -> OBBject[List[Data]]: """Create Fibonacci Retracement Levels. - Parameters - ---------- - data : List[Data] - List of data to apply the indicator to. - index : str, optional - Index column name, by default "date" - period : PositiveInt, optional - Period to calculate the indicator, by default 120 - - Returns - ------- - OBBject[List[Data]] - List of data with the indicator applied. - - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> fib_data = obb.ta.fib(data=stock_data.results, period=120) - """ # noqa: E501 + Parameters + ---------- + data : List[Data] + List of data to apply the indicator to. + index : str, optional + Index column name, by default "date" + period : PositiveInt, optional + Period to calculate the indicator, by default 120 + + Returns + ------- + OBBject[List[Data]] + List of data with the indicator applied. + + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> fib_data = obb.ta.fib(data=stock_data.results, period=120) + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -822,43 +737,38 @@ def fib( **inputs, ) + @validate(config=dict(arbitrary_types_allowed=True)) - def fisher( - self, - data: Union[List[Data], pandas.DataFrame], - index: str = "date", - length: typing_extensions.Annotated[int, Gt(gt=0)] = 14, - signal: typing_extensions.Annotated[int, Gt(gt=0)] = 1, - ) -> OBBject[List[Data]]: + def fisher(self, data: Union[List[Data], pandas.DataFrame], index: str = 'date', length: typing_extensions.Annotated[int, Gt(gt=0)] = 14, signal: typing_extensions.Annotated[int, Gt(gt=0)] = 1) -> OBBject[List[Data]]: """ - The Fisher Transform is a technical indicator created by John F. Ehlers - that converts prices into a Gaussian normal distribution.1 The indicator - highlights when prices have moved to an extreme, based on recent prices. - This may help in spotting turning points in the price of an asset. It also - helps show the trend and isolate the price waves within a trend. - - Parameters - ---------- - data : List[Data] - List of data to apply the indicator to. - index : str, optional - Index column name, by default "date" - length : PositiveInt, optional - Fisher period, by default 14 - signal : PositiveInt, optional - Fisher Signal period, by default 1 - - Returns - ------- - OBBject[List[Data]] - List of data with the indicator applied. - - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> fisher_data = obb.ta.fisher(data=stock_data.results, length=14, signal=1) - """ # noqa: E501 + The Fisher Transform is a technical indicator created by John F. Ehlers + that converts prices into a Gaussian normal distribution.1 The indicator + highlights when prices have moved to an extreme, based on recent prices. + This may help in spotting turning points in the price of an asset. It also + helps show the trend and isolate the price waves within a trend. + + Parameters + ---------- + data : List[Data] + List of data to apply the indicator to. + index : str, optional + Index column name, by default "date" + length : PositiveInt, optional + Fisher period, by default 14 + signal : PositiveInt, optional + Fisher Signal period, by default 1 + + Returns + ------- + OBBject[List[Data]] + List of data with the indicator applied. + + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> fisher_data = obb.ta.fisher(data=stock_data.results, length=14, signal=1) + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -872,46 +782,39 @@ def fisher( **inputs, ) + @validate(config=dict(arbitrary_types_allowed=True)) - def hma( - self, - data: Union[List[Data], pandas.DataFrame], - target: str = "close", - index: str = "date", - length: int = 50, - offset: int = 0, - chart: bool = False, - ) -> OBBject[List[Data]]: + def hma(self, data: Union[List[Data], pandas.DataFrame], target: str = 'close', index: str = 'date', length: int = 50, offset: int = 0, chart: bool = False) -> OBBject[List[Data]]: """ - The Hull Moving Average solves the age old dilemma of making a moving average - more responsive to current price activity whilst maintaining curve smoothness. - In fact the HMA almost eliminates lag altogether and manages to improve smoothing - at the same time. - - Parameters - ---------- - data : List[Data] - List of data to be used for the calculation. - target : str - Target column name. - index : str, optional - Index column name to use with `data`, by default "date". - length : int, optional - Number of periods for the HMA, by default 50. - offset : int, optional - Offset of the HMA, by default 0. - - Returns - ------- - OBBject[List[Data]] - The calculated data. - - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> hma_data = obb.ta.hma(data=stock_data.results,target="close",length=50,offset=0) - """ # noqa: E501 + The Hull Moving Average solves the age old dilemma of making a moving average + more responsive to current price activity whilst maintaining curve smoothness. + In fact the HMA almost eliminates lag altogether and manages to improve smoothing + at the same time. + + Parameters + ---------- + data : List[Data] + List of data to be used for the calculation. + target : str + Target column name. + index : str, optional + Index column name to use with `data`, by default "date". + length : int, optional + Number of periods for the HMA, by default 50. + offset : int, optional + Offset of the HMA, by default 0. + + Returns + ------- + OBBject[List[Data]] + The calculated data. + + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> hma_data = obb.ta.hma(data=stock_data.results,target="close",length=50,offset=0) + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -927,40 +830,32 @@ def hma( **inputs, ) + @validate(config=dict(arbitrary_types_allowed=True)) - def ichimoku( - self, - data: Union[List[Data], pandas.DataFrame], - index: str = "date", - conversion: typing_extensions.Annotated[int, Gt(gt=0)] = 9, - base: typing_extensions.Annotated[int, Gt(gt=0)] = 26, - lagging: typing_extensions.Annotated[int, Gt(gt=0)] = 52, - offset: typing_extensions.Annotated[int, Gt(gt=0)] = 26, - lookahead: bool = False, - ) -> OBBject[List[Data]]: + def ichimoku(self, data: Union[List[Data], pandas.DataFrame], index: str = 'date', conversion: typing_extensions.Annotated[int, Gt(gt=0)] = 9, base: typing_extensions.Annotated[int, Gt(gt=0)] = 26, lagging: typing_extensions.Annotated[int, Gt(gt=0)] = 52, offset: typing_extensions.Annotated[int, Gt(gt=0)] = 26, lookahead: bool = False) -> OBBject[List[Data]]: """ - The Ichimoku Cloud, also known as Ichimoku Kinko Hyo, is a versatile indicator that - defines support and resistance, identifies trend direction, gauges momentum and provides - trading signals. Ichimoku Kinko Hyo translates into "one look equilibrium chart". With - one look, chartists can identify the trend and look for potential signals within that trend. - - Parameters - ---------- - data : List[Data] - List of data to be used for the calculation. - index : str, optional - Index column name to use with `data`, by default "date". - conversion : PositiveInt, optional - Number of periods for the conversion line, by default 9. - base : PositiveInt, optional - Number of periods for the base line, by default 26. - lagging : PositiveInt, optional - Number of periods for the lagging span, by default 52. - offset : PositiveInt, optional - Number of periods for the offset, by default 26. - lookahead : bool, optional - drops the Chikou Span Column to prevent potential data leak - """ # noqa: E501 + The Ichimoku Cloud, also known as Ichimoku Kinko Hyo, is a versatile indicator that + defines support and resistance, identifies trend direction, gauges momentum and provides + trading signals. Ichimoku Kinko Hyo translates into "one look equilibrium chart". With + one look, chartists can identify the trend and look for potential signals within that trend. + + Parameters + ---------- + data : List[Data] + List of data to be used for the calculation. + index : str, optional + Index column name to use with `data`, by default "date". + conversion : PositiveInt, optional + Number of periods for the conversion line, by default 9. + base : PositiveInt, optional + Number of periods for the base line, by default 26. + lagging : PositiveInt, optional + Number of periods for the lagging span, by default 52. + offset : PositiveInt, optional + Number of periods for the offset, by default 26. + lookahead : bool, optional + drops the Chikou Span Column to prevent potential data leak + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -977,49 +872,42 @@ def ichimoku( **inputs, ) + @validate(config=dict(arbitrary_types_allowed=True)) - def kc( - self, - data: Union[List[Data], pandas.DataFrame], - index: str = "date", - length: typing_extensions.Annotated[int, Gt(gt=0)] = 20, - scalar: typing_extensions.Annotated[float, Gt(gt=0)] = 20, - mamode: Literal["ema", "sma", "wma", "hma", "zlma"] = "ema", - offset: typing_extensions.Annotated[int, Ge(ge=0)] = 0, - ) -> OBBject[List[Data]]: + def kc(self, data: Union[List[Data], pandas.DataFrame], index: str = 'date', length: typing_extensions.Annotated[int, Gt(gt=0)] = 20, scalar: typing_extensions.Annotated[float, Gt(gt=0)] = 20, mamode: Literal['ema', 'sma', 'wma', 'hma', 'zlma'] = 'ema', offset: typing_extensions.Annotated[int, Ge(ge=0)] = 0) -> OBBject[List[Data]]: """ - Keltner Channels are volatility-based bands that are placed - on either side of an asset's price and can aid in determining - the direction of a trend.The Keltner channel uses the average - true range (ATR) or volatility, with breaks above or below the top - and bottom barriers signaling a continuation. - - Parameters - ---------- - data : List[Data] - The data to use for the Keltner Channels calculation. - index : str, optional - Index column name to use with `data`, by default "date" - length : PositiveInt, optional - The length of the Keltner Channels, by default 20 - scalar : PositiveFloat, optional - The scalar to use for the Keltner Channels, by default 20 - mamode : Literal["ema", "sma", "wma", "hma", "zlma"], optional - The moving average mode to use for the Keltner Channels, by default "ema" - offset : NonNegativeInt, optional - The offset to use for the Keltner Channels, by default 0 - - Returns - ------- - OBBject[List[Data]] - The Keltner Channels data. - - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> kc_data = obb.ta.kc(data=stock_data.results, length=20, scalar=20, mamode="ema", offset=0) - """ # noqa: E501 + Keltner Channels are volatility-based bands that are placed + on either side of an asset's price and can aid in determining + the direction of a trend.The Keltner channel uses the average + true range (ATR) or volatility, with breaks above or below the top + and bottom barriers signaling a continuation. + + Parameters + ---------- + data : List[Data] + The data to use for the Keltner Channels calculation. + index : str, optional + Index column name to use with `data`, by default "date" + length : PositiveInt, optional + The length of the Keltner Channels, by default 20 + scalar : PositiveFloat, optional + The scalar to use for the Keltner Channels, by default 20 + mamode : Literal["ema", "sma", "wma", "hma", "zlma"], optional + The moving average mode to use for the Keltner Channels, by default "ema" + offset : NonNegativeInt, optional + The offset to use for the Keltner Channels, by default 0 + + Returns + ------- + OBBject[List[Data]] + The Keltner Channels data. + + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> kc_data = obb.ta.kc(data=stock_data.results, length=20, scalar=20, mamode="ema", offset=0) + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -1035,54 +923,46 @@ def kc( **inputs, ) + @validate(config=dict(arbitrary_types_allowed=True)) - def macd( - self, - data: Union[List[Data], pandas.DataFrame], - target: str = "close", - index: str = "date", - fast: int = 12, - slow: int = 26, - signal: int = 9, - chart: bool = False, - ) -> OBBject[List[Data]]: + def macd(self, data: Union[List[Data], pandas.DataFrame], target: str = 'close', index: str = 'date', fast: int = 12, slow: int = 26, signal: int = 9, chart: bool = False) -> OBBject[List[Data]]: """ - The Moving Average Convergence Divergence (MACD) is the difference - between two Exponential Moving Averages. The Signal line is an Exponential Moving - Average of the MACD. - - The MACD signals trend changes and indicates the start of new trend direction. - High values indicate overbought conditions, low values indicate oversold conditions. - Divergence with the price indicates an end to the current trend, especially if the - MACD is at extreme high or low values. When the MACD line crosses above the - signal line a buy signal is generated. When the MACD crosses below the signal line a - sell signal is generated. To confirm the signal, the MACD should be above zero for a buy, - and below zero for a sell. - - Parameters - ---------- - data : List[Data] - List of data to be used for the calculation. - target : str - Target column name. - fast : int, optional - Number of periods for the fast EMA, by default 12. - slow : int, optional - Number of periods for the slow EMA, by default 26. - signal : int, optional - Number of periods for the signal EMA, by default 9. - - Returns - ------- - OBBject[List[Data]] - The calculated data. - - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> macd_data = obb.ta.macd(data=stock_data.results,target="close",fast=12,slow=26,signal=9) - """ # noqa: E501 + The Moving Average Convergence Divergence (MACD) is the difference + between two Exponential Moving Averages. The Signal line is an Exponential Moving + Average of the MACD. + + The MACD signals trend changes and indicates the start of new trend direction. + High values indicate overbought conditions, low values indicate oversold conditions. + Divergence with the price indicates an end to the current trend, especially if the + MACD is at extreme high or low values. When the MACD line crosses above the + signal line a buy signal is generated. When the MACD crosses below the signal line a + sell signal is generated. To confirm the signal, the MACD should be above zero for a buy, + and below zero for a sell. + + Parameters + ---------- + data : List[Data] + List of data to be used for the calculation. + target : str + Target column name. + fast : int, optional + Number of periods for the fast EMA, by default 12. + slow : int, optional + Number of periods for the slow EMA, by default 26. + signal : int, optional + Number of periods for the signal EMA, by default 9. + + Returns + ------- + OBBject[List[Data]] + The calculated data. + + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> macd_data = obb.ta.macd(data=stock_data.results,target="close",fast=12,slow=26,signal=9) + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -1099,44 +979,40 @@ def macd( **inputs, ) + @validate(config=dict(arbitrary_types_allowed=True)) - def obv( - self, - data: Union[List[Data], pandas.DataFrame], - index: str = "date", - offset: int = 0, - ) -> OBBject[List[Data]]: + def obv(self, data: Union[List[Data], pandas.DataFrame], index: str = 'date', offset: int = 0) -> OBBject[List[Data]]: """ - The On Balance Volume (OBV) is a cumulative total of the up and - down volume. When the close is higher than the previous close, the volume is added - to the running total, and when the close is lower than the previous close, the volume - is subtracted from the running total. - - To interpret the OBV, look for the OBV to move with the price or precede price moves. - If the price moves before the OBV, then it is a non-confirmed move. A series of rising peaks, - or falling troughs, in the OBV indicates a strong trend. If the OBV is flat, then the market - is not trending. - - Parameters - ---------- - data : List[Data] - List of data to apply the indicator to. - index : str, optional - Index column name, by default "date" - offset : int, optional - How many periods to offset the result, by default 0. - - Returns - ------- - OBBject[List[Data]] - List of data with the indicator applied. - - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> obv_data = obb.ta.obv(data=stock_data.results, offset=0) - """ # noqa: E501 + The On Balance Volume (OBV) is a cumulative total of the up and + down volume. When the close is higher than the previous close, the volume is added + to the running total, and when the close is lower than the previous close, the volume + is subtracted from the running total. + + To interpret the OBV, look for the OBV to move with the price or precede price moves. + If the price moves before the OBV, then it is a non-confirmed move. A series of rising peaks, + or falling troughs, in the OBV indicates a strong trend. If the OBV is flat, then the market + is not trending. + + Parameters + ---------- + data : List[Data] + List of data to apply the indicator to. + index : str, optional + Index column name, by default "date" + offset : int, optional + How many periods to offset the result, by default 0. + + Returns + ------- + OBBject[List[Data]] + List of data with the indicator applied. + + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> obv_data = obb.ta.obv(data=stock_data.results, offset=0) + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -1149,50 +1025,42 @@ def obv( **inputs, ) + @validate(config=dict(arbitrary_types_allowed=True)) - def rsi( - self, - data: Union[List[Data], pandas.DataFrame], - target: str = "close", - index: str = "date", - length: int = 14, - scalar: float = 100.0, - drift: int = 1, - chart: bool = False, - ) -> OBBject[List[Data]]: + def rsi(self, data: Union[List[Data], pandas.DataFrame], target: str = 'close', index: str = 'date', length: int = 14, scalar: float = 100.0, drift: int = 1, chart: bool = False) -> OBBject[List[Data]]: """ - The Relative Strength Index (RSI) calculates a ratio of the - recent upward price movements to the absolute price movement. The RSI ranges - from 0 to 100. The RSI is interpreted as an overbought/oversold indicator when - the value is over 70/below 30. You can also look for divergence with price. If - the price is making new highs/lows, and the RSI is not, it indicates a reversal. - - Parameters - ---------- - data : List[Data] - The data to use for the RSI calculation. - target : str - Target column name. - index : str, optional - Index column name to use with `data`, by default "date" - length : int, optional - The length of the RSI, by default 14 - scalar : float, optional - The scalar to use for the RSI, by default 100.0 - drift : int, optional - The drift to use for the RSI, by default 1 - - Returns - ------- - OBBject[List[Data]] - The RSI data. - - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> rsi_data = obb.ta.rsi(data=stock_data.results, target="close", length=14, scalar=100.0, drift=1) - """ # noqa: E501 + The Relative Strength Index (RSI) calculates a ratio of the + recent upward price movements to the absolute price movement. The RSI ranges + from 0 to 100. The RSI is interpreted as an overbought/oversold indicator when + the value is over 70/below 30. You can also look for divergence with price. If + the price is making new highs/lows, and the RSI is not, it indicates a reversal. + + Parameters + ---------- + data : List[Data] + The data to use for the RSI calculation. + target : str + Target column name. + index : str, optional + Index column name to use with `data`, by default "date" + length : int, optional + The length of the RSI, by default 14 + scalar : float, optional + The scalar to use for the RSI, by default 100.0 + drift : int, optional + The drift to use for the RSI, by default 1 + + Returns + ------- + OBBject[List[Data]] + The RSI data. + + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> rsi_data = obb.ta.rsi(data=stock_data.results, target="close", length=14, scalar=100.0, drift=1) + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -1209,49 +1077,42 @@ def rsi( **inputs, ) + @validate(config=dict(arbitrary_types_allowed=True)) - def sma( - self, - data: Union[List[Data], pandas.DataFrame], - target: str = "close", - index: str = "date", - length: int = 50, - offset: int = 0, - chart: bool = False, - ) -> OBBject[List[Data]]: + def sma(self, data: Union[List[Data], pandas.DataFrame], target: str = 'close', index: str = 'date', length: int = 50, offset: int = 0, chart: bool = False) -> OBBject[List[Data]]: """ - Moving Averages are used to smooth the data in an array to - help eliminate noise and identify trends. The Simple Moving Average is literally - the simplest form of a moving average. Each output value is the average of the - previous n values. In a Simple Moving Average, each value in the time period carries - equal weight, and values outside of the time period are not included in the average. - This makes it less responsive to recent changes in the data, which can be useful for - filtering out those changes. - - Parameters - ---------- - data : List[Data] - List of data to be used for the calculation. - target : str - Target column name. - index : str, optional - Index column name to use with `data`, by default "date". - length : int, optional - Number of periods to be used for the calculation, by default 50. - offset : int, optional - Offset from the current period, by default 0. - - Returns - ------- - OBBject[List[Data]] - The calculated data. - - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> sma_data = obb.ta.sma(data=stock_data.results,target="close",length=50,offset=0) - """ # noqa: E501 + Moving Averages are used to smooth the data in an array to + help eliminate noise and identify trends. The Simple Moving Average is literally + the simplest form of a moving average. Each output value is the average of the + previous n values. In a Simple Moving Average, each value in the time period carries + equal weight, and values outside of the time period are not included in the average. + This makes it less responsive to recent changes in the data, which can be useful for + filtering out those changes. + + Parameters + ---------- + data : List[Data] + List of data to be used for the calculation. + target : str + Target column name. + index : str, optional + Index column name to use with `data`, by default "date". + length : int, optional + Number of periods to be used for the calculation, by default 50. + offset : int, optional + Offset from the current period, by default 0. + + Returns + ------- + OBBject[List[Data]] + The calculated data. + + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> sma_data = obb.ta.sma(data=stock_data.results,target="close",length=50,offset=0) + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -1267,47 +1128,41 @@ def sma( **inputs, ) + @validate(config=dict(arbitrary_types_allowed=True)) - def stoch( - self, - data: Union[List[Data], pandas.DataFrame], - index: str = "date", - fast_k_period: typing_extensions.Annotated[int, Ge(ge=0)] = 14, - slow_d_period: typing_extensions.Annotated[int, Ge(ge=0)] = 3, - slow_k_period: typing_extensions.Annotated[int, Ge(ge=0)] = 3, - ) -> OBBject[List[Data]]: + def stoch(self, data: Union[List[Data], pandas.DataFrame], index: str = 'date', fast_k_period: typing_extensions.Annotated[int, Ge(ge=0)] = 14, slow_d_period: typing_extensions.Annotated[int, Ge(ge=0)] = 3, slow_k_period: typing_extensions.Annotated[int, Ge(ge=0)] = 3) -> OBBject[List[Data]]: """ - The Stochastic Oscillator measures where the close is in relation - to the recent trading range. The values range from zero to 100. %D values over 75 - indicate an overbought condition; values under 25 indicate an oversold condition. - When the Fast %D crosses above the Slow %D, it is a buy signal; when it crosses - below, it is a sell signal. The Raw %K is generally considered too erratic to use - for crossover signals. - - Parameters - ---------- - data : List[Data] - The data to use for the Stochastic Oscillator calculation. - index : str, optional - Index column name to use with `data`, by default "date". - fast_k_period : NonNegativeInt, optional - The fast %K period, by default 14. - slow_d_period : NonNegativeInt, optional - The slow %D period, by default 3. - slow_k_period : NonNegativeInt, optional - The slow %K period, by default 3. - - Returns - ------- - OBBject[List[Data]] - The Stochastic Oscillator data. - - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> stoch_data = obb.ta.stoch(data=stock_data.results, fast_k_period=14, slow_d_period=3, slow_k_period=3) - """ # noqa: E501 + The Stochastic Oscillator measures where the close is in relation + to the recent trading range. The values range from zero to 100. %D values over 75 + indicate an overbought condition; values under 25 indicate an oversold condition. + When the Fast %D crosses above the Slow %D, it is a buy signal; when it crosses + below, it is a sell signal. The Raw %K is generally considered too erratic to use + for crossover signals. + + Parameters + ---------- + data : List[Data] + The data to use for the Stochastic Oscillator calculation. + index : str, optional + Index column name to use with `data`, by default "date". + fast_k_period : NonNegativeInt, optional + The fast %K period, by default 14. + slow_d_period : NonNegativeInt, optional + The slow %D period, by default 3. + slow_k_period : NonNegativeInt, optional + The slow %K period, by default 3. + + Returns + ------- + OBBject[List[Data]] + The Stochastic Oscillator data. + + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> stoch_data = obb.ta.stoch(data=stock_data.results, fast_k_period=14, slow_d_period=3, slow_k_period=3) + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -1322,42 +1177,37 @@ def stoch( **inputs, ) + @validate(config=dict(arbitrary_types_allowed=True)) - def vwap( - self, - data: Union[List[Data], pandas.DataFrame], - index: str = "date", - anchor: str = "D", - offset: int = 0, - ) -> OBBject[List[Data]]: + def vwap(self, data: Union[List[Data], pandas.DataFrame], index: str = 'date', anchor: str = 'D', offset: int = 0) -> OBBject[List[Data]]: """ - The Volume Weighted Average Price that measures the average typical price - by volume. It is typically used with intraday charts to identify general direction. - - Parameters - ---------- - data : List[Data] - List of data to be used for the calculation. - index : str, optional - Index column name to use with `data`, by default "date". - anchor : str, optional - Anchor period to use for the calculation, by default "D". - See Timeseries Offset Aliases below for additional options: - https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#timeseries-offset-aliases - offset : int, optional - Offset from the current period, by default 0. - - Returns - ------- - OBBject[List[Data]] - The calculated data. - - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> vwap_data = obb.ta.vwap(data=stock_data.results,anchor="D",offset=0) - """ # noqa: E501 + The Volume Weighted Average Price that measures the average typical price + by volume. It is typically used with intraday charts to identify general direction. + + Parameters + ---------- + data : List[Data] + List of data to be used for the calculation. + index : str, optional + Index column name to use with `data`, by default "date". + anchor : str, optional + Anchor period to use for the calculation, by default "D". + See Timeseries Offset Aliases below for additional options: + https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#timeseries-offset-aliases + offset : int, optional + Offset from the current period, by default 0. + + Returns + ------- + OBBject[List[Data]] + The calculated data. + + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> vwap_data = obb.ta.vwap(data=stock_data.results,anchor="D",offset=0) + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -1371,46 +1221,39 @@ def vwap( **inputs, ) + @validate(config=dict(arbitrary_types_allowed=True)) - def wma( - self, - data: Union[List[Data], pandas.DataFrame], - target: str = "close", - index: str = "date", - length: int = 50, - offset: int = 0, - chart: bool = False, - ) -> OBBject[List[Data]]: + def wma(self, data: Union[List[Data], pandas.DataFrame], target: str = 'close', index: str = 'date', length: int = 50, offset: int = 0, chart: bool = False) -> OBBject[List[Data]]: """ - A Weighted Moving Average puts more weight on recent data and less on past data. - This is done by multiplying each bar's price by a weighting factor. Because of its - unique calculation, WMA will follow prices more closely than a corresponding Simple - Moving Average. - - Parameters - ---------- - data : List[Data] - The data to use for the calculation. - target : str - Target column name. - index : str, optional - Index column name to use with `data`, by default "date". - length : int, optional - The length of the WMA, by default 50. - offset : int, optional - The offset of the WMA, by default 0. - - Returns - ------- - OBBject[List[Data]] - The WMA data. - - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> wma_data = obb.ta.wma(data=stock_data.results, target="close", length=50, offset=0) - """ # noqa: E501 + A Weighted Moving Average puts more weight on recent data and less on past data. + This is done by multiplying each bar's price by a weighting factor. Because of its + unique calculation, WMA will follow prices more closely than a corresponding Simple + Moving Average. + + Parameters + ---------- + data : List[Data] + The data to use for the calculation. + target : str + Target column name. + index : str, optional + Index column name to use with `data`, by default "date". + length : int, optional + The length of the WMA, by default 50. + offset : int, optional + The offset of the WMA, by default 0. + + Returns + ------- + OBBject[List[Data]] + The WMA data. + + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> wma_data = obb.ta.wma(data=stock_data.results, target="close", length=50, offset=0) + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -1426,49 +1269,42 @@ def wma( **inputs, ) + @validate(config=dict(arbitrary_types_allowed=True)) - def zlma( - self, - data: Union[List[Data], pandas.DataFrame], - target: str = "close", - index: str = "date", - length: int = 50, - offset: int = 0, - chart: bool = False, - ) -> OBBject[List[Data]]: + def zlma(self, data: Union[List[Data], pandas.DataFrame], target: str = 'close', index: str = 'date', length: int = 50, offset: int = 0, chart: bool = False) -> OBBject[List[Data]]: """ - The zero lag exponential moving average (ZLEMA) indicator - was created by John Ehlers and Ric Way. The idea is do a - regular exponential moving average (EMA) calculation but - on a de-lagged data instead of doing it on the regular data. - Data is de-lagged by removing the data from "lag" days ago - thus removing (or attempting to) the cumulative effect of - the moving average. - - Parameters - ---------- - data : List[Data] - List of data to be used for the calculation. - target : str - Target column name. - index : str, optional - Index column name to use with `data`, by default "date". - length : int, optional - Number of periods to be used for the calculation, by default 50. - offset : int, optional - Offset to be used for the calculation, by default 0. - - Returns - ------- - OBBject[List[Data]] - The calculated data. - - Examples - -------- - >>> from openbb import obb - >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") - >>> zlma_data = obb.ta.zlma(data=stock_data.results, target="close", length=50, offset=0) - """ # noqa: E501 + The zero lag exponential moving average (ZLEMA) indicator + was created by John Ehlers and Ric Way. The idea is do a + regular exponential moving average (EMA) calculation but + on a de-lagged data instead of doing it on the regular data. + Data is de-lagged by removing the data from "lag" days ago + thus removing (or attempting to) the cumulative effect of + the moving average. + + Parameters + ---------- + data : List[Data] + List of data to be used for the calculation. + target : str + Target column name. + index : str, optional + Index column name to use with `data`, by default "date". + length : int, optional + Number of periods to be used for the calculation, by default 50. + offset : int, optional + Offset to be used for the calculation, by default 0. + + Returns + ------- + OBBject[List[Data]] + The calculated data. + + Examples + -------- + >>> from openbb import obb + >>> stock_data = obb.stocks.load(symbol="TSLA", start_date="2023-01-01", provider="fmp") + >>> zlma_data = obb.ta.zlma(data=stock_data.results, target="close", length=50, offset=0) + """ # noqa: E501 inputs = filter_inputs( data=data, @@ -1483,3 +1319,4 @@ def zlma( "/ta/zlma", **inputs, ) + diff --git a/openbb_platform/platform/provider/openbb_provider/standard_models/filings.py b/openbb_platform/platform/provider/openbb_provider/standard_models/filings.py new file mode 100644 index 000000000000..39712d2b9030 --- /dev/null +++ b/openbb_platform/platform/provider/openbb_provider/standard_models/filings.py @@ -0,0 +1,47 @@ +"""Filings Data Model.""" + +from datetime import date as dateType +from typing import Optional + +from pydantic import Field, NonNegativeInt + +from openbb_provider.abstract.data import Data +from openbb_provider.abstract.query_params import QueryParams +from openbb_provider.utils.descriptions import DATA_DESCRIPTIONS, QUERY_DESCRIPTIONS + + +class FilingsQueryParams(QueryParams): + """Filings query.""" + + pages: NonNegativeInt = Field( + default=1, + description="The range of most-recent pages to get entries from (1000 per page, max 30 pages)", + ) + limit: NonNegativeInt = Field( + default=5, description=QUERY_DESCRIPTIONS.get("limit", "") + ) + today: bool = Field( + default=False, + description="Show all from today", + ) + + +class FilingsData(Data): + """Filings data.""" + + symbol: str = Field( + description=DATA_DESCRIPTIONS.get("symbol", ""), + ) + title: str = Field( + description="The title of the filing", + ) + date: dateType = Field( + description=DATA_DESCRIPTIONS.get("date", ""), + ) + url: Optional[str] = Field(description="The URL of the filing", default=None) + cik: str = Field( + description="The CIK of the filing", + ) + form_type: str = Field( + description="The form type of the filing", + ) diff --git a/openbb_platform/platform/provider/openbb_provider/standard_models/top_retail.py b/openbb_platform/platform/provider/openbb_provider/standard_models/top_retail.py new file mode 100644 index 000000000000..ec1f5dc9656d --- /dev/null +++ b/openbb_platform/platform/provider/openbb_provider/standard_models/top_retail.py @@ -0,0 +1,26 @@ +"""Top Retail standard model.""" + +from datetime import date as DateType + +from pydantic import Field + +from openbb_provider.abstract.data import Data +from openbb_provider.abstract.query_params import QueryParams +from openbb_provider.utils.descriptions import DATA_DESCRIPTIONS, QUERY_DESCRIPTIONS + + +class TopRetailQueryParams(QueryParams): + """Top Retail Search Query Params.""" + + limit: int = Field(description=QUERY_DESCRIPTIONS.get("limit", ""), default=5) + + +class TopRetailData(Data): + """Top Retail Search Data.""" + + date: DateType = Field(description=DATA_DESCRIPTIONS.get("date", "")) + symbol: str = Field(description=DATA_DESCRIPTIONS.get("symbol", "")) + activity: float = Field(description="Activity of the symbol.") + sentiment: float = Field( + description="Sentiment of the symbol. 1 is bullish, -1 is bearish." + ) diff --git a/openbb_platform/platform/provider/openbb_provider/standard_models/upcoming_release_days.py b/openbb_platform/platform/provider/openbb_provider/standard_models/upcoming_release_days.py new file mode 100644 index 000000000000..5959127a4208 --- /dev/null +++ b/openbb_platform/platform/provider/openbb_provider/standard_models/upcoming_release_days.py @@ -0,0 +1,34 @@ +"""Upcoming Release Days standard model.""" + +from datetime import date as dateType +from typing import Optional + +from pydantic import Field + +from openbb_provider.abstract.data import Data +from openbb_provider.abstract.query_params import QueryParams +from openbb_provider.utils.descriptions import DATA_DESCRIPTIONS, QUERY_DESCRIPTIONS + + +class UpcomingReleaseDaysQueryParams(QueryParams): + """Upcoming Release Days Search Query Params.""" + + limit: int = Field( + description=QUERY_DESCRIPTIONS.get("limit", "") + + "In this case, the number of lookahead days.", + default=5, + ) + start_date: Optional[dateType] = Field( + default=None, + description=QUERY_DESCRIPTIONS.get("start_date", ""), + ) + + +class UpcomingReleaseDaysData(Data): + """Upcoming Release Days Search Data.""" + + symbol: str = Field(description=DATA_DESCRIPTIONS.get("symbol", "")) + name: str = Field(description="The full name of the asset.") + exchange: str = Field(description="The exchange the asset is traded on.") + release_time_type: str = Field(description="The type of release time.") + release_date: dateType = Field(description="The date of the release.") diff --git a/openbb_platform/poetry.lock b/openbb_platform/poetry.lock index 05015b0913d6..aaec1bbbb0ff 100644 --- a/openbb_platform/poetry.lock +++ b/openbb_platform/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.7.0 and should not be changed by hand. [[package]] name = "aiohttp" @@ -314,101 +314,101 @@ files = [ [[package]] name = "charset-normalizer" -version = "3.3.1" +version = "3.3.2" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7.0" files = [ - {file = "charset-normalizer-3.3.1.tar.gz", hash = "sha256:d9137a876020661972ca6eec0766d81aef8a5627df628b664b234b73396e727e"}, - {file = "charset_normalizer-3.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8aee051c89e13565c6bd366813c386939f8e928af93c29fda4af86d25b73d8f8"}, - {file = "charset_normalizer-3.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:352a88c3df0d1fa886562384b86f9a9e27563d4704ee0e9d56ec6fcd270ea690"}, - {file = "charset_normalizer-3.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:223b4d54561c01048f657fa6ce41461d5ad8ff128b9678cfe8b2ecd951e3f8a2"}, - {file = "charset_normalizer-3.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f861d94c2a450b974b86093c6c027888627b8082f1299dfd5a4bae8e2292821"}, - {file = "charset_normalizer-3.3.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1171ef1fc5ab4693c5d151ae0fdad7f7349920eabbaca6271f95969fa0756c2d"}, - {file = "charset_normalizer-3.3.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28f512b9a33235545fbbdac6a330a510b63be278a50071a336afc1b78781b147"}, - {file = "charset_normalizer-3.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0e842112fe3f1a4ffcf64b06dc4c61a88441c2f02f373367f7b4c1aa9be2ad5"}, - {file = "charset_normalizer-3.3.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3f9bc2ce123637a60ebe819f9fccc614da1bcc05798bbbaf2dd4ec91f3e08846"}, - {file = "charset_normalizer-3.3.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f194cce575e59ffe442c10a360182a986535fd90b57f7debfaa5c845c409ecc3"}, - {file = "charset_normalizer-3.3.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:9a74041ba0bfa9bc9b9bb2cd3238a6ab3b7618e759b41bd15b5f6ad958d17605"}, - {file = "charset_normalizer-3.3.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:b578cbe580e3b41ad17b1c428f382c814b32a6ce90f2d8e39e2e635d49e498d1"}, - {file = "charset_normalizer-3.3.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:6db3cfb9b4fcecb4390db154e75b49578c87a3b9979b40cdf90d7e4b945656e1"}, - {file = "charset_normalizer-3.3.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:debb633f3f7856f95ad957d9b9c781f8e2c6303ef21724ec94bea2ce2fcbd056"}, - {file = "charset_normalizer-3.3.1-cp310-cp310-win32.whl", hash = "sha256:87071618d3d8ec8b186d53cb6e66955ef2a0e4fa63ccd3709c0c90ac5a43520f"}, - {file = "charset_normalizer-3.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:e372d7dfd154009142631de2d316adad3cc1c36c32a38b16a4751ba78da2a397"}, - {file = "charset_normalizer-3.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ae4070f741f8d809075ef697877fd350ecf0b7c5837ed68738607ee0a2c572cf"}, - {file = "charset_normalizer-3.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:58e875eb7016fd014c0eea46c6fa92b87b62c0cb31b9feae25cbbe62c919f54d"}, - {file = "charset_normalizer-3.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dbd95e300367aa0827496fe75a1766d198d34385a58f97683fe6e07f89ca3e3c"}, - {file = "charset_normalizer-3.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de0b4caa1c8a21394e8ce971997614a17648f94e1cd0640fbd6b4d14cab13a72"}, - {file = "charset_normalizer-3.3.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:985c7965f62f6f32bf432e2681173db41336a9c2611693247069288bcb0c7f8b"}, - {file = "charset_normalizer-3.3.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a15c1fe6d26e83fd2e5972425a772cca158eae58b05d4a25a4e474c221053e2d"}, - {file = "charset_normalizer-3.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae55d592b02c4349525b6ed8f74c692509e5adffa842e582c0f861751701a673"}, - {file = "charset_normalizer-3.3.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:be4d9c2770044a59715eb57c1144dedea7c5d5ae80c68fb9959515037cde2008"}, - {file = "charset_normalizer-3.3.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:851cf693fb3aaef71031237cd68699dded198657ec1e76a76eb8be58c03a5d1f"}, - {file = "charset_normalizer-3.3.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:31bbaba7218904d2eabecf4feec0d07469284e952a27400f23b6628439439fa7"}, - {file = "charset_normalizer-3.3.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:871d045d6ccc181fd863a3cd66ee8e395523ebfbc57f85f91f035f50cee8e3d4"}, - {file = "charset_normalizer-3.3.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:501adc5eb6cd5f40a6f77fbd90e5ab915c8fd6e8c614af2db5561e16c600d6f3"}, - {file = "charset_normalizer-3.3.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f5fb672c396d826ca16a022ac04c9dce74e00a1c344f6ad1a0fdc1ba1f332213"}, - {file = "charset_normalizer-3.3.1-cp311-cp311-win32.whl", hash = "sha256:bb06098d019766ca16fc915ecaa455c1f1cd594204e7f840cd6258237b5079a8"}, - {file = "charset_normalizer-3.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:8af5a8917b8af42295e86b64903156b4f110a30dca5f3b5aedea123fbd638bff"}, - {file = "charset_normalizer-3.3.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:7ae8e5142dcc7a49168f4055255dbcced01dc1714a90a21f87448dc8d90617d1"}, - {file = "charset_normalizer-3.3.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5b70bab78accbc672f50e878a5b73ca692f45f5b5e25c8066d748c09405e6a55"}, - {file = "charset_normalizer-3.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5ceca5876032362ae73b83347be8b5dbd2d1faf3358deb38c9c88776779b2e2f"}, - {file = "charset_normalizer-3.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34d95638ff3613849f473afc33f65c401a89f3b9528d0d213c7037c398a51296"}, - {file = "charset_normalizer-3.3.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9edbe6a5bf8b56a4a84533ba2b2f489d0046e755c29616ef8830f9e7d9cf5728"}, - {file = "charset_normalizer-3.3.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f6a02a3c7950cafaadcd46a226ad9e12fc9744652cc69f9e5534f98b47f3bbcf"}, - {file = "charset_normalizer-3.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10b8dd31e10f32410751b3430996f9807fc4d1587ca69772e2aa940a82ab571a"}, - {file = "charset_normalizer-3.3.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edc0202099ea1d82844316604e17d2b175044f9bcb6b398aab781eba957224bd"}, - {file = "charset_normalizer-3.3.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b891a2f68e09c5ef989007fac11476ed33c5c9994449a4e2c3386529d703dc8b"}, - {file = "charset_normalizer-3.3.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:71ef3b9be10070360f289aea4838c784f8b851be3ba58cf796262b57775c2f14"}, - {file = "charset_normalizer-3.3.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:55602981b2dbf8184c098bc10287e8c245e351cd4fdcad050bd7199d5a8bf514"}, - {file = "charset_normalizer-3.3.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:46fb9970aa5eeca547d7aa0de5d4b124a288b42eaefac677bde805013c95725c"}, - {file = "charset_normalizer-3.3.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:520b7a142d2524f999447b3a0cf95115df81c4f33003c51a6ab637cbda9d0bf4"}, - {file = "charset_normalizer-3.3.1-cp312-cp312-win32.whl", hash = "sha256:8ec8ef42c6cd5856a7613dcd1eaf21e5573b2185263d87d27c8edcae33b62a61"}, - {file = "charset_normalizer-3.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:baec8148d6b8bd5cee1ae138ba658c71f5b03e0d69d5907703e3e1df96db5e41"}, - {file = "charset_normalizer-3.3.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:63a6f59e2d01310f754c270e4a257426fe5a591dc487f1983b3bbe793cf6bac6"}, - {file = "charset_normalizer-3.3.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d6bfc32a68bc0933819cfdfe45f9abc3cae3877e1d90aac7259d57e6e0f85b1"}, - {file = "charset_normalizer-3.3.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4f3100d86dcd03c03f7e9c3fdb23d92e32abbca07e7c13ebd7ddfbcb06f5991f"}, - {file = "charset_normalizer-3.3.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:39b70a6f88eebe239fa775190796d55a33cfb6d36b9ffdd37843f7c4c1b5dc67"}, - {file = "charset_normalizer-3.3.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e12f8ee80aa35e746230a2af83e81bd6b52daa92a8afaef4fea4a2ce9b9f4fa"}, - {file = "charset_normalizer-3.3.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b6cefa579e1237ce198619b76eaa148b71894fb0d6bcf9024460f9bf30fd228"}, - {file = "charset_normalizer-3.3.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:61f1e3fb621f5420523abb71f5771a204b33c21d31e7d9d86881b2cffe92c47c"}, - {file = "charset_normalizer-3.3.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4f6e2a839f83a6a76854d12dbebde50e4b1afa63e27761549d006fa53e9aa80e"}, - {file = "charset_normalizer-3.3.1-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:1ec937546cad86d0dce5396748bf392bb7b62a9eeb8c66efac60e947697f0e58"}, - {file = "charset_normalizer-3.3.1-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:82ca51ff0fc5b641a2d4e1cc8c5ff108699b7a56d7f3ad6f6da9dbb6f0145b48"}, - {file = "charset_normalizer-3.3.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:633968254f8d421e70f91c6ebe71ed0ab140220469cf87a9857e21c16687c034"}, - {file = "charset_normalizer-3.3.1-cp37-cp37m-win32.whl", hash = "sha256:c0c72d34e7de5604df0fde3644cc079feee5e55464967d10b24b1de268deceb9"}, - {file = "charset_normalizer-3.3.1-cp37-cp37m-win_amd64.whl", hash = "sha256:63accd11149c0f9a99e3bc095bbdb5a464862d77a7e309ad5938fbc8721235ae"}, - {file = "charset_normalizer-3.3.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5a3580a4fdc4ac05f9e53c57f965e3594b2f99796231380adb2baaab96e22761"}, - {file = "charset_normalizer-3.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2465aa50c9299d615d757c1c888bc6fef384b7c4aec81c05a0172b4400f98557"}, - {file = "charset_normalizer-3.3.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cb7cd68814308aade9d0c93c5bd2ade9f9441666f8ba5aa9c2d4b389cb5e2a45"}, - {file = "charset_normalizer-3.3.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91e43805ccafa0a91831f9cd5443aa34528c0c3f2cc48c4cb3d9a7721053874b"}, - {file = "charset_normalizer-3.3.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:854cc74367180beb327ab9d00f964f6d91da06450b0855cbbb09187bcdb02de5"}, - {file = "charset_normalizer-3.3.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c15070ebf11b8b7fd1bfff7217e9324963c82dbdf6182ff7050519e350e7ad9f"}, - {file = "charset_normalizer-3.3.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c4c99f98fc3a1835af8179dcc9013f93594d0670e2fa80c83aa36346ee763d2"}, - {file = "charset_normalizer-3.3.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3fb765362688821404ad6cf86772fc54993ec11577cd5a92ac44b4c2ba52155b"}, - {file = "charset_normalizer-3.3.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:dced27917823df984fe0c80a5c4ad75cf58df0fbfae890bc08004cd3888922a2"}, - {file = "charset_normalizer-3.3.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a66bcdf19c1a523e41b8e9d53d0cedbfbac2e93c649a2e9502cb26c014d0980c"}, - {file = "charset_normalizer-3.3.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ecd26be9f112c4f96718290c10f4caea6cc798459a3a76636b817a0ed7874e42"}, - {file = "charset_normalizer-3.3.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:3f70fd716855cd3b855316b226a1ac8bdb3caf4f7ea96edcccc6f484217c9597"}, - {file = "charset_normalizer-3.3.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:17a866d61259c7de1bdadef418a37755050ddb4b922df8b356503234fff7932c"}, - {file = "charset_normalizer-3.3.1-cp38-cp38-win32.whl", hash = "sha256:548eefad783ed787b38cb6f9a574bd8664468cc76d1538215d510a3cd41406cb"}, - {file = "charset_normalizer-3.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:45f053a0ece92c734d874861ffe6e3cc92150e32136dd59ab1fb070575189c97"}, - {file = "charset_normalizer-3.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bc791ec3fd0c4309a753f95bb6c749ef0d8ea3aea91f07ee1cf06b7b02118f2f"}, - {file = "charset_normalizer-3.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0c8c61fb505c7dad1d251c284e712d4e0372cef3b067f7ddf82a7fa82e1e9a93"}, - {file = "charset_normalizer-3.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2c092be3885a1b7899cd85ce24acedc1034199d6fca1483fa2c3a35c86e43041"}, - {file = "charset_normalizer-3.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c2000c54c395d9e5e44c99dc7c20a64dc371f777faf8bae4919ad3e99ce5253e"}, - {file = "charset_normalizer-3.3.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4cb50a0335382aac15c31b61d8531bc9bb657cfd848b1d7158009472189f3d62"}, - {file = "charset_normalizer-3.3.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c30187840d36d0ba2893bc3271a36a517a717f9fd383a98e2697ee890a37c273"}, - {file = "charset_normalizer-3.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe81b35c33772e56f4b6cf62cf4aedc1762ef7162a31e6ac7fe5e40d0149eb67"}, - {file = "charset_normalizer-3.3.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d0bf89afcbcf4d1bb2652f6580e5e55a840fdf87384f6063c4a4f0c95e378656"}, - {file = "charset_normalizer-3.3.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:06cf46bdff72f58645434d467bf5228080801298fbba19fe268a01b4534467f5"}, - {file = "charset_normalizer-3.3.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:3c66df3f41abee950d6638adc7eac4730a306b022570f71dd0bd6ba53503ab57"}, - {file = "charset_normalizer-3.3.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:cd805513198304026bd379d1d516afbf6c3c13f4382134a2c526b8b854da1c2e"}, - {file = "charset_normalizer-3.3.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:9505dc359edb6a330efcd2be825fdb73ee3e628d9010597aa1aee5aa63442e97"}, - {file = "charset_normalizer-3.3.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:31445f38053476a0c4e6d12b047b08ced81e2c7c712e5a1ad97bc913256f91b2"}, - {file = "charset_normalizer-3.3.1-cp39-cp39-win32.whl", hash = "sha256:bd28b31730f0e982ace8663d108e01199098432a30a4c410d06fe08fdb9e93f4"}, - {file = "charset_normalizer-3.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:555fe186da0068d3354cdf4bbcbc609b0ecae4d04c921cc13e209eece7720727"}, - {file = "charset_normalizer-3.3.1-py3-none-any.whl", hash = "sha256:800561453acdecedaac137bf09cd719c7a440b6800ec182f077bb8e7025fb708"}, + {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, + {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, ] [[package]] @@ -457,69 +457,69 @@ test = ["flake8", "isort", "pytest"] [[package]] name = "cython" -version = "3.0.4" +version = "3.0.5" description = "The Cython compiler for writing C extensions in the Python language." optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ - {file = "Cython-3.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:096cb461bf8d913a4327d93ea38d18bc3dbc577a71d805be04754e4b2cc2c45d"}, - {file = "Cython-3.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf671d712816b48fa2731799017ed68e5e440922d0c7e13dc825c226639ff766"}, - {file = "Cython-3.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:beb367fd88fc6ba8c204786f680229106d99da72a60f5906c85fc8d73640b01a"}, - {file = "Cython-3.0.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6619264ed43d8d8819d4f1cdb8a62ab66f87e92f06f3ff3e2533fd95a9945e59"}, - {file = "Cython-3.0.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:c0fb9e7cf9db38918f19a803fab9bc7b2ed3f33a9e8319c616c464a0a8501b8d"}, - {file = "Cython-3.0.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c214f6e88ecdc8ff5d13f0914890445fdaad21bddc34a90cd14aeb3ad5e55e2e"}, - {file = "Cython-3.0.4-cp310-cp310-win32.whl", hash = "sha256:c9b1322f0d8ce5445fcc3a625b966f10c4182190026713e217d6f38d29930cb1"}, - {file = "Cython-3.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:146bfaab567157f4aa34114a37e3f98a3d9c4527ee99d4fd730cab56482bd3cf"}, - {file = "Cython-3.0.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c8e0f98d950987b0f9d5e10c41236bef5cb4fba701c6e680af0b9734faa3a85e"}, - {file = "Cython-3.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fe227d6d8e2ea030e82abc8a3e361e31447b66849f8c069caa783999e54a8f2"}, - {file = "Cython-3.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6da74000a672eac0d7cf02adc140b2f9c7d54eae6c196e615a1b5deb694d9203"}, - {file = "Cython-3.0.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48cda82eb82ad2014d2ad194442ed3c46156366be98e4e02f3e29742cdbf94a0"}, - {file = "Cython-3.0.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4355a2cb03b257773c0d2bb6af9818c72e836a9b09986e28f52e323d87b1fc67"}, - {file = "Cython-3.0.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:10b426adc3027d66303f5c7aa8b254d10ed80827ff5cce9e892d550b708dc044"}, - {file = "Cython-3.0.4-cp311-cp311-win32.whl", hash = "sha256:28de18f0d07eb34e2dd7b022ac30beab0fdd277846d07b7a08e69e6294f0762b"}, - {file = "Cython-3.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:9d31d76ed777a8a85be3f8f7f1cfef09b3bc33f6ec4abee1067dcef107f49778"}, - {file = "Cython-3.0.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d5a55749509c7f9f8a33bf9cc02cf76fd6564fcb38f486e43d2858145d735953"}, - {file = "Cython-3.0.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58cdfdd942cf5ffcee974aabfe9b9e26c0c1538fd31c1b03596d40405f7f4d40"}, - {file = "Cython-3.0.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b906997e7b98d7d29b84d10a5318993eba1aaff82ff7e1a0ac00254307913d7"}, - {file = "Cython-3.0.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f24114e1777604a28ae1c7a56a2c9964655f1031edecc448ad51e5abb19a279b"}, - {file = "Cython-3.0.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:07d0e69959f267b79ffd18ece8599711ad2f3d3ed1eddd0d4812d2a97de2b912"}, - {file = "Cython-3.0.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f7fcd93d15deceb2747b10266a39deccd94f257d610f3bbd52a7e16bc5908eda"}, - {file = "Cython-3.0.4-cp312-cp312-win32.whl", hash = "sha256:0aa2a6bb3ff67794d8d1dafaed22913adcbb327e96eca3ac44e2f3ba4a0ae446"}, - {file = "Cython-3.0.4-cp312-cp312-win_amd64.whl", hash = "sha256:0021350f6d7022a37f598320460b84b2c0daccf6bb65641bbdbc8b990bdf4ad2"}, - {file = "Cython-3.0.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b72c426df1586f967b1c61d2f8236702d75c6bbf34abdc258a59e09155a16414"}, - {file = "Cython-3.0.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a9262408f05eef039981479b38b38252d5b853992e5bc54a2d2dd05a2a0178e"}, - {file = "Cython-3.0.4-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28af4e7dff1742cb0f0a4823102c89c62a2d94115b68f718145fcfe0763c6e21"}, - {file = "Cython-3.0.4-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4e8c144e2c5814e46868d1f81e2f4265ca1f314a8187d0420cd76e9563294cf8"}, - {file = "Cython-3.0.4-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:19a64bf2591272348ab08bcd4a5f884259cc3186f008c9038b8ec7d01f847fd5"}, - {file = "Cython-3.0.4-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:fc96efa617184b8581a02663e261b41c13a605da8ef4ba1ed735bf46184f815e"}, - {file = "Cython-3.0.4-cp36-cp36m-win32.whl", hash = "sha256:15d52f7f9d08b264c042aa508bf457f53654b55f533e0262e146002b1c15d1cd"}, - {file = "Cython-3.0.4-cp36-cp36m-win_amd64.whl", hash = "sha256:0650460b5fd6f16da4186e0a769b47db5532601e306f3b5d17941283d5e36d24"}, - {file = "Cython-3.0.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b3ddfc6f05410095ec11491dde05f50973e501567d21cbfcf5832d95f141878a"}, - {file = "Cython-3.0.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a0b92adfcac68dcf549daddec83c87a86995caa6f87bfb6f72de4797e1a6ad6"}, - {file = "Cython-3.0.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ada3659608795bb36930d9a206b8dd6b865d85e2999a02ce8b34f3195d88301"}, - {file = "Cython-3.0.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:061dec1be8d8b601b160582609a78eb08324a4ccf21bee0d04853a3e9dfcbefd"}, - {file = "Cython-3.0.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:bc42004f181373cd3b39bbacfb71a5b0606ed6e4c199c940cca2212ba0f79525"}, - {file = "Cython-3.0.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:f124ac9ee41e1bfdfb16f53f1db85de296cd2144a4e8fdee8c3560a8fe9b6d5d"}, - {file = "Cython-3.0.4-cp37-cp37m-win32.whl", hash = "sha256:48b35ab009227ee6188991b5666aae1936b82a944f707c042cef267709de12b5"}, - {file = "Cython-3.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:861979428f749faa9883dc4e11e8c3fc2c29bd0031cf49661604459b53ea7c66"}, - {file = "Cython-3.0.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c7a7dd7c50d07718a5ac2bdea166085565f7217cf1e030cc07c22a8b80a406a7"}, - {file = "Cython-3.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d40d4135f76fb0ed4caa2d422fdb4231616615698709d3c421ecc733f1ac7ca0"}, - {file = "Cython-3.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:207f53893ca22d8c8f5db533f38382eb7ddc2d0b4ab51699bf052423a6febdad"}, - {file = "Cython-3.0.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0422a40a58dcfbb54c8b4e125461d741031ff046bc678475cc7a6c801d2a7721"}, - {file = "Cython-3.0.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ef4b144c5b29b4ea0b40c401458b86df8d75382b2e5d03e9f67f607c05b516a9"}, - {file = "Cython-3.0.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0612439f810cc281e51fead69de0545c4d9772a1e82149c119d1aafc1f6210ba"}, - {file = "Cython-3.0.4-cp38-cp38-win32.whl", hash = "sha256:b86871862bd65806ba0d0aa2b9c77fcdcc6cbd8d36196688f4896a34bb626334"}, - {file = "Cython-3.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:6603a287188dcbc36358a73a7be43e8a2ecf0c6a06835bdfdd1b113943afdd6f"}, - {file = "Cython-3.0.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0fc9e974419cc0393072b1e9a669f71c3b34209636d2005ff8620687daa82b8c"}, - {file = "Cython-3.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e84988d384dfba678387ea7e4f68786c3703543018d473605d9299c69a07f197"}, - {file = "Cython-3.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36299ffd5663203c25d3a76980f077e23b6d4f574d142f0f43943f57be445639"}, - {file = "Cython-3.0.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8529cf09919263a6826adc04c5dde9f1406dd7920929b16be19ee9848110e353"}, - {file = "Cython-3.0.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:8692249732d62e049df3884fa601b70fad3358703e137aceeb581e5860e7d9b7"}, - {file = "Cython-3.0.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f234bc46043856d118ebd94b13ea29df674503bc94ced3d81ca46a1ad5b5b9ae"}, - {file = "Cython-3.0.4-cp39-cp39-win32.whl", hash = "sha256:c2215f436ce3cce49e6e318cb8f7253cfc4d3bea690777c2a5dd52ae93342504"}, - {file = "Cython-3.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:003ccc40e0867770db0018274977d1874e4df64983d5e3e36937f107e0b2fdf6"}, - {file = "Cython-3.0.4-py2.py3-none-any.whl", hash = "sha256:e5e2859f97e9cceb8e70b0934c56157038b8b083245898593008162a70536d7e"}, - {file = "Cython-3.0.4.tar.gz", hash = "sha256:2e379b491ee985d31e5faaf050f79f4a8f59f482835906efe4477b33b4fbe9ff"}, + {file = "Cython-3.0.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4faf17ea6e8fc3065a862d4b24be84048fd58ed7abe59aa2f9141446a7a72335"}, + {file = "Cython-3.0.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1cab30c11880f38a27911b569ea38b0bd67fcf32f8a8a8519b613c70562dae2"}, + {file = "Cython-3.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c4d4d92182002b2878adb3329de1ccb7f3f7571d3586f92602e790bfeab45d0"}, + {file = "Cython-3.0.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b94f58e05e69e1a43da551c8f532e9fad057df1641f0f8ae8f103d4ede5a80fe"}, + {file = "Cython-3.0.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a90f9c7b6635967eacafebe439d518b7dc720aaaf19cb9553f5aad03c13296f4"}, + {file = "Cython-3.0.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c95bd21d87b08c88fe5296381a5f39cd979a775bf1a1d7379a6ff87c703e510b"}, + {file = "Cython-3.0.5-cp310-cp310-win32.whl", hash = "sha256:ebc901131057c115a8868e14c1df6e56b9190df774b72664c03ebd858296bb81"}, + {file = "Cython-3.0.5-cp310-cp310-win_amd64.whl", hash = "sha256:0759868b4a4d103578375e031e89abd578c26774d957ee4f591764ef8003b363"}, + {file = "Cython-3.0.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3679a6693456f5f7ccca9ab2a91408e99ee257e145024fe380da7c78a07e98b6"}, + {file = "Cython-3.0.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ad4eb2608661d63fb57c674dafb9955f5141d748d4579c7722c1a3c6b86a0c2"}, + {file = "Cython-3.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b37f4b0d983316242b4b9241ecbbe55220aa92af93ff04626441fe0ea90a54f9"}, + {file = "Cython-3.0.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34059c3ea6e342ba388cd9774a61761bb4200ca18bd475de65c9cc70ef4e0204"}, + {file = "Cython-3.0.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4db9eea298e982aee7ba12b3432c66eb2e91bb2f5d026bbd57c35698ea0f557f"}, + {file = "Cython-3.0.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:452679284c15a7d5a88bff675e1dd660349360f0665aea50be2d98b7650925f8"}, + {file = "Cython-3.0.5-cp311-cp311-win32.whl", hash = "sha256:2d6bb318ddce8b978c81cf78caf8b3836db84f6235d721952685e87871f506e4"}, + {file = "Cython-3.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:fcfd2255458a5779dbab813550695331d541b24f0ef831ace83f04f9516ddf26"}, + {file = "Cython-3.0.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:0d9fcfc09d67218fce114fe9fd97bba4f9d56add0f775c588d8c626ed47f1aef"}, + {file = "Cython-3.0.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ac1cf1f2ed01656b33618352f7e42bf75d027425b83cc96cfe13ce4b6cba5de"}, + {file = "Cython-3.0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9d17a6ceb301c5dbd3820e62c1b10a4ad3a6eea3e07e7afaf736b5f490c2e32"}, + {file = "Cython-3.0.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dd9cab3b862bec2b110886aedb11765e9deda363c4c7ab5ea205f3d8f143c411"}, + {file = "Cython-3.0.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:45277bb54c35b11bcdd6cf0f56eb950eb280b67146db0cb57853fb6334c6d11d"}, + {file = "Cython-3.0.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:77f4d001fb7a03a68b53be20571acd17452d1dda7907d9c325dff0cc704b1ef9"}, + {file = "Cython-3.0.5-cp312-cp312-win32.whl", hash = "sha256:57b44f789794d74c1feddae054dd045b9f601bdffd7288e069b4ca7ed607ec61"}, + {file = "Cython-3.0.5-cp312-cp312-win_amd64.whl", hash = "sha256:05c4efd36879ff8020af00407e4c14246b894558ea41dc6486f60dd71601fc67"}, + {file = "Cython-3.0.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:048fe89c2c753c24e1a7a05496907173dab17e238c8dc3c7cad90b3679b0d846"}, + {file = "Cython-3.0.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c016b3e859b41cf4ce1b8107f364ad5a83c086f75ea4d8d3990b24691f626a1"}, + {file = "Cython-3.0.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f31d02b831d0fa9bf099b1b714b5a8252eabd8db34b7d33c48e7e808a2dabf9"}, + {file = "Cython-3.0.5-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:485f8a3087392e2287e2869adc0385b439f69b9cfbd262fdf39b00417690c988"}, + {file = "Cython-3.0.5-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:063220a6dc0909b576ef068c7e2acf5c608d64423a6d231aacb72d06352cd95b"}, + {file = "Cython-3.0.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:abb2362783521bd9a22fe69b2141abab4db97237665a36a034b161ddee5b3e72"}, + {file = "Cython-3.0.5-cp36-cp36m-win32.whl", hash = "sha256:a993002fe28c840dc29805fde7341c775b7878b311b85f21560fdebf220c247b"}, + {file = "Cython-3.0.5-cp36-cp36m-win_amd64.whl", hash = "sha256:13491f1bfcf020fd02751c4a55294aa8957e21b7ecd2542b0521a7aa50c58bb2"}, + {file = "Cython-3.0.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:45aaceb082ad89365f2f783a40db42359591ad55914fb298841196edf88afdc5"}, + {file = "Cython-3.0.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3e011fa2ae9e953fe1ab8394329a21bdb54357c7fe509bcfb02b88bc15bffbb"}, + {file = "Cython-3.0.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f18c13d5ed6fde5efd3b1c039f6a34296d1a0409bb00fbf45bec6f9bcf63ddf5"}, + {file = "Cython-3.0.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:039877e57dc10abf0d30d2de2c7476f0881d8ecef1f29bdeed1a6a06a8d89141"}, + {file = "Cython-3.0.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:4fbc8f62b8d50f9a2eef99927a9dcb8d0a42e5a801ab14c2e4aeab622c88f54b"}, + {file = "Cython-3.0.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3cffbba1888f795de2103e6fb1482c8ea8d457e638fa813e090fe747f9e549bb"}, + {file = "Cython-3.0.5-cp37-cp37m-win32.whl", hash = "sha256:c18e125537a96e76c8c34201e5a9aad8625e3d872dd26a63155573462e54e185"}, + {file = "Cython-3.0.5-cp37-cp37m-win_amd64.whl", hash = "sha256:93502f45948ae8d7f874ba4c113b50cb6fb4ee664caa82e1ddc398500ee0ffb3"}, + {file = "Cython-3.0.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0a9206b0720f0cad3e70c018722f6d10e81b32e65477e14ffedd3fbfadfaddca"}, + {file = "Cython-3.0.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:530a474a79fa6c2127bb7e3ba00857b1f26a563615863f17b7434331aa3fe404"}, + {file = "Cython-3.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:115e76fbe9288119526b66963f614042222d1587f1ba5ddb90088215a3d2a25a"}, + {file = "Cython-3.0.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:035cb6930a8534f865a3f4616543f78bd27e4de9c3e117b2826e395085ffc4c0"}, + {file = "Cython-3.0.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:077d9a61e6042174dabf68b8e92c0a80f5aff529439ed314aa6e6a233af80b95"}, + {file = "Cython-3.0.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ba3f7b433c1721a43674c0889d5fad746bf608416c8f849343859e6d4d3a7113"}, + {file = "Cython-3.0.5-cp38-cp38-win32.whl", hash = "sha256:a95ed0e6f481462a3ff2be4c2e4ffffc5d00fc3884d4ccd1fe5b702d4938ec09"}, + {file = "Cython-3.0.5-cp38-cp38-win_amd64.whl", hash = "sha256:f687539ead9fbc17f499e33ee20c1dc41598f70ad95edb4990c576447cec9d23"}, + {file = "Cython-3.0.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f6fcfef825edb44cf3c6ba2c091ad76a83da62ac9c79553e80e0c2a1f75eda2e"}, + {file = "Cython-3.0.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0d9431101f600d5a557d55989658cbfd02b7c0dcd1e4675dac8ad7e0da8ea5b"}, + {file = "Cython-3.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db21997270e943aee9cb7694112d24a4702fbe1977fbe53b3cb4db3d02be73d9"}, + {file = "Cython-3.0.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:808f56d4cd0511723b787c341f3cc995fd72893e608102268298c188f4a4f2e7"}, + {file = "Cython-3.0.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:dee39967168d6326ea2df56ad215a4d5049aa52f44cd5aad45bfb63d5b4fb9e5"}, + {file = "Cython-3.0.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b77f2b45535bcf3741592fa03183558bd42198b872c1584b896fa0ba5f2ac68d"}, + {file = "Cython-3.0.5-cp39-cp39-win32.whl", hash = "sha256:5742ef31e1e2c9a4824ef6b05af0f4949047a6f73af1d4b238ce12935174aede"}, + {file = "Cython-3.0.5-cp39-cp39-win_amd64.whl", hash = "sha256:ada4852db0e33dbdd1425322db081d22b9725cb9f5eba42885467b4e2c4f2ac0"}, + {file = "Cython-3.0.5-py2.py3-none-any.whl", hash = "sha256:75206369504fc442c10a86ecf57b91592dca744e4592af22a47e9a774d53dd10"}, + {file = "Cython-3.0.5.tar.gz", hash = "sha256:39318348db488a2f24e7c84e08bdc82f2624853c0fea8b475ea0b70b27176492"}, ] [[package]] @@ -866,13 +866,13 @@ files = [ [[package]] name = "jsonschema" -version = "4.19.1" +version = "4.19.2" description = "An implementation of JSON Schema validation for Python" optional = true python-versions = ">=3.8" files = [ - {file = "jsonschema-4.19.1-py3-none-any.whl", hash = "sha256:cd5f1f9ed9444e554b38ba003af06c0a8c2868131e56bfbef0550fb450c0330e"}, - {file = "jsonschema-4.19.1.tar.gz", hash = "sha256:ec84cc37cfa703ef7cd4928db24f9cb31428a5d0fa77747b8b51a847458e0bbf"}, + {file = "jsonschema-4.19.2-py3-none-any.whl", hash = "sha256:eee9e502c788e89cb166d4d37f43084e3b64ab405c795c03d343a4dbc2c810fc"}, + {file = "jsonschema-4.19.2.tar.gz", hash = "sha256:c9ff4d7447eed9592c23a12ccee508baf0dd0d59650615e847feb6cdca74f392"}, ] [package.dependencies] @@ -904,13 +904,13 @@ referencing = ">=0.28.0" [[package]] name = "jupyter-core" -version = "5.4.0" +version = "5.5.0" description = "Jupyter core package. A base package on which Jupyter projects rely." optional = true python-versions = ">=3.8" files = [ - {file = "jupyter_core-5.4.0-py3-none-any.whl", hash = "sha256:66e252f675ac04dcf2feb6ed4afb3cd7f68cf92f483607522dc251f32d471571"}, - {file = "jupyter_core-5.4.0.tar.gz", hash = "sha256:e4b98344bb94ee2e3e6c4519a97d001656009f9cb2b7f2baf15b3c205770011d"}, + {file = "jupyter_core-5.5.0-py3-none-any.whl", hash = "sha256:e11e02cd8ae0a9de5c6c44abf5727df9f2581055afe00b22183f621ba3585805"}, + {file = "jupyter_core-5.5.0.tar.gz", hash = "sha256:880b86053bf298a8724994f95e99b99130659022a4f7f45f563084b6223861d3"}, ] [package.dependencies] @@ -919,7 +919,7 @@ pywin32 = {version = ">=300", markers = "sys_platform == \"win32\" and platform_ traitlets = ">=5.3" [package.extras] -docs = ["myst-parser", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "traitlets"] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "traitlets"] test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] [[package]] @@ -1535,6 +1535,19 @@ files = [ openbb-core = ">=0.1.0a4,<0.2.0" requests-cache = ">=1.1.0,<2.0.0" +[[package]] +name = "openbb-nasdaq" +version = "0.1.0a4" +description = "Nasdaq extension for OpenBB" +optional = true +python-versions = "*" +files = [] +develop = true + +[package.source] +type = "directory" +url = "providers/nasdaq" + [[package]] name = "openbb-news" version = "0.1.0a4" @@ -1655,6 +1668,19 @@ develop = true type = "directory" url = "providers/sec" +[[package]] +name = "openbb-seeking-alpha" +version = "0.1.0a4" +description = "Seeking Alpha extension for OpenBB" +optional = true +python-versions = "*" +files = [] +develop = true + +[package.source] +type = "directory" +url = "providers/seeking_alpha" + [[package]] name = "openbb-stocks" version = "0.1.0a4" @@ -1762,8 +1788,8 @@ files = [ [package.dependencies] numpy = [ + {version = ">=1.21.0", markers = "python_version >= \"3.10\" and python_version < \"3.11\""}, {version = ">=1.20.3", markers = "python_version < \"3.10\""}, - {version = ">=1.21.0", markers = "python_version >= \"3.10\""}, {version = ">=1.23.2", markers = "python_version >= \"3.11\""}, ] python-dateutil = ">=2.8.2" @@ -2496,110 +2522,110 @@ yaml = ["pyyaml (>=5.4)"] [[package]] name = "rpds-py" -version = "0.10.6" +version = "0.12.0" description = "Python bindings to Rust's persistent data structures (rpds)" optional = true python-versions = ">=3.8" files = [ - {file = "rpds_py-0.10.6-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:6bdc11f9623870d75692cc33c59804b5a18d7b8a4b79ef0b00b773a27397d1f6"}, - {file = "rpds_py-0.10.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:26857f0f44f0e791f4a266595a7a09d21f6b589580ee0585f330aaccccb836e3"}, - {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7f5e15c953ace2e8dde9824bdab4bec50adb91a5663df08d7d994240ae6fa31"}, - {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:61fa268da6e2e1cd350739bb61011121fa550aa2545762e3dc02ea177ee4de35"}, - {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c48f3fbc3e92c7dd6681a258d22f23adc2eb183c8cb1557d2fcc5a024e80b094"}, - {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0503c5b681566e8b722fe8c4c47cce5c7a51f6935d5c7012c4aefe952a35eed"}, - {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:734c41f9f57cc28658d98270d3436dba65bed0cfc730d115b290e970150c540d"}, - {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a5d7ed104d158c0042a6a73799cf0eb576dfd5fc1ace9c47996e52320c37cb7c"}, - {file = "rpds_py-0.10.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e3df0bc35e746cce42579826b89579d13fd27c3d5319a6afca9893a9b784ff1b"}, - {file = "rpds_py-0.10.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:73e0a78a9b843b8c2128028864901f55190401ba38aae685350cf69b98d9f7c9"}, - {file = "rpds_py-0.10.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5ed505ec6305abd2c2c9586a7b04fbd4baf42d4d684a9c12ec6110deefe2a063"}, - {file = "rpds_py-0.10.6-cp310-none-win32.whl", hash = "sha256:d97dd44683802000277bbf142fd9f6b271746b4846d0acaf0cefa6b2eaf2a7ad"}, - {file = "rpds_py-0.10.6-cp310-none-win_amd64.whl", hash = "sha256:b455492cab07107bfe8711e20cd920cc96003e0da3c1f91297235b1603d2aca7"}, - {file = "rpds_py-0.10.6-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:e8cdd52744f680346ff8c1ecdad5f4d11117e1724d4f4e1874f3a67598821069"}, - {file = "rpds_py-0.10.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:66414dafe4326bca200e165c2e789976cab2587ec71beb80f59f4796b786a238"}, - {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc435d059f926fdc5b05822b1be4ff2a3a040f3ae0a7bbbe672babb468944722"}, - {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8e7f2219cb72474571974d29a191714d822e58be1eb171f229732bc6fdedf0ac"}, - {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3953c6926a63f8ea5514644b7afb42659b505ece4183fdaaa8f61d978754349e"}, - {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2bb2e4826be25e72013916eecd3d30f66fd076110de09f0e750163b416500721"}, - {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bf347b495b197992efc81a7408e9a83b931b2f056728529956a4d0858608b80"}, - {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:102eac53bb0bf0f9a275b438e6cf6904904908562a1463a6fc3323cf47d7a532"}, - {file = "rpds_py-0.10.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:40f93086eef235623aa14dbddef1b9fb4b22b99454cb39a8d2e04c994fb9868c"}, - {file = "rpds_py-0.10.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e22260a4741a0e7a206e175232867b48a16e0401ef5bce3c67ca5b9705879066"}, - {file = "rpds_py-0.10.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f4e56860a5af16a0fcfa070a0a20c42fbb2012eed1eb5ceeddcc7f8079214281"}, - {file = "rpds_py-0.10.6-cp311-none-win32.whl", hash = "sha256:0774a46b38e70fdde0c6ded8d6d73115a7c39d7839a164cc833f170bbf539116"}, - {file = "rpds_py-0.10.6-cp311-none-win_amd64.whl", hash = "sha256:4a5ee600477b918ab345209eddafde9f91c0acd931f3776369585a1c55b04c57"}, - {file = "rpds_py-0.10.6-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:5ee97c683eaface61d38ec9a489e353d36444cdebb128a27fe486a291647aff6"}, - {file = "rpds_py-0.10.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0713631d6e2d6c316c2f7b9320a34f44abb644fc487b77161d1724d883662e31"}, - {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5a53f5998b4bbff1cb2e967e66ab2addc67326a274567697379dd1e326bded7"}, - {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6a555ae3d2e61118a9d3e549737bb4a56ff0cec88a22bd1dfcad5b4e04759175"}, - {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:945eb4b6bb8144909b203a88a35e0a03d22b57aefb06c9b26c6e16d72e5eb0f0"}, - {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:52c215eb46307c25f9fd2771cac8135d14b11a92ae48d17968eda5aa9aaf5071"}, - {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1b3cd23d905589cb205710b3988fc8f46d4a198cf12862887b09d7aaa6bf9b9"}, - {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:64ccc28683666672d7c166ed465c09cee36e306c156e787acef3c0c62f90da5a"}, - {file = "rpds_py-0.10.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:516a611a2de12fbea70c78271e558f725c660ce38e0006f75139ba337d56b1f6"}, - {file = "rpds_py-0.10.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9ff93d3aedef11f9c4540cf347f8bb135dd9323a2fc705633d83210d464c579d"}, - {file = "rpds_py-0.10.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d858532212f0650be12b6042ff4378dc2efbb7792a286bee4489eaa7ba010586"}, - {file = "rpds_py-0.10.6-cp312-none-win32.whl", hash = "sha256:3c4eff26eddac49d52697a98ea01b0246e44ca82ab09354e94aae8823e8bda02"}, - {file = "rpds_py-0.10.6-cp312-none-win_amd64.whl", hash = "sha256:150eec465dbc9cbca943c8e557a21afdcf9bab8aaabf386c44b794c2f94143d2"}, - {file = "rpds_py-0.10.6-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:cf693eb4a08eccc1a1b636e4392322582db2a47470d52e824b25eca7a3977b53"}, - {file = "rpds_py-0.10.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4134aa2342f9b2ab6c33d5c172e40f9ef802c61bb9ca30d21782f6e035ed0043"}, - {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e782379c2028a3611285a795b89b99a52722946d19fc06f002f8b53e3ea26ea9"}, - {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2f6da6d842195fddc1cd34c3da8a40f6e99e4a113918faa5e60bf132f917c247"}, - {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b4a9fe992887ac68256c930a2011255bae0bf5ec837475bc6f7edd7c8dfa254e"}, - {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b788276a3c114e9f51e257f2a6f544c32c02dab4aa7a5816b96444e3f9ffc336"}, - {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:caa1afc70a02645809c744eefb7d6ee8fef7e2fad170ffdeacca267fd2674f13"}, - {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bddd4f91eede9ca5275e70479ed3656e76c8cdaaa1b354e544cbcf94c6fc8ac4"}, - {file = "rpds_py-0.10.6-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:775049dfa63fb58293990fc59473e659fcafd953bba1d00fc5f0631a8fd61977"}, - {file = "rpds_py-0.10.6-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:c6c45a2d2b68c51fe3d9352733fe048291e483376c94f7723458cfd7b473136b"}, - {file = "rpds_py-0.10.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0699ab6b8c98df998c3eacf51a3b25864ca93dab157abe358af46dc95ecd9801"}, - {file = "rpds_py-0.10.6-cp38-none-win32.whl", hash = "sha256:ebdab79f42c5961682654b851f3f0fc68e6cc7cd8727c2ac4ffff955154123c1"}, - {file = "rpds_py-0.10.6-cp38-none-win_amd64.whl", hash = "sha256:24656dc36f866c33856baa3ab309da0b6a60f37d25d14be916bd3e79d9f3afcf"}, - {file = "rpds_py-0.10.6-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:0898173249141ee99ffcd45e3829abe7bcee47d941af7434ccbf97717df020e5"}, - {file = "rpds_py-0.10.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9e9184fa6c52a74a5521e3e87badbf9692549c0fcced47443585876fcc47e469"}, - {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5752b761902cd15073a527b51de76bbae63d938dc7c5c4ad1e7d8df10e765138"}, - {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:99a57006b4ec39dbfb3ed67e5b27192792ffb0553206a107e4aadb39c5004cd5"}, - {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09586f51a215d17efdb3a5f090d7cbf1633b7f3708f60a044757a5d48a83b393"}, - {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e225a6a14ecf44499aadea165299092ab0cba918bb9ccd9304eab1138844490b"}, - {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2039f8d545f20c4e52713eea51a275e62153ee96c8035a32b2abb772b6fc9e5"}, - {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:34ad87a831940521d462ac11f1774edf867c34172010f5390b2f06b85dcc6014"}, - {file = "rpds_py-0.10.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:dcdc88b6b01015da066da3fb76545e8bb9a6880a5ebf89e0f0b2e3ca557b3ab7"}, - {file = "rpds_py-0.10.6-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:25860ed5c4e7f5e10c496ea78af46ae8d8468e0be745bd233bab9ca99bfd2647"}, - {file = "rpds_py-0.10.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7854a207ef77319ec457c1eb79c361b48807d252d94348305db4f4b62f40f7f3"}, - {file = "rpds_py-0.10.6-cp39-none-win32.whl", hash = "sha256:e6fcc026a3f27c1282c7ed24b7fcac82cdd70a0e84cc848c0841a3ab1e3dea2d"}, - {file = "rpds_py-0.10.6-cp39-none-win_amd64.whl", hash = "sha256:e98c4c07ee4c4b3acf787e91b27688409d918212dfd34c872201273fdd5a0e18"}, - {file = "rpds_py-0.10.6-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:68fe9199184c18d997d2e4293b34327c0009a78599ce703e15cd9a0f47349bba"}, - {file = "rpds_py-0.10.6-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:3339eca941568ed52d9ad0f1b8eb9fe0958fa245381747cecf2e9a78a5539c42"}, - {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a360cfd0881d36c6dc271992ce1eda65dba5e9368575663de993eeb4523d895f"}, - {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:031f76fc87644a234883b51145e43985aa2d0c19b063e91d44379cd2786144f8"}, - {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f36a9d751f86455dc5278517e8b65580eeee37d61606183897f122c9e51cef3"}, - {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:052a832078943d2b2627aea0d19381f607fe331cc0eb5df01991268253af8417"}, - {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:023574366002bf1bd751ebaf3e580aef4a468b3d3c216d2f3f7e16fdabd885ed"}, - {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:defa2c0c68734f4a82028c26bcc85e6b92cced99866af118cd6a89b734ad8e0d"}, - {file = "rpds_py-0.10.6-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:879fb24304ead6b62dbe5034e7b644b71def53c70e19363f3c3be2705c17a3b4"}, - {file = "rpds_py-0.10.6-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:53c43e10d398e365da2d4cc0bcaf0854b79b4c50ee9689652cdc72948e86f487"}, - {file = "rpds_py-0.10.6-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:3777cc9dea0e6c464e4b24760664bd8831738cc582c1d8aacf1c3f546bef3f65"}, - {file = "rpds_py-0.10.6-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:40578a6469e5d1df71b006936ce95804edb5df47b520c69cf5af264d462f2cbb"}, - {file = "rpds_py-0.10.6-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:cf71343646756a072b85f228d35b1d7407da1669a3de3cf47f8bbafe0c8183a4"}, - {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:10f32b53f424fc75ff7b713b2edb286fdbfc94bf16317890260a81c2c00385dc"}, - {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:81de24a1c51cfb32e1fbf018ab0bdbc79c04c035986526f76c33e3f9e0f3356c"}, - {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac17044876e64a8ea20ab132080ddc73b895b4abe9976e263b0e30ee5be7b9c2"}, - {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5e8a78bd4879bff82daef48c14d5d4057f6856149094848c3ed0ecaf49f5aec2"}, - {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78ca33811e1d95cac8c2e49cb86c0fb71f4d8409d8cbea0cb495b6dbddb30a55"}, - {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c63c3ef43f0b3fb00571cff6c3967cc261c0ebd14a0a134a12e83bdb8f49f21f"}, - {file = "rpds_py-0.10.6-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:7fde6d0e00b2fd0dbbb40c0eeec463ef147819f23725eda58105ba9ca48744f4"}, - {file = "rpds_py-0.10.6-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:79edd779cfc46b2e15b0830eecd8b4b93f1a96649bcb502453df471a54ce7977"}, - {file = "rpds_py-0.10.6-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:9164ec8010327ab9af931d7ccd12ab8d8b5dc2f4c6a16cbdd9d087861eaaefa1"}, - {file = "rpds_py-0.10.6-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:d29ddefeab1791e3c751e0189d5f4b3dbc0bbe033b06e9c333dca1f99e1d523e"}, - {file = "rpds_py-0.10.6-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:30adb75ecd7c2a52f5e76af50644b3e0b5ba036321c390b8e7ec1bb2a16dd43c"}, - {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd609fafdcdde6e67a139898196698af37438b035b25ad63704fd9097d9a3482"}, - {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6eef672de005736a6efd565577101277db6057f65640a813de6c2707dc69f396"}, - {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6cf4393c7b41abbf07c88eb83e8af5013606b1cdb7f6bc96b1b3536b53a574b8"}, - {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ad857f42831e5b8d41a32437f88d86ead6c191455a3499c4b6d15e007936d4cf"}, - {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d7360573f1e046cb3b0dceeb8864025aa78d98be4bb69f067ec1c40a9e2d9df"}, - {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d08f63561c8a695afec4975fae445245386d645e3e446e6f260e81663bfd2e38"}, - {file = "rpds_py-0.10.6-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:f0f17f2ce0f3529177a5fff5525204fad7b43dd437d017dd0317f2746773443d"}, - {file = "rpds_py-0.10.6-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:442626328600bde1d09dc3bb00434f5374948838ce75c41a52152615689f9403"}, - {file = "rpds_py-0.10.6-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:e9616f5bd2595f7f4a04b67039d890348ab826e943a9bfdbe4938d0eba606971"}, - {file = "rpds_py-0.10.6.tar.gz", hash = "sha256:4ce5a708d65a8dbf3748d2474b580d606b1b9f91b5c6ab2a316e0b0cf7a4ba50"}, + {file = "rpds_py-0.12.0-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:c694bee70ece3b232df4678448fdda245fd3b1bb4ba481fb6cd20e13bb784c46"}, + {file = "rpds_py-0.12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:30e5ce9f501fb1f970e4a59098028cf20676dee64fc496d55c33e04bbbee097d"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d72a4315514e5a0b9837a086cb433b004eea630afb0cc129de76d77654a9606f"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eebaf8c76c39604d52852366249ab807fe6f7a3ffb0dd5484b9944917244cdbe"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a239303acb0315091d54c7ff36712dba24554993b9a93941cf301391d8a997ee"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ced40cdbb6dd47a032725a038896cceae9ce267d340f59508b23537f05455431"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c8c0226c71bd0ce9892eaf6afa77ae8f43a3d9313124a03df0b389c01f832de"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b8e11715178f3608874508f08e990d3771e0b8c66c73eb4e183038d600a9b274"}, + {file = "rpds_py-0.12.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5210a0018c7e09c75fa788648617ebba861ae242944111d3079034e14498223f"}, + {file = "rpds_py-0.12.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:171d9a159f1b2f42a42a64a985e4ba46fc7268c78299272ceba970743a67ee50"}, + {file = "rpds_py-0.12.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:57ec6baec231bb19bb5fd5fc7bae21231860a1605174b11585660236627e390e"}, + {file = "rpds_py-0.12.0-cp310-none-win32.whl", hash = "sha256:7188ddc1a8887194f984fa4110d5a3d5b9b5cd35f6bafdff1b649049cbc0ce29"}, + {file = "rpds_py-0.12.0-cp310-none-win_amd64.whl", hash = "sha256:1e04581c6117ad9479b6cfae313e212fe0dfa226ac727755f0d539cd54792963"}, + {file = "rpds_py-0.12.0-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:0a38612d07a36138507d69646c470aedbfe2b75b43a4643f7bd8e51e52779624"}, + {file = "rpds_py-0.12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f12d69d568f5647ec503b64932874dade5a20255736c89936bf690951a5e79f5"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f8a1d990dc198a6c68ec3d9a637ba1ce489b38cbfb65440a27901afbc5df575"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8c567c664fc2f44130a20edac73e0a867f8e012bf7370276f15c6adc3586c37c"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0e9e976e0dbed4f51c56db10831c9623d0fd67aac02853fe5476262e5a22acb7"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:efddca2d02254a52078c35cadad34762adbae3ff01c6b0c7787b59d038b63e0d"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9e7f29c00577aff6b318681e730a519b235af292732a149337f6aaa4d1c5e31"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:389c0e38358fdc4e38e9995e7291269a3aead7acfcf8942010ee7bc5baee091c"}, + {file = "rpds_py-0.12.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:33ab498f9ac30598b6406e2be1b45fd231195b83d948ebd4bd77f337cb6a2bff"}, + {file = "rpds_py-0.12.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:d56b1cd606ba4cedd64bb43479d56580e147c6ef3f5d1c5e64203a1adab784a2"}, + {file = "rpds_py-0.12.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1fa73ed22c40a1bec98d7c93b5659cd35abcfa5a0a95ce876b91adbda170537c"}, + {file = "rpds_py-0.12.0-cp311-none-win32.whl", hash = "sha256:dbc25baa6abb205766fb8606f8263b02c3503a55957fcb4576a6bb0a59d37d10"}, + {file = "rpds_py-0.12.0-cp311-none-win_amd64.whl", hash = "sha256:c6b52b7028b547866c2413f614ee306c2d4eafdd444b1ff656bf3295bf1484aa"}, + {file = "rpds_py-0.12.0-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:9620650c364c01ed5b497dcae7c3d4b948daeae6e1883ae185fef1c927b6b534"}, + {file = "rpds_py-0.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2124f9e645a94ab7c853bc0a3644e0ca8ffbe5bb2d72db49aef8f9ec1c285733"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:281c8b219d4f4b3581b918b816764098d04964915b2f272d1476654143801aa2"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:27ccc93c7457ef890b0dd31564d2a05e1aca330623c942b7e818e9e7c2669ee4"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d1c562a9bb72244fa767d1c1ab55ca1d92dd5f7c4d77878fee5483a22ffac808"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e57919c32ee295a2fca458bb73e4b20b05c115627f96f95a10f9f5acbd61172d"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa35ad36440aaf1ac8332b4a4a433d4acd28f1613f0d480995f5cfd3580e90b7"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e6aea5c0eb5b0faf52c7b5c4a47c8bb64437173be97227c819ffa31801fa4e34"}, + {file = "rpds_py-0.12.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:81cf9d306c04df1b45971c13167dc3bad625808aa01281d55f3cf852dde0e206"}, + {file = "rpds_py-0.12.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:08e6e7ff286254016b945e1ab632ee843e43d45e40683b66dd12b73791366dd1"}, + {file = "rpds_py-0.12.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4d0a675a7acbbc16179188d8c6d0afb8628604fc1241faf41007255957335a0b"}, + {file = "rpds_py-0.12.0-cp312-none-win32.whl", hash = "sha256:b2287c09482949e0ca0c0eb68b2aca6cf57f8af8c6dfd29dcd3bc45f17b57978"}, + {file = "rpds_py-0.12.0-cp312-none-win_amd64.whl", hash = "sha256:8015835494b21aa7abd3b43fdea0614ee35ef6b03db7ecba9beb58eadf01c24f"}, + {file = "rpds_py-0.12.0-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:6174d6ad6b58a6bcf67afbbf1723420a53d06c4b89f4c50763d6fa0a6ac9afd2"}, + {file = "rpds_py-0.12.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a689e1ded7137552bea36305a7a16ad2b40be511740b80748d3140614993db98"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f45321224144c25a62052035ce96cbcf264667bcb0d81823b1bbc22c4addd194"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aa32205358a76bf578854bf31698a86dc8b2cb591fd1d79a833283f4a403f04b"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91bd2b7cf0f4d252eec8b7046fa6a43cee17e8acdfc00eaa8b3dbf2f9a59d061"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3acadbab8b59f63b87b518e09c4c64b142e7286b9ca7a208107d6f9f4c393c5c"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:429349a510da82c85431f0f3e66212d83efe9fd2850f50f339341b6532c62fe4"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:05942656cb2cb4989cd50ced52df16be94d344eae5097e8583966a1d27da73a5"}, + {file = "rpds_py-0.12.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:0c5441b7626c29dbd54a3f6f3713ec8e956b009f419ffdaaa3c80eaf98ddb523"}, + {file = "rpds_py-0.12.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:b6b0e17d39d21698185097652c611f9cf30f7c56ccec189789920e3e7f1cee56"}, + {file = "rpds_py-0.12.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:3b7a64d43e2a1fa2dd46b678e00cabd9a49ebb123b339ce799204c44a593ae1c"}, + {file = "rpds_py-0.12.0-cp38-none-win32.whl", hash = "sha256:e5bbe011a2cea9060fef1bb3d668a2fd8432b8888e6d92e74c9c794d3c101595"}, + {file = "rpds_py-0.12.0-cp38-none-win_amd64.whl", hash = "sha256:bec29b801b4adbf388314c0d050e851d53762ab424af22657021ce4b6eb41543"}, + {file = "rpds_py-0.12.0-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:1096ca0bf2d3426cbe79d4ccc91dc5aaa73629b08ea2d8467375fad8447ce11a"}, + {file = "rpds_py-0.12.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48aa98987d54a46e13e6954880056c204700c65616af4395d1f0639eba11764b"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7979d90ee2190d000129598c2b0c82f13053dba432b94e45e68253b09bb1f0f6"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:88857060b690a57d2ea8569bca58758143c8faa4639fb17d745ce60ff84c867e"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4eb74d44776b0fb0782560ea84d986dffec8ddd94947f383eba2284b0f32e35e"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f62581d7e884dd01ee1707b7c21148f61f2febb7de092ae2f108743fcbef5985"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f5dcb658d597410bb7c967c1d24eaf9377b0d621358cbe9d2ff804e5dd12e81"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9bf9acce44e967a5103fcd820fc7580c7b0ab8583eec4e2051aec560f7b31a63"}, + {file = "rpds_py-0.12.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:240687b5be0f91fbde4936a329c9b7589d9259742766f74de575e1b2046575e4"}, + {file = "rpds_py-0.12.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:25740fb56e8bd37692ed380e15ec734be44d7c71974d8993f452b4527814601e"}, + {file = "rpds_py-0.12.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a54917b7e9cd3a67e429a630e237a90b096e0ba18897bfb99ee8bd1068a5fea0"}, + {file = "rpds_py-0.12.0-cp39-none-win32.whl", hash = "sha256:b92aafcfab3d41580d54aca35a8057341f1cfc7c9af9e8bdfc652f83a20ced31"}, + {file = "rpds_py-0.12.0-cp39-none-win_amd64.whl", hash = "sha256:cd316dbcc74c76266ba94eb021b0cc090b97cca122f50bd7a845f587ff4bf03f"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:0853da3d5e9bc6a07b2486054a410b7b03f34046c123c6561b535bb48cc509e1"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:cb41ad20064e18a900dd427d7cf41cfaec83bcd1184001f3d91a1f76b3fcea4e"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b710bf7e7ae61957d5c4026b486be593ed3ec3dca3e5be15e0f6d8cf5d0a4990"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a952ae3eb460c6712388ac2ec706d24b0e651b9396d90c9a9e0a69eb27737fdc"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0bedd91ae1dd142a4dc15970ed2c729ff6c73f33a40fa84ed0cdbf55de87c777"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:761531076df51309075133a6bc1db02d98ec7f66e22b064b1d513bc909f29743"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2baa6be130e8a00b6cbb9f18a33611ec150b4537f8563bddadb54c1b74b8193"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f05450fa1cd7c525c0b9d1a7916e595d3041ac0afbed2ff6926e5afb6a781b7f"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:81c4d1a3a564775c44732b94135d06e33417e829ff25226c164664f4a1046213"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:e888be685fa42d8b8a3d3911d5604d14db87538aa7d0b29b1a7ea80d354c732d"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6f8d7fe73d1816eeb5378409adc658f9525ecbfaf9e1ede1e2d67a338b0c7348"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:0831d3ecdea22e4559cc1793f22e77067c9d8c451d55ae6a75bf1d116a8e7f42"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:513ccbf7420c30e283c25c82d5a8f439d625a838d3ba69e79a110c260c46813f"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:301bd744a1adaa2f6a5e06c98f1ac2b6f8dc31a5c23b838f862d65e32fca0d4b"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f8832a4f83d4782a8f5a7b831c47e8ffe164e43c2c148c8160ed9a6d630bc02a"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b2416ed743ec5debcf61e1242e012652a4348de14ecc7df3512da072b074440"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35585a8cb5917161f42c2104567bb83a1d96194095fc54a543113ed5df9fa436"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d389ff1e95b6e46ebedccf7fd1fadd10559add595ac6a7c2ea730268325f832c"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9b007c2444705a2dc4a525964fd4dd28c3320b19b3410da6517cab28716f27d3"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:188912b22b6c8225f4c4ffa020a2baa6ad8fabb3c141a12dbe6edbb34e7f1425"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:1b4cf9ab9a0ae0cb122685209806d3f1dcb63b9fccdf1424fb42a129dc8c2faa"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:2d34a5450a402b00d20aeb7632489ffa2556ca7b26f4a63c35f6fccae1977427"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:466030a42724780794dea71eb32db83cc51214d66ab3fb3156edd88b9c8f0d78"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:68172622a5a57deb079a2c78511c40f91193548e8ab342c31e8cb0764d362459"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54cdfcda59251b9c2f87a05d038c2ae02121219a04d4a1e6fc345794295bdc07"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6b75b912a0baa033350367a8a07a8b2d44fd5b90c890bfbd063a8a5f945f644b"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:47aeceb4363851d17f63069318ba5721ae695d9da55d599b4d6fb31508595278"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0525847f83f506aa1e28eb2057b696fe38217e12931c8b1b02198cfe6975e142"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efbe0b5e0fd078ed7b005faa0170da4f72666360f66f0bb2d7f73526ecfd99f9"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0fadfdda275c838cba5102c7f90a20f2abd7727bf8f4a2b654a5b617529c5c18"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:56dd500411d03c5e9927a1eb55621e906837a83b02350a9dc401247d0353717c"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:6915fc9fa6b3ec3569566832e1bb03bd801c12cea030200e68663b9a87974e76"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:5f1519b080d8ce0a814f17ad9fb49fb3a1d4d7ce5891f5c85fc38631ca3a8dc4"}, + {file = "rpds_py-0.12.0.tar.gz", hash = "sha256:7036316cc26b93e401cedd781a579be606dad174829e6ad9e9c5a0da6e036f80"}, ] [[package]] @@ -2892,8 +2918,8 @@ files = [ [package.dependencies] numpy = [ - {version = ">=1.18", markers = "python_version != \"3.10\" or platform_system != \"Windows\" or platform_python_implementation == \"PyPy\""}, {version = ">=1.22.3", markers = "python_version == \"3.10\" and platform_system == \"Windows\" and platform_python_implementation != \"PyPy\""}, + {version = ">=1.18", markers = "python_version != \"3.10\" or platform_system != \"Windows\" or platform_python_implementation == \"PyPy\""}, ] packaging = ">=21.3" pandas = ">=1.0" @@ -3056,13 +3082,13 @@ files = [ [[package]] name = "traitlets" -version = "5.12.0" +version = "5.13.0" description = "Traitlets Python configuration system" optional = true python-versions = ">=3.8" files = [ - {file = "traitlets-5.12.0-py3-none-any.whl", hash = "sha256:81539f07f7aebcde2e4b5ab76727f53eabf18ad155c6ed7979a681411602fa47"}, - {file = "traitlets-5.12.0.tar.gz", hash = "sha256:833273bf645d8ce31dcb613c56999e2e055b1ffe6d09168a164bcd91c36d5d35"}, + {file = "traitlets-5.13.0-py3-none-any.whl", hash = "sha256:baf991e61542da48fe8aef8b779a9ea0aa38d8a54166ee250d5af5ecf4486619"}, + {file = "traitlets-5.13.0.tar.gz", hash = "sha256:9b232b9430c8f57288c1024b34a8f0251ddcc47268927367a0dd3eeaca40deb5"}, ] [package.extras] @@ -3469,13 +3495,14 @@ docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.link testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] [extras] -all = ["openbb-alpha-vantage", "openbb-biztoc", "openbb-cboe", "openbb-charting", "openbb-econometrics", "openbb-futures", "openbb-qa", "openbb-quandl", "openbb-ta", "openbb-yfinance"] +all = ["openbb-alpha-vantage", "openbb-biztoc", "openbb-cboe", "openbb-charting", "openbb-econometrics", "openbb-futures", "openbb-nasdaq", "openbb-qa", "openbb-quandl", "openbb-seeking-alpha", "openbb-ta", "openbb-yfinance"] alpha-vantage = ["openbb-alpha-vantage"] biztoc = ["openbb-biztoc"] cboe = ["openbb-cboe"] charting = ["openbb-charting"] econometrics = ["openbb-econometrics"] futures = ["openbb-futures"] +nasdaq = ["openbb-nasdaq"] qa = ["openbb-qa"] quandl = ["openbb-quandl"] ta = ["openbb-ta"] @@ -3484,4 +3511,4 @@ yfinance = ["openbb-yfinance"] [metadata] lock-version = "2.0" python-versions = ">=3.8,<3.12" -content-hash = "d5818c3f67138e6f66c69a1fb21d87fa9bcd25073d8806c86b86173f62d44bd6" +content-hash = "ee956db393c89a547848cf7ae2eff75a4f4df189eca3797caaef9ea215410450" diff --git a/openbb_platform/providers/fmp/openbb_fmp/__init__.py b/openbb_platform/providers/fmp/openbb_fmp/__init__.py index 469c53ae7535..cb4d5e965539 100644 --- a/openbb_platform/providers/fmp/openbb_fmp/__init__.py +++ b/openbb_platform/providers/fmp/openbb_fmp/__init__.py @@ -9,6 +9,7 @@ from openbb_fmp.models.company_filings import FMPCompanyFilingsFetcher from openbb_fmp.models.company_overview import FMPCompanyOverviewFetcher from openbb_fmp.models.crypto_historical import FMPCryptoHistoricalFetcher +from openbb_fmp.models.disc_filings import FMPFilingsFetcher from openbb_fmp.models.earnings_calendar import FMPEarningsCalendarFetcher from openbb_fmp.models.earnings_call_transcript import FMPEarningsCallTranscriptFetcher from openbb_fmp.models.economic_calendar import FMPEconomicCalendarFetcher @@ -114,5 +115,6 @@ "PricePerformance": FMPPricePerformanceFetcher, "EconomicCalendar": FMPEconomicCalendarFetcher, "StockSearch": FMPStockSearchFetcher, + "DiscFilings": FMPFilingsFetcher, }, ) diff --git a/openbb_platform/providers/fmp/openbb_fmp/models/disc_filings.py b/openbb_platform/providers/fmp/openbb_fmp/models/disc_filings.py new file mode 100644 index 000000000000..9be527baf3ac --- /dev/null +++ b/openbb_platform/providers/fmp/openbb_fmp/models/disc_filings.py @@ -0,0 +1,84 @@ +"""FMP SEC Filings fetcher.""" + +import datetime +import warnings +from typing import Any, Dict, List, Optional + +from openbb_fmp.utils.helpers import create_url, get_data_many +from openbb_provider.abstract.fetcher import Fetcher +from openbb_provider.standard_models.filings import ( + FilingsData, + FilingsQueryParams, +) +from pydantic import field_validator + + +class FMPFilingsQueryParams(FilingsQueryParams): + """FMP SEC Filings Params.""" + + +class FMPFilingsData(FilingsData): + """FMP SEC Filings Data.""" + + __alias_dict__ = {"symbol": "ticker"} + + @field_validator("date", mode="before") + def validate_date(cls, v: Any) -> Any: # pylint: disable=no-self-argument + """Validate the date.""" + return datetime.datetime.strptime(v, "%Y-%m-%d %H:%M:%S").date() + + +class FMPFilingsFetcher( + Fetcher[ + FMPFilingsQueryParams, + List[FMPFilingsData], + ] +): + """Transform the query, extract and transform the data from the FMP endpoints.""" + + @staticmethod + def transform_query(params: Dict[str, Any]) -> FMPFilingsQueryParams: + """Transform the query.""" + return FMPFilingsQueryParams(**params) + + @staticmethod + def extract_data( + query: FMPFilingsQueryParams, + credentials: Optional[Dict[str, str]], + **kwargs: Any, + ) -> List[Dict]: + """Return the raw data from the FMP endpoint.""" + api_key = credentials.get("fmp_api_key") if credentials else "" + response: List[Dict] = [] + for page in range(1, query.pages + 1): + url = create_url( + version=3, + endpoint=f"rss_feed?&page={page}", + api_key=api_key, + ) + data: List[Dict] = get_data_many(url, sub_dict="rss_feed", **kwargs) + + response.extend(data) + + return response + + @staticmethod + def transform_data( + query: FMPFilingsQueryParams, data: List[Dict], **kwargs: Any + ) -> List[FMPFilingsData]: + """Return the transformed data.""" + if query.today is True: + now: str = datetime.datetime.now().strftime("%Y-%m-%d") + iso_today: int = datetime.datetime.today().isoweekday() + if iso_today < 6 and data: + data = [x for x in data if x["date"] == now] + query.limit = 1000 + else: + warnings.warn( + "No filings today, displaying the most recent submissions instead." + ) + + # remove duplicates + data = [dict(t) for t in {tuple(d.items()) for d in data}] + + return [FMPFilingsData(**x) for x in data[: query.limit]] diff --git a/openbb_platform/providers/fmp/tests/record/http/test_fmp_fetchers/test_fmp_filings_fetcher.yaml b/openbb_platform/providers/fmp/tests/record/http/test_fmp_fetchers/test_fmp_filings_fetcher.yaml new file mode 100644 index 000000000000..2a361229fe91 --- /dev/null +++ b/openbb_platform/providers/fmp/tests/record/http/test_fmp_fetchers/test_fmp_filings_fetcher.yaml @@ -0,0 +1,757 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate, br + Connection: + - keep-alive + method: GET + uri: https://financialmodelingprep.com/api/v3/rss_feed?apikey=MOCK_API_KEY&page=1%3F + response: + body: + string: !!binary | + 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 + jJ5wAMgEAA== + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Headers: + - X-Requested-With, content-type, auth-token, Authorization, stripe-signature, + APPS + Access-Control-Allow-Methods: + - GET, POST, OPTIONS + Access-Control-Allow-Origin: + - '*' + Access-Control-Max-Age: + - '3600' + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json; charset=utf-8 + Date: + - Sun, 05 Nov 2023 20:21:57 GMT + ETag: + - W/"4c800-+NBFBW7Lqsiuq60BYDsSnFoZQ0M" + Server: + - nginx/1.18.0 (Ubuntu) + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + X-Frame-Options: + - SAMEORIGIN + X-Powered-By: + - Express + status: + code: 200 + message: OK +version: 1 diff --git a/openbb_platform/providers/fmp/tests/test_fmp_fetchers.py b/openbb_platform/providers/fmp/tests/test_fmp_fetchers.py index 76fe1c706ec5..1f60019a1986 100644 --- a/openbb_platform/providers/fmp/tests/test_fmp_fetchers.py +++ b/openbb_platform/providers/fmp/tests/test_fmp_fetchers.py @@ -12,6 +12,7 @@ from openbb_fmp.models.company_filings import FMPCompanyFilingsFetcher from openbb_fmp.models.company_overview import FMPCompanyOverviewFetcher from openbb_fmp.models.crypto_historical import FMPCryptoHistoricalFetcher +from openbb_fmp.models.disc_filings import FMPFilingsFetcher from openbb_fmp.models.earnings_calendar import FMPEarningsCalendarFetcher from openbb_fmp.models.earnings_call_transcript import FMPEarningsCallTranscriptFetcher from openbb_fmp.models.economic_calendar import FMPEconomicCalendarFetcher @@ -555,3 +556,12 @@ def test_fmp_etf_holdings_performance_fetcher(credentials=test_credentials): fetcher = FMPEtfHoldingsPerformanceFetcher() result = fetcher.test(params, credentials) assert result is None + + +@pytest.mark.record_http +def test_fmp_filings_fetcher(credentials=test_credentials): + params = {} + + fetcher = FMPFilingsFetcher() + result = fetcher.test(params, credentials) + assert result is None diff --git a/openbb_platform/providers/nasdaq/openbb_nasdaq/__init__.py b/openbb_platform/providers/nasdaq/openbb_nasdaq/__init__.py index 7b3457970f72..f738f9a88920 100644 --- a/openbb_platform/providers/nasdaq/openbb_nasdaq/__init__.py +++ b/openbb_platform/providers/nasdaq/openbb_nasdaq/__init__.py @@ -2,6 +2,7 @@ from openbb_nasdaq.models.calendar_dividend import NasdaqDividendCalendarFetcher from openbb_nasdaq.models.calendar_ipo import NasdaqCalendarIpoFetcher from openbb_nasdaq.models.economic_calendar import NasdaqEconomicCalendarFetcher +from openbb_nasdaq.models.top_retail import NasdaqTopRetailFetcher from openbb_provider.abstract.provider import Provider nasdaq_provider = Provider( @@ -10,9 +11,11 @@ description="""Positioned at the nexus of technology and the capital markets, Nasdaq provides premier platforms and services for global capital markets and beyond with unmatched technology, insights and markets expertise.""", + required_credentials=["api_key"], fetcher_dict={ "CalendarDividend": NasdaqDividendCalendarFetcher, "CalendarIpo": NasdaqCalendarIpoFetcher, "EconomicCalendar": NasdaqEconomicCalendarFetcher, + "TopRetail": NasdaqTopRetailFetcher, }, ) diff --git a/openbb_platform/providers/nasdaq/openbb_nasdaq/models/economic_calendar.py b/openbb_platform/providers/nasdaq/openbb_nasdaq/models/economic_calendar.py index 9fd7ed7be2f5..8558c4d31395 100644 --- a/openbb_platform/providers/nasdaq/openbb_nasdaq/models/economic_calendar.py +++ b/openbb_platform/providers/nasdaq/openbb_nasdaq/models/economic_calendar.py @@ -69,7 +69,6 @@ class NasdaqEconomicCalendarFetcher( @staticmethod def transform_query(params: Dict[str, Any]) -> NasdaqEconomicCalendarQueryParams: """Transform the query params.""" - # return NasdaqEconomicCalendarQueryParams(**params) now = datetime.today().date() transformed_params = params diff --git a/openbb_platform/providers/nasdaq/openbb_nasdaq/models/top_retail.py b/openbb_platform/providers/nasdaq/openbb_nasdaq/models/top_retail.py new file mode 100644 index 000000000000..3f526caef8f7 --- /dev/null +++ b/openbb_platform/providers/nasdaq/openbb_nasdaq/models/top_retail.py @@ -0,0 +1,71 @@ +"""Top Retail fetcher.""" + +from datetime import datetime +from typing import Any, Dict, List, Optional + +import requests +from openbb_provider.abstract.fetcher import Fetcher +from openbb_provider.standard_models.top_retail import ( + TopRetailData, + TopRetailQueryParams, +) +from pydantic import field_validator + + +class NasdaqTopRetailQueryParams(TopRetailQueryParams): + """Top Retail query parameters. + + Source: https://data.nasdaq.com/databases/RTAT/data + """ + + +class NasdaqTopRetailData(TopRetailData): + """Nasdaq Top Retail data.""" + + @field_validator("date", mode="before", check_fields=False) + def validate_date(cls, v: Any) -> Any: # pylint: disable=E0213 + """Validate the date.""" + return datetime.strptime(v, "%Y-%m-%d").date() + + +class NasdaqTopRetailFetcher(Fetcher[TopRetailQueryParams, List[NasdaqTopRetailData]]): + """Nasdaq Top Retail Fetcher.""" + + @staticmethod + def transform_query(params: Dict[str, Any]) -> NasdaqTopRetailQueryParams: + """Transform the params to the provider-specific query.""" + return NasdaqTopRetailQueryParams(**params) + + @staticmethod + def extract_data( + query: NasdaqTopRetailQueryParams, # pylint: disable=unused-argument + credentials: Optional[Dict[str, str]], + **kwargs: Any, + ) -> List[Dict]: + """Get data from Nasdaq.""" + api_key = credentials.get("nasdaq_api_key") if credentials else None + response = requests.get( + f"https://data.nasdaq.com/api/v3/datatables/NDAQ/RTAT10/?api_key={api_key}", + timeout=5, + ).json() + return response["datatable"]["data"][: query.limit] + + @staticmethod + def transform_data( + query: TopRetailQueryParams, + data: List[Dict], + **kwargs: Any, + ) -> List[NasdaqTopRetailData]: + """Transform the data.""" + transformed_data: List[Dict[str, Any]] = [] + for row in data: + transformed_data.append( + { + "date": row[0], + "symbol": row[1], + "activity": row[2], + "sentiment": row[3], + } + ) + + return [NasdaqTopRetailData(**row) for row in transformed_data] diff --git a/openbb_platform/providers/nasdaq/tests/record/http/test_nasdaq_fetchers/test_nasdaq_top_retail_fetcher.yaml b/openbb_platform/providers/nasdaq/tests/record/http/test_nasdaq_fetchers/test_nasdaq_top_retail_fetcher.yaml new file mode 100644 index 000000000000..b2da48ccbd3b --- /dev/null +++ b/openbb_platform/providers/nasdaq/tests/record/http/test_nasdaq_fetchers/test_nasdaq_top_retail_fetcher.yaml @@ -0,0 +1,1285 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate, br + Connection: + - keep-alive + method: GET + uri: https://data.nasdaq.com/api/v3/datatables/NDAQ/RTAT10/?api_key=MOCK_API_KEY + response: + body: + string: !!binary | + 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 + uzU90NhYfDTG2fZAw+LY7CkJyhBNuj0KIWEuW+iG5xnSotsK2vwaLp2RQp/0I97ODbSnWk4ds6ob + TRli9V5lsp2R7mgopNRW08nmhIMRW9XQNuspvi0Yk67VU1hsjJ7/vBb6vHu39Lv4sE3WIGs0vFZL + 21eA7zDLIUmWHSvcZZMthpoxJimXNvzEqLBxkeGDCaOQcuUPwbNrx4tp779qwFlfannPaL54bXmv + RhnbYsy2xpAUbzutmM2ZHZV+6SqD0nK6/2YJqASj0qJIE+lYGzXWQnjBAWrOsPwacBJmThPp9Jbz + N2nvawza0Uwp5kHvAmqhY3k++lXS3+ASdSQcy6DNZPIxF8mHYUasOESuByzzhVqFte0B6l+eT2Hf + cAb7xBMCB/N6yIgLp4WyXS27sMjWwbngxIWLgeqUObzYPurO9SL86LtHc+uVe/0liotfJQVj/TPh + IFQ3Vpe2xdg46fvDF2evf/v149t3H84e/ON/Z+9evb09e3D206u7Wxvl3R//8f9d+/8+fZHo3ZvX + v9y+F353+/tdxV+9vnvz3zd3f+gvfvrt4z9/RRsfbt/dvXlr/+iPnr67u/23tfvph09fnL29vXt1 + 9sC6tLZ/fP3x/Yff3v/45icf2s9f/+vm+pfDza9f/n7z8y9Xz39+fLy5/ubq7NOn/wMfzaGfeLIE + AA== + headers: + Allow: + - GET, HEAD, POST, PUT, DELETE, OPTIONS, PATCH + Cache-Control: + - no-store + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Security-Policy: + - frame-ancestors 'self'; + Content-Type: + - application/json; charset=utf-8 + Cursor_ID: + - djFfNDk1Nl8xNjk5MjE3NDQ5 + Date: + - Sun, 05 Nov 2023 20:50:49 GMT + ETag: + - W/"259003771d5a9f250bbea7f4a4ccbe56" + Location: + - https://data.nasdaq.com/api/v3/datatables/NDAQ/RTAT10 + Pragma: + - no-cache + Referrer-Policy: + - origin-when-cross-origin + Server: + - openresty + Set-Cookie: + - visid_incap_2170999=tUdNXlcjQweXpPR4/4IstCkASGUAAAAAQUIPAAAAAABcb6Af6VTUZUaKukjmBdkU; + expires=Mon, 04 Nov 2024 08:18:27 GMT; HttpOnly; path=/; Domain=.nasdaq.com + - nlbi_2170999=YBzpahWmcFCnD6N2Kj7S7QAAAAA/alRj3IlXCdCjHFFsiMm6; path=/; Domain=.nasdaq.com + - incap_ses_1404_2170999=4CuubDc09UByOxPxVwN8EykASGUAAAAAXmTcPo/PUW6MvHaG7IoPQg==; + path=/; Domain=.nasdaq.com + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + X-CDN: + - Imperva + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-Iinfo: + - 11-30607426-30607442 NNNN CT(1 6 0) RT(1699217448893 176) q(0 0 0 -1) r(3 + 3) U2 + X-RateLimit-Limit: + - '50000' + X-RateLimit-Remaining: + - '49999' + X-Request-Id: + - 22fd5b32-42f2-47ee-959a-eeb8326a44af + X-Runtime: + - '0.198852' + X-XSS-Protection: + - 1; mode=block + transfer-encoding: + - chunked + status: + code: 200 + message: OK +version: 1 diff --git a/openbb_platform/providers/nasdaq/tests/test_nasdaq_fetchers.py b/openbb_platform/providers/nasdaq/tests/test_nasdaq_fetchers.py index 1616559650e3..cbd62d2bf552 100644 --- a/openbb_platform/providers/nasdaq/tests/test_nasdaq_fetchers.py +++ b/openbb_platform/providers/nasdaq/tests/test_nasdaq_fetchers.py @@ -5,6 +5,7 @@ from openbb_nasdaq.models.calendar_dividend import NasdaqDividendCalendarFetcher from openbb_nasdaq.models.calendar_ipo import NasdaqCalendarIpoFetcher from openbb_nasdaq.models.economic_calendar import NasdaqEconomicCalendarFetcher +from openbb_nasdaq.models.top_retail import NasdaqTopRetailFetcher test_credentials = UserService().default_user_settings.credentials.model_dump( mode="json" @@ -15,6 +16,7 @@ def vcr_config(): return { "filter_headers": [("User-Agent", None)], + "filter_query_parameters": [("api_key", "MOCK_API_KEY")], } @@ -53,3 +55,12 @@ def test_nasdaq_calendar_ipo_fetcher(credentials=test_credentials): fetcher = NasdaqCalendarIpoFetcher() result = fetcher.test(params, credentials) assert result is None + + +@pytest.mark.record_http +def test_nasdaq_top_retail_fetcher(credentials=test_credentials): + params = {} + + fetcher = NasdaqTopRetailFetcher() + result = fetcher.test(params, credentials) + assert result is None diff --git a/openbb_platform/providers/quandl/openbb_quandl/models/top_retail.py b/openbb_platform/providers/quandl/openbb_quandl/models/top_retail.py new file mode 100644 index 000000000000..3e231a55c44a --- /dev/null +++ b/openbb_platform/providers/quandl/openbb_quandl/models/top_retail.py @@ -0,0 +1,71 @@ +"""Top Retail fetcher.""" + +from datetime import datetime +from typing import Any, Dict, List, Optional + +import requests +from openbb_provider.abstract.fetcher import Fetcher +from openbb_provider.standard_models.top_retail import ( + TopRetailData, + TopRetailQueryParams, +) +from pydantic import field_validator + + +class QuandlTopRetailQueryParams(TopRetailQueryParams): + """Top Retail query parameters. + + Source: https://data.nasdaq.com/databases/RTAT/data + """ + + +class QuandlTopRetailData(TopRetailData): + """Quandl Top Retail data.""" + + @field_validator("date", mode="before", check_fields=False) + def validate_date(cls, v: Any) -> Any: # pylint: disable=E0213 + """Validate the date.""" + return datetime.strptime(v, "%Y-%m-%d").date() + + +class QuandlTopRetailFetcher(Fetcher[TopRetailQueryParams, List[QuandlTopRetailData]]): + """Quandl Top Retail Fetcher.""" + + @staticmethod + def transform_query(params: Dict[str, Any]) -> QuandlTopRetailQueryParams: + """Transform the params to the provider-specific query.""" + return QuandlTopRetailQueryParams(**params) + + @staticmethod + def extract_data( + query: QuandlTopRetailQueryParams, + credentials: Optional[Dict[str, str]], + **kwargs: Any, + ) -> List[Dict]: + """Get data from Quandl.""" + api_key = credentials.get("quandl_api_key") if credentials else None + response = requests.get( + f"https://data.nasdaq.com/api/v3/datatables/NDAQ/RTAT10/?api_key={api_key}", + timeout=5, + ).json() + return response["datatable"]["data"][: query.limit] + + @staticmethod + def transform_data( + query: TopRetailQueryParams, + data: List[Dict], + **kwargs: Any, + ) -> List[QuandlTopRetailData]: + """Transform the data.""" + transformed_data: List[Dict[str, Any]] = [] + for row in data: + transformed_data.append( + { + "date": row[0], + "symbol": row[1], + "activity": row[2], + "sentiment": row[3], + } + ) + + return [QuandlTopRetailData(**row) for row in transformed_data] diff --git a/openbb_platform/providers/quandl/tests/test_quandl_fetchers.py b/openbb_platform/providers/quandl/tests/test_quandl_fetchers.py index a15e2adfe71b..61899b1e60a3 100644 --- a/openbb_platform/providers/quandl/tests/test_quandl_fetchers.py +++ b/openbb_platform/providers/quandl/tests/test_quandl_fetchers.py @@ -12,7 +12,9 @@ @pytest.fixture(scope="module") def vcr_config(): return { - "filter_headers": [("x-api-token", "MOCK_API_TOKEN")], + "filter_headers": [ + ("x-api-token", "MOCK_API_TOKEN"), + ], } diff --git a/openbb_platform/providers/seeking_alpha/README.md b/openbb_platform/providers/seeking_alpha/README.md new file mode 100644 index 000000000000..1aebb8031911 --- /dev/null +++ b/openbb_platform/providers/seeking_alpha/README.md @@ -0,0 +1,15 @@ +# OpenBB Seeking Alpha Provider + +This extension integrates the [Seeking Alpha](https://seekingalpha.com) data provider into the OpenBB Platform. + +## Installation + +To install the extension: + +```bash +pip install openbb-seeking-alpha +``` + +For development please check [Contribution Guidelines](https://github.com/OpenBB-finance/OpenBBTerminal/blob/feature/openbb-sdk-v4/openbb_platform/CONTRIBUTING.md). + +Documentation available [here](https://docs.openbb.co/sdk). diff --git a/openbb_platform/providers/seeking_alpha/__init__.py b/openbb_platform/providers/seeking_alpha/__init__.py new file mode 100644 index 000000000000..c2dc754f625c --- /dev/null +++ b/openbb_platform/providers/seeking_alpha/__init__.py @@ -0,0 +1 @@ +"""Init file for Provider.""" diff --git a/openbb_platform/providers/seeking_alpha/openbb_seeking_alpha/__init__.py b/openbb_platform/providers/seeking_alpha/openbb_seeking_alpha/__init__.py new file mode 100644 index 000000000000..578781e0f113 --- /dev/null +++ b/openbb_platform/providers/seeking_alpha/openbb_seeking_alpha/__init__.py @@ -0,0 +1,15 @@ +"""Seeking Alpha Provider module.""" +from openbb_provider.abstract.provider import Provider +from openbb_seeking_alpha.models.upcoming_release_days import ( + SAUpcomingReleaseDaysFetcher, +) + +seeking_alpha_provider = Provider( + name="seeking_alpha", + website="https://seekingalpha.com", + description="""Seeking Alpha is a data provider with access to news, analysis, and + real-time alerts on stocks.""", + fetcher_dict={ + "UpcomingReleaseDays": SAUpcomingReleaseDaysFetcher, + }, +) diff --git a/openbb_platform/providers/seeking_alpha/openbb_seeking_alpha/models/__init__.py b/openbb_platform/providers/seeking_alpha/openbb_seeking_alpha/models/__init__.py new file mode 100644 index 000000000000..60f5d9440561 --- /dev/null +++ b/openbb_platform/providers/seeking_alpha/openbb_seeking_alpha/models/__init__.py @@ -0,0 +1 @@ +"""Init file for models.""" diff --git a/openbb_platform/providers/seeking_alpha/openbb_seeking_alpha/models/upcoming_release_days.py b/openbb_platform/providers/seeking_alpha/openbb_seeking_alpha/models/upcoming_release_days.py new file mode 100644 index 000000000000..48d75f4670ed --- /dev/null +++ b/openbb_platform/providers/seeking_alpha/openbb_seeking_alpha/models/upcoming_release_days.py @@ -0,0 +1,112 @@ +"""Seeking Alpha Stock End of Day fetcher.""" + +from datetime import datetime +from typing import Any, Dict, List, Optional + +import requests +from openbb_provider.abstract.fetcher import Fetcher +from openbb_provider.standard_models.upcoming_release_days import ( + UpcomingReleaseDaysData, + UpcomingReleaseDaysQueryParams, +) +from pydantic import ( + Field, + field_validator, +) + + +class SAUpcomingReleaseDaysQueryParams(UpcomingReleaseDaysQueryParams): + """Seeking Alpha Upcoming Release Days Query. + + Source: https://seekingalpha.com/api/v3/earnings_calendar/tickers + """ + + +class SAUpcomingReleaseDaysData(UpcomingReleaseDaysData): + """Seeking Alpha Upcoming Release Days Data.""" + + __alias_dict__ = {"symbol": "slug", "release_time_type": "release_time"} + + sector_id: Optional[int] = Field( + description="The sector ID of the asset.", + ) + + @field_validator("release_date", mode="before", check_fields=False) + def validate_release_date(cls, v: Any) -> Any: # pylint: disable=E0213 + """Validate the release date.""" + v = v.split("T")[0] + return datetime.strptime(v, "%Y-%m-%d").date() + + +class SAUpcomingReleaseDaysFetcher( + Fetcher[ + SAUpcomingReleaseDaysQueryParams, + List[SAUpcomingReleaseDaysData], + ] +): + """Transform the query, extract and transform the data from the Seeking Alpha endpoints.""" + + @staticmethod + def transform_query(params: Dict[str, Any]) -> SAUpcomingReleaseDaysQueryParams: + """Transform the query.""" + transformed_params = params + + if params.get("start_date") is None: + transformed_params["start_date"] = datetime.now().date() + else: + transformed_params["start_date"] = datetime.strptime( + params["start_date"], "%Y-%m-%d" + ).date() + + return SAUpcomingReleaseDaysQueryParams(**transformed_params) + + @staticmethod + def extract_data( + query: SAUpcomingReleaseDaysQueryParams, # pylint: disable=W0613 + credentials: Optional[Dict[str, str]], + **kwargs: Any, + ) -> Dict: + """Return the raw data from the Seeking Alpha endpoint.""" + response = requests.get( + url=( + f"https://seekingalpha.com/api/v3/earnings_calendar/tickers?" + f"filter%5Bselected_date%5D={str(query.start_date)}" # cspell:disable-line + f"&filter%5Bwith_rating%5D=false&filter%5Bcurrency%5D=USD" # cspell:disable-line + ), + timeout=5, + ) + if response.status_code != 200: + raise ValueError( + f"Seeking Alpha Upcoming Release Days Fetcher failed with status code " + f"{response.status_code}" + ) + + if not response.json()["data"]: + raise ValueError( + "Seeking Alpha Upcoming Release Days Fetcher failed with empty response." + ) + + return response.json() + + @staticmethod + def transform_data( + query: SAUpcomingReleaseDaysQueryParams, data: Dict, **kwargs: Any + ) -> List[SAUpcomingReleaseDaysData]: + """Transform the data to the standard format.""" + transformed_data: List[Dict[str, Any]] = [] + data = data["data"] + for row in data: + transformed_data.append( + { + "symbol": row["attributes"]["slug"], + "name": row["attributes"]["name"], + "exchange": row["attributes"]["exchange"], + "release_time_type": row["attributes"]["release_time"], + "release_date": row["attributes"]["release_date"], + "sector_id": row["attributes"]["sector_id"], + } + ) + + return [ + SAUpcomingReleaseDaysData(**row) for row in transformed_data[: query.limit] + ] diff --git a/openbb_platform/providers/seeking_alpha/openbb_seeking_alpha/utils/__init__.py b/openbb_platform/providers/seeking_alpha/openbb_seeking_alpha/utils/__init__.py new file mode 100644 index 000000000000..2f54b938d7b2 --- /dev/null +++ b/openbb_platform/providers/seeking_alpha/openbb_seeking_alpha/utils/__init__.py @@ -0,0 +1 @@ +"""Init file for utils.""" diff --git a/openbb_platform/providers/seeking_alpha/poetry.lock b/openbb_platform/providers/seeking_alpha/poetry.lock new file mode 100644 index 000000000000..414048db59ae --- /dev/null +++ b/openbb_platform/providers/seeking_alpha/poetry.lock @@ -0,0 +1,1440 @@ +# This file is automatically @generated by Poetry 1.7.0 and should not be changed by hand. + +[[package]] +name = "annotated-types" +version = "0.6.0" +description = "Reusable constraint types to use with typing.Annotated" +optional = false +python-versions = ">=3.8" +files = [ + {file = "annotated_types-0.6.0-py3-none-any.whl", hash = "sha256:0641064de18ba7a25dee8f96403ebc39113d0cb953a01429249d5c7564666a43"}, + {file = "annotated_types-0.6.0.tar.gz", hash = "sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d"}, +] + +[package.dependencies] +typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.9\""} + +[[package]] +name = "anyio" +version = "3.7.1" +description = "High level compatibility layer for multiple asynchronous event loop implementations" +optional = false +python-versions = ">=3.7" +files = [ + {file = "anyio-3.7.1-py3-none-any.whl", hash = "sha256:91dee416e570e92c64041bd18b900d1d6fa78dff7048769ce5ac5ddad004fbb5"}, + {file = "anyio-3.7.1.tar.gz", hash = "sha256:44a3c9aba0f5defa43261a8b3efb97891f2bd7d804e0e1f56419befa1adfc780"}, +] + +[package.dependencies] +exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} +idna = ">=2.8" +sniffio = ">=1.1" + +[package.extras] +doc = ["Sphinx", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme (>=1.2.2)", "sphinxcontrib-jquery"] +test = ["anyio[trio]", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] +trio = ["trio (<0.22)"] + +[[package]] +name = "backoff" +version = "2.2.1" +description = "Function decoration for backoff and retry" +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "backoff-2.2.1-py3-none-any.whl", hash = "sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8"}, + {file = "backoff-2.2.1.tar.gz", hash = "sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba"}, +] + +[[package]] +name = "certifi" +version = "2023.7.22" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, + {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, +] + +[[package]] +name = "charset-normalizer" +version = "3.3.2" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, + {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, +] + +[[package]] +name = "click" +version = "8.1.7" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.7" +files = [ + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "ecdsa" +version = "0.18.0" +description = "ECDSA cryptographic signature library (pure python)" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "ecdsa-0.18.0-py2.py3-none-any.whl", hash = "sha256:80600258e7ed2f16b9aa1d7c295bd70194109ad5a30fdee0eaeefef1d4c559dd"}, + {file = "ecdsa-0.18.0.tar.gz", hash = "sha256:190348041559e21b22a1d65cee485282ca11a6f81d503fddb84d5017e9ed1e49"}, +] + +[package.dependencies] +six = ">=1.9.0" + +[package.extras] +gmpy = ["gmpy"] +gmpy2 = ["gmpy2"] + +[[package]] +name = "exceptiongroup" +version = "1.1.3" +description = "Backport of PEP 654 (exception groups)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.1.3-py3-none-any.whl", hash = "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"}, + {file = "exceptiongroup-1.1.3.tar.gz", hash = "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9"}, +] + +[package.extras] +test = ["pytest (>=6)"] + +[[package]] +name = "fastapi" +version = "0.103.2" +description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" +optional = false +python-versions = ">=3.7" +files = [ + {file = "fastapi-0.103.2-py3-none-any.whl", hash = "sha256:3270de872f0fe9ec809d4bd3d4d890c6d5cc7b9611d721d6438f9dacc8c4ef2e"}, + {file = "fastapi-0.103.2.tar.gz", hash = "sha256:75a11f6bfb8fc4d2bec0bd710c2d5f2829659c0e8c0afd5560fdda6ce25ec653"}, +] + +[package.dependencies] +anyio = ">=3.7.1,<4.0.0" +pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.1.0 || >2.1.0,<3.0.0" +starlette = ">=0.27.0,<0.28.0" +typing-extensions = ">=4.5.0" + +[package.extras] +all = ["email-validator (>=2.0.0)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.5)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] + +[[package]] +name = "h11" +version = "0.14.0" +description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +optional = false +python-versions = ">=3.7" +files = [ + {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, + {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, +] + +[[package]] +name = "html5lib" +version = "1.1" +description = "HTML parser based on the WHATWG HTML specification" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "html5lib-1.1-py2.py3-none-any.whl", hash = "sha256:0d78f8fde1c230e99fe37986a60526d7049ed4bf8a9fadbad5f00e22e58e041d"}, + {file = "html5lib-1.1.tar.gz", hash = "sha256:b2e5b40261e20f354d198eae92afc10d750afb487ed5e50f9c4eaf07c184146f"}, +] + +[package.dependencies] +six = ">=1.9" +webencodings = "*" + +[package.extras] +all = ["chardet (>=2.2)", "genshi", "lxml"] +chardet = ["chardet (>=2.2)"] +genshi = ["genshi"] +lxml = ["lxml"] + +[[package]] +name = "idna" +version = "3.4" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.5" +files = [ + {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, + {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, +] + +[[package]] +name = "importlib-metadata" +version = "6.8.0" +description = "Read metadata from Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "importlib_metadata-6.8.0-py3-none-any.whl", hash = "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb"}, + {file = "importlib_metadata-6.8.0.tar.gz", hash = "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743"}, +] + +[package.dependencies] +zipp = ">=0.5" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +perf = ["ipython"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] + +[[package]] +name = "monotonic" +version = "1.6" +description = "An implementation of time.monotonic() for Python 2 & < 3.3" +optional = false +python-versions = "*" +files = [ + {file = "monotonic-1.6-py2.py3-none-any.whl", hash = "sha256:68687e19a14f11f26d140dd5c86f3dba4bf5df58003000ed467e0e2a69bca96c"}, + {file = "monotonic-1.6.tar.gz", hash = "sha256:3a55207bcfed53ddd5c5bae174524062935efed17792e9de2ad0205ce9ad63f7"}, +] + +[[package]] +name = "multidict" +version = "6.0.4" +description = "multidict implementation" +optional = false +python-versions = ">=3.7" +files = [ + {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b1a97283e0c85772d613878028fec909f003993e1007eafa715b24b377cb9b8"}, + {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eeb6dcc05e911516ae3d1f207d4b0520d07f54484c49dfc294d6e7d63b734171"}, + {file = "multidict-6.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d6d635d5209b82a3492508cf5b365f3446afb65ae7ebd755e70e18f287b0adf7"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c048099e4c9e9d615545e2001d3d8a4380bd403e1a0578734e0d31703d1b0c0b"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ea20853c6dbbb53ed34cb4d080382169b6f4554d394015f1bef35e881bf83547"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16d232d4e5396c2efbbf4f6d4df89bfa905eb0d4dc5b3549d872ab898451f569"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36c63aaa167f6c6b04ef2c85704e93af16c11d20de1d133e39de6a0e84582a93"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:64bdf1086b6043bf519869678f5f2757f473dee970d7abf6da91ec00acb9cb98"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:43644e38f42e3af682690876cff722d301ac585c5b9e1eacc013b7a3f7b696a0"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7582a1d1030e15422262de9f58711774e02fa80df0d1578995c76214f6954988"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ddff9c4e225a63a5afab9dd15590432c22e8057e1a9a13d28ed128ecf047bbdc"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ee2a1ece51b9b9e7752e742cfb661d2a29e7bcdba2d27e66e28a99f1890e4fa0"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a2e4369eb3d47d2034032a26c7a80fcb21a2cb22e1173d761a162f11e562caa5"}, + {file = "multidict-6.0.4-cp310-cp310-win32.whl", hash = "sha256:574b7eae1ab267e5f8285f0fe881f17efe4b98c39a40858247720935b893bba8"}, + {file = "multidict-6.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:4dcbb0906e38440fa3e325df2359ac6cb043df8e58c965bb45f4e406ecb162cc"}, + {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0dfad7a5a1e39c53ed00d2dd0c2e36aed4650936dc18fd9a1826a5ae1cad6f03"}, + {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:64da238a09d6039e3bd39bb3aee9c21a5e34f28bfa5aa22518581f910ff94af3"}, + {file = "multidict-6.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ff959bee35038c4624250473988b24f846cbeb2c6639de3602c073f10410ceba"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01a3a55bd90018c9c080fbb0b9f4891db37d148a0a18722b42f94694f8b6d4c9"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5cb09abb18c1ea940fb99360ea0396f34d46566f157122c92dfa069d3e0e982"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:666daae833559deb2d609afa4490b85830ab0dfca811a98b70a205621a6109fe"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11bdf3f5e1518b24530b8241529d2050014c884cf18b6fc69c0c2b30ca248710"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d18748f2d30f94f498e852c67d61261c643b349b9d2a581131725595c45ec6c"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:458f37be2d9e4c95e2d8866a851663cbc76e865b78395090786f6cd9b3bbf4f4"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:b1a2eeedcead3a41694130495593a559a668f382eee0727352b9a41e1c45759a"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7d6ae9d593ef8641544d6263c7fa6408cc90370c8cb2bbb65f8d43e5b0351d9c"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5979b5632c3e3534e42ca6ff856bb24b2e3071b37861c2c727ce220d80eee9ed"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dcfe792765fab89c365123c81046ad4103fcabbc4f56d1c1997e6715e8015461"}, + {file = "multidict-6.0.4-cp311-cp311-win32.whl", hash = "sha256:3601a3cece3819534b11d4efc1eb76047488fddd0c85a3948099d5da4d504636"}, + {file = "multidict-6.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:81a4f0b34bd92df3da93315c6a59034df95866014ac08535fc819f043bfd51f0"}, + {file = "multidict-6.0.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:67040058f37a2a51ed8ea8f6b0e6ee5bd78ca67f169ce6122f3e2ec80dfe9b78"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:853888594621e6604c978ce2a0444a1e6e70c8d253ab65ba11657659dcc9100f"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:39ff62e7d0f26c248b15e364517a72932a611a9b75f35b45be078d81bdb86603"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af048912e045a2dc732847d33821a9d84ba553f5c5f028adbd364dd4765092ac"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e8b901e607795ec06c9e42530788c45ac21ef3aaa11dbd0c69de543bfb79a9"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62501642008a8b9871ddfccbf83e4222cf8ac0d5aeedf73da36153ef2ec222d2"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:99b76c052e9f1bc0721f7541e5e8c05db3941eb9ebe7b8553c625ef88d6eefde"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:509eac6cf09c794aa27bcacfd4d62c885cce62bef7b2c3e8b2e49d365b5003fe"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:21a12c4eb6ddc9952c415f24eef97e3e55ba3af61f67c7bc388dcdec1404a067"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:5cad9430ab3e2e4fa4a2ef4450f548768400a2ac635841bc2a56a2052cdbeb87"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ab55edc2e84460694295f401215f4a58597f8f7c9466faec545093045476327d"}, + {file = "multidict-6.0.4-cp37-cp37m-win32.whl", hash = "sha256:5a4dcf02b908c3b8b17a45fb0f15b695bf117a67b76b7ad18b73cf8e92608775"}, + {file = "multidict-6.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:6ed5f161328b7df384d71b07317f4d8656434e34591f20552c7bcef27b0ab88e"}, + {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5fc1b16f586f049820c5c5b17bb4ee7583092fa0d1c4e28b5239181ff9532e0c"}, + {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1502e24330eb681bdaa3eb70d6358e818e8e8f908a22a1851dfd4e15bc2f8161"}, + {file = "multidict-6.0.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b692f419760c0e65d060959df05f2a531945af31fda0c8a3b3195d4efd06de11"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45e1ecb0379bfaab5eef059f50115b54571acfbe422a14f668fc8c27ba410e7e"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ddd3915998d93fbcd2566ddf9cf62cdb35c9e093075f862935573d265cf8f65d"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:59d43b61c59d82f2effb39a93c48b845efe23a3852d201ed2d24ba830d0b4cf2"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc8e1d0c705233c5dd0c5e6460fbad7827d5d36f310a0fadfd45cc3029762258"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6aa0418fcc838522256761b3415822626f866758ee0bc6632c9486b179d0b52"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6748717bb10339c4760c1e63da040f5f29f5ed6e59d76daee30305894069a660"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4d1a3d7ef5e96b1c9e92f973e43aa5e5b96c659c9bc3124acbbd81b0b9c8a951"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4372381634485bec7e46718edc71528024fcdc6f835baefe517b34a33c731d60"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:fc35cb4676846ef752816d5be2193a1e8367b4c1397b74a565a9d0389c433a1d"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4b9d9e4e2b37daddb5c23ea33a3417901fa7c7b3dee2d855f63ee67a0b21e5b1"}, + {file = "multidict-6.0.4-cp38-cp38-win32.whl", hash = "sha256:e41b7e2b59679edfa309e8db64fdf22399eec4b0b24694e1b2104fb789207779"}, + {file = "multidict-6.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:d6c254ba6e45d8e72739281ebc46ea5eb5f101234f3ce171f0e9f5cc86991480"}, + {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:16ab77bbeb596e14212e7bab8429f24c1579234a3a462105cda4a66904998664"}, + {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc779e9e6f7fda81b3f9aa58e3a6091d49ad528b11ed19f6621408806204ad35"}, + {file = "multidict-6.0.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ceef517eca3e03c1cceb22030a3e39cb399ac86bff4e426d4fc6ae49052cc60"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:281af09f488903fde97923c7744bb001a9b23b039a909460d0f14edc7bf59706"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52f2dffc8acaba9a2f27174c41c9e57f60b907bb9f096b36b1a1f3be71c6284d"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b41156839806aecb3641f3208c0dafd3ac7775b9c4c422d82ee2a45c34ba81ca"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5e3fc56f88cc98ef8139255cf8cd63eb2c586531e43310ff859d6bb3a6b51f1"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8316a77808c501004802f9beebde51c9f857054a0c871bd6da8280e718444449"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f70b98cd94886b49d91170ef23ec5c0e8ebb6f242d734ed7ed677b24d50c82cf"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bf6774e60d67a9efe02b3616fee22441d86fab4c6d335f9d2051d19d90a40063"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:e69924bfcdda39b722ef4d9aa762b2dd38e4632b3641b1d9a57ca9cd18f2f83a"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:6b181d8c23da913d4ff585afd1155a0e1194c0b50c54fcfe286f70cdaf2b7176"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:52509b5be062d9eafc8170e53026fbc54cf3b32759a23d07fd935fb04fc22d95"}, + {file = "multidict-6.0.4-cp39-cp39-win32.whl", hash = "sha256:27c523fbfbdfd19c6867af7346332b62b586eed663887392cff78d614f9ec313"}, + {file = "multidict-6.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:33029f5734336aa0d4c0384525da0387ef89148dc7191aae00ca5fb23d7aafc2"}, + {file = "multidict-6.0.4.tar.gz", hash = "sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49"}, +] + +[[package]] +name = "numpy" +version = "1.24.4" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "numpy-1.24.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c0bfb52d2169d58c1cdb8cc1f16989101639b34c7d3ce60ed70b19c63eba0b64"}, + {file = "numpy-1.24.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ed094d4f0c177b1b8e7aa9cba7d6ceed51c0e569a5318ac0ca9a090680a6a1b1"}, + {file = "numpy-1.24.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79fc682a374c4a8ed08b331bef9c5f582585d1048fa6d80bc6c35bc384eee9b4"}, + {file = "numpy-1.24.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ffe43c74893dbf38c2b0a1f5428760a1a9c98285553c89e12d70a96a7f3a4d6"}, + {file = "numpy-1.24.4-cp310-cp310-win32.whl", hash = "sha256:4c21decb6ea94057331e111a5bed9a79d335658c27ce2adb580fb4d54f2ad9bc"}, + {file = "numpy-1.24.4-cp310-cp310-win_amd64.whl", hash = "sha256:b4bea75e47d9586d31e892a7401f76e909712a0fd510f58f5337bea9572c571e"}, + {file = "numpy-1.24.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f136bab9c2cfd8da131132c2cf6cc27331dd6fae65f95f69dcd4ae3c3639c810"}, + {file = "numpy-1.24.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e2926dac25b313635e4d6cf4dc4e51c8c0ebfed60b801c799ffc4c32bf3d1254"}, + {file = "numpy-1.24.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:222e40d0e2548690405b0b3c7b21d1169117391c2e82c378467ef9ab4c8f0da7"}, + {file = "numpy-1.24.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7215847ce88a85ce39baf9e89070cb860c98fdddacbaa6c0da3ffb31b3350bd5"}, + {file = "numpy-1.24.4-cp311-cp311-win32.whl", hash = "sha256:4979217d7de511a8d57f4b4b5b2b965f707768440c17cb70fbf254c4b225238d"}, + {file = "numpy-1.24.4-cp311-cp311-win_amd64.whl", hash = "sha256:b7b1fc9864d7d39e28f41d089bfd6353cb5f27ecd9905348c24187a768c79694"}, + {file = "numpy-1.24.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1452241c290f3e2a312c137a9999cdbf63f78864d63c79039bda65ee86943f61"}, + {file = "numpy-1.24.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:04640dab83f7c6c85abf9cd729c5b65f1ebd0ccf9de90b270cd61935eef0197f"}, + {file = "numpy-1.24.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5425b114831d1e77e4b5d812b69d11d962e104095a5b9c3b641a218abcc050e"}, + {file = "numpy-1.24.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd80e219fd4c71fc3699fc1dadac5dcf4fd882bfc6f7ec53d30fa197b8ee22dc"}, + {file = "numpy-1.24.4-cp38-cp38-win32.whl", hash = "sha256:4602244f345453db537be5314d3983dbf5834a9701b7723ec28923e2889e0bb2"}, + {file = "numpy-1.24.4-cp38-cp38-win_amd64.whl", hash = "sha256:692f2e0f55794943c5bfff12b3f56f99af76f902fc47487bdfe97856de51a706"}, + {file = "numpy-1.24.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2541312fbf09977f3b3ad449c4e5f4bb55d0dbf79226d7724211acc905049400"}, + {file = "numpy-1.24.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9667575fb6d13c95f1b36aca12c5ee3356bf001b714fc354eb5465ce1609e62f"}, + {file = "numpy-1.24.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3a86ed21e4f87050382c7bc96571755193c4c1392490744ac73d660e8f564a9"}, + {file = "numpy-1.24.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d11efb4dbecbdf22508d55e48d9c8384db795e1b7b51ea735289ff96613ff74d"}, + {file = "numpy-1.24.4-cp39-cp39-win32.whl", hash = "sha256:6620c0acd41dbcb368610bb2f4d83145674040025e5536954782467100aa8835"}, + {file = "numpy-1.24.4-cp39-cp39-win_amd64.whl", hash = "sha256:befe2bf740fd8373cf56149a5c23a0f601e82869598d41f8e188a0e9869926f8"}, + {file = "numpy-1.24.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:31f13e25b4e304632a4619d0e0777662c2ffea99fcae2029556b17d8ff958aef"}, + {file = "numpy-1.24.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95f7ac6540e95bc440ad77f56e520da5bf877f87dca58bd095288dce8940532a"}, + {file = "numpy-1.24.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:e98f220aa76ca2a977fe435f5b04d7b3470c0a2e6312907b37ba6068f26787f2"}, + {file = "numpy-1.24.4.tar.gz", hash = "sha256:80f5e3a4e498641401868df4208b74581206afbee7cf7b8329daae82676d9463"}, +] + +[[package]] +name = "numpy" +version = "1.25.2" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.9" +files = [ + {file = "numpy-1.25.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:db3ccc4e37a6873045580d413fe79b68e47a681af8db2e046f1dacfa11f86eb3"}, + {file = "numpy-1.25.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:90319e4f002795ccfc9050110bbbaa16c944b1c37c0baeea43c5fb881693ae1f"}, + {file = "numpy-1.25.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfe4a913e29b418d096e696ddd422d8a5d13ffba4ea91f9f60440a3b759b0187"}, + {file = "numpy-1.25.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f08f2e037bba04e707eebf4bc934f1972a315c883a9e0ebfa8a7756eabf9e357"}, + {file = "numpy-1.25.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bec1e7213c7cb00d67093247f8c4db156fd03075f49876957dca4711306d39c9"}, + {file = "numpy-1.25.2-cp310-cp310-win32.whl", hash = "sha256:7dc869c0c75988e1c693d0e2d5b26034644399dd929bc049db55395b1379e044"}, + {file = "numpy-1.25.2-cp310-cp310-win_amd64.whl", hash = "sha256:834b386f2b8210dca38c71a6e0f4fd6922f7d3fcff935dbe3a570945acb1b545"}, + {file = "numpy-1.25.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c5462d19336db4560041517dbb7759c21d181a67cb01b36ca109b2ae37d32418"}, + {file = "numpy-1.25.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c5652ea24d33585ea39eb6a6a15dac87a1206a692719ff45d53c5282e66d4a8f"}, + {file = "numpy-1.25.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d60fbae8e0019865fc4784745814cff1c421df5afee233db6d88ab4f14655a2"}, + {file = "numpy-1.25.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60e7f0f7f6d0eee8364b9a6304c2845b9c491ac706048c7e8cf47b83123b8dbf"}, + {file = "numpy-1.25.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:bb33d5a1cf360304754913a350edda36d5b8c5331a8237268c48f91253c3a364"}, + {file = "numpy-1.25.2-cp311-cp311-win32.whl", hash = "sha256:5883c06bb92f2e6c8181df7b39971a5fb436288db58b5a1c3967702d4278691d"}, + {file = "numpy-1.25.2-cp311-cp311-win_amd64.whl", hash = "sha256:5c97325a0ba6f9d041feb9390924614b60b99209a71a69c876f71052521d42a4"}, + {file = "numpy-1.25.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b79e513d7aac42ae918db3ad1341a015488530d0bb2a6abcbdd10a3a829ccfd3"}, + {file = "numpy-1.25.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:eb942bfb6f84df5ce05dbf4b46673ffed0d3da59f13635ea9b926af3deb76926"}, + {file = "numpy-1.25.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e0746410e73384e70d286f93abf2520035250aad8c5714240b0492a7302fdca"}, + {file = "numpy-1.25.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7806500e4f5bdd04095e849265e55de20d8cc4b661b038957354327f6d9b295"}, + {file = "numpy-1.25.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8b77775f4b7df768967a7c8b3567e309f617dd5e99aeb886fa14dc1a0791141f"}, + {file = "numpy-1.25.2-cp39-cp39-win32.whl", hash = "sha256:2792d23d62ec51e50ce4d4b7d73de8f67a2fd3ea710dcbc8563a51a03fb07b01"}, + {file = "numpy-1.25.2-cp39-cp39-win_amd64.whl", hash = "sha256:76b4115d42a7dfc5d485d358728cdd8719be33cc5ec6ec08632a5d6fca2ed380"}, + {file = "numpy-1.25.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1a1329e26f46230bf77b02cc19e900db9b52f398d6722ca853349a782d4cff55"}, + {file = "numpy-1.25.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c3abc71e8b6edba80a01a52e66d83c5d14433cbcd26a40c329ec7ed09f37901"}, + {file = "numpy-1.25.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:1b9735c27cea5d995496f46a8b1cd7b408b3f34b6d50459d9ac8fe3a20cc17bf"}, + {file = "numpy-1.25.2.tar.gz", hash = "sha256:fd608e19c8d7c55021dffd43bfe5492fab8cc105cc8986f813f8c3c048b38760"}, +] + +[[package]] +name = "numpy" +version = "1.26.1" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = "<3.13,>=3.9" +files = [ + {file = "numpy-1.26.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:82e871307a6331b5f09efda3c22e03c095d957f04bf6bc1804f30048d0e5e7af"}, + {file = "numpy-1.26.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cdd9ec98f0063d93baeb01aad472a1a0840dee302842a2746a7a8e92968f9575"}, + {file = "numpy-1.26.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d78f269e0c4fd365fc2992c00353e4530d274ba68f15e968d8bc3c69ce5f5244"}, + {file = "numpy-1.26.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ab9163ca8aeb7fd32fe93866490654d2f7dda4e61bc6297bf72ce07fdc02f67"}, + {file = "numpy-1.26.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:78ca54b2f9daffa5f323f34cdf21e1d9779a54073f0018a3094ab907938331a2"}, + {file = "numpy-1.26.1-cp310-cp310-win32.whl", hash = "sha256:d1cfc92db6af1fd37a7bb58e55c8383b4aa1ba23d012bdbba26b4bcca45ac297"}, + {file = "numpy-1.26.1-cp310-cp310-win_amd64.whl", hash = "sha256:d2984cb6caaf05294b8466966627e80bf6c7afd273279077679cb010acb0e5ab"}, + {file = "numpy-1.26.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cd7837b2b734ca72959a1caf3309457a318c934abef7a43a14bb984e574bbb9a"}, + {file = "numpy-1.26.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1c59c046c31a43310ad0199d6299e59f57a289e22f0f36951ced1c9eac3665b9"}, + {file = "numpy-1.26.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d58e8c51a7cf43090d124d5073bc29ab2755822181fcad978b12e144e5e5a4b3"}, + {file = "numpy-1.26.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6081aed64714a18c72b168a9276095ef9155dd7888b9e74b5987808f0dd0a974"}, + {file = "numpy-1.26.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:97e5d6a9f0702c2863aaabf19f0d1b6c2628fbe476438ce0b5ce06e83085064c"}, + {file = "numpy-1.26.1-cp311-cp311-win32.whl", hash = "sha256:b9d45d1dbb9de84894cc50efece5b09939752a2d75aab3a8b0cef6f3a35ecd6b"}, + {file = "numpy-1.26.1-cp311-cp311-win_amd64.whl", hash = "sha256:3649d566e2fc067597125428db15d60eb42a4e0897fc48d28cb75dc2e0454e53"}, + {file = "numpy-1.26.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1d1bd82d539607951cac963388534da3b7ea0e18b149a53cf883d8f699178c0f"}, + {file = "numpy-1.26.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:afd5ced4e5a96dac6725daeb5242a35494243f2239244fad10a90ce58b071d24"}, + {file = "numpy-1.26.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a03fb25610ef560a6201ff06df4f8105292ba56e7cdd196ea350d123fc32e24e"}, + {file = "numpy-1.26.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dcfaf015b79d1f9f9c9fd0731a907407dc3e45769262d657d754c3a028586124"}, + {file = "numpy-1.26.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e509cbc488c735b43b5ffea175235cec24bbc57b227ef1acc691725beb230d1c"}, + {file = "numpy-1.26.1-cp312-cp312-win32.whl", hash = "sha256:af22f3d8e228d84d1c0c44c1fbdeb80f97a15a0abe4f080960393a00db733b66"}, + {file = "numpy-1.26.1-cp312-cp312-win_amd64.whl", hash = "sha256:9f42284ebf91bdf32fafac29d29d4c07e5e9d1af862ea73686581773ef9e73a7"}, + {file = "numpy-1.26.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bb894accfd16b867d8643fc2ba6c8617c78ba2828051e9a69511644ce86ce83e"}, + {file = "numpy-1.26.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e44ccb93f30c75dfc0c3aa3ce38f33486a75ec9abadabd4e59f114994a9c4617"}, + {file = "numpy-1.26.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9696aa2e35cc41e398a6d42d147cf326f8f9d81befcb399bc1ed7ffea339b64e"}, + {file = "numpy-1.26.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5b411040beead47a228bde3b2241100454a6abde9df139ed087bd73fc0a4908"}, + {file = "numpy-1.26.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1e11668d6f756ca5ef534b5be8653d16c5352cbb210a5c2a79ff288e937010d5"}, + {file = "numpy-1.26.1-cp39-cp39-win32.whl", hash = "sha256:d1d2c6b7dd618c41e202c59c1413ef9b2c8e8a15f5039e344af64195459e3104"}, + {file = "numpy-1.26.1-cp39-cp39-win_amd64.whl", hash = "sha256:59227c981d43425ca5e5c01094d59eb14e8772ce6975d4b2fc1e106a833d5ae2"}, + {file = "numpy-1.26.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:06934e1a22c54636a059215d6da99e23286424f316fddd979f5071093b648668"}, + {file = "numpy-1.26.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76ff661a867d9272cd2a99eed002470f46dbe0943a5ffd140f49be84f68ffc42"}, + {file = "numpy-1.26.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:6965888d65d2848e8768824ca8288db0a81263c1efccec881cb35a0d805fcd2f"}, + {file = "numpy-1.26.1.tar.gz", hash = "sha256:c8c6c72d4a9f831f328efb1312642a1cafafaa88981d9ab76368d50d07d93cbe"}, +] + +[[package]] +name = "openbb-core" +version = "0.1.0a5" +description = "OpenBB package with core functionality" +optional = false +python-versions = ">=3.8,<4.0" +files = [ + {file = "openbb_core-0.1.0a5-py3-none-any.whl", hash = "sha256:f22c68911b6f6e7b129b50d7c32731b1c9bbfda6b365a04824c2ab2c9437ef05"}, + {file = "openbb_core-0.1.0a5.tar.gz", hash = "sha256:f39458e650c489be0707aea539f3d695b4b98d49e28664087d3bb67266cf4d6f"}, +] + +[package.dependencies] +fastapi = ">=0.103.1,<0.104.0" +html5lib = ">=1.1,<2.0" +importlib_metadata = ">=6.8.0,<7.0.0" +openbb-provider = ">=0.1.0a3,<0.2.0" +pandas = ">=1.5.3" +posthog = ">=3.0.1,<4.0.0" +python-jose = ">=3.3.0,<4.0.0" +python-multipart = ">=0.0.6,<0.0.7" +uuid7 = ">=0.1.0,<0.2.0" +uvicorn = ">=0.23.2,<0.24.0" +websockets = ">=10.4,<11.0" + +[[package]] +name = "openbb-provider" +version = "0.1.0a4" +description = "OpenBB package to execute queries to financial data providers" +optional = false +python-versions = ">=3.8,<4.0" +files = [ + {file = "openbb_provider-0.1.0a4-py3-none-any.whl", hash = "sha256:317e1d9d634c480da4dfd320befb42840200bee186a1de687a0f93d8ea39316e"}, + {file = "openbb_provider-0.1.0a4.tar.gz", hash = "sha256:a6b78275b5f697b1d4c928904928e23657277f702ab4cbd5a03e9022f63e8e6f"}, +] + +[package.dependencies] +importlib_metadata = ">=6.8.0,<7.0.0" +pydantic = ">=2.4.2,<3.0.0" +pytest-recorder = ">=0.2.3,<0.3.0" +python-dotenv = ">=1.0.0,<2.0.0" +requests = ">=2.31.0,<3.0.0" +urllib3 = "<2.0.0" + +[[package]] +name = "pandas" +version = "2.0.3" +description = "Powerful data structures for data analysis, time series, and statistics" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pandas-2.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e4c7c9f27a4185304c7caf96dc7d91bc60bc162221152de697c98eb0b2648dd8"}, + {file = "pandas-2.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f167beed68918d62bffb6ec64f2e1d8a7d297a038f86d4aed056b9493fca407f"}, + {file = "pandas-2.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce0c6f76a0f1ba361551f3e6dceaff06bde7514a374aa43e33b588ec10420183"}, + {file = "pandas-2.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba619e410a21d8c387a1ea6e8a0e49bb42216474436245718d7f2e88a2f8d7c0"}, + {file = "pandas-2.0.3-cp310-cp310-win32.whl", hash = "sha256:3ef285093b4fe5058eefd756100a367f27029913760773c8bf1d2d8bebe5d210"}, + {file = "pandas-2.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:9ee1a69328d5c36c98d8e74db06f4ad518a1840e8ccb94a4ba86920986bb617e"}, + {file = "pandas-2.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b084b91d8d66ab19f5bb3256cbd5ea661848338301940e17f4492b2ce0801fe8"}, + {file = "pandas-2.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:37673e3bdf1551b95bf5d4ce372b37770f9529743d2498032439371fc7b7eb26"}, + {file = "pandas-2.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9cb1e14fdb546396b7e1b923ffaeeac24e4cedd14266c3497216dd4448e4f2d"}, + {file = "pandas-2.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9cd88488cceb7635aebb84809d087468eb33551097d600c6dad13602029c2df"}, + {file = "pandas-2.0.3-cp311-cp311-win32.whl", hash = "sha256:694888a81198786f0e164ee3a581df7d505024fbb1f15202fc7db88a71d84ebd"}, + {file = "pandas-2.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:6a21ab5c89dcbd57f78d0ae16630b090eec626360085a4148693def5452d8a6b"}, + {file = "pandas-2.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9e4da0d45e7f34c069fe4d522359df7d23badf83abc1d1cef398895822d11061"}, + {file = "pandas-2.0.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:32fca2ee1b0d93dd71d979726b12b61faa06aeb93cf77468776287f41ff8fdc5"}, + {file = "pandas-2.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:258d3624b3ae734490e4d63c430256e716f488c4fcb7c8e9bde2d3aa46c29089"}, + {file = "pandas-2.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eae3dc34fa1aa7772dd3fc60270d13ced7346fcbcfee017d3132ec625e23bb0"}, + {file = "pandas-2.0.3-cp38-cp38-win32.whl", hash = "sha256:f3421a7afb1a43f7e38e82e844e2bca9a6d793d66c1a7f9f0ff39a795bbc5e02"}, + {file = "pandas-2.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:69d7f3884c95da3a31ef82b7618af5710dba95bb885ffab339aad925c3e8ce78"}, + {file = "pandas-2.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5247fb1ba347c1261cbbf0fcfba4a3121fbb4029d95d9ef4dc45406620b25c8b"}, + {file = "pandas-2.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:81af086f4543c9d8bb128328b5d32e9986e0c84d3ee673a2ac6fb57fd14f755e"}, + {file = "pandas-2.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1994c789bf12a7c5098277fb43836ce090f1073858c10f9220998ac74f37c69b"}, + {file = "pandas-2.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ec591c48e29226bcbb316e0c1e9423622bc7a4eaf1ef7c3c9fa1a3981f89641"}, + {file = "pandas-2.0.3-cp39-cp39-win32.whl", hash = "sha256:04dbdbaf2e4d46ca8da896e1805bc04eb85caa9a82e259e8eed00254d5e0c682"}, + {file = "pandas-2.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:1168574b036cd8b93abc746171c9b4f1b83467438a5e45909fed645cf8692dbc"}, + {file = "pandas-2.0.3.tar.gz", hash = "sha256:c02f372a88e0d17f36d3093a644c73cfc1788e876a7c4bcb4020a77512e2043c"}, +] + +[package.dependencies] +numpy = [ + {version = ">=1.20.3", markers = "python_version < \"3.10\""}, + {version = ">=1.21.0", markers = "python_version >= \"3.10\" and python_version < \"3.11\""}, + {version = ">=1.23.2", markers = "python_version >= \"3.11\""}, +] +python-dateutil = ">=2.8.2" +pytz = ">=2020.1" +tzdata = ">=2022.1" + +[package.extras] +all = ["PyQt5 (>=5.15.1)", "SQLAlchemy (>=1.4.16)", "beautifulsoup4 (>=4.9.3)", "bottleneck (>=1.3.2)", "brotlipy (>=0.7.0)", "fastparquet (>=0.6.3)", "fsspec (>=2021.07.0)", "gcsfs (>=2021.07.0)", "html5lib (>=1.1)", "hypothesis (>=6.34.2)", "jinja2 (>=3.0.0)", "lxml (>=4.6.3)", "matplotlib (>=3.6.1)", "numba (>=0.53.1)", "numexpr (>=2.7.3)", "odfpy (>=1.4.1)", "openpyxl (>=3.0.7)", "pandas-gbq (>=0.15.0)", "psycopg2 (>=2.8.6)", "pyarrow (>=7.0.0)", "pymysql (>=1.0.2)", "pyreadstat (>=1.1.2)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)", "python-snappy (>=0.6.0)", "pyxlsb (>=1.0.8)", "qtpy (>=2.2.0)", "s3fs (>=2021.08.0)", "scipy (>=1.7.1)", "tables (>=3.6.1)", "tabulate (>=0.8.9)", "xarray (>=0.21.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=1.4.3)", "zstandard (>=0.15.2)"] +aws = ["s3fs (>=2021.08.0)"] +clipboard = ["PyQt5 (>=5.15.1)", "qtpy (>=2.2.0)"] +compression = ["brotlipy (>=0.7.0)", "python-snappy (>=0.6.0)", "zstandard (>=0.15.2)"] +computation = ["scipy (>=1.7.1)", "xarray (>=0.21.0)"] +excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.0.7)", "pyxlsb (>=1.0.8)", "xlrd (>=2.0.1)", "xlsxwriter (>=1.4.3)"] +feather = ["pyarrow (>=7.0.0)"] +fss = ["fsspec (>=2021.07.0)"] +gcp = ["gcsfs (>=2021.07.0)", "pandas-gbq (>=0.15.0)"] +hdf5 = ["tables (>=3.6.1)"] +html = ["beautifulsoup4 (>=4.9.3)", "html5lib (>=1.1)", "lxml (>=4.6.3)"] +mysql = ["SQLAlchemy (>=1.4.16)", "pymysql (>=1.0.2)"] +output-formatting = ["jinja2 (>=3.0.0)", "tabulate (>=0.8.9)"] +parquet = ["pyarrow (>=7.0.0)"] +performance = ["bottleneck (>=1.3.2)", "numba (>=0.53.1)", "numexpr (>=2.7.1)"] +plot = ["matplotlib (>=3.6.1)"] +postgresql = ["SQLAlchemy (>=1.4.16)", "psycopg2 (>=2.8.6)"] +spss = ["pyreadstat (>=1.1.2)"] +sql-other = ["SQLAlchemy (>=1.4.16)"] +test = ["hypothesis (>=6.34.2)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)"] +xml = ["lxml (>=4.6.3)"] + +[[package]] +name = "posthog" +version = "3.0.2" +description = "Integrate PostHog into any python application." +optional = false +python-versions = "*" +files = [ + {file = "posthog-3.0.2-py2.py3-none-any.whl", hash = "sha256:a8c0af6f2401fbe50f90e68c4143d0824b54e872de036b1c2f23b5abb39d88ce"}, + {file = "posthog-3.0.2.tar.gz", hash = "sha256:701fba6e446a4de687c6e861b587e7b7741955ad624bf34fe013c06a0fec6fb3"}, +] + +[package.dependencies] +backoff = ">=1.10.0" +monotonic = ">=1.5" +python-dateutil = ">2.1" +requests = ">=2.7,<3.0" +six = ">=1.5" + +[package.extras] +dev = ["black", "flake8", "flake8-print", "isort", "pre-commit"] +sentry = ["django", "sentry-sdk"] +test = ["coverage", "flake8", "freezegun (==0.3.15)", "mock (>=2.0.0)", "pylint", "pytest"] + +[[package]] +name = "pyasn1" +version = "0.5.0" +description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +files = [ + {file = "pyasn1-0.5.0-py2.py3-none-any.whl", hash = "sha256:87a2121042a1ac9358cabcaf1d07680ff97ee6404333bacca15f76aa8ad01a57"}, + {file = "pyasn1-0.5.0.tar.gz", hash = "sha256:97b7290ca68e62a832558ec3976f15cbf911bf5d7c7039d8b861c2a0ece69fde"}, +] + +[[package]] +name = "pydantic" +version = "2.4.2" +description = "Data validation using Python type hints" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pydantic-2.4.2-py3-none-any.whl", hash = "sha256:bc3ddf669d234f4220e6e1c4d96b061abe0998185a8d7855c0126782b7abc8c1"}, + {file = "pydantic-2.4.2.tar.gz", hash = "sha256:94f336138093a5d7f426aac732dcfe7ab4eb4da243c88f891d65deb4a2556ee7"}, +] + +[package.dependencies] +annotated-types = ">=0.4.0" +pydantic-core = "2.10.1" +typing-extensions = ">=4.6.1" + +[package.extras] +email = ["email-validator (>=2.0.0)"] + +[[package]] +name = "pydantic-core" +version = "2.10.1" +description = "" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pydantic_core-2.10.1-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:d64728ee14e667ba27c66314b7d880b8eeb050e58ffc5fec3b7a109f8cddbd63"}, + {file = "pydantic_core-2.10.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:48525933fea744a3e7464c19bfede85df4aba79ce90c60b94d8b6e1eddd67096"}, + {file = "pydantic_core-2.10.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef337945bbd76cce390d1b2496ccf9f90b1c1242a3a7bc242ca4a9fc5993427a"}, + {file = "pydantic_core-2.10.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a1392e0638af203cee360495fd2cfdd6054711f2db5175b6e9c3c461b76f5175"}, + {file = "pydantic_core-2.10.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0675ba5d22de54d07bccde38997e780044dcfa9a71aac9fd7d4d7a1d2e3e65f7"}, + {file = "pydantic_core-2.10.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:128552af70a64660f21cb0eb4876cbdadf1a1f9d5de820fed6421fa8de07c893"}, + {file = "pydantic_core-2.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f6e6aed5818c264412ac0598b581a002a9f050cb2637a84979859e70197aa9e"}, + {file = "pydantic_core-2.10.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ecaac27da855b8d73f92123e5f03612b04c5632fd0a476e469dfc47cd37d6b2e"}, + {file = "pydantic_core-2.10.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b3c01c2fb081fced3bbb3da78510693dc7121bb893a1f0f5f4b48013201f362e"}, + {file = "pydantic_core-2.10.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:92f675fefa977625105708492850bcbc1182bfc3e997f8eecb866d1927c98ae6"}, + {file = "pydantic_core-2.10.1-cp310-none-win32.whl", hash = "sha256:420a692b547736a8d8703c39ea935ab5d8f0d2573f8f123b0a294e49a73f214b"}, + {file = "pydantic_core-2.10.1-cp310-none-win_amd64.whl", hash = "sha256:0880e239827b4b5b3e2ce05e6b766a7414e5f5aedc4523be6b68cfbc7f61c5d0"}, + {file = "pydantic_core-2.10.1-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:073d4a470b195d2b2245d0343569aac7e979d3a0dcce6c7d2af6d8a920ad0bea"}, + {file = "pydantic_core-2.10.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:600d04a7b342363058b9190d4e929a8e2e715c5682a70cc37d5ded1e0dd370b4"}, + {file = "pydantic_core-2.10.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39215d809470f4c8d1881758575b2abfb80174a9e8daf8f33b1d4379357e417c"}, + {file = "pydantic_core-2.10.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eeb3d3d6b399ffe55f9a04e09e635554012f1980696d6b0aca3e6cf42a17a03b"}, + {file = "pydantic_core-2.10.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a7a7902bf75779bc12ccfc508bfb7a4c47063f748ea3de87135d433a4cca7a2f"}, + {file = "pydantic_core-2.10.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3625578b6010c65964d177626fde80cf60d7f2e297d56b925cb5cdeda6e9925a"}, + {file = "pydantic_core-2.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:caa48fc31fc7243e50188197b5f0c4228956f97b954f76da157aae7f67269ae8"}, + {file = "pydantic_core-2.10.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:07ec6d7d929ae9c68f716195ce15e745b3e8fa122fc67698ac6498d802ed0fa4"}, + {file = "pydantic_core-2.10.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e6f31a17acede6a8cd1ae2d123ce04d8cca74056c9d456075f4f6f85de055607"}, + {file = "pydantic_core-2.10.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d8f1ebca515a03e5654f88411420fea6380fc841d1bea08effb28184e3d4899f"}, + {file = "pydantic_core-2.10.1-cp311-none-win32.whl", hash = "sha256:6db2eb9654a85ada248afa5a6db5ff1cf0f7b16043a6b070adc4a5be68c716d6"}, + {file = "pydantic_core-2.10.1-cp311-none-win_amd64.whl", hash = "sha256:4a5be350f922430997f240d25f8219f93b0c81e15f7b30b868b2fddfc2d05f27"}, + {file = "pydantic_core-2.10.1-cp311-none-win_arm64.whl", hash = "sha256:5fdb39f67c779b183b0c853cd6b45f7db84b84e0571b3ef1c89cdb1dfc367325"}, + {file = "pydantic_core-2.10.1-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:b1f22a9ab44de5f082216270552aa54259db20189e68fc12484873d926426921"}, + {file = "pydantic_core-2.10.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8572cadbf4cfa95fb4187775b5ade2eaa93511f07947b38f4cd67cf10783b118"}, + {file = "pydantic_core-2.10.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:db9a28c063c7c00844ae42a80203eb6d2d6bbb97070cfa00194dff40e6f545ab"}, + {file = "pydantic_core-2.10.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0e2a35baa428181cb2270a15864ec6286822d3576f2ed0f4cd7f0c1708472aff"}, + {file = "pydantic_core-2.10.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05560ab976012bf40f25d5225a58bfa649bb897b87192a36c6fef1ab132540d7"}, + {file = "pydantic_core-2.10.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d6495008733c7521a89422d7a68efa0a0122c99a5861f06020ef5b1f51f9ba7c"}, + {file = "pydantic_core-2.10.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14ac492c686defc8e6133e3a2d9eaf5261b3df26b8ae97450c1647286750b901"}, + {file = "pydantic_core-2.10.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8282bab177a9a3081fd3d0a0175a07a1e2bfb7fcbbd949519ea0980f8a07144d"}, + {file = "pydantic_core-2.10.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:aafdb89fdeb5fe165043896817eccd6434aee124d5ee9b354f92cd574ba5e78f"}, + {file = "pydantic_core-2.10.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f6defd966ca3b187ec6c366604e9296f585021d922e666b99c47e78738b5666c"}, + {file = "pydantic_core-2.10.1-cp312-none-win32.whl", hash = "sha256:7c4d1894fe112b0864c1fa75dffa045720a194b227bed12f4be7f6045b25209f"}, + {file = "pydantic_core-2.10.1-cp312-none-win_amd64.whl", hash = "sha256:5994985da903d0b8a08e4935c46ed8daf5be1cf217489e673910951dc533d430"}, + {file = "pydantic_core-2.10.1-cp312-none-win_arm64.whl", hash = "sha256:0d8a8adef23d86d8eceed3e32e9cca8879c7481c183f84ed1a8edc7df073af94"}, + {file = "pydantic_core-2.10.1-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:9badf8d45171d92387410b04639d73811b785b5161ecadabf056ea14d62d4ede"}, + {file = "pydantic_core-2.10.1-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:ebedb45b9feb7258fac0a268a3f6bec0a2ea4d9558f3d6f813f02ff3a6dc6698"}, + {file = "pydantic_core-2.10.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cfe1090245c078720d250d19cb05d67e21a9cd7c257698ef139bc41cf6c27b4f"}, + {file = "pydantic_core-2.10.1-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e357571bb0efd65fd55f18db0a2fb0ed89d0bb1d41d906b138f088933ae618bb"}, + {file = "pydantic_core-2.10.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b3dcd587b69bbf54fc04ca157c2323b8911033e827fffaecf0cafa5a892a0904"}, + {file = "pydantic_core-2.10.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c120c9ce3b163b985a3b966bb701114beb1da4b0468b9b236fc754783d85aa3"}, + {file = "pydantic_core-2.10.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15d6bca84ffc966cc9976b09a18cf9543ed4d4ecbd97e7086f9ce9327ea48891"}, + {file = "pydantic_core-2.10.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5cabb9710f09d5d2e9e2748c3e3e20d991a4c5f96ed8f1132518f54ab2967221"}, + {file = "pydantic_core-2.10.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:82f55187a5bebae7d81d35b1e9aaea5e169d44819789837cdd4720d768c55d15"}, + {file = "pydantic_core-2.10.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1d40f55222b233e98e3921df7811c27567f0e1a4411b93d4c5c0f4ce131bc42f"}, + {file = "pydantic_core-2.10.1-cp37-none-win32.whl", hash = "sha256:14e09ff0b8fe6e46b93d36a878f6e4a3a98ba5303c76bb8e716f4878a3bee92c"}, + {file = "pydantic_core-2.10.1-cp37-none-win_amd64.whl", hash = "sha256:1396e81b83516b9d5c9e26a924fa69164156c148c717131f54f586485ac3c15e"}, + {file = "pydantic_core-2.10.1-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:6835451b57c1b467b95ffb03a38bb75b52fb4dc2762bb1d9dbed8de31ea7d0fc"}, + {file = "pydantic_core-2.10.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b00bc4619f60c853556b35f83731bd817f989cba3e97dc792bb8c97941b8053a"}, + {file = "pydantic_core-2.10.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fa467fd300a6f046bdb248d40cd015b21b7576c168a6bb20aa22e595c8ffcdd"}, + {file = "pydantic_core-2.10.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d99277877daf2efe074eae6338453a4ed54a2d93fb4678ddfe1209a0c93a2468"}, + {file = "pydantic_core-2.10.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fa7db7558607afeccb33c0e4bf1c9a9a835e26599e76af6fe2fcea45904083a6"}, + {file = "pydantic_core-2.10.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aad7bd686363d1ce4ee930ad39f14e1673248373f4a9d74d2b9554f06199fb58"}, + {file = "pydantic_core-2.10.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:443fed67d33aa85357464f297e3d26e570267d1af6fef1c21ca50921d2976302"}, + {file = "pydantic_core-2.10.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:042462d8d6ba707fd3ce9649e7bf268633a41018d6a998fb5fbacb7e928a183e"}, + {file = "pydantic_core-2.10.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ecdbde46235f3d560b18be0cb706c8e8ad1b965e5c13bbba7450c86064e96561"}, + {file = "pydantic_core-2.10.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ed550ed05540c03f0e69e6d74ad58d026de61b9eaebebbaaf8873e585cbb18de"}, + {file = "pydantic_core-2.10.1-cp38-none-win32.whl", hash = "sha256:8cdbbd92154db2fec4ec973d45c565e767ddc20aa6dbaf50142676484cbff8ee"}, + {file = "pydantic_core-2.10.1-cp38-none-win_amd64.whl", hash = "sha256:9f6f3e2598604956480f6c8aa24a3384dbf6509fe995d97f6ca6103bb8c2534e"}, + {file = "pydantic_core-2.10.1-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:655f8f4c8d6a5963c9a0687793da37b9b681d9ad06f29438a3b2326d4e6b7970"}, + {file = "pydantic_core-2.10.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e570ffeb2170e116a5b17e83f19911020ac79d19c96f320cbfa1fa96b470185b"}, + {file = "pydantic_core-2.10.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64322bfa13e44c6c30c518729ef08fda6026b96d5c0be724b3c4ae4da939f875"}, + {file = "pydantic_core-2.10.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:485a91abe3a07c3a8d1e082ba29254eea3e2bb13cbbd4351ea4e5a21912cc9b0"}, + {file = "pydantic_core-2.10.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7c2b8eb9fc872e68b46eeaf835e86bccc3a58ba57d0eedc109cbb14177be531"}, + {file = "pydantic_core-2.10.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a5cb87bdc2e5f620693148b5f8f842d293cae46c5f15a1b1bf7ceeed324a740c"}, + {file = "pydantic_core-2.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:25bd966103890ccfa028841a8f30cebcf5875eeac8c4bde4fe221364c92f0c9a"}, + {file = "pydantic_core-2.10.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f323306d0556351735b54acbf82904fe30a27b6a7147153cbe6e19aaaa2aa429"}, + {file = "pydantic_core-2.10.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0c27f38dc4fbf07b358b2bc90edf35e82d1703e22ff2efa4af4ad5de1b3833e7"}, + {file = "pydantic_core-2.10.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f1365e032a477c1430cfe0cf2856679529a2331426f8081172c4a74186f1d595"}, + {file = "pydantic_core-2.10.1-cp39-none-win32.whl", hash = "sha256:a1c311fd06ab3b10805abb72109f01a134019739bd3286b8ae1bc2fc4e50c07a"}, + {file = "pydantic_core-2.10.1-cp39-none-win_amd64.whl", hash = "sha256:ae8a8843b11dc0b03b57b52793e391f0122e740de3df1474814c700d2622950a"}, + {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:d43002441932f9a9ea5d6f9efaa2e21458221a3a4b417a14027a1d530201ef1b"}, + {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:fcb83175cc4936a5425dde3356f079ae03c0802bbdf8ff82c035f8a54b333521"}, + {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:962ed72424bf1f72334e2f1e61b68f16c0e596f024ca7ac5daf229f7c26e4208"}, + {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2cf5bb4dd67f20f3bbc1209ef572a259027c49e5ff694fa56bed62959b41e1f9"}, + {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e544246b859f17373bed915182ab841b80849ed9cf23f1f07b73b7c58baee5fb"}, + {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c0877239307b7e69d025b73774e88e86ce82f6ba6adf98f41069d5b0b78bd1bf"}, + {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:53df009d1e1ba40f696f8995683e067e3967101d4bb4ea6f667931b7d4a01357"}, + {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a1254357f7e4c82e77c348dabf2d55f1d14d19d91ff025004775e70a6ef40ada"}, + {file = "pydantic_core-2.10.1-pp37-pypy37_pp73-macosx_10_7_x86_64.whl", hash = "sha256:524ff0ca3baea164d6d93a32c58ac79eca9f6cf713586fdc0adb66a8cdeab96a"}, + {file = "pydantic_core-2.10.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f0ac9fb8608dbc6eaf17956bf623c9119b4db7dbb511650910a82e261e6600f"}, + {file = "pydantic_core-2.10.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:320f14bd4542a04ab23747ff2c8a778bde727158b606e2661349557f0770711e"}, + {file = "pydantic_core-2.10.1-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:63974d168b6233b4ed6a0046296803cb13c56637a7b8106564ab575926572a55"}, + {file = "pydantic_core-2.10.1-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:417243bf599ba1f1fef2bb8c543ceb918676954734e2dcb82bf162ae9d7bd514"}, + {file = "pydantic_core-2.10.1-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:dda81e5ec82485155a19d9624cfcca9be88a405e2857354e5b089c2a982144b2"}, + {file = "pydantic_core-2.10.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:14cfbb00959259e15d684505263d5a21732b31248a5dd4941f73a3be233865b9"}, + {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:631cb7415225954fdcc2a024119101946793e5923f6c4d73a5914d27eb3d3a05"}, + {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:bec7dd208a4182e99c5b6c501ce0b1f49de2802448d4056091f8e630b28e9a52"}, + {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:149b8a07712f45b332faee1a2258d8ef1fb4a36f88c0c17cb687f205c5dc6e7d"}, + {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d966c47f9dd73c2d32a809d2be529112d509321c5310ebf54076812e6ecd884"}, + {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7eb037106f5c6b3b0b864ad226b0b7ab58157124161d48e4b30c4a43fef8bc4b"}, + {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:154ea7c52e32dce13065dbb20a4a6f0cc012b4f667ac90d648d36b12007fa9f7"}, + {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:e562617a45b5a9da5be4abe72b971d4f00bf8555eb29bb91ec2ef2be348cd132"}, + {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:f23b55eb5464468f9e0e9a9935ce3ed2a870608d5f534025cd5536bca25b1402"}, + {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:e9121b4009339b0f751955baf4543a0bfd6bc3f8188f8056b1a25a2d45099934"}, + {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:0523aeb76e03f753b58be33b26540880bac5aa54422e4462404c432230543f33"}, + {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e0e2959ef5d5b8dc9ef21e1a305a21a36e254e6a34432d00c72a92fdc5ecda5"}, + {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da01bec0a26befab4898ed83b362993c844b9a607a86add78604186297eb047e"}, + {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f2e9072d71c1f6cfc79a36d4484c82823c560e6f5599c43c1ca6b5cdbd54f881"}, + {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:f36a3489d9e28fe4b67be9992a23029c3cec0babc3bd9afb39f49844a8c721c5"}, + {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f64f82cc3443149292b32387086d02a6c7fb39b8781563e0ca7b8d7d9cf72bd7"}, + {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:b4a6db486ac8e99ae696e09efc8b2b9fea67b63c8f88ba7a1a16c24a057a0776"}, + {file = "pydantic_core-2.10.1.tar.gz", hash = "sha256:0f8682dbdd2f67f8e1edddcbffcc29f60a6182b4901c367fc8c1c40d30bb0a82"}, +] + +[package.dependencies] +typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" + +[[package]] +name = "pytest-recorder" +version = "0.2.3" +description = "Pytest plugin, meant to facilitate unit tests writing for tools consumming Web APIs." +optional = false +python-versions = ">=3.8,<4.0" +files = [ + {file = "pytest_recorder-0.2.3-py3-none-any.whl", hash = "sha256:a2aa1f58a72e78585151840503c88b2a4b7aa85651ce3a08232c86e2680d0c90"}, + {file = "pytest_recorder-0.2.3.tar.gz", hash = "sha256:ecba7069c87d6e30229db82a091c61e6abb18662c69eeb78a3866ea8b37f04b7"}, +] + +[package.dependencies] +time-machine = ">=2.9.0,<3.0.0" +vcrpy = ">=4.2.1,<5.0.0" + +[[package]] +name = "python-dateutil" +version = "2.8.2" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +files = [ + {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, + {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, +] + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "python-dotenv" +version = "1.0.0" +description = "Read key-value pairs from a .env file and set them as environment variables" +optional = false +python-versions = ">=3.8" +files = [ + {file = "python-dotenv-1.0.0.tar.gz", hash = "sha256:a8df96034aae6d2d50a4ebe8216326c61c3eb64836776504fcca410e5937a3ba"}, + {file = "python_dotenv-1.0.0-py3-none-any.whl", hash = "sha256:f5971a9226b701070a4bf2c38c89e5a3f0d64de8debda981d1db98583009122a"}, +] + +[package.extras] +cli = ["click (>=5.0)"] + +[[package]] +name = "python-jose" +version = "3.3.0" +description = "JOSE implementation in Python" +optional = false +python-versions = "*" +files = [ + {file = "python-jose-3.3.0.tar.gz", hash = "sha256:55779b5e6ad599c6336191246e95eb2293a9ddebd555f796a65f838f07e5d78a"}, + {file = "python_jose-3.3.0-py2.py3-none-any.whl", hash = "sha256:9b1376b023f8b298536eedd47ae1089bcdb848f1535ab30555cd92002d78923a"}, +] + +[package.dependencies] +ecdsa = "!=0.15" +pyasn1 = "*" +rsa = "*" + +[package.extras] +cryptography = ["cryptography (>=3.4.0)"] +pycrypto = ["pyasn1", "pycrypto (>=2.6.0,<2.7.0)"] +pycryptodome = ["pyasn1", "pycryptodome (>=3.3.1,<4.0.0)"] + +[[package]] +name = "python-multipart" +version = "0.0.6" +description = "A streaming multipart parser for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "python_multipart-0.0.6-py3-none-any.whl", hash = "sha256:ee698bab5ef148b0a760751c261902cd096e57e10558e11aca17646b74ee1c18"}, + {file = "python_multipart-0.0.6.tar.gz", hash = "sha256:e9925a80bb668529f1b67c7fdb0a5dacdd7cbfc6fb0bff3ea443fe22bdd62132"}, +] + +[package.extras] +dev = ["atomicwrites (==1.2.1)", "attrs (==19.2.0)", "coverage (==6.5.0)", "hatch", "invoke (==1.7.3)", "more-itertools (==4.3.0)", "pbr (==4.3.0)", "pluggy (==1.0.0)", "py (==1.11.0)", "pytest (==7.2.0)", "pytest-cov (==4.0.0)", "pytest-timeout (==2.1.0)", "pyyaml (==5.1)"] + +[[package]] +name = "pytz" +version = "2023.3.post1" +description = "World timezone definitions, modern and historical" +optional = false +python-versions = "*" +files = [ + {file = "pytz-2023.3.post1-py2.py3-none-any.whl", hash = "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7"}, + {file = "pytz-2023.3.post1.tar.gz", hash = "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b"}, +] + +[[package]] +name = "pyyaml" +version = "6.0.1" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, +] + +[[package]] +name = "requests" +version = "2.31.0" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.7" +files = [ + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "rsa" +version = "4.9" +description = "Pure-Python RSA implementation" +optional = false +python-versions = ">=3.6,<4" +files = [ + {file = "rsa-4.9-py3-none-any.whl", hash = "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7"}, + {file = "rsa-4.9.tar.gz", hash = "sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21"}, +] + +[package.dependencies] +pyasn1 = ">=0.1.3" + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] + +[[package]] +name = "sniffio" +version = "1.3.0" +description = "Sniff out which async library your code is running under" +optional = false +python-versions = ">=3.7" +files = [ + {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, + {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, +] + +[[package]] +name = "starlette" +version = "0.27.0" +description = "The little ASGI library that shines." +optional = false +python-versions = ">=3.7" +files = [ + {file = "starlette-0.27.0-py3-none-any.whl", hash = "sha256:918416370e846586541235ccd38a474c08b80443ed31c578a418e2209b3eef91"}, + {file = "starlette-0.27.0.tar.gz", hash = "sha256:6a6b0d042acb8d469a01eba54e9cda6cbd24ac602c4cd016723117d6a7e73b75"}, +] + +[package.dependencies] +anyio = ">=3.4.0,<5" +typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\""} + +[package.extras] +full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart", "pyyaml"] + +[[package]] +name = "time-machine" +version = "2.13.0" +description = "Travel through time in your tests." +optional = false +python-versions = ">=3.8" +files = [ + {file = "time_machine-2.13.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:685d98593f13649ad5e7ce3e58efe689feca1badcf618ba397d3ab877ee59326"}, + {file = "time_machine-2.13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ccbce292380ebf63fb9a52e6b03d91677f6a003e0c11f77473efe3913a75f289"}, + {file = "time_machine-2.13.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:679cbf9b15bfde1654cf48124128d3fbe52f821fa158a98fcee5fe7e05db1917"}, + {file = "time_machine-2.13.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a26bdf3462d5f12a4c1009fdbe54366c6ef22c7b6f6808705b51dedaaeba8296"}, + {file = "time_machine-2.13.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dabb3b155819811b4602f7e9be936e2024e20dc99a90f103e36b45768badf9c3"}, + {file = "time_machine-2.13.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0db97f92be3efe0ac62fd3f933c91a78438cef13f283b6dfc2ee11123bfd7d8a"}, + {file = "time_machine-2.13.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:12eed2e9171c85b703d75c985dab2ecad4fe7025b7d2f842596fce1576238ece"}, + {file = "time_machine-2.13.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bdfe4a7f033e6783c3e9a7f8d8fc0b115367330762e00a03ff35fedf663994f3"}, + {file = "time_machine-2.13.0-cp310-cp310-win32.whl", hash = "sha256:3a7a0a49ce50d9c306c4343a7d6a3baa11092d4399a4af4355c615ccc321a9d3"}, + {file = "time_machine-2.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:1812e48c6c58707db9988445a219a908a710ea065b2cc808d9a50636291f27d4"}, + {file = "time_machine-2.13.0-cp310-cp310-win_arm64.whl", hash = "sha256:5aee23cd046abf9caeddc982113e81ba9097a01f3972e9560f5ed64e3495f66d"}, + {file = "time_machine-2.13.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e9a9d150e098be3daee5c9f10859ab1bd14a61abebaed86e6d71f7f18c05b9d7"}, + {file = "time_machine-2.13.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2bd4169b808745d219a69094b3cb86006938d45e7293249694e6b7366225a186"}, + {file = "time_machine-2.13.0-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:8d526cdcaca06a496877cfe61cc6608df2c3a6fce210e076761964ebac7f77cc"}, + {file = "time_machine-2.13.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cfef4ebfb4f055ce3ebc7b6c1c4d0dbfcffdca0e783ad8c6986c992915a57ed3"}, + {file = "time_machine-2.13.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9f128db8997c3339f04f7f3946dd9bb2a83d15e0a40d35529774da1e9e501511"}, + {file = "time_machine-2.13.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21bef5854d49b62e2c33848b5c3e8acf22a3b46af803ef6ff19529949cb7cf9f"}, + {file = "time_machine-2.13.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:32b71e50b07f86916ac04bd1eefc2bd2c93706b81393748b08394509ee6585dc"}, + {file = "time_machine-2.13.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:1ac8ff145c63cd0dcfd9590fe694b5269aacbc130298dc7209b095d101f8cdde"}, + {file = "time_machine-2.13.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:19a3b10161c91ca8e0fd79348665cca711fd2eac6ce336ff9e6b447783817f93"}, + {file = "time_machine-2.13.0-cp311-cp311-win32.whl", hash = "sha256:5f87787d562e42bf1006a87eb689814105b98c4d5545874a281280d0f8b9a2d9"}, + {file = "time_machine-2.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:62fd14a80b8b71726e07018628daaee0a2e00937625083f96f69ed6b8e3304c0"}, + {file = "time_machine-2.13.0-cp311-cp311-win_arm64.whl", hash = "sha256:e9935aff447f5400a2665ab10ed2da972591713080e1befe1bb8954e7c0c7806"}, + {file = "time_machine-2.13.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:34dcdbbd25c1e124e17fe58050452960fd16a11f9d3476aaa87260e28ecca0fd"}, + {file = "time_machine-2.13.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e58d82fe0e59d6e096ada3281d647a2e7420f7da5453b433b43880e1c2e8e0c5"}, + {file = "time_machine-2.13.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71acbc1febbe87532c7355eca3308c073d6e502ee4ce272b5028967847c8e063"}, + {file = "time_machine-2.13.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dec0ec2135a4e2a59623e40c31d6e8a8ae73305ade2634380e4263d815855750"}, + {file = "time_machine-2.13.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e3a2611f8788608ebbcb060a5e36b45911bc3b8adc421b1dc29d2c81786ce4d"}, + {file = "time_machine-2.13.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:42ef5349135626ad6cd889a0a81400137e5c6928502b0817ea9e90bb10702000"}, + {file = "time_machine-2.13.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:6c16d90a597a8c2d3ce22d6be2eb3e3f14786974c11b01886e51b3cf0d5edaf7"}, + {file = "time_machine-2.13.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4f2ae8d0e359b216b695f1e7e7256f208c390db0480601a439c5dd1e1e4e16ce"}, + {file = "time_machine-2.13.0-cp312-cp312-win32.whl", hash = "sha256:f5fa9610f7e73fff42806a2ed8b06d862aa59ce4d178a52181771d6939c3e237"}, + {file = "time_machine-2.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:02b33a8c19768c94f7ffd6aa6f9f64818e88afce23250016b28583929d20fb12"}, + {file = "time_machine-2.13.0-cp312-cp312-win_arm64.whl", hash = "sha256:0cc116056a8a2a917a4eec85661dfadd411e0d8faae604ef6a0e19fe5cd57ef1"}, + {file = "time_machine-2.13.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:de01f33aa53da37530ad97dcd17e9affa25a8df4ab822506bb08101bab0c2673"}, + {file = "time_machine-2.13.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:67fa45cd813821e4f5bec0ac0820869e8e37430b15509d3f5fad74ba34b53852"}, + {file = "time_machine-2.13.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4a2d3db2c3b8e519d5ef436cd405abd33542a7b7761fb05ef5a5f782a8ce0b1"}, + {file = "time_machine-2.13.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7558622a62243be866a7e7c41da48eacd82c874b015ecf67d18ebf65ca3f7436"}, + {file = "time_machine-2.13.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab04cf4e56e1ee65bee2adaa26a04695e92eb1ed1ccc65fbdafd0d114399595a"}, + {file = "time_machine-2.13.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b0c8f24ae611a58782773af34dd356f1f26756272c04be2be7ea73b47e5da37d"}, + {file = "time_machine-2.13.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4ca20f85a973a4ca8b00cf466cd72c27ccc72372549b138fd48d7e70e5a190ab"}, + {file = "time_machine-2.13.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:9fad549521c4c13bdb1e889b2855a86ec835780d534ffd8f091c2647863243be"}, + {file = "time_machine-2.13.0-cp38-cp38-win32.whl", hash = "sha256:20205422fcf2caf9a7488394587df86e5b54fdb315c1152094fbb63eec4e9304"}, + {file = "time_machine-2.13.0-cp38-cp38-win_amd64.whl", hash = "sha256:2dc76ee55a7d915a55960a726ceaca7b9097f67e4b4e681ef89871bcf98f00be"}, + {file = "time_machine-2.13.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7693704c0f2f6b9beed912ff609781edf5fcf5d63aff30c92be4093e09d94b8e"}, + {file = "time_machine-2.13.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:918f8389de29b4f41317d121f1150176fae2cdb5fa41f68b2aee0b9dc88df5c3"}, + {file = "time_machine-2.13.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fe3fda5fa73fec74278912e438fce1612a79c36fd0cc323ea3dc2d5ce629f31"}, + {file = "time_machine-2.13.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5c6245db573863b335d9ca64b3230f623caf0988594ae554c0c794e7f80e3e66"}, + {file = "time_machine-2.13.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e433827eccd6700a34a2ab28fd9361ff6e4d4923f718d2d1dac6d1dcd9d54da6"}, + {file = "time_machine-2.13.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:924377d398b1c48e519ad86a71903f9f36117f69e68242c99fb762a2465f5ad2"}, + {file = "time_machine-2.13.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:66fb3877014dca0b9286b0f06fa74062357bd23f2d9d102d10e31e0f8fa9b324"}, + {file = "time_machine-2.13.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0c9829b2edfcf6b5d72a6ff330d4380f36a937088314c675531b43d3423dd8af"}, + {file = "time_machine-2.13.0-cp39-cp39-win32.whl", hash = "sha256:1a22be4df364f49a507af4ac9ea38108a0105f39da3f9c60dce62d6c6ea4ccdc"}, + {file = "time_machine-2.13.0-cp39-cp39-win_amd64.whl", hash = "sha256:88601de1da06c7cab3d5ed3d5c3801ef683366e769e829e96383fdab6ae2fe42"}, + {file = "time_machine-2.13.0-cp39-cp39-win_arm64.whl", hash = "sha256:3c87856105dcb25b5bbff031d99f06ef4d1c8380d096222e1bc63b496b5258e6"}, + {file = "time_machine-2.13.0.tar.gz", hash = "sha256:c23b2408e3adcedec84ea1131e238f0124a5bc0e491f60d1137ad7239b37c01a"}, +] + +[package.dependencies] +python-dateutil = "*" + +[[package]] +name = "typing-extensions" +version = "4.8.0" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = false +python-versions = ">=3.8" +files = [ + {file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"}, + {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"}, +] + +[[package]] +name = "tzdata" +version = "2023.3" +description = "Provider of IANA time zone data" +optional = false +python-versions = ">=2" +files = [ + {file = "tzdata-2023.3-py2.py3-none-any.whl", hash = "sha256:7e65763eef3120314099b6939b5546db7adce1e7d6f2e179e3df563c70511eda"}, + {file = "tzdata-2023.3.tar.gz", hash = "sha256:11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a"}, +] + +[[package]] +name = "urllib3" +version = "1.26.18" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +files = [ + {file = "urllib3-1.26.18-py2.py3-none-any.whl", hash = "sha256:34b97092d7e0a3a8cf7cd10e386f401b3737364026c45e622aa02903dffe0f07"}, + {file = "urllib3-1.26.18.tar.gz", hash = "sha256:f8ecc1bba5667413457c529ab955bf8c67b45db799d159066261719e328580a0"}, +] + +[package.extras] +brotli = ["brotli (==1.0.9)", "brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] +secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] + +[[package]] +name = "uuid7" +version = "0.1.0" +description = "UUID version 7, generating time-sorted UUIDs with 200ns time resolution and 48 bits of randomness" +optional = false +python-versions = ">=3.7" +files = [ + {file = "uuid7-0.1.0-py2.py3-none-any.whl", hash = "sha256:5e259bb63c8cb4aded5927ff41b444a80d0c7124e8a0ced7cf44efa1f5cccf61"}, + {file = "uuid7-0.1.0.tar.gz", hash = "sha256:8c57aa32ee7456d3cc68c95c4530bc571646defac01895cfc73545449894a63c"}, +] + +[[package]] +name = "uvicorn" +version = "0.23.2" +description = "The lightning-fast ASGI server." +optional = false +python-versions = ">=3.8" +files = [ + {file = "uvicorn-0.23.2-py3-none-any.whl", hash = "sha256:1f9be6558f01239d4fdf22ef8126c39cb1ad0addf76c40e760549d2c2f43ab53"}, + {file = "uvicorn-0.23.2.tar.gz", hash = "sha256:4d3cc12d7727ba72b64d12d3cc7743124074c0a69f7b201512fc50c3e3f1569a"}, +] + +[package.dependencies] +click = ">=7.0" +h11 = ">=0.8" +typing-extensions = {version = ">=4.0", markers = "python_version < \"3.11\""} + +[package.extras] +standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"] + +[[package]] +name = "vcrpy" +version = "4.4.0" +description = "Automatically mock your HTTP interactions to simplify and speed up testing" +optional = false +python-versions = ">=3.7" +files = [ + {file = "vcrpy-4.4.0-py2.py3-none-any.whl", hash = "sha256:560c9d0d8436ced29223ceefb513c3ac3f2e2a60d51a9830f236a1e63167905a"}, + {file = "vcrpy-4.4.0.tar.gz", hash = "sha256:d1109ae93dbc2e7fcbc485849a7600d5dea510d3bef070eec4419c9a72ca2639"}, +] + +[package.dependencies] +PyYAML = "*" +six = ">=1.5" +urllib3 = {version = "<2", markers = "python_version < \"3.10\""} +wrapt = "*" +yarl = "*" + +[[package]] +name = "webencodings" +version = "0.5.1" +description = "Character encoding aliases for legacy web content" +optional = false +python-versions = "*" +files = [ + {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, + {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, +] + +[[package]] +name = "websockets" +version = "10.4" +description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "websockets-10.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d58804e996d7d2307173d56c297cf7bc132c52df27a3efaac5e8d43e36c21c48"}, + {file = "websockets-10.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc0b82d728fe21a0d03e65f81980abbbcb13b5387f733a1a870672c5be26edab"}, + {file = "websockets-10.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ba089c499e1f4155d2a3c2a05d2878a3428cf321c848f2b5a45ce55f0d7d310c"}, + {file = "websockets-10.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33d69ca7612f0ddff3316b0c7b33ca180d464ecac2d115805c044bf0a3b0d032"}, + {file = "websockets-10.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62e627f6b6d4aed919a2052efc408da7a545c606268d5ab5bfab4432734b82b4"}, + {file = "websockets-10.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38ea7b82bfcae927eeffc55d2ffa31665dc7fec7b8dc654506b8e5a518eb4d50"}, + {file = "websockets-10.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e0cb5cc6ece6ffa75baccfd5c02cffe776f3f5c8bf486811f9d3ea3453676ce8"}, + {file = "websockets-10.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ae5e95cfb53ab1da62185e23b3130e11d64431179debac6dc3c6acf08760e9b1"}, + {file = "websockets-10.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7c584f366f46ba667cfa66020344886cf47088e79c9b9d39c84ce9ea98aaa331"}, + {file = "websockets-10.4-cp310-cp310-win32.whl", hash = "sha256:b029fb2032ae4724d8ae8d4f6b363f2cc39e4c7b12454df8df7f0f563ed3e61a"}, + {file = "websockets-10.4-cp310-cp310-win_amd64.whl", hash = "sha256:8dc96f64ae43dde92530775e9cb169979f414dcf5cff670455d81a6823b42089"}, + {file = "websockets-10.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:47a2964021f2110116cc1125b3e6d87ab5ad16dea161949e7244ec583b905bb4"}, + {file = "websockets-10.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e789376b52c295c4946403bd0efecf27ab98f05319df4583d3c48e43c7342c2f"}, + {file = "websockets-10.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7d3f0b61c45c3fa9a349cf484962c559a8a1d80dae6977276df8fd1fa5e3cb8c"}, + {file = "websockets-10.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f55b5905705725af31ccef50e55391621532cd64fbf0bc6f4bac935f0fccec46"}, + {file = "websockets-10.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00c870522cdb69cd625b93f002961ffb0c095394f06ba8c48f17eef7c1541f96"}, + {file = "websockets-10.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f38706e0b15d3c20ef6259fd4bc1700cd133b06c3c1bb108ffe3f8947be15fa"}, + {file = "websockets-10.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f2c38d588887a609191d30e902df2a32711f708abfd85d318ca9b367258cfd0c"}, + {file = "websockets-10.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:fe10ddc59b304cb19a1bdf5bd0a7719cbbc9fbdd57ac80ed436b709fcf889106"}, + {file = "websockets-10.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:90fcf8929836d4a0e964d799a58823547df5a5e9afa83081761630553be731f9"}, + {file = "websockets-10.4-cp311-cp311-win32.whl", hash = "sha256:b9968694c5f467bf67ef97ae7ad4d56d14be2751000c1207d31bf3bb8860bae8"}, + {file = "websockets-10.4-cp311-cp311-win_amd64.whl", hash = "sha256:a7a240d7a74bf8d5cb3bfe6be7f21697a28ec4b1a437607bae08ac7acf5b4882"}, + {file = "websockets-10.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:74de2b894b47f1d21cbd0b37a5e2b2392ad95d17ae983e64727e18eb281fe7cb"}, + {file = "websockets-10.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3a686ecb4aa0d64ae60c9c9f1a7d5d46cab9bfb5d91a2d303d00e2cd4c4c5cc"}, + {file = "websockets-10.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b0d15c968ea7a65211e084f523151dbf8ae44634de03c801b8bd070b74e85033"}, + {file = "websockets-10.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00213676a2e46b6ebf6045bc11d0f529d9120baa6f58d122b4021ad92adabd41"}, + {file = "websockets-10.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:e23173580d740bf8822fd0379e4bf30aa1d5a92a4f252d34e893070c081050df"}, + {file = "websockets-10.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:dd500e0a5e11969cdd3320935ca2ff1e936f2358f9c2e61f100a1660933320ea"}, + {file = "websockets-10.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4239b6027e3d66a89446908ff3027d2737afc1a375f8fd3eea630a4842ec9a0c"}, + {file = "websockets-10.4-cp37-cp37m-win32.whl", hash = "sha256:8a5cc00546e0a701da4639aa0bbcb0ae2bb678c87f46da01ac2d789e1f2d2038"}, + {file = "websockets-10.4-cp37-cp37m-win_amd64.whl", hash = "sha256:a9f9a735deaf9a0cadc2d8c50d1a5bcdbae8b6e539c6e08237bc4082d7c13f28"}, + {file = "websockets-10.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5c1289596042fad2cdceb05e1ebf7aadf9995c928e0da2b7a4e99494953b1b94"}, + {file = "websockets-10.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0cff816f51fb33c26d6e2b16b5c7d48eaa31dae5488ace6aae468b361f422b63"}, + {file = "websockets-10.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:dd9becd5fe29773d140d68d607d66a38f60e31b86df75332703757ee645b6faf"}, + {file = "websockets-10.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45ec8e75b7dbc9539cbfafa570742fe4f676eb8b0d3694b67dabe2f2ceed8aa6"}, + {file = "websockets-10.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f72e5cd0f18f262f5da20efa9e241699e0cf3a766317a17392550c9ad7b37d8"}, + {file = "websockets-10.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:185929b4808b36a79c65b7865783b87b6841e852ef5407a2fb0c03381092fa3b"}, + {file = "websockets-10.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7d27a7e34c313b3a7f91adcd05134315002aaf8540d7b4f90336beafaea6217c"}, + {file = "websockets-10.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:884be66c76a444c59f801ac13f40c76f176f1bfa815ef5b8ed44321e74f1600b"}, + {file = "websockets-10.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:931c039af54fc195fe6ad536fde4b0de04da9d5916e78e55405436348cfb0e56"}, + {file = "websockets-10.4-cp38-cp38-win32.whl", hash = "sha256:db3c336f9eda2532ec0fd8ea49fef7a8df8f6c804cdf4f39e5c5c0d4a4ad9a7a"}, + {file = "websockets-10.4-cp38-cp38-win_amd64.whl", hash = "sha256:48c08473563323f9c9debac781ecf66f94ad5a3680a38fe84dee5388cf5acaf6"}, + {file = "websockets-10.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:40e826de3085721dabc7cf9bfd41682dadc02286d8cf149b3ad05bff89311e4f"}, + {file = "websockets-10.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:56029457f219ade1f2fc12a6504ea61e14ee227a815531f9738e41203a429112"}, + {file = "websockets-10.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f5fc088b7a32f244c519a048c170f14cf2251b849ef0e20cbbb0fdf0fdaf556f"}, + {file = "websockets-10.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2fc8709c00704194213d45e455adc106ff9e87658297f72d544220e32029cd3d"}, + {file = "websockets-10.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0154f7691e4fe6c2b2bc275b5701e8b158dae92a1ab229e2b940efe11905dff4"}, + {file = "websockets-10.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c6d2264f485f0b53adf22697ac11e261ce84805c232ed5dbe6b1bcb84b00ff0"}, + {file = "websockets-10.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9bc42e8402dc5e9905fb8b9649f57efcb2056693b7e88faa8fb029256ba9c68c"}, + {file = "websockets-10.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:edc344de4dac1d89300a053ac973299e82d3db56330f3494905643bb68801269"}, + {file = "websockets-10.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:84bc2a7d075f32f6ed98652db3a680a17a4edb21ca7f80fe42e38753a58ee02b"}, + {file = "websockets-10.4-cp39-cp39-win32.whl", hash = "sha256:c94ae4faf2d09f7c81847c63843f84fe47bf6253c9d60b20f25edfd30fb12588"}, + {file = "websockets-10.4-cp39-cp39-win_amd64.whl", hash = "sha256:bbccd847aa0c3a69b5f691a84d2341a4f8a629c6922558f2a70611305f902d74"}, + {file = "websockets-10.4-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:82ff5e1cae4e855147fd57a2863376ed7454134c2bf49ec604dfe71e446e2193"}, + {file = "websockets-10.4-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d210abe51b5da0ffdbf7b43eed0cfdff8a55a1ab17abbec4301c9ff077dd0342"}, + {file = "websockets-10.4-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:942de28af58f352a6f588bc72490ae0f4ccd6dfc2bd3de5945b882a078e4e179"}, + {file = "websockets-10.4-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9b27d6c1c6cd53dc93614967e9ce00ae7f864a2d9f99fe5ed86706e1ecbf485"}, + {file = "websockets-10.4-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:3d3cac3e32b2c8414f4f87c1b2ab686fa6284a980ba283617404377cd448f631"}, + {file = "websockets-10.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:da39dd03d130162deb63da51f6e66ed73032ae62e74aaccc4236e30edccddbb0"}, + {file = "websockets-10.4-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:389f8dbb5c489e305fb113ca1b6bdcdaa130923f77485db5b189de343a179393"}, + {file = "websockets-10.4-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09a1814bb15eff7069e51fed0826df0bc0702652b5cb8f87697d469d79c23576"}, + {file = "websockets-10.4-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff64a1d38d156d429404aaa84b27305e957fd10c30e5880d1765c9480bea490f"}, + {file = "websockets-10.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:b343f521b047493dc4022dd338fc6db9d9282658862756b4f6fd0e996c1380e1"}, + {file = "websockets-10.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:932af322458da7e4e35df32f050389e13d3d96b09d274b22a7aa1808f292fee4"}, + {file = "websockets-10.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6a4162139374a49eb18ef5b2f4da1dd95c994588f5033d64e0bbfda4b6b6fcf"}, + {file = "websockets-10.4-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c57e4c1349fbe0e446c9fa7b19ed2f8a4417233b6984277cce392819123142d3"}, + {file = "websockets-10.4-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b627c266f295de9dea86bd1112ed3d5fafb69a348af30a2422e16590a8ecba13"}, + {file = "websockets-10.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:05a7233089f8bd355e8cbe127c2e8ca0b4ea55467861906b80d2ebc7db4d6b72"}, + {file = "websockets-10.4.tar.gz", hash = "sha256:eef610b23933c54d5d921c92578ae5f89813438fded840c2e9809d378dc765d3"}, +] + +[[package]] +name = "wrapt" +version = "1.15.0" +description = "Module for decorators, wrappers and monkey patching." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +files = [ + {file = "wrapt-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a"}, + {file = "wrapt-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923"}, + {file = "wrapt-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee"}, + {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727"}, + {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7"}, + {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0"}, + {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec"}, + {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90"}, + {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975"}, + {file = "wrapt-1.15.0-cp310-cp310-win32.whl", hash = "sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1"}, + {file = "wrapt-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e"}, + {file = "wrapt-1.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7"}, + {file = "wrapt-1.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72"}, + {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb"}, + {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e"}, + {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c"}, + {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3"}, + {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92"}, + {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98"}, + {file = "wrapt-1.15.0-cp311-cp311-win32.whl", hash = "sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416"}, + {file = "wrapt-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248"}, + {file = "wrapt-1.15.0-cp35-cp35m-win32.whl", hash = "sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559"}, + {file = "wrapt-1.15.0-cp35-cp35m-win_amd64.whl", hash = "sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639"}, + {file = "wrapt-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba"}, + {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752"}, + {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364"}, + {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475"}, + {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8"}, + {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418"}, + {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2"}, + {file = "wrapt-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1"}, + {file = "wrapt-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420"}, + {file = "wrapt-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317"}, + {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e"}, + {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e"}, + {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0"}, + {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019"}, + {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034"}, + {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653"}, + {file = "wrapt-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0"}, + {file = "wrapt-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e"}, + {file = "wrapt-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145"}, + {file = "wrapt-1.15.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f"}, + {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd"}, + {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b"}, + {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f"}, + {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6"}, + {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094"}, + {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7"}, + {file = "wrapt-1.15.0-cp38-cp38-win32.whl", hash = "sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b"}, + {file = "wrapt-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1"}, + {file = "wrapt-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86"}, + {file = "wrapt-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c"}, + {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d"}, + {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc"}, + {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29"}, + {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a"}, + {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8"}, + {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9"}, + {file = "wrapt-1.15.0-cp39-cp39-win32.whl", hash = "sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff"}, + {file = "wrapt-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6"}, + {file = "wrapt-1.15.0-py3-none-any.whl", hash = "sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640"}, + {file = "wrapt-1.15.0.tar.gz", hash = "sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a"}, +] + +[[package]] +name = "yarl" +version = "1.9.2" +description = "Yet another URL library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "yarl-1.9.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8c2ad583743d16ddbdf6bb14b5cd76bf43b0d0006e918809d5d4ddf7bde8dd82"}, + {file = "yarl-1.9.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:82aa6264b36c50acfb2424ad5ca537a2060ab6de158a5bd2a72a032cc75b9eb8"}, + {file = "yarl-1.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c0c77533b5ed4bcc38e943178ccae29b9bcf48ffd1063f5821192f23a1bd27b9"}, + {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee4afac41415d52d53a9833ebae7e32b344be72835bbb589018c9e938045a560"}, + {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9bf345c3a4f5ba7f766430f97f9cc1320786f19584acc7086491f45524a551ac"}, + {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a96c19c52ff442a808c105901d0bdfd2e28575b3d5f82e2f5fd67e20dc5f4ea"}, + {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:891c0e3ec5ec881541f6c5113d8df0315ce5440e244a716b95f2525b7b9f3608"}, + {file = "yarl-1.9.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c3a53ba34a636a256d767c086ceb111358876e1fb6b50dfc4d3f4951d40133d5"}, + {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:566185e8ebc0898b11f8026447eacd02e46226716229cea8db37496c8cdd26e0"}, + {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:2b0738fb871812722a0ac2154be1f049c6223b9f6f22eec352996b69775b36d4"}, + {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:32f1d071b3f362c80f1a7d322bfd7b2d11e33d2adf395cc1dd4df36c9c243095"}, + {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:e9fdc7ac0d42bc3ea78818557fab03af6181e076a2944f43c38684b4b6bed8e3"}, + {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:56ff08ab5df8429901ebdc5d15941b59f6253393cb5da07b4170beefcf1b2528"}, + {file = "yarl-1.9.2-cp310-cp310-win32.whl", hash = "sha256:8ea48e0a2f931064469bdabca50c2f578b565fc446f302a79ba6cc0ee7f384d3"}, + {file = "yarl-1.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:50f33040f3836e912ed16d212f6cc1efb3231a8a60526a407aeb66c1c1956dde"}, + {file = "yarl-1.9.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:646d663eb2232d7909e6601f1a9107e66f9791f290a1b3dc7057818fe44fc2b6"}, + {file = "yarl-1.9.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aff634b15beff8902d1f918012fc2a42e0dbae6f469fce134c8a0dc51ca423bb"}, + {file = "yarl-1.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a83503934c6273806aed765035716216cc9ab4e0364f7f066227e1aaea90b8d0"}, + {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b25322201585c69abc7b0e89e72790469f7dad90d26754717f3310bfe30331c2"}, + {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22a94666751778629f1ec4280b08eb11815783c63f52092a5953faf73be24191"}, + {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ec53a0ea2a80c5cd1ab397925f94bff59222aa3cf9c6da938ce05c9ec20428d"}, + {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:159d81f22d7a43e6eabc36d7194cb53f2f15f498dbbfa8edc8a3239350f59fe7"}, + {file = "yarl-1.9.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:832b7e711027c114d79dffb92576acd1bd2decc467dec60e1cac96912602d0e6"}, + {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:95d2ecefbcf4e744ea952d073c6922e72ee650ffc79028eb1e320e732898d7e8"}, + {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d4e2c6d555e77b37288eaf45b8f60f0737c9efa3452c6c44626a5455aeb250b9"}, + {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:783185c75c12a017cc345015ea359cc801c3b29a2966c2655cd12b233bf5a2be"}, + {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:b8cc1863402472f16c600e3e93d542b7e7542a540f95c30afd472e8e549fc3f7"}, + {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:822b30a0f22e588b32d3120f6d41e4ed021806418b4c9f0bc3048b8c8cb3f92a"}, + {file = "yarl-1.9.2-cp311-cp311-win32.whl", hash = "sha256:a60347f234c2212a9f0361955007fcf4033a75bf600a33c88a0a8e91af77c0e8"}, + {file = "yarl-1.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:be6b3fdec5c62f2a67cb3f8c6dbf56bbf3f61c0f046f84645cd1ca73532ea051"}, + {file = "yarl-1.9.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:38a3928ae37558bc1b559f67410df446d1fbfa87318b124bf5032c31e3447b74"}, + {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac9bb4c5ce3975aeac288cfcb5061ce60e0d14d92209e780c93954076c7c4367"}, + {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3da8a678ca8b96c8606bbb8bfacd99a12ad5dd288bc6f7979baddd62f71c63ef"}, + {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:13414591ff516e04fcdee8dc051c13fd3db13b673c7a4cb1350e6b2ad9639ad3"}, + {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf74d08542c3a9ea97bb8f343d4fcbd4d8f91bba5ec9d5d7f792dbe727f88938"}, + {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e7221580dc1db478464cfeef9b03b95c5852cc22894e418562997df0d074ccc"}, + {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:494053246b119b041960ddcd20fd76224149cfea8ed8777b687358727911dd33"}, + {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:52a25809fcbecfc63ac9ba0c0fb586f90837f5425edfd1ec9f3372b119585e45"}, + {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:e65610c5792870d45d7b68c677681376fcf9cc1c289f23e8e8b39c1485384185"}, + {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:1b1bba902cba32cdec51fca038fd53f8beee88b77efc373968d1ed021024cc04"}, + {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:662e6016409828ee910f5d9602a2729a8a57d74b163c89a837de3fea050c7582"}, + {file = "yarl-1.9.2-cp37-cp37m-win32.whl", hash = "sha256:f364d3480bffd3aa566e886587eaca7c8c04d74f6e8933f3f2c996b7f09bee1b"}, + {file = "yarl-1.9.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6a5883464143ab3ae9ba68daae8e7c5c95b969462bbe42e2464d60e7e2698368"}, + {file = "yarl-1.9.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5610f80cf43b6202e2c33ba3ec2ee0a2884f8f423c8f4f62906731d876ef4fac"}, + {file = "yarl-1.9.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b9a4e67ad7b646cd6f0938c7ebfd60e481b7410f574c560e455e938d2da8e0f4"}, + {file = "yarl-1.9.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:83fcc480d7549ccebe9415d96d9263e2d4226798c37ebd18c930fce43dfb9574"}, + {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fcd436ea16fee7d4207c045b1e340020e58a2597301cfbcfdbe5abd2356c2fb"}, + {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84e0b1599334b1e1478db01b756e55937d4614f8654311eb26012091be109d59"}, + {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3458a24e4ea3fd8930e934c129b676c27452e4ebda80fbe47b56d8c6c7a63a9e"}, + {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:838162460b3a08987546e881a2bfa573960bb559dfa739e7800ceeec92e64417"}, + {file = "yarl-1.9.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4e2d08f07a3d7d3e12549052eb5ad3eab1c349c53ac51c209a0e5991bbada78"}, + {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:de119f56f3c5f0e2fb4dee508531a32b069a5f2c6e827b272d1e0ff5ac040333"}, + {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:149ddea5abf329752ea5051b61bd6c1d979e13fbf122d3a1f9f0c8be6cb6f63c"}, + {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:674ca19cbee4a82c9f54e0d1eee28116e63bc6fd1e96c43031d11cbab8b2afd5"}, + {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:9b3152f2f5677b997ae6c804b73da05a39daa6a9e85a512e0e6823d81cdad7cc"}, + {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5415d5a4b080dc9612b1b63cba008db84e908b95848369aa1da3686ae27b6d2b"}, + {file = "yarl-1.9.2-cp38-cp38-win32.whl", hash = "sha256:f7a3d8146575e08c29ed1cd287068e6d02f1c7bdff8970db96683b9591b86ee7"}, + {file = "yarl-1.9.2-cp38-cp38-win_amd64.whl", hash = "sha256:63c48f6cef34e6319a74c727376e95626f84ea091f92c0250a98e53e62c77c72"}, + {file = "yarl-1.9.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:75df5ef94c3fdc393c6b19d80e6ef1ecc9ae2f4263c09cacb178d871c02a5ba9"}, + {file = "yarl-1.9.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c027a6e96ef77d401d8d5a5c8d6bc478e8042f1e448272e8d9752cb0aff8b5c8"}, + {file = "yarl-1.9.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f3b078dbe227f79be488ffcfc7a9edb3409d018e0952cf13f15fd6512847f3f7"}, + {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59723a029760079b7d991a401386390c4be5bfec1e7dd83e25a6a0881859e716"}, + {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b03917871bf859a81ccb180c9a2e6c1e04d2f6a51d953e6a5cdd70c93d4e5a2a"}, + {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c1012fa63eb6c032f3ce5d2171c267992ae0c00b9e164efe4d73db818465fac3"}, + {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a74dcbfe780e62f4b5a062714576f16c2f3493a0394e555ab141bf0d746bb955"}, + {file = "yarl-1.9.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c56986609b057b4839968ba901944af91b8e92f1725d1a2d77cbac6972b9ed1"}, + {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2c315df3293cd521033533d242d15eab26583360b58f7ee5d9565f15fee1bef4"}, + {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:b7232f8dfbd225d57340e441d8caf8652a6acd06b389ea2d3222b8bc89cbfca6"}, + {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:53338749febd28935d55b41bf0bcc79d634881195a39f6b2f767870b72514caf"}, + {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:066c163aec9d3d073dc9ffe5dd3ad05069bcb03fcaab8d221290ba99f9f69ee3"}, + {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8288d7cd28f8119b07dd49b7230d6b4562f9b61ee9a4ab02221060d21136be80"}, + {file = "yarl-1.9.2-cp39-cp39-win32.whl", hash = "sha256:b124e2a6d223b65ba8768d5706d103280914d61f5cae3afbc50fc3dfcc016623"}, + {file = "yarl-1.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:61016e7d582bc46a5378ffdd02cd0314fb8ba52f40f9cf4d9a5e7dbef88dee18"}, + {file = "yarl-1.9.2.tar.gz", hash = "sha256:04ab9d4b9f587c06d801c2abfe9317b77cdf996c65a90d5e84ecc45010823571"}, +] + +[package.dependencies] +idna = ">=2.0" +multidict = ">=4.0" + +[[package]] +name = "zipp" +version = "3.17.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +optional = false +python-versions = ">=3.8" +files = [ + {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, + {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] + +[metadata] +lock-version = "2.0" +python-versions = "^3.8" +content-hash = "4c86911e6ecbd5c2712e7a6ff3c4bfefd477491da3c4c0ae161f874ab4db1cc3" diff --git a/openbb_platform/providers/seeking_alpha/pyproject.toml b/openbb_platform/providers/seeking_alpha/pyproject.toml new file mode 100644 index 000000000000..312895005ea5 --- /dev/null +++ b/openbb_platform/providers/seeking_alpha/pyproject.toml @@ -0,0 +1,18 @@ +[tool.poetry] +name = "openbb-seeking-alpha" +version = "0.1.0a4" +description = "Seeking Alpha extension for OpenBB" +authors = ["OpenBB Team "] +readme = "README.md" +packages = [{ include = "openbb_seeking_alpha" }] + +[tool.poetry.dependencies] +python = "^3.8" +openbb-core = "^0.1.0a5" + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" + +[tool.poetry.plugins."openbb_provider_extension"] +seeking_alpha = "openbb_seeking_alpha:seeking_alpha_provider" diff --git a/openbb_platform/providers/seeking_alpha/tests/__init__.py b/openbb_platform/providers/seeking_alpha/tests/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/openbb_platform/providers/seeking_alpha/tests/record/http/test_seeking_alpha_fetchers/test_sa_upcoming_release_days_fetcher.yaml b/openbb_platform/providers/seeking_alpha/tests/record/http/test_seeking_alpha_fetchers/test_sa_upcoming_release_days_fetcher.yaml new file mode 100644 index 000000000000..4bb942efd17c --- /dev/null +++ b/openbb_platform/providers/seeking_alpha/tests/record/http/test_seeking_alpha_fetchers/test_sa_upcoming_release_days_fetcher.yaml @@ -0,0 +1,183 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate, br + Connection: + - keep-alive + method: GET + uri: https://seekingalpha.com/api/v3/earnings_calendar/tickers?filter%5Bselected_date%5D=2023-11-03&filter%5Bwith_rating%5D=false&filter%5Bcurrency%5D=USD + response: + body: + string: !!binary | + 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 + headers: + Accept-Ranges: + - bytes + Age: + - '42988' + Allow: + - GET, POST, HEAD, PUT, PATCH, DELETE, OPTIONS + Cache-Control: + - max-age=600, public + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Length: + - '6187' + Content-Security-Policy: + - 'default-src https: wss: data: blob: ''unsafe-inline'' ''unsafe-eval''; report-uri + https://seekingalpha.com/report/csp' + Content-Type: + - application/json; charset=utf-8 + Date: + - Fri, 03 Nov 2023 14:18:52 GMT + ETag: + - W/"fc4753ff069f5e57089040d10c9f03d2" + Referrer-Policy: + - strict-origin-when-cross-origin + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Vary: + - User-Agent, Accept-Encoding + X-Cache: + - HIT, HIT + X-Cache-Hits: + - 2, 1 + X-Content-Type-Options: + - nosniff + X-Download-Options: + - noopen + X-Frame-Options: + - SAMEORIGIN + X-Permitted-Cross-Domain-Policies: + - none + X-Request-Id: + - PNDptpCPtnfEwvBL + X-Runtime: + - '0.115387' + X-Served-By: + - cache-bfi-krnt7300035-BFI, cache-vie6343-VIE + X-Timer: + - S1699021132.318072,VS0,VE1 + X-XSS-Protection: + - 1; mode=block + set-cookie: + - machine_cookie=7265336707429; expires=Thu, 02 Nov 2028 14:18:52 GMT; path=/; + - machine_cookie_ts=1699021132; expires=Thu, 02 Nov 2028 14:18:52 GMT; path=/; + status: + code: 200 + message: OK +version: 1 diff --git a/openbb_platform/providers/seeking_alpha/tests/test_seeking_alpha_fetchers.py b/openbb_platform/providers/seeking_alpha/tests/test_seeking_alpha_fetchers.py new file mode 100644 index 000000000000..8905ca0a4e13 --- /dev/null +++ b/openbb_platform/providers/seeking_alpha/tests/test_seeking_alpha_fetchers.py @@ -0,0 +1,25 @@ +import pytest +from openbb_core.app.service.user_service import UserService +from openbb_seeking_alpha.models.upcoming_release_days import ( + SAUpcomingReleaseDaysFetcher, +) + +test_credentials = UserService().default_user_settings.credentials.model_dump( + mode="json" +) + + +@pytest.fixture(scope="module") +def vcr_config(): + return { + "filter_headers": [("User-Agent", None)], + } + + +@pytest.mark.record_http +def test_sa_upcoming_release_days_fetcher(credentials=test_credentials): + params = {"start_date": "2023-11-03", "limit": 5} + + fetcher = SAUpcomingReleaseDaysFetcher() + result = fetcher.test(params, credentials) + assert result is None diff --git a/openbb_platform/providers/wsj/poetry.lock b/openbb_platform/providers/wsj/poetry.lock new file mode 100644 index 000000000000..414048db59ae --- /dev/null +++ b/openbb_platform/providers/wsj/poetry.lock @@ -0,0 +1,1440 @@ +# This file is automatically @generated by Poetry 1.7.0 and should not be changed by hand. + +[[package]] +name = "annotated-types" +version = "0.6.0" +description = "Reusable constraint types to use with typing.Annotated" +optional = false +python-versions = ">=3.8" +files = [ + {file = "annotated_types-0.6.0-py3-none-any.whl", hash = "sha256:0641064de18ba7a25dee8f96403ebc39113d0cb953a01429249d5c7564666a43"}, + {file = "annotated_types-0.6.0.tar.gz", hash = "sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d"}, +] + +[package.dependencies] +typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.9\""} + +[[package]] +name = "anyio" +version = "3.7.1" +description = "High level compatibility layer for multiple asynchronous event loop implementations" +optional = false +python-versions = ">=3.7" +files = [ + {file = "anyio-3.7.1-py3-none-any.whl", hash = "sha256:91dee416e570e92c64041bd18b900d1d6fa78dff7048769ce5ac5ddad004fbb5"}, + {file = "anyio-3.7.1.tar.gz", hash = "sha256:44a3c9aba0f5defa43261a8b3efb97891f2bd7d804e0e1f56419befa1adfc780"}, +] + +[package.dependencies] +exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} +idna = ">=2.8" +sniffio = ">=1.1" + +[package.extras] +doc = ["Sphinx", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme (>=1.2.2)", "sphinxcontrib-jquery"] +test = ["anyio[trio]", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] +trio = ["trio (<0.22)"] + +[[package]] +name = "backoff" +version = "2.2.1" +description = "Function decoration for backoff and retry" +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "backoff-2.2.1-py3-none-any.whl", hash = "sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8"}, + {file = "backoff-2.2.1.tar.gz", hash = "sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba"}, +] + +[[package]] +name = "certifi" +version = "2023.7.22" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, + {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, +] + +[[package]] +name = "charset-normalizer" +version = "3.3.2" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, + {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, +] + +[[package]] +name = "click" +version = "8.1.7" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.7" +files = [ + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "ecdsa" +version = "0.18.0" +description = "ECDSA cryptographic signature library (pure python)" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "ecdsa-0.18.0-py2.py3-none-any.whl", hash = "sha256:80600258e7ed2f16b9aa1d7c295bd70194109ad5a30fdee0eaeefef1d4c559dd"}, + {file = "ecdsa-0.18.0.tar.gz", hash = "sha256:190348041559e21b22a1d65cee485282ca11a6f81d503fddb84d5017e9ed1e49"}, +] + +[package.dependencies] +six = ">=1.9.0" + +[package.extras] +gmpy = ["gmpy"] +gmpy2 = ["gmpy2"] + +[[package]] +name = "exceptiongroup" +version = "1.1.3" +description = "Backport of PEP 654 (exception groups)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.1.3-py3-none-any.whl", hash = "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"}, + {file = "exceptiongroup-1.1.3.tar.gz", hash = "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9"}, +] + +[package.extras] +test = ["pytest (>=6)"] + +[[package]] +name = "fastapi" +version = "0.103.2" +description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" +optional = false +python-versions = ">=3.7" +files = [ + {file = "fastapi-0.103.2-py3-none-any.whl", hash = "sha256:3270de872f0fe9ec809d4bd3d4d890c6d5cc7b9611d721d6438f9dacc8c4ef2e"}, + {file = "fastapi-0.103.2.tar.gz", hash = "sha256:75a11f6bfb8fc4d2bec0bd710c2d5f2829659c0e8c0afd5560fdda6ce25ec653"}, +] + +[package.dependencies] +anyio = ">=3.7.1,<4.0.0" +pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.1.0 || >2.1.0,<3.0.0" +starlette = ">=0.27.0,<0.28.0" +typing-extensions = ">=4.5.0" + +[package.extras] +all = ["email-validator (>=2.0.0)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.5)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] + +[[package]] +name = "h11" +version = "0.14.0" +description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +optional = false +python-versions = ">=3.7" +files = [ + {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, + {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, +] + +[[package]] +name = "html5lib" +version = "1.1" +description = "HTML parser based on the WHATWG HTML specification" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "html5lib-1.1-py2.py3-none-any.whl", hash = "sha256:0d78f8fde1c230e99fe37986a60526d7049ed4bf8a9fadbad5f00e22e58e041d"}, + {file = "html5lib-1.1.tar.gz", hash = "sha256:b2e5b40261e20f354d198eae92afc10d750afb487ed5e50f9c4eaf07c184146f"}, +] + +[package.dependencies] +six = ">=1.9" +webencodings = "*" + +[package.extras] +all = ["chardet (>=2.2)", "genshi", "lxml"] +chardet = ["chardet (>=2.2)"] +genshi = ["genshi"] +lxml = ["lxml"] + +[[package]] +name = "idna" +version = "3.4" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.5" +files = [ + {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, + {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, +] + +[[package]] +name = "importlib-metadata" +version = "6.8.0" +description = "Read metadata from Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "importlib_metadata-6.8.0-py3-none-any.whl", hash = "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb"}, + {file = "importlib_metadata-6.8.0.tar.gz", hash = "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743"}, +] + +[package.dependencies] +zipp = ">=0.5" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +perf = ["ipython"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] + +[[package]] +name = "monotonic" +version = "1.6" +description = "An implementation of time.monotonic() for Python 2 & < 3.3" +optional = false +python-versions = "*" +files = [ + {file = "monotonic-1.6-py2.py3-none-any.whl", hash = "sha256:68687e19a14f11f26d140dd5c86f3dba4bf5df58003000ed467e0e2a69bca96c"}, + {file = "monotonic-1.6.tar.gz", hash = "sha256:3a55207bcfed53ddd5c5bae174524062935efed17792e9de2ad0205ce9ad63f7"}, +] + +[[package]] +name = "multidict" +version = "6.0.4" +description = "multidict implementation" +optional = false +python-versions = ">=3.7" +files = [ + {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b1a97283e0c85772d613878028fec909f003993e1007eafa715b24b377cb9b8"}, + {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eeb6dcc05e911516ae3d1f207d4b0520d07f54484c49dfc294d6e7d63b734171"}, + {file = "multidict-6.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d6d635d5209b82a3492508cf5b365f3446afb65ae7ebd755e70e18f287b0adf7"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c048099e4c9e9d615545e2001d3d8a4380bd403e1a0578734e0d31703d1b0c0b"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ea20853c6dbbb53ed34cb4d080382169b6f4554d394015f1bef35e881bf83547"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16d232d4e5396c2efbbf4f6d4df89bfa905eb0d4dc5b3549d872ab898451f569"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36c63aaa167f6c6b04ef2c85704e93af16c11d20de1d133e39de6a0e84582a93"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:64bdf1086b6043bf519869678f5f2757f473dee970d7abf6da91ec00acb9cb98"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:43644e38f42e3af682690876cff722d301ac585c5b9e1eacc013b7a3f7b696a0"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7582a1d1030e15422262de9f58711774e02fa80df0d1578995c76214f6954988"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ddff9c4e225a63a5afab9dd15590432c22e8057e1a9a13d28ed128ecf047bbdc"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ee2a1ece51b9b9e7752e742cfb661d2a29e7bcdba2d27e66e28a99f1890e4fa0"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a2e4369eb3d47d2034032a26c7a80fcb21a2cb22e1173d761a162f11e562caa5"}, + {file = "multidict-6.0.4-cp310-cp310-win32.whl", hash = "sha256:574b7eae1ab267e5f8285f0fe881f17efe4b98c39a40858247720935b893bba8"}, + {file = "multidict-6.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:4dcbb0906e38440fa3e325df2359ac6cb043df8e58c965bb45f4e406ecb162cc"}, + {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0dfad7a5a1e39c53ed00d2dd0c2e36aed4650936dc18fd9a1826a5ae1cad6f03"}, + {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:64da238a09d6039e3bd39bb3aee9c21a5e34f28bfa5aa22518581f910ff94af3"}, + {file = "multidict-6.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ff959bee35038c4624250473988b24f846cbeb2c6639de3602c073f10410ceba"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01a3a55bd90018c9c080fbb0b9f4891db37d148a0a18722b42f94694f8b6d4c9"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5cb09abb18c1ea940fb99360ea0396f34d46566f157122c92dfa069d3e0e982"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:666daae833559deb2d609afa4490b85830ab0dfca811a98b70a205621a6109fe"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11bdf3f5e1518b24530b8241529d2050014c884cf18b6fc69c0c2b30ca248710"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d18748f2d30f94f498e852c67d61261c643b349b9d2a581131725595c45ec6c"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:458f37be2d9e4c95e2d8866a851663cbc76e865b78395090786f6cd9b3bbf4f4"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:b1a2eeedcead3a41694130495593a559a668f382eee0727352b9a41e1c45759a"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7d6ae9d593ef8641544d6263c7fa6408cc90370c8cb2bbb65f8d43e5b0351d9c"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5979b5632c3e3534e42ca6ff856bb24b2e3071b37861c2c727ce220d80eee9ed"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dcfe792765fab89c365123c81046ad4103fcabbc4f56d1c1997e6715e8015461"}, + {file = "multidict-6.0.4-cp311-cp311-win32.whl", hash = "sha256:3601a3cece3819534b11d4efc1eb76047488fddd0c85a3948099d5da4d504636"}, + {file = "multidict-6.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:81a4f0b34bd92df3da93315c6a59034df95866014ac08535fc819f043bfd51f0"}, + {file = "multidict-6.0.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:67040058f37a2a51ed8ea8f6b0e6ee5bd78ca67f169ce6122f3e2ec80dfe9b78"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:853888594621e6604c978ce2a0444a1e6e70c8d253ab65ba11657659dcc9100f"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:39ff62e7d0f26c248b15e364517a72932a611a9b75f35b45be078d81bdb86603"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af048912e045a2dc732847d33821a9d84ba553f5c5f028adbd364dd4765092ac"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e8b901e607795ec06c9e42530788c45ac21ef3aaa11dbd0c69de543bfb79a9"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62501642008a8b9871ddfccbf83e4222cf8ac0d5aeedf73da36153ef2ec222d2"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:99b76c052e9f1bc0721f7541e5e8c05db3941eb9ebe7b8553c625ef88d6eefde"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:509eac6cf09c794aa27bcacfd4d62c885cce62bef7b2c3e8b2e49d365b5003fe"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:21a12c4eb6ddc9952c415f24eef97e3e55ba3af61f67c7bc388dcdec1404a067"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:5cad9430ab3e2e4fa4a2ef4450f548768400a2ac635841bc2a56a2052cdbeb87"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ab55edc2e84460694295f401215f4a58597f8f7c9466faec545093045476327d"}, + {file = "multidict-6.0.4-cp37-cp37m-win32.whl", hash = "sha256:5a4dcf02b908c3b8b17a45fb0f15b695bf117a67b76b7ad18b73cf8e92608775"}, + {file = "multidict-6.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:6ed5f161328b7df384d71b07317f4d8656434e34591f20552c7bcef27b0ab88e"}, + {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5fc1b16f586f049820c5c5b17bb4ee7583092fa0d1c4e28b5239181ff9532e0c"}, + {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1502e24330eb681bdaa3eb70d6358e818e8e8f908a22a1851dfd4e15bc2f8161"}, + {file = "multidict-6.0.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b692f419760c0e65d060959df05f2a531945af31fda0c8a3b3195d4efd06de11"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45e1ecb0379bfaab5eef059f50115b54571acfbe422a14f668fc8c27ba410e7e"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ddd3915998d93fbcd2566ddf9cf62cdb35c9e093075f862935573d265cf8f65d"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:59d43b61c59d82f2effb39a93c48b845efe23a3852d201ed2d24ba830d0b4cf2"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc8e1d0c705233c5dd0c5e6460fbad7827d5d36f310a0fadfd45cc3029762258"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6aa0418fcc838522256761b3415822626f866758ee0bc6632c9486b179d0b52"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6748717bb10339c4760c1e63da040f5f29f5ed6e59d76daee30305894069a660"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4d1a3d7ef5e96b1c9e92f973e43aa5e5b96c659c9bc3124acbbd81b0b9c8a951"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4372381634485bec7e46718edc71528024fcdc6f835baefe517b34a33c731d60"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:fc35cb4676846ef752816d5be2193a1e8367b4c1397b74a565a9d0389c433a1d"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4b9d9e4e2b37daddb5c23ea33a3417901fa7c7b3dee2d855f63ee67a0b21e5b1"}, + {file = "multidict-6.0.4-cp38-cp38-win32.whl", hash = "sha256:e41b7e2b59679edfa309e8db64fdf22399eec4b0b24694e1b2104fb789207779"}, + {file = "multidict-6.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:d6c254ba6e45d8e72739281ebc46ea5eb5f101234f3ce171f0e9f5cc86991480"}, + {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:16ab77bbeb596e14212e7bab8429f24c1579234a3a462105cda4a66904998664"}, + {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc779e9e6f7fda81b3f9aa58e3a6091d49ad528b11ed19f6621408806204ad35"}, + {file = "multidict-6.0.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ceef517eca3e03c1cceb22030a3e39cb399ac86bff4e426d4fc6ae49052cc60"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:281af09f488903fde97923c7744bb001a9b23b039a909460d0f14edc7bf59706"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52f2dffc8acaba9a2f27174c41c9e57f60b907bb9f096b36b1a1f3be71c6284d"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b41156839806aecb3641f3208c0dafd3ac7775b9c4c422d82ee2a45c34ba81ca"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5e3fc56f88cc98ef8139255cf8cd63eb2c586531e43310ff859d6bb3a6b51f1"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8316a77808c501004802f9beebde51c9f857054a0c871bd6da8280e718444449"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f70b98cd94886b49d91170ef23ec5c0e8ebb6f242d734ed7ed677b24d50c82cf"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bf6774e60d67a9efe02b3616fee22441d86fab4c6d335f9d2051d19d90a40063"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:e69924bfcdda39b722ef4d9aa762b2dd38e4632b3641b1d9a57ca9cd18f2f83a"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:6b181d8c23da913d4ff585afd1155a0e1194c0b50c54fcfe286f70cdaf2b7176"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:52509b5be062d9eafc8170e53026fbc54cf3b32759a23d07fd935fb04fc22d95"}, + {file = "multidict-6.0.4-cp39-cp39-win32.whl", hash = "sha256:27c523fbfbdfd19c6867af7346332b62b586eed663887392cff78d614f9ec313"}, + {file = "multidict-6.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:33029f5734336aa0d4c0384525da0387ef89148dc7191aae00ca5fb23d7aafc2"}, + {file = "multidict-6.0.4.tar.gz", hash = "sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49"}, +] + +[[package]] +name = "numpy" +version = "1.24.4" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "numpy-1.24.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c0bfb52d2169d58c1cdb8cc1f16989101639b34c7d3ce60ed70b19c63eba0b64"}, + {file = "numpy-1.24.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ed094d4f0c177b1b8e7aa9cba7d6ceed51c0e569a5318ac0ca9a090680a6a1b1"}, + {file = "numpy-1.24.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79fc682a374c4a8ed08b331bef9c5f582585d1048fa6d80bc6c35bc384eee9b4"}, + {file = "numpy-1.24.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ffe43c74893dbf38c2b0a1f5428760a1a9c98285553c89e12d70a96a7f3a4d6"}, + {file = "numpy-1.24.4-cp310-cp310-win32.whl", hash = "sha256:4c21decb6ea94057331e111a5bed9a79d335658c27ce2adb580fb4d54f2ad9bc"}, + {file = "numpy-1.24.4-cp310-cp310-win_amd64.whl", hash = "sha256:b4bea75e47d9586d31e892a7401f76e909712a0fd510f58f5337bea9572c571e"}, + {file = "numpy-1.24.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f136bab9c2cfd8da131132c2cf6cc27331dd6fae65f95f69dcd4ae3c3639c810"}, + {file = "numpy-1.24.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e2926dac25b313635e4d6cf4dc4e51c8c0ebfed60b801c799ffc4c32bf3d1254"}, + {file = "numpy-1.24.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:222e40d0e2548690405b0b3c7b21d1169117391c2e82c378467ef9ab4c8f0da7"}, + {file = "numpy-1.24.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7215847ce88a85ce39baf9e89070cb860c98fdddacbaa6c0da3ffb31b3350bd5"}, + {file = "numpy-1.24.4-cp311-cp311-win32.whl", hash = "sha256:4979217d7de511a8d57f4b4b5b2b965f707768440c17cb70fbf254c4b225238d"}, + {file = "numpy-1.24.4-cp311-cp311-win_amd64.whl", hash = "sha256:b7b1fc9864d7d39e28f41d089bfd6353cb5f27ecd9905348c24187a768c79694"}, + {file = "numpy-1.24.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1452241c290f3e2a312c137a9999cdbf63f78864d63c79039bda65ee86943f61"}, + {file = "numpy-1.24.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:04640dab83f7c6c85abf9cd729c5b65f1ebd0ccf9de90b270cd61935eef0197f"}, + {file = "numpy-1.24.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5425b114831d1e77e4b5d812b69d11d962e104095a5b9c3b641a218abcc050e"}, + {file = "numpy-1.24.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd80e219fd4c71fc3699fc1dadac5dcf4fd882bfc6f7ec53d30fa197b8ee22dc"}, + {file = "numpy-1.24.4-cp38-cp38-win32.whl", hash = "sha256:4602244f345453db537be5314d3983dbf5834a9701b7723ec28923e2889e0bb2"}, + {file = "numpy-1.24.4-cp38-cp38-win_amd64.whl", hash = "sha256:692f2e0f55794943c5bfff12b3f56f99af76f902fc47487bdfe97856de51a706"}, + {file = "numpy-1.24.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2541312fbf09977f3b3ad449c4e5f4bb55d0dbf79226d7724211acc905049400"}, + {file = "numpy-1.24.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9667575fb6d13c95f1b36aca12c5ee3356bf001b714fc354eb5465ce1609e62f"}, + {file = "numpy-1.24.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3a86ed21e4f87050382c7bc96571755193c4c1392490744ac73d660e8f564a9"}, + {file = "numpy-1.24.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d11efb4dbecbdf22508d55e48d9c8384db795e1b7b51ea735289ff96613ff74d"}, + {file = "numpy-1.24.4-cp39-cp39-win32.whl", hash = "sha256:6620c0acd41dbcb368610bb2f4d83145674040025e5536954782467100aa8835"}, + {file = "numpy-1.24.4-cp39-cp39-win_amd64.whl", hash = "sha256:befe2bf740fd8373cf56149a5c23a0f601e82869598d41f8e188a0e9869926f8"}, + {file = "numpy-1.24.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:31f13e25b4e304632a4619d0e0777662c2ffea99fcae2029556b17d8ff958aef"}, + {file = "numpy-1.24.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95f7ac6540e95bc440ad77f56e520da5bf877f87dca58bd095288dce8940532a"}, + {file = "numpy-1.24.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:e98f220aa76ca2a977fe435f5b04d7b3470c0a2e6312907b37ba6068f26787f2"}, + {file = "numpy-1.24.4.tar.gz", hash = "sha256:80f5e3a4e498641401868df4208b74581206afbee7cf7b8329daae82676d9463"}, +] + +[[package]] +name = "numpy" +version = "1.25.2" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.9" +files = [ + {file = "numpy-1.25.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:db3ccc4e37a6873045580d413fe79b68e47a681af8db2e046f1dacfa11f86eb3"}, + {file = "numpy-1.25.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:90319e4f002795ccfc9050110bbbaa16c944b1c37c0baeea43c5fb881693ae1f"}, + {file = "numpy-1.25.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfe4a913e29b418d096e696ddd422d8a5d13ffba4ea91f9f60440a3b759b0187"}, + {file = "numpy-1.25.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f08f2e037bba04e707eebf4bc934f1972a315c883a9e0ebfa8a7756eabf9e357"}, + {file = "numpy-1.25.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bec1e7213c7cb00d67093247f8c4db156fd03075f49876957dca4711306d39c9"}, + {file = "numpy-1.25.2-cp310-cp310-win32.whl", hash = "sha256:7dc869c0c75988e1c693d0e2d5b26034644399dd929bc049db55395b1379e044"}, + {file = "numpy-1.25.2-cp310-cp310-win_amd64.whl", hash = "sha256:834b386f2b8210dca38c71a6e0f4fd6922f7d3fcff935dbe3a570945acb1b545"}, + {file = "numpy-1.25.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c5462d19336db4560041517dbb7759c21d181a67cb01b36ca109b2ae37d32418"}, + {file = "numpy-1.25.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c5652ea24d33585ea39eb6a6a15dac87a1206a692719ff45d53c5282e66d4a8f"}, + {file = "numpy-1.25.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d60fbae8e0019865fc4784745814cff1c421df5afee233db6d88ab4f14655a2"}, + {file = "numpy-1.25.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60e7f0f7f6d0eee8364b9a6304c2845b9c491ac706048c7e8cf47b83123b8dbf"}, + {file = "numpy-1.25.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:bb33d5a1cf360304754913a350edda36d5b8c5331a8237268c48f91253c3a364"}, + {file = "numpy-1.25.2-cp311-cp311-win32.whl", hash = "sha256:5883c06bb92f2e6c8181df7b39971a5fb436288db58b5a1c3967702d4278691d"}, + {file = "numpy-1.25.2-cp311-cp311-win_amd64.whl", hash = "sha256:5c97325a0ba6f9d041feb9390924614b60b99209a71a69c876f71052521d42a4"}, + {file = "numpy-1.25.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b79e513d7aac42ae918db3ad1341a015488530d0bb2a6abcbdd10a3a829ccfd3"}, + {file = "numpy-1.25.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:eb942bfb6f84df5ce05dbf4b46673ffed0d3da59f13635ea9b926af3deb76926"}, + {file = "numpy-1.25.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e0746410e73384e70d286f93abf2520035250aad8c5714240b0492a7302fdca"}, + {file = "numpy-1.25.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7806500e4f5bdd04095e849265e55de20d8cc4b661b038957354327f6d9b295"}, + {file = "numpy-1.25.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8b77775f4b7df768967a7c8b3567e309f617dd5e99aeb886fa14dc1a0791141f"}, + {file = "numpy-1.25.2-cp39-cp39-win32.whl", hash = "sha256:2792d23d62ec51e50ce4d4b7d73de8f67a2fd3ea710dcbc8563a51a03fb07b01"}, + {file = "numpy-1.25.2-cp39-cp39-win_amd64.whl", hash = "sha256:76b4115d42a7dfc5d485d358728cdd8719be33cc5ec6ec08632a5d6fca2ed380"}, + {file = "numpy-1.25.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1a1329e26f46230bf77b02cc19e900db9b52f398d6722ca853349a782d4cff55"}, + {file = "numpy-1.25.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c3abc71e8b6edba80a01a52e66d83c5d14433cbcd26a40c329ec7ed09f37901"}, + {file = "numpy-1.25.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:1b9735c27cea5d995496f46a8b1cd7b408b3f34b6d50459d9ac8fe3a20cc17bf"}, + {file = "numpy-1.25.2.tar.gz", hash = "sha256:fd608e19c8d7c55021dffd43bfe5492fab8cc105cc8986f813f8c3c048b38760"}, +] + +[[package]] +name = "numpy" +version = "1.26.1" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = "<3.13,>=3.9" +files = [ + {file = "numpy-1.26.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:82e871307a6331b5f09efda3c22e03c095d957f04bf6bc1804f30048d0e5e7af"}, + {file = "numpy-1.26.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cdd9ec98f0063d93baeb01aad472a1a0840dee302842a2746a7a8e92968f9575"}, + {file = "numpy-1.26.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d78f269e0c4fd365fc2992c00353e4530d274ba68f15e968d8bc3c69ce5f5244"}, + {file = "numpy-1.26.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ab9163ca8aeb7fd32fe93866490654d2f7dda4e61bc6297bf72ce07fdc02f67"}, + {file = "numpy-1.26.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:78ca54b2f9daffa5f323f34cdf21e1d9779a54073f0018a3094ab907938331a2"}, + {file = "numpy-1.26.1-cp310-cp310-win32.whl", hash = "sha256:d1cfc92db6af1fd37a7bb58e55c8383b4aa1ba23d012bdbba26b4bcca45ac297"}, + {file = "numpy-1.26.1-cp310-cp310-win_amd64.whl", hash = "sha256:d2984cb6caaf05294b8466966627e80bf6c7afd273279077679cb010acb0e5ab"}, + {file = "numpy-1.26.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cd7837b2b734ca72959a1caf3309457a318c934abef7a43a14bb984e574bbb9a"}, + {file = "numpy-1.26.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1c59c046c31a43310ad0199d6299e59f57a289e22f0f36951ced1c9eac3665b9"}, + {file = "numpy-1.26.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d58e8c51a7cf43090d124d5073bc29ab2755822181fcad978b12e144e5e5a4b3"}, + {file = "numpy-1.26.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6081aed64714a18c72b168a9276095ef9155dd7888b9e74b5987808f0dd0a974"}, + {file = "numpy-1.26.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:97e5d6a9f0702c2863aaabf19f0d1b6c2628fbe476438ce0b5ce06e83085064c"}, + {file = "numpy-1.26.1-cp311-cp311-win32.whl", hash = "sha256:b9d45d1dbb9de84894cc50efece5b09939752a2d75aab3a8b0cef6f3a35ecd6b"}, + {file = "numpy-1.26.1-cp311-cp311-win_amd64.whl", hash = "sha256:3649d566e2fc067597125428db15d60eb42a4e0897fc48d28cb75dc2e0454e53"}, + {file = "numpy-1.26.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1d1bd82d539607951cac963388534da3b7ea0e18b149a53cf883d8f699178c0f"}, + {file = "numpy-1.26.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:afd5ced4e5a96dac6725daeb5242a35494243f2239244fad10a90ce58b071d24"}, + {file = "numpy-1.26.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a03fb25610ef560a6201ff06df4f8105292ba56e7cdd196ea350d123fc32e24e"}, + {file = "numpy-1.26.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dcfaf015b79d1f9f9c9fd0731a907407dc3e45769262d657d754c3a028586124"}, + {file = "numpy-1.26.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e509cbc488c735b43b5ffea175235cec24bbc57b227ef1acc691725beb230d1c"}, + {file = "numpy-1.26.1-cp312-cp312-win32.whl", hash = "sha256:af22f3d8e228d84d1c0c44c1fbdeb80f97a15a0abe4f080960393a00db733b66"}, + {file = "numpy-1.26.1-cp312-cp312-win_amd64.whl", hash = "sha256:9f42284ebf91bdf32fafac29d29d4c07e5e9d1af862ea73686581773ef9e73a7"}, + {file = "numpy-1.26.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bb894accfd16b867d8643fc2ba6c8617c78ba2828051e9a69511644ce86ce83e"}, + {file = "numpy-1.26.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e44ccb93f30c75dfc0c3aa3ce38f33486a75ec9abadabd4e59f114994a9c4617"}, + {file = "numpy-1.26.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9696aa2e35cc41e398a6d42d147cf326f8f9d81befcb399bc1ed7ffea339b64e"}, + {file = "numpy-1.26.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5b411040beead47a228bde3b2241100454a6abde9df139ed087bd73fc0a4908"}, + {file = "numpy-1.26.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1e11668d6f756ca5ef534b5be8653d16c5352cbb210a5c2a79ff288e937010d5"}, + {file = "numpy-1.26.1-cp39-cp39-win32.whl", hash = "sha256:d1d2c6b7dd618c41e202c59c1413ef9b2c8e8a15f5039e344af64195459e3104"}, + {file = "numpy-1.26.1-cp39-cp39-win_amd64.whl", hash = "sha256:59227c981d43425ca5e5c01094d59eb14e8772ce6975d4b2fc1e106a833d5ae2"}, + {file = "numpy-1.26.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:06934e1a22c54636a059215d6da99e23286424f316fddd979f5071093b648668"}, + {file = "numpy-1.26.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76ff661a867d9272cd2a99eed002470f46dbe0943a5ffd140f49be84f68ffc42"}, + {file = "numpy-1.26.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:6965888d65d2848e8768824ca8288db0a81263c1efccec881cb35a0d805fcd2f"}, + {file = "numpy-1.26.1.tar.gz", hash = "sha256:c8c6c72d4a9f831f328efb1312642a1cafafaa88981d9ab76368d50d07d93cbe"}, +] + +[[package]] +name = "openbb-core" +version = "0.1.0a5" +description = "OpenBB package with core functionality" +optional = false +python-versions = ">=3.8,<4.0" +files = [ + {file = "openbb_core-0.1.0a5-py3-none-any.whl", hash = "sha256:f22c68911b6f6e7b129b50d7c32731b1c9bbfda6b365a04824c2ab2c9437ef05"}, + {file = "openbb_core-0.1.0a5.tar.gz", hash = "sha256:f39458e650c489be0707aea539f3d695b4b98d49e28664087d3bb67266cf4d6f"}, +] + +[package.dependencies] +fastapi = ">=0.103.1,<0.104.0" +html5lib = ">=1.1,<2.0" +importlib_metadata = ">=6.8.0,<7.0.0" +openbb-provider = ">=0.1.0a3,<0.2.0" +pandas = ">=1.5.3" +posthog = ">=3.0.1,<4.0.0" +python-jose = ">=3.3.0,<4.0.0" +python-multipart = ">=0.0.6,<0.0.7" +uuid7 = ">=0.1.0,<0.2.0" +uvicorn = ">=0.23.2,<0.24.0" +websockets = ">=10.4,<11.0" + +[[package]] +name = "openbb-provider" +version = "0.1.0a4" +description = "OpenBB package to execute queries to financial data providers" +optional = false +python-versions = ">=3.8,<4.0" +files = [ + {file = "openbb_provider-0.1.0a4-py3-none-any.whl", hash = "sha256:317e1d9d634c480da4dfd320befb42840200bee186a1de687a0f93d8ea39316e"}, + {file = "openbb_provider-0.1.0a4.tar.gz", hash = "sha256:a6b78275b5f697b1d4c928904928e23657277f702ab4cbd5a03e9022f63e8e6f"}, +] + +[package.dependencies] +importlib_metadata = ">=6.8.0,<7.0.0" +pydantic = ">=2.4.2,<3.0.0" +pytest-recorder = ">=0.2.3,<0.3.0" +python-dotenv = ">=1.0.0,<2.0.0" +requests = ">=2.31.0,<3.0.0" +urllib3 = "<2.0.0" + +[[package]] +name = "pandas" +version = "2.0.3" +description = "Powerful data structures for data analysis, time series, and statistics" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pandas-2.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e4c7c9f27a4185304c7caf96dc7d91bc60bc162221152de697c98eb0b2648dd8"}, + {file = "pandas-2.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f167beed68918d62bffb6ec64f2e1d8a7d297a038f86d4aed056b9493fca407f"}, + {file = "pandas-2.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce0c6f76a0f1ba361551f3e6dceaff06bde7514a374aa43e33b588ec10420183"}, + {file = "pandas-2.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba619e410a21d8c387a1ea6e8a0e49bb42216474436245718d7f2e88a2f8d7c0"}, + {file = "pandas-2.0.3-cp310-cp310-win32.whl", hash = "sha256:3ef285093b4fe5058eefd756100a367f27029913760773c8bf1d2d8bebe5d210"}, + {file = "pandas-2.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:9ee1a69328d5c36c98d8e74db06f4ad518a1840e8ccb94a4ba86920986bb617e"}, + {file = "pandas-2.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b084b91d8d66ab19f5bb3256cbd5ea661848338301940e17f4492b2ce0801fe8"}, + {file = "pandas-2.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:37673e3bdf1551b95bf5d4ce372b37770f9529743d2498032439371fc7b7eb26"}, + {file = "pandas-2.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9cb1e14fdb546396b7e1b923ffaeeac24e4cedd14266c3497216dd4448e4f2d"}, + {file = "pandas-2.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9cd88488cceb7635aebb84809d087468eb33551097d600c6dad13602029c2df"}, + {file = "pandas-2.0.3-cp311-cp311-win32.whl", hash = "sha256:694888a81198786f0e164ee3a581df7d505024fbb1f15202fc7db88a71d84ebd"}, + {file = "pandas-2.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:6a21ab5c89dcbd57f78d0ae16630b090eec626360085a4148693def5452d8a6b"}, + {file = "pandas-2.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9e4da0d45e7f34c069fe4d522359df7d23badf83abc1d1cef398895822d11061"}, + {file = "pandas-2.0.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:32fca2ee1b0d93dd71d979726b12b61faa06aeb93cf77468776287f41ff8fdc5"}, + {file = "pandas-2.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:258d3624b3ae734490e4d63c430256e716f488c4fcb7c8e9bde2d3aa46c29089"}, + {file = "pandas-2.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eae3dc34fa1aa7772dd3fc60270d13ced7346fcbcfee017d3132ec625e23bb0"}, + {file = "pandas-2.0.3-cp38-cp38-win32.whl", hash = "sha256:f3421a7afb1a43f7e38e82e844e2bca9a6d793d66c1a7f9f0ff39a795bbc5e02"}, + {file = "pandas-2.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:69d7f3884c95da3a31ef82b7618af5710dba95bb885ffab339aad925c3e8ce78"}, + {file = "pandas-2.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5247fb1ba347c1261cbbf0fcfba4a3121fbb4029d95d9ef4dc45406620b25c8b"}, + {file = "pandas-2.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:81af086f4543c9d8bb128328b5d32e9986e0c84d3ee673a2ac6fb57fd14f755e"}, + {file = "pandas-2.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1994c789bf12a7c5098277fb43836ce090f1073858c10f9220998ac74f37c69b"}, + {file = "pandas-2.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ec591c48e29226bcbb316e0c1e9423622bc7a4eaf1ef7c3c9fa1a3981f89641"}, + {file = "pandas-2.0.3-cp39-cp39-win32.whl", hash = "sha256:04dbdbaf2e4d46ca8da896e1805bc04eb85caa9a82e259e8eed00254d5e0c682"}, + {file = "pandas-2.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:1168574b036cd8b93abc746171c9b4f1b83467438a5e45909fed645cf8692dbc"}, + {file = "pandas-2.0.3.tar.gz", hash = "sha256:c02f372a88e0d17f36d3093a644c73cfc1788e876a7c4bcb4020a77512e2043c"}, +] + +[package.dependencies] +numpy = [ + {version = ">=1.20.3", markers = "python_version < \"3.10\""}, + {version = ">=1.21.0", markers = "python_version >= \"3.10\" and python_version < \"3.11\""}, + {version = ">=1.23.2", markers = "python_version >= \"3.11\""}, +] +python-dateutil = ">=2.8.2" +pytz = ">=2020.1" +tzdata = ">=2022.1" + +[package.extras] +all = ["PyQt5 (>=5.15.1)", "SQLAlchemy (>=1.4.16)", "beautifulsoup4 (>=4.9.3)", "bottleneck (>=1.3.2)", "brotlipy (>=0.7.0)", "fastparquet (>=0.6.3)", "fsspec (>=2021.07.0)", "gcsfs (>=2021.07.0)", "html5lib (>=1.1)", "hypothesis (>=6.34.2)", "jinja2 (>=3.0.0)", "lxml (>=4.6.3)", "matplotlib (>=3.6.1)", "numba (>=0.53.1)", "numexpr (>=2.7.3)", "odfpy (>=1.4.1)", "openpyxl (>=3.0.7)", "pandas-gbq (>=0.15.0)", "psycopg2 (>=2.8.6)", "pyarrow (>=7.0.0)", "pymysql (>=1.0.2)", "pyreadstat (>=1.1.2)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)", "python-snappy (>=0.6.0)", "pyxlsb (>=1.0.8)", "qtpy (>=2.2.0)", "s3fs (>=2021.08.0)", "scipy (>=1.7.1)", "tables (>=3.6.1)", "tabulate (>=0.8.9)", "xarray (>=0.21.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=1.4.3)", "zstandard (>=0.15.2)"] +aws = ["s3fs (>=2021.08.0)"] +clipboard = ["PyQt5 (>=5.15.1)", "qtpy (>=2.2.0)"] +compression = ["brotlipy (>=0.7.0)", "python-snappy (>=0.6.0)", "zstandard (>=0.15.2)"] +computation = ["scipy (>=1.7.1)", "xarray (>=0.21.0)"] +excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.0.7)", "pyxlsb (>=1.0.8)", "xlrd (>=2.0.1)", "xlsxwriter (>=1.4.3)"] +feather = ["pyarrow (>=7.0.0)"] +fss = ["fsspec (>=2021.07.0)"] +gcp = ["gcsfs (>=2021.07.0)", "pandas-gbq (>=0.15.0)"] +hdf5 = ["tables (>=3.6.1)"] +html = ["beautifulsoup4 (>=4.9.3)", "html5lib (>=1.1)", "lxml (>=4.6.3)"] +mysql = ["SQLAlchemy (>=1.4.16)", "pymysql (>=1.0.2)"] +output-formatting = ["jinja2 (>=3.0.0)", "tabulate (>=0.8.9)"] +parquet = ["pyarrow (>=7.0.0)"] +performance = ["bottleneck (>=1.3.2)", "numba (>=0.53.1)", "numexpr (>=2.7.1)"] +plot = ["matplotlib (>=3.6.1)"] +postgresql = ["SQLAlchemy (>=1.4.16)", "psycopg2 (>=2.8.6)"] +spss = ["pyreadstat (>=1.1.2)"] +sql-other = ["SQLAlchemy (>=1.4.16)"] +test = ["hypothesis (>=6.34.2)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)"] +xml = ["lxml (>=4.6.3)"] + +[[package]] +name = "posthog" +version = "3.0.2" +description = "Integrate PostHog into any python application." +optional = false +python-versions = "*" +files = [ + {file = "posthog-3.0.2-py2.py3-none-any.whl", hash = "sha256:a8c0af6f2401fbe50f90e68c4143d0824b54e872de036b1c2f23b5abb39d88ce"}, + {file = "posthog-3.0.2.tar.gz", hash = "sha256:701fba6e446a4de687c6e861b587e7b7741955ad624bf34fe013c06a0fec6fb3"}, +] + +[package.dependencies] +backoff = ">=1.10.0" +monotonic = ">=1.5" +python-dateutil = ">2.1" +requests = ">=2.7,<3.0" +six = ">=1.5" + +[package.extras] +dev = ["black", "flake8", "flake8-print", "isort", "pre-commit"] +sentry = ["django", "sentry-sdk"] +test = ["coverage", "flake8", "freezegun (==0.3.15)", "mock (>=2.0.0)", "pylint", "pytest"] + +[[package]] +name = "pyasn1" +version = "0.5.0" +description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +files = [ + {file = "pyasn1-0.5.0-py2.py3-none-any.whl", hash = "sha256:87a2121042a1ac9358cabcaf1d07680ff97ee6404333bacca15f76aa8ad01a57"}, + {file = "pyasn1-0.5.0.tar.gz", hash = "sha256:97b7290ca68e62a832558ec3976f15cbf911bf5d7c7039d8b861c2a0ece69fde"}, +] + +[[package]] +name = "pydantic" +version = "2.4.2" +description = "Data validation using Python type hints" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pydantic-2.4.2-py3-none-any.whl", hash = "sha256:bc3ddf669d234f4220e6e1c4d96b061abe0998185a8d7855c0126782b7abc8c1"}, + {file = "pydantic-2.4.2.tar.gz", hash = "sha256:94f336138093a5d7f426aac732dcfe7ab4eb4da243c88f891d65deb4a2556ee7"}, +] + +[package.dependencies] +annotated-types = ">=0.4.0" +pydantic-core = "2.10.1" +typing-extensions = ">=4.6.1" + +[package.extras] +email = ["email-validator (>=2.0.0)"] + +[[package]] +name = "pydantic-core" +version = "2.10.1" +description = "" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pydantic_core-2.10.1-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:d64728ee14e667ba27c66314b7d880b8eeb050e58ffc5fec3b7a109f8cddbd63"}, + {file = "pydantic_core-2.10.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:48525933fea744a3e7464c19bfede85df4aba79ce90c60b94d8b6e1eddd67096"}, + {file = "pydantic_core-2.10.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef337945bbd76cce390d1b2496ccf9f90b1c1242a3a7bc242ca4a9fc5993427a"}, + {file = "pydantic_core-2.10.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a1392e0638af203cee360495fd2cfdd6054711f2db5175b6e9c3c461b76f5175"}, + {file = "pydantic_core-2.10.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0675ba5d22de54d07bccde38997e780044dcfa9a71aac9fd7d4d7a1d2e3e65f7"}, + {file = "pydantic_core-2.10.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:128552af70a64660f21cb0eb4876cbdadf1a1f9d5de820fed6421fa8de07c893"}, + {file = "pydantic_core-2.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f6e6aed5818c264412ac0598b581a002a9f050cb2637a84979859e70197aa9e"}, + {file = "pydantic_core-2.10.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ecaac27da855b8d73f92123e5f03612b04c5632fd0a476e469dfc47cd37d6b2e"}, + {file = "pydantic_core-2.10.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b3c01c2fb081fced3bbb3da78510693dc7121bb893a1f0f5f4b48013201f362e"}, + {file = "pydantic_core-2.10.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:92f675fefa977625105708492850bcbc1182bfc3e997f8eecb866d1927c98ae6"}, + {file = "pydantic_core-2.10.1-cp310-none-win32.whl", hash = "sha256:420a692b547736a8d8703c39ea935ab5d8f0d2573f8f123b0a294e49a73f214b"}, + {file = "pydantic_core-2.10.1-cp310-none-win_amd64.whl", hash = "sha256:0880e239827b4b5b3e2ce05e6b766a7414e5f5aedc4523be6b68cfbc7f61c5d0"}, + {file = "pydantic_core-2.10.1-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:073d4a470b195d2b2245d0343569aac7e979d3a0dcce6c7d2af6d8a920ad0bea"}, + {file = "pydantic_core-2.10.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:600d04a7b342363058b9190d4e929a8e2e715c5682a70cc37d5ded1e0dd370b4"}, + {file = "pydantic_core-2.10.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39215d809470f4c8d1881758575b2abfb80174a9e8daf8f33b1d4379357e417c"}, + {file = "pydantic_core-2.10.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eeb3d3d6b399ffe55f9a04e09e635554012f1980696d6b0aca3e6cf42a17a03b"}, + {file = "pydantic_core-2.10.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a7a7902bf75779bc12ccfc508bfb7a4c47063f748ea3de87135d433a4cca7a2f"}, + {file = "pydantic_core-2.10.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3625578b6010c65964d177626fde80cf60d7f2e297d56b925cb5cdeda6e9925a"}, + {file = "pydantic_core-2.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:caa48fc31fc7243e50188197b5f0c4228956f97b954f76da157aae7f67269ae8"}, + {file = "pydantic_core-2.10.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:07ec6d7d929ae9c68f716195ce15e745b3e8fa122fc67698ac6498d802ed0fa4"}, + {file = "pydantic_core-2.10.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e6f31a17acede6a8cd1ae2d123ce04d8cca74056c9d456075f4f6f85de055607"}, + {file = "pydantic_core-2.10.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d8f1ebca515a03e5654f88411420fea6380fc841d1bea08effb28184e3d4899f"}, + {file = "pydantic_core-2.10.1-cp311-none-win32.whl", hash = "sha256:6db2eb9654a85ada248afa5a6db5ff1cf0f7b16043a6b070adc4a5be68c716d6"}, + {file = "pydantic_core-2.10.1-cp311-none-win_amd64.whl", hash = "sha256:4a5be350f922430997f240d25f8219f93b0c81e15f7b30b868b2fddfc2d05f27"}, + {file = "pydantic_core-2.10.1-cp311-none-win_arm64.whl", hash = "sha256:5fdb39f67c779b183b0c853cd6b45f7db84b84e0571b3ef1c89cdb1dfc367325"}, + {file = "pydantic_core-2.10.1-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:b1f22a9ab44de5f082216270552aa54259db20189e68fc12484873d926426921"}, + {file = "pydantic_core-2.10.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8572cadbf4cfa95fb4187775b5ade2eaa93511f07947b38f4cd67cf10783b118"}, + {file = "pydantic_core-2.10.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:db9a28c063c7c00844ae42a80203eb6d2d6bbb97070cfa00194dff40e6f545ab"}, + {file = "pydantic_core-2.10.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0e2a35baa428181cb2270a15864ec6286822d3576f2ed0f4cd7f0c1708472aff"}, + {file = "pydantic_core-2.10.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05560ab976012bf40f25d5225a58bfa649bb897b87192a36c6fef1ab132540d7"}, + {file = "pydantic_core-2.10.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d6495008733c7521a89422d7a68efa0a0122c99a5861f06020ef5b1f51f9ba7c"}, + {file = "pydantic_core-2.10.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14ac492c686defc8e6133e3a2d9eaf5261b3df26b8ae97450c1647286750b901"}, + {file = "pydantic_core-2.10.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8282bab177a9a3081fd3d0a0175a07a1e2bfb7fcbbd949519ea0980f8a07144d"}, + {file = "pydantic_core-2.10.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:aafdb89fdeb5fe165043896817eccd6434aee124d5ee9b354f92cd574ba5e78f"}, + {file = "pydantic_core-2.10.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f6defd966ca3b187ec6c366604e9296f585021d922e666b99c47e78738b5666c"}, + {file = "pydantic_core-2.10.1-cp312-none-win32.whl", hash = "sha256:7c4d1894fe112b0864c1fa75dffa045720a194b227bed12f4be7f6045b25209f"}, + {file = "pydantic_core-2.10.1-cp312-none-win_amd64.whl", hash = "sha256:5994985da903d0b8a08e4935c46ed8daf5be1cf217489e673910951dc533d430"}, + {file = "pydantic_core-2.10.1-cp312-none-win_arm64.whl", hash = "sha256:0d8a8adef23d86d8eceed3e32e9cca8879c7481c183f84ed1a8edc7df073af94"}, + {file = "pydantic_core-2.10.1-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:9badf8d45171d92387410b04639d73811b785b5161ecadabf056ea14d62d4ede"}, + {file = "pydantic_core-2.10.1-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:ebedb45b9feb7258fac0a268a3f6bec0a2ea4d9558f3d6f813f02ff3a6dc6698"}, + {file = "pydantic_core-2.10.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cfe1090245c078720d250d19cb05d67e21a9cd7c257698ef139bc41cf6c27b4f"}, + {file = "pydantic_core-2.10.1-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e357571bb0efd65fd55f18db0a2fb0ed89d0bb1d41d906b138f088933ae618bb"}, + {file = "pydantic_core-2.10.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b3dcd587b69bbf54fc04ca157c2323b8911033e827fffaecf0cafa5a892a0904"}, + {file = "pydantic_core-2.10.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c120c9ce3b163b985a3b966bb701114beb1da4b0468b9b236fc754783d85aa3"}, + {file = "pydantic_core-2.10.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15d6bca84ffc966cc9976b09a18cf9543ed4d4ecbd97e7086f9ce9327ea48891"}, + {file = "pydantic_core-2.10.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5cabb9710f09d5d2e9e2748c3e3e20d991a4c5f96ed8f1132518f54ab2967221"}, + {file = "pydantic_core-2.10.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:82f55187a5bebae7d81d35b1e9aaea5e169d44819789837cdd4720d768c55d15"}, + {file = "pydantic_core-2.10.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1d40f55222b233e98e3921df7811c27567f0e1a4411b93d4c5c0f4ce131bc42f"}, + {file = "pydantic_core-2.10.1-cp37-none-win32.whl", hash = "sha256:14e09ff0b8fe6e46b93d36a878f6e4a3a98ba5303c76bb8e716f4878a3bee92c"}, + {file = "pydantic_core-2.10.1-cp37-none-win_amd64.whl", hash = "sha256:1396e81b83516b9d5c9e26a924fa69164156c148c717131f54f586485ac3c15e"}, + {file = "pydantic_core-2.10.1-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:6835451b57c1b467b95ffb03a38bb75b52fb4dc2762bb1d9dbed8de31ea7d0fc"}, + {file = "pydantic_core-2.10.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b00bc4619f60c853556b35f83731bd817f989cba3e97dc792bb8c97941b8053a"}, + {file = "pydantic_core-2.10.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fa467fd300a6f046bdb248d40cd015b21b7576c168a6bb20aa22e595c8ffcdd"}, + {file = "pydantic_core-2.10.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d99277877daf2efe074eae6338453a4ed54a2d93fb4678ddfe1209a0c93a2468"}, + {file = "pydantic_core-2.10.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fa7db7558607afeccb33c0e4bf1c9a9a835e26599e76af6fe2fcea45904083a6"}, + {file = "pydantic_core-2.10.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aad7bd686363d1ce4ee930ad39f14e1673248373f4a9d74d2b9554f06199fb58"}, + {file = "pydantic_core-2.10.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:443fed67d33aa85357464f297e3d26e570267d1af6fef1c21ca50921d2976302"}, + {file = "pydantic_core-2.10.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:042462d8d6ba707fd3ce9649e7bf268633a41018d6a998fb5fbacb7e928a183e"}, + {file = "pydantic_core-2.10.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ecdbde46235f3d560b18be0cb706c8e8ad1b965e5c13bbba7450c86064e96561"}, + {file = "pydantic_core-2.10.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ed550ed05540c03f0e69e6d74ad58d026de61b9eaebebbaaf8873e585cbb18de"}, + {file = "pydantic_core-2.10.1-cp38-none-win32.whl", hash = "sha256:8cdbbd92154db2fec4ec973d45c565e767ddc20aa6dbaf50142676484cbff8ee"}, + {file = "pydantic_core-2.10.1-cp38-none-win_amd64.whl", hash = "sha256:9f6f3e2598604956480f6c8aa24a3384dbf6509fe995d97f6ca6103bb8c2534e"}, + {file = "pydantic_core-2.10.1-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:655f8f4c8d6a5963c9a0687793da37b9b681d9ad06f29438a3b2326d4e6b7970"}, + {file = "pydantic_core-2.10.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e570ffeb2170e116a5b17e83f19911020ac79d19c96f320cbfa1fa96b470185b"}, + {file = "pydantic_core-2.10.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64322bfa13e44c6c30c518729ef08fda6026b96d5c0be724b3c4ae4da939f875"}, + {file = "pydantic_core-2.10.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:485a91abe3a07c3a8d1e082ba29254eea3e2bb13cbbd4351ea4e5a21912cc9b0"}, + {file = "pydantic_core-2.10.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7c2b8eb9fc872e68b46eeaf835e86bccc3a58ba57d0eedc109cbb14177be531"}, + {file = "pydantic_core-2.10.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a5cb87bdc2e5f620693148b5f8f842d293cae46c5f15a1b1bf7ceeed324a740c"}, + {file = "pydantic_core-2.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:25bd966103890ccfa028841a8f30cebcf5875eeac8c4bde4fe221364c92f0c9a"}, + {file = "pydantic_core-2.10.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f323306d0556351735b54acbf82904fe30a27b6a7147153cbe6e19aaaa2aa429"}, + {file = "pydantic_core-2.10.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0c27f38dc4fbf07b358b2bc90edf35e82d1703e22ff2efa4af4ad5de1b3833e7"}, + {file = "pydantic_core-2.10.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f1365e032a477c1430cfe0cf2856679529a2331426f8081172c4a74186f1d595"}, + {file = "pydantic_core-2.10.1-cp39-none-win32.whl", hash = "sha256:a1c311fd06ab3b10805abb72109f01a134019739bd3286b8ae1bc2fc4e50c07a"}, + {file = "pydantic_core-2.10.1-cp39-none-win_amd64.whl", hash = "sha256:ae8a8843b11dc0b03b57b52793e391f0122e740de3df1474814c700d2622950a"}, + {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:d43002441932f9a9ea5d6f9efaa2e21458221a3a4b417a14027a1d530201ef1b"}, + {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:fcb83175cc4936a5425dde3356f079ae03c0802bbdf8ff82c035f8a54b333521"}, + {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:962ed72424bf1f72334e2f1e61b68f16c0e596f024ca7ac5daf229f7c26e4208"}, + {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2cf5bb4dd67f20f3bbc1209ef572a259027c49e5ff694fa56bed62959b41e1f9"}, + {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e544246b859f17373bed915182ab841b80849ed9cf23f1f07b73b7c58baee5fb"}, + {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c0877239307b7e69d025b73774e88e86ce82f6ba6adf98f41069d5b0b78bd1bf"}, + {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:53df009d1e1ba40f696f8995683e067e3967101d4bb4ea6f667931b7d4a01357"}, + {file = "pydantic_core-2.10.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a1254357f7e4c82e77c348dabf2d55f1d14d19d91ff025004775e70a6ef40ada"}, + {file = "pydantic_core-2.10.1-pp37-pypy37_pp73-macosx_10_7_x86_64.whl", hash = "sha256:524ff0ca3baea164d6d93a32c58ac79eca9f6cf713586fdc0adb66a8cdeab96a"}, + {file = "pydantic_core-2.10.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f0ac9fb8608dbc6eaf17956bf623c9119b4db7dbb511650910a82e261e6600f"}, + {file = "pydantic_core-2.10.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:320f14bd4542a04ab23747ff2c8a778bde727158b606e2661349557f0770711e"}, + {file = "pydantic_core-2.10.1-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:63974d168b6233b4ed6a0046296803cb13c56637a7b8106564ab575926572a55"}, + {file = "pydantic_core-2.10.1-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:417243bf599ba1f1fef2bb8c543ceb918676954734e2dcb82bf162ae9d7bd514"}, + {file = "pydantic_core-2.10.1-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:dda81e5ec82485155a19d9624cfcca9be88a405e2857354e5b089c2a982144b2"}, + {file = "pydantic_core-2.10.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:14cfbb00959259e15d684505263d5a21732b31248a5dd4941f73a3be233865b9"}, + {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:631cb7415225954fdcc2a024119101946793e5923f6c4d73a5914d27eb3d3a05"}, + {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:bec7dd208a4182e99c5b6c501ce0b1f49de2802448d4056091f8e630b28e9a52"}, + {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:149b8a07712f45b332faee1a2258d8ef1fb4a36f88c0c17cb687f205c5dc6e7d"}, + {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d966c47f9dd73c2d32a809d2be529112d509321c5310ebf54076812e6ecd884"}, + {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7eb037106f5c6b3b0b864ad226b0b7ab58157124161d48e4b30c4a43fef8bc4b"}, + {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:154ea7c52e32dce13065dbb20a4a6f0cc012b4f667ac90d648d36b12007fa9f7"}, + {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:e562617a45b5a9da5be4abe72b971d4f00bf8555eb29bb91ec2ef2be348cd132"}, + {file = "pydantic_core-2.10.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:f23b55eb5464468f9e0e9a9935ce3ed2a870608d5f534025cd5536bca25b1402"}, + {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:e9121b4009339b0f751955baf4543a0bfd6bc3f8188f8056b1a25a2d45099934"}, + {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:0523aeb76e03f753b58be33b26540880bac5aa54422e4462404c432230543f33"}, + {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e0e2959ef5d5b8dc9ef21e1a305a21a36e254e6a34432d00c72a92fdc5ecda5"}, + {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da01bec0a26befab4898ed83b362993c844b9a607a86add78604186297eb047e"}, + {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f2e9072d71c1f6cfc79a36d4484c82823c560e6f5599c43c1ca6b5cdbd54f881"}, + {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:f36a3489d9e28fe4b67be9992a23029c3cec0babc3bd9afb39f49844a8c721c5"}, + {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f64f82cc3443149292b32387086d02a6c7fb39b8781563e0ca7b8d7d9cf72bd7"}, + {file = "pydantic_core-2.10.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:b4a6db486ac8e99ae696e09efc8b2b9fea67b63c8f88ba7a1a16c24a057a0776"}, + {file = "pydantic_core-2.10.1.tar.gz", hash = "sha256:0f8682dbdd2f67f8e1edddcbffcc29f60a6182b4901c367fc8c1c40d30bb0a82"}, +] + +[package.dependencies] +typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" + +[[package]] +name = "pytest-recorder" +version = "0.2.3" +description = "Pytest plugin, meant to facilitate unit tests writing for tools consumming Web APIs." +optional = false +python-versions = ">=3.8,<4.0" +files = [ + {file = "pytest_recorder-0.2.3-py3-none-any.whl", hash = "sha256:a2aa1f58a72e78585151840503c88b2a4b7aa85651ce3a08232c86e2680d0c90"}, + {file = "pytest_recorder-0.2.3.tar.gz", hash = "sha256:ecba7069c87d6e30229db82a091c61e6abb18662c69eeb78a3866ea8b37f04b7"}, +] + +[package.dependencies] +time-machine = ">=2.9.0,<3.0.0" +vcrpy = ">=4.2.1,<5.0.0" + +[[package]] +name = "python-dateutil" +version = "2.8.2" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +files = [ + {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, + {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, +] + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "python-dotenv" +version = "1.0.0" +description = "Read key-value pairs from a .env file and set them as environment variables" +optional = false +python-versions = ">=3.8" +files = [ + {file = "python-dotenv-1.0.0.tar.gz", hash = "sha256:a8df96034aae6d2d50a4ebe8216326c61c3eb64836776504fcca410e5937a3ba"}, + {file = "python_dotenv-1.0.0-py3-none-any.whl", hash = "sha256:f5971a9226b701070a4bf2c38c89e5a3f0d64de8debda981d1db98583009122a"}, +] + +[package.extras] +cli = ["click (>=5.0)"] + +[[package]] +name = "python-jose" +version = "3.3.0" +description = "JOSE implementation in Python" +optional = false +python-versions = "*" +files = [ + {file = "python-jose-3.3.0.tar.gz", hash = "sha256:55779b5e6ad599c6336191246e95eb2293a9ddebd555f796a65f838f07e5d78a"}, + {file = "python_jose-3.3.0-py2.py3-none-any.whl", hash = "sha256:9b1376b023f8b298536eedd47ae1089bcdb848f1535ab30555cd92002d78923a"}, +] + +[package.dependencies] +ecdsa = "!=0.15" +pyasn1 = "*" +rsa = "*" + +[package.extras] +cryptography = ["cryptography (>=3.4.0)"] +pycrypto = ["pyasn1", "pycrypto (>=2.6.0,<2.7.0)"] +pycryptodome = ["pyasn1", "pycryptodome (>=3.3.1,<4.0.0)"] + +[[package]] +name = "python-multipart" +version = "0.0.6" +description = "A streaming multipart parser for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "python_multipart-0.0.6-py3-none-any.whl", hash = "sha256:ee698bab5ef148b0a760751c261902cd096e57e10558e11aca17646b74ee1c18"}, + {file = "python_multipart-0.0.6.tar.gz", hash = "sha256:e9925a80bb668529f1b67c7fdb0a5dacdd7cbfc6fb0bff3ea443fe22bdd62132"}, +] + +[package.extras] +dev = ["atomicwrites (==1.2.1)", "attrs (==19.2.0)", "coverage (==6.5.0)", "hatch", "invoke (==1.7.3)", "more-itertools (==4.3.0)", "pbr (==4.3.0)", "pluggy (==1.0.0)", "py (==1.11.0)", "pytest (==7.2.0)", "pytest-cov (==4.0.0)", "pytest-timeout (==2.1.0)", "pyyaml (==5.1)"] + +[[package]] +name = "pytz" +version = "2023.3.post1" +description = "World timezone definitions, modern and historical" +optional = false +python-versions = "*" +files = [ + {file = "pytz-2023.3.post1-py2.py3-none-any.whl", hash = "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7"}, + {file = "pytz-2023.3.post1.tar.gz", hash = "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b"}, +] + +[[package]] +name = "pyyaml" +version = "6.0.1" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, +] + +[[package]] +name = "requests" +version = "2.31.0" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.7" +files = [ + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "rsa" +version = "4.9" +description = "Pure-Python RSA implementation" +optional = false +python-versions = ">=3.6,<4" +files = [ + {file = "rsa-4.9-py3-none-any.whl", hash = "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7"}, + {file = "rsa-4.9.tar.gz", hash = "sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21"}, +] + +[package.dependencies] +pyasn1 = ">=0.1.3" + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] + +[[package]] +name = "sniffio" +version = "1.3.0" +description = "Sniff out which async library your code is running under" +optional = false +python-versions = ">=3.7" +files = [ + {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, + {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, +] + +[[package]] +name = "starlette" +version = "0.27.0" +description = "The little ASGI library that shines." +optional = false +python-versions = ">=3.7" +files = [ + {file = "starlette-0.27.0-py3-none-any.whl", hash = "sha256:918416370e846586541235ccd38a474c08b80443ed31c578a418e2209b3eef91"}, + {file = "starlette-0.27.0.tar.gz", hash = "sha256:6a6b0d042acb8d469a01eba54e9cda6cbd24ac602c4cd016723117d6a7e73b75"}, +] + +[package.dependencies] +anyio = ">=3.4.0,<5" +typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\""} + +[package.extras] +full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart", "pyyaml"] + +[[package]] +name = "time-machine" +version = "2.13.0" +description = "Travel through time in your tests." +optional = false +python-versions = ">=3.8" +files = [ + {file = "time_machine-2.13.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:685d98593f13649ad5e7ce3e58efe689feca1badcf618ba397d3ab877ee59326"}, + {file = "time_machine-2.13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ccbce292380ebf63fb9a52e6b03d91677f6a003e0c11f77473efe3913a75f289"}, + {file = "time_machine-2.13.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:679cbf9b15bfde1654cf48124128d3fbe52f821fa158a98fcee5fe7e05db1917"}, + {file = "time_machine-2.13.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a26bdf3462d5f12a4c1009fdbe54366c6ef22c7b6f6808705b51dedaaeba8296"}, + {file = "time_machine-2.13.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dabb3b155819811b4602f7e9be936e2024e20dc99a90f103e36b45768badf9c3"}, + {file = "time_machine-2.13.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0db97f92be3efe0ac62fd3f933c91a78438cef13f283b6dfc2ee11123bfd7d8a"}, + {file = "time_machine-2.13.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:12eed2e9171c85b703d75c985dab2ecad4fe7025b7d2f842596fce1576238ece"}, + {file = "time_machine-2.13.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bdfe4a7f033e6783c3e9a7f8d8fc0b115367330762e00a03ff35fedf663994f3"}, + {file = "time_machine-2.13.0-cp310-cp310-win32.whl", hash = "sha256:3a7a0a49ce50d9c306c4343a7d6a3baa11092d4399a4af4355c615ccc321a9d3"}, + {file = "time_machine-2.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:1812e48c6c58707db9988445a219a908a710ea065b2cc808d9a50636291f27d4"}, + {file = "time_machine-2.13.0-cp310-cp310-win_arm64.whl", hash = "sha256:5aee23cd046abf9caeddc982113e81ba9097a01f3972e9560f5ed64e3495f66d"}, + {file = "time_machine-2.13.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e9a9d150e098be3daee5c9f10859ab1bd14a61abebaed86e6d71f7f18c05b9d7"}, + {file = "time_machine-2.13.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2bd4169b808745d219a69094b3cb86006938d45e7293249694e6b7366225a186"}, + {file = "time_machine-2.13.0-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:8d526cdcaca06a496877cfe61cc6608df2c3a6fce210e076761964ebac7f77cc"}, + {file = "time_machine-2.13.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cfef4ebfb4f055ce3ebc7b6c1c4d0dbfcffdca0e783ad8c6986c992915a57ed3"}, + {file = "time_machine-2.13.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9f128db8997c3339f04f7f3946dd9bb2a83d15e0a40d35529774da1e9e501511"}, + {file = "time_machine-2.13.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21bef5854d49b62e2c33848b5c3e8acf22a3b46af803ef6ff19529949cb7cf9f"}, + {file = "time_machine-2.13.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:32b71e50b07f86916ac04bd1eefc2bd2c93706b81393748b08394509ee6585dc"}, + {file = "time_machine-2.13.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:1ac8ff145c63cd0dcfd9590fe694b5269aacbc130298dc7209b095d101f8cdde"}, + {file = "time_machine-2.13.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:19a3b10161c91ca8e0fd79348665cca711fd2eac6ce336ff9e6b447783817f93"}, + {file = "time_machine-2.13.0-cp311-cp311-win32.whl", hash = "sha256:5f87787d562e42bf1006a87eb689814105b98c4d5545874a281280d0f8b9a2d9"}, + {file = "time_machine-2.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:62fd14a80b8b71726e07018628daaee0a2e00937625083f96f69ed6b8e3304c0"}, + {file = "time_machine-2.13.0-cp311-cp311-win_arm64.whl", hash = "sha256:e9935aff447f5400a2665ab10ed2da972591713080e1befe1bb8954e7c0c7806"}, + {file = "time_machine-2.13.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:34dcdbbd25c1e124e17fe58050452960fd16a11f9d3476aaa87260e28ecca0fd"}, + {file = "time_machine-2.13.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e58d82fe0e59d6e096ada3281d647a2e7420f7da5453b433b43880e1c2e8e0c5"}, + {file = "time_machine-2.13.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71acbc1febbe87532c7355eca3308c073d6e502ee4ce272b5028967847c8e063"}, + {file = "time_machine-2.13.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dec0ec2135a4e2a59623e40c31d6e8a8ae73305ade2634380e4263d815855750"}, + {file = "time_machine-2.13.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e3a2611f8788608ebbcb060a5e36b45911bc3b8adc421b1dc29d2c81786ce4d"}, + {file = "time_machine-2.13.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:42ef5349135626ad6cd889a0a81400137e5c6928502b0817ea9e90bb10702000"}, + {file = "time_machine-2.13.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:6c16d90a597a8c2d3ce22d6be2eb3e3f14786974c11b01886e51b3cf0d5edaf7"}, + {file = "time_machine-2.13.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4f2ae8d0e359b216b695f1e7e7256f208c390db0480601a439c5dd1e1e4e16ce"}, + {file = "time_machine-2.13.0-cp312-cp312-win32.whl", hash = "sha256:f5fa9610f7e73fff42806a2ed8b06d862aa59ce4d178a52181771d6939c3e237"}, + {file = "time_machine-2.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:02b33a8c19768c94f7ffd6aa6f9f64818e88afce23250016b28583929d20fb12"}, + {file = "time_machine-2.13.0-cp312-cp312-win_arm64.whl", hash = "sha256:0cc116056a8a2a917a4eec85661dfadd411e0d8faae604ef6a0e19fe5cd57ef1"}, + {file = "time_machine-2.13.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:de01f33aa53da37530ad97dcd17e9affa25a8df4ab822506bb08101bab0c2673"}, + {file = "time_machine-2.13.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:67fa45cd813821e4f5bec0ac0820869e8e37430b15509d3f5fad74ba34b53852"}, + {file = "time_machine-2.13.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4a2d3db2c3b8e519d5ef436cd405abd33542a7b7761fb05ef5a5f782a8ce0b1"}, + {file = "time_machine-2.13.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7558622a62243be866a7e7c41da48eacd82c874b015ecf67d18ebf65ca3f7436"}, + {file = "time_machine-2.13.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab04cf4e56e1ee65bee2adaa26a04695e92eb1ed1ccc65fbdafd0d114399595a"}, + {file = "time_machine-2.13.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b0c8f24ae611a58782773af34dd356f1f26756272c04be2be7ea73b47e5da37d"}, + {file = "time_machine-2.13.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4ca20f85a973a4ca8b00cf466cd72c27ccc72372549b138fd48d7e70e5a190ab"}, + {file = "time_machine-2.13.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:9fad549521c4c13bdb1e889b2855a86ec835780d534ffd8f091c2647863243be"}, + {file = "time_machine-2.13.0-cp38-cp38-win32.whl", hash = "sha256:20205422fcf2caf9a7488394587df86e5b54fdb315c1152094fbb63eec4e9304"}, + {file = "time_machine-2.13.0-cp38-cp38-win_amd64.whl", hash = "sha256:2dc76ee55a7d915a55960a726ceaca7b9097f67e4b4e681ef89871bcf98f00be"}, + {file = "time_machine-2.13.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7693704c0f2f6b9beed912ff609781edf5fcf5d63aff30c92be4093e09d94b8e"}, + {file = "time_machine-2.13.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:918f8389de29b4f41317d121f1150176fae2cdb5fa41f68b2aee0b9dc88df5c3"}, + {file = "time_machine-2.13.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fe3fda5fa73fec74278912e438fce1612a79c36fd0cc323ea3dc2d5ce629f31"}, + {file = "time_machine-2.13.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5c6245db573863b335d9ca64b3230f623caf0988594ae554c0c794e7f80e3e66"}, + {file = "time_machine-2.13.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e433827eccd6700a34a2ab28fd9361ff6e4d4923f718d2d1dac6d1dcd9d54da6"}, + {file = "time_machine-2.13.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:924377d398b1c48e519ad86a71903f9f36117f69e68242c99fb762a2465f5ad2"}, + {file = "time_machine-2.13.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:66fb3877014dca0b9286b0f06fa74062357bd23f2d9d102d10e31e0f8fa9b324"}, + {file = "time_machine-2.13.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0c9829b2edfcf6b5d72a6ff330d4380f36a937088314c675531b43d3423dd8af"}, + {file = "time_machine-2.13.0-cp39-cp39-win32.whl", hash = "sha256:1a22be4df364f49a507af4ac9ea38108a0105f39da3f9c60dce62d6c6ea4ccdc"}, + {file = "time_machine-2.13.0-cp39-cp39-win_amd64.whl", hash = "sha256:88601de1da06c7cab3d5ed3d5c3801ef683366e769e829e96383fdab6ae2fe42"}, + {file = "time_machine-2.13.0-cp39-cp39-win_arm64.whl", hash = "sha256:3c87856105dcb25b5bbff031d99f06ef4d1c8380d096222e1bc63b496b5258e6"}, + {file = "time_machine-2.13.0.tar.gz", hash = "sha256:c23b2408e3adcedec84ea1131e238f0124a5bc0e491f60d1137ad7239b37c01a"}, +] + +[package.dependencies] +python-dateutil = "*" + +[[package]] +name = "typing-extensions" +version = "4.8.0" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = false +python-versions = ">=3.8" +files = [ + {file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"}, + {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"}, +] + +[[package]] +name = "tzdata" +version = "2023.3" +description = "Provider of IANA time zone data" +optional = false +python-versions = ">=2" +files = [ + {file = "tzdata-2023.3-py2.py3-none-any.whl", hash = "sha256:7e65763eef3120314099b6939b5546db7adce1e7d6f2e179e3df563c70511eda"}, + {file = "tzdata-2023.3.tar.gz", hash = "sha256:11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a"}, +] + +[[package]] +name = "urllib3" +version = "1.26.18" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +files = [ + {file = "urllib3-1.26.18-py2.py3-none-any.whl", hash = "sha256:34b97092d7e0a3a8cf7cd10e386f401b3737364026c45e622aa02903dffe0f07"}, + {file = "urllib3-1.26.18.tar.gz", hash = "sha256:f8ecc1bba5667413457c529ab955bf8c67b45db799d159066261719e328580a0"}, +] + +[package.extras] +brotli = ["brotli (==1.0.9)", "brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] +secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] + +[[package]] +name = "uuid7" +version = "0.1.0" +description = "UUID version 7, generating time-sorted UUIDs with 200ns time resolution and 48 bits of randomness" +optional = false +python-versions = ">=3.7" +files = [ + {file = "uuid7-0.1.0-py2.py3-none-any.whl", hash = "sha256:5e259bb63c8cb4aded5927ff41b444a80d0c7124e8a0ced7cf44efa1f5cccf61"}, + {file = "uuid7-0.1.0.tar.gz", hash = "sha256:8c57aa32ee7456d3cc68c95c4530bc571646defac01895cfc73545449894a63c"}, +] + +[[package]] +name = "uvicorn" +version = "0.23.2" +description = "The lightning-fast ASGI server." +optional = false +python-versions = ">=3.8" +files = [ + {file = "uvicorn-0.23.2-py3-none-any.whl", hash = "sha256:1f9be6558f01239d4fdf22ef8126c39cb1ad0addf76c40e760549d2c2f43ab53"}, + {file = "uvicorn-0.23.2.tar.gz", hash = "sha256:4d3cc12d7727ba72b64d12d3cc7743124074c0a69f7b201512fc50c3e3f1569a"}, +] + +[package.dependencies] +click = ">=7.0" +h11 = ">=0.8" +typing-extensions = {version = ">=4.0", markers = "python_version < \"3.11\""} + +[package.extras] +standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"] + +[[package]] +name = "vcrpy" +version = "4.4.0" +description = "Automatically mock your HTTP interactions to simplify and speed up testing" +optional = false +python-versions = ">=3.7" +files = [ + {file = "vcrpy-4.4.0-py2.py3-none-any.whl", hash = "sha256:560c9d0d8436ced29223ceefb513c3ac3f2e2a60d51a9830f236a1e63167905a"}, + {file = "vcrpy-4.4.0.tar.gz", hash = "sha256:d1109ae93dbc2e7fcbc485849a7600d5dea510d3bef070eec4419c9a72ca2639"}, +] + +[package.dependencies] +PyYAML = "*" +six = ">=1.5" +urllib3 = {version = "<2", markers = "python_version < \"3.10\""} +wrapt = "*" +yarl = "*" + +[[package]] +name = "webencodings" +version = "0.5.1" +description = "Character encoding aliases for legacy web content" +optional = false +python-versions = "*" +files = [ + {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, + {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, +] + +[[package]] +name = "websockets" +version = "10.4" +description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "websockets-10.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d58804e996d7d2307173d56c297cf7bc132c52df27a3efaac5e8d43e36c21c48"}, + {file = "websockets-10.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc0b82d728fe21a0d03e65f81980abbbcb13b5387f733a1a870672c5be26edab"}, + {file = "websockets-10.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ba089c499e1f4155d2a3c2a05d2878a3428cf321c848f2b5a45ce55f0d7d310c"}, + {file = "websockets-10.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33d69ca7612f0ddff3316b0c7b33ca180d464ecac2d115805c044bf0a3b0d032"}, + {file = "websockets-10.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62e627f6b6d4aed919a2052efc408da7a545c606268d5ab5bfab4432734b82b4"}, + {file = "websockets-10.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38ea7b82bfcae927eeffc55d2ffa31665dc7fec7b8dc654506b8e5a518eb4d50"}, + {file = "websockets-10.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e0cb5cc6ece6ffa75baccfd5c02cffe776f3f5c8bf486811f9d3ea3453676ce8"}, + {file = "websockets-10.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ae5e95cfb53ab1da62185e23b3130e11d64431179debac6dc3c6acf08760e9b1"}, + {file = "websockets-10.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7c584f366f46ba667cfa66020344886cf47088e79c9b9d39c84ce9ea98aaa331"}, + {file = "websockets-10.4-cp310-cp310-win32.whl", hash = "sha256:b029fb2032ae4724d8ae8d4f6b363f2cc39e4c7b12454df8df7f0f563ed3e61a"}, + {file = "websockets-10.4-cp310-cp310-win_amd64.whl", hash = "sha256:8dc96f64ae43dde92530775e9cb169979f414dcf5cff670455d81a6823b42089"}, + {file = "websockets-10.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:47a2964021f2110116cc1125b3e6d87ab5ad16dea161949e7244ec583b905bb4"}, + {file = "websockets-10.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e789376b52c295c4946403bd0efecf27ab98f05319df4583d3c48e43c7342c2f"}, + {file = "websockets-10.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7d3f0b61c45c3fa9a349cf484962c559a8a1d80dae6977276df8fd1fa5e3cb8c"}, + {file = "websockets-10.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f55b5905705725af31ccef50e55391621532cd64fbf0bc6f4bac935f0fccec46"}, + {file = "websockets-10.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00c870522cdb69cd625b93f002961ffb0c095394f06ba8c48f17eef7c1541f96"}, + {file = "websockets-10.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f38706e0b15d3c20ef6259fd4bc1700cd133b06c3c1bb108ffe3f8947be15fa"}, + {file = "websockets-10.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f2c38d588887a609191d30e902df2a32711f708abfd85d318ca9b367258cfd0c"}, + {file = "websockets-10.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:fe10ddc59b304cb19a1bdf5bd0a7719cbbc9fbdd57ac80ed436b709fcf889106"}, + {file = "websockets-10.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:90fcf8929836d4a0e964d799a58823547df5a5e9afa83081761630553be731f9"}, + {file = "websockets-10.4-cp311-cp311-win32.whl", hash = "sha256:b9968694c5f467bf67ef97ae7ad4d56d14be2751000c1207d31bf3bb8860bae8"}, + {file = "websockets-10.4-cp311-cp311-win_amd64.whl", hash = "sha256:a7a240d7a74bf8d5cb3bfe6be7f21697a28ec4b1a437607bae08ac7acf5b4882"}, + {file = "websockets-10.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:74de2b894b47f1d21cbd0b37a5e2b2392ad95d17ae983e64727e18eb281fe7cb"}, + {file = "websockets-10.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3a686ecb4aa0d64ae60c9c9f1a7d5d46cab9bfb5d91a2d303d00e2cd4c4c5cc"}, + {file = "websockets-10.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b0d15c968ea7a65211e084f523151dbf8ae44634de03c801b8bd070b74e85033"}, + {file = "websockets-10.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00213676a2e46b6ebf6045bc11d0f529d9120baa6f58d122b4021ad92adabd41"}, + {file = "websockets-10.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:e23173580d740bf8822fd0379e4bf30aa1d5a92a4f252d34e893070c081050df"}, + {file = "websockets-10.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:dd500e0a5e11969cdd3320935ca2ff1e936f2358f9c2e61f100a1660933320ea"}, + {file = "websockets-10.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4239b6027e3d66a89446908ff3027d2737afc1a375f8fd3eea630a4842ec9a0c"}, + {file = "websockets-10.4-cp37-cp37m-win32.whl", hash = "sha256:8a5cc00546e0a701da4639aa0bbcb0ae2bb678c87f46da01ac2d789e1f2d2038"}, + {file = "websockets-10.4-cp37-cp37m-win_amd64.whl", hash = "sha256:a9f9a735deaf9a0cadc2d8c50d1a5bcdbae8b6e539c6e08237bc4082d7c13f28"}, + {file = "websockets-10.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5c1289596042fad2cdceb05e1ebf7aadf9995c928e0da2b7a4e99494953b1b94"}, + {file = "websockets-10.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0cff816f51fb33c26d6e2b16b5c7d48eaa31dae5488ace6aae468b361f422b63"}, + {file = "websockets-10.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:dd9becd5fe29773d140d68d607d66a38f60e31b86df75332703757ee645b6faf"}, + {file = "websockets-10.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45ec8e75b7dbc9539cbfafa570742fe4f676eb8b0d3694b67dabe2f2ceed8aa6"}, + {file = "websockets-10.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f72e5cd0f18f262f5da20efa9e241699e0cf3a766317a17392550c9ad7b37d8"}, + {file = "websockets-10.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:185929b4808b36a79c65b7865783b87b6841e852ef5407a2fb0c03381092fa3b"}, + {file = "websockets-10.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7d27a7e34c313b3a7f91adcd05134315002aaf8540d7b4f90336beafaea6217c"}, + {file = "websockets-10.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:884be66c76a444c59f801ac13f40c76f176f1bfa815ef5b8ed44321e74f1600b"}, + {file = "websockets-10.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:931c039af54fc195fe6ad536fde4b0de04da9d5916e78e55405436348cfb0e56"}, + {file = "websockets-10.4-cp38-cp38-win32.whl", hash = "sha256:db3c336f9eda2532ec0fd8ea49fef7a8df8f6c804cdf4f39e5c5c0d4a4ad9a7a"}, + {file = "websockets-10.4-cp38-cp38-win_amd64.whl", hash = "sha256:48c08473563323f9c9debac781ecf66f94ad5a3680a38fe84dee5388cf5acaf6"}, + {file = "websockets-10.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:40e826de3085721dabc7cf9bfd41682dadc02286d8cf149b3ad05bff89311e4f"}, + {file = "websockets-10.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:56029457f219ade1f2fc12a6504ea61e14ee227a815531f9738e41203a429112"}, + {file = "websockets-10.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f5fc088b7a32f244c519a048c170f14cf2251b849ef0e20cbbb0fdf0fdaf556f"}, + {file = "websockets-10.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2fc8709c00704194213d45e455adc106ff9e87658297f72d544220e32029cd3d"}, + {file = "websockets-10.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0154f7691e4fe6c2b2bc275b5701e8b158dae92a1ab229e2b940efe11905dff4"}, + {file = "websockets-10.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c6d2264f485f0b53adf22697ac11e261ce84805c232ed5dbe6b1bcb84b00ff0"}, + {file = "websockets-10.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9bc42e8402dc5e9905fb8b9649f57efcb2056693b7e88faa8fb029256ba9c68c"}, + {file = "websockets-10.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:edc344de4dac1d89300a053ac973299e82d3db56330f3494905643bb68801269"}, + {file = "websockets-10.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:84bc2a7d075f32f6ed98652db3a680a17a4edb21ca7f80fe42e38753a58ee02b"}, + {file = "websockets-10.4-cp39-cp39-win32.whl", hash = "sha256:c94ae4faf2d09f7c81847c63843f84fe47bf6253c9d60b20f25edfd30fb12588"}, + {file = "websockets-10.4-cp39-cp39-win_amd64.whl", hash = "sha256:bbccd847aa0c3a69b5f691a84d2341a4f8a629c6922558f2a70611305f902d74"}, + {file = "websockets-10.4-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:82ff5e1cae4e855147fd57a2863376ed7454134c2bf49ec604dfe71e446e2193"}, + {file = "websockets-10.4-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d210abe51b5da0ffdbf7b43eed0cfdff8a55a1ab17abbec4301c9ff077dd0342"}, + {file = "websockets-10.4-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:942de28af58f352a6f588bc72490ae0f4ccd6dfc2bd3de5945b882a078e4e179"}, + {file = "websockets-10.4-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9b27d6c1c6cd53dc93614967e9ce00ae7f864a2d9f99fe5ed86706e1ecbf485"}, + {file = "websockets-10.4-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:3d3cac3e32b2c8414f4f87c1b2ab686fa6284a980ba283617404377cd448f631"}, + {file = "websockets-10.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:da39dd03d130162deb63da51f6e66ed73032ae62e74aaccc4236e30edccddbb0"}, + {file = "websockets-10.4-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:389f8dbb5c489e305fb113ca1b6bdcdaa130923f77485db5b189de343a179393"}, + {file = "websockets-10.4-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09a1814bb15eff7069e51fed0826df0bc0702652b5cb8f87697d469d79c23576"}, + {file = "websockets-10.4-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff64a1d38d156d429404aaa84b27305e957fd10c30e5880d1765c9480bea490f"}, + {file = "websockets-10.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:b343f521b047493dc4022dd338fc6db9d9282658862756b4f6fd0e996c1380e1"}, + {file = "websockets-10.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:932af322458da7e4e35df32f050389e13d3d96b09d274b22a7aa1808f292fee4"}, + {file = "websockets-10.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6a4162139374a49eb18ef5b2f4da1dd95c994588f5033d64e0bbfda4b6b6fcf"}, + {file = "websockets-10.4-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c57e4c1349fbe0e446c9fa7b19ed2f8a4417233b6984277cce392819123142d3"}, + {file = "websockets-10.4-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b627c266f295de9dea86bd1112ed3d5fafb69a348af30a2422e16590a8ecba13"}, + {file = "websockets-10.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:05a7233089f8bd355e8cbe127c2e8ca0b4ea55467861906b80d2ebc7db4d6b72"}, + {file = "websockets-10.4.tar.gz", hash = "sha256:eef610b23933c54d5d921c92578ae5f89813438fded840c2e9809d378dc765d3"}, +] + +[[package]] +name = "wrapt" +version = "1.15.0" +description = "Module for decorators, wrappers and monkey patching." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +files = [ + {file = "wrapt-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a"}, + {file = "wrapt-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923"}, + {file = "wrapt-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee"}, + {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727"}, + {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7"}, + {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0"}, + {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec"}, + {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90"}, + {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975"}, + {file = "wrapt-1.15.0-cp310-cp310-win32.whl", hash = "sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1"}, + {file = "wrapt-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e"}, + {file = "wrapt-1.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7"}, + {file = "wrapt-1.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72"}, + {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb"}, + {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e"}, + {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c"}, + {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3"}, + {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92"}, + {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98"}, + {file = "wrapt-1.15.0-cp311-cp311-win32.whl", hash = "sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416"}, + {file = "wrapt-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248"}, + {file = "wrapt-1.15.0-cp35-cp35m-win32.whl", hash = "sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559"}, + {file = "wrapt-1.15.0-cp35-cp35m-win_amd64.whl", hash = "sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639"}, + {file = "wrapt-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba"}, + {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752"}, + {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364"}, + {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475"}, + {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8"}, + {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418"}, + {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2"}, + {file = "wrapt-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1"}, + {file = "wrapt-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420"}, + {file = "wrapt-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317"}, + {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e"}, + {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e"}, + {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0"}, + {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019"}, + {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034"}, + {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653"}, + {file = "wrapt-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0"}, + {file = "wrapt-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e"}, + {file = "wrapt-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145"}, + {file = "wrapt-1.15.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f"}, + {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd"}, + {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b"}, + {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f"}, + {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6"}, + {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094"}, + {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7"}, + {file = "wrapt-1.15.0-cp38-cp38-win32.whl", hash = "sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b"}, + {file = "wrapt-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1"}, + {file = "wrapt-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86"}, + {file = "wrapt-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c"}, + {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d"}, + {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc"}, + {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29"}, + {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a"}, + {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8"}, + {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9"}, + {file = "wrapt-1.15.0-cp39-cp39-win32.whl", hash = "sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff"}, + {file = "wrapt-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6"}, + {file = "wrapt-1.15.0-py3-none-any.whl", hash = "sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640"}, + {file = "wrapt-1.15.0.tar.gz", hash = "sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a"}, +] + +[[package]] +name = "yarl" +version = "1.9.2" +description = "Yet another URL library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "yarl-1.9.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8c2ad583743d16ddbdf6bb14b5cd76bf43b0d0006e918809d5d4ddf7bde8dd82"}, + {file = "yarl-1.9.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:82aa6264b36c50acfb2424ad5ca537a2060ab6de158a5bd2a72a032cc75b9eb8"}, + {file = "yarl-1.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c0c77533b5ed4bcc38e943178ccae29b9bcf48ffd1063f5821192f23a1bd27b9"}, + {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee4afac41415d52d53a9833ebae7e32b344be72835bbb589018c9e938045a560"}, + {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9bf345c3a4f5ba7f766430f97f9cc1320786f19584acc7086491f45524a551ac"}, + {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a96c19c52ff442a808c105901d0bdfd2e28575b3d5f82e2f5fd67e20dc5f4ea"}, + {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:891c0e3ec5ec881541f6c5113d8df0315ce5440e244a716b95f2525b7b9f3608"}, + {file = "yarl-1.9.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c3a53ba34a636a256d767c086ceb111358876e1fb6b50dfc4d3f4951d40133d5"}, + {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:566185e8ebc0898b11f8026447eacd02e46226716229cea8db37496c8cdd26e0"}, + {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:2b0738fb871812722a0ac2154be1f049c6223b9f6f22eec352996b69775b36d4"}, + {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:32f1d071b3f362c80f1a7d322bfd7b2d11e33d2adf395cc1dd4df36c9c243095"}, + {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:e9fdc7ac0d42bc3ea78818557fab03af6181e076a2944f43c38684b4b6bed8e3"}, + {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:56ff08ab5df8429901ebdc5d15941b59f6253393cb5da07b4170beefcf1b2528"}, + {file = "yarl-1.9.2-cp310-cp310-win32.whl", hash = "sha256:8ea48e0a2f931064469bdabca50c2f578b565fc446f302a79ba6cc0ee7f384d3"}, + {file = "yarl-1.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:50f33040f3836e912ed16d212f6cc1efb3231a8a60526a407aeb66c1c1956dde"}, + {file = "yarl-1.9.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:646d663eb2232d7909e6601f1a9107e66f9791f290a1b3dc7057818fe44fc2b6"}, + {file = "yarl-1.9.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aff634b15beff8902d1f918012fc2a42e0dbae6f469fce134c8a0dc51ca423bb"}, + {file = "yarl-1.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a83503934c6273806aed765035716216cc9ab4e0364f7f066227e1aaea90b8d0"}, + {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b25322201585c69abc7b0e89e72790469f7dad90d26754717f3310bfe30331c2"}, + {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22a94666751778629f1ec4280b08eb11815783c63f52092a5953faf73be24191"}, + {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ec53a0ea2a80c5cd1ab397925f94bff59222aa3cf9c6da938ce05c9ec20428d"}, + {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:159d81f22d7a43e6eabc36d7194cb53f2f15f498dbbfa8edc8a3239350f59fe7"}, + {file = "yarl-1.9.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:832b7e711027c114d79dffb92576acd1bd2decc467dec60e1cac96912602d0e6"}, + {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:95d2ecefbcf4e744ea952d073c6922e72ee650ffc79028eb1e320e732898d7e8"}, + {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d4e2c6d555e77b37288eaf45b8f60f0737c9efa3452c6c44626a5455aeb250b9"}, + {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:783185c75c12a017cc345015ea359cc801c3b29a2966c2655cd12b233bf5a2be"}, + {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:b8cc1863402472f16c600e3e93d542b7e7542a540f95c30afd472e8e549fc3f7"}, + {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:822b30a0f22e588b32d3120f6d41e4ed021806418b4c9f0bc3048b8c8cb3f92a"}, + {file = "yarl-1.9.2-cp311-cp311-win32.whl", hash = "sha256:a60347f234c2212a9f0361955007fcf4033a75bf600a33c88a0a8e91af77c0e8"}, + {file = "yarl-1.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:be6b3fdec5c62f2a67cb3f8c6dbf56bbf3f61c0f046f84645cd1ca73532ea051"}, + {file = "yarl-1.9.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:38a3928ae37558bc1b559f67410df446d1fbfa87318b124bf5032c31e3447b74"}, + {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac9bb4c5ce3975aeac288cfcb5061ce60e0d14d92209e780c93954076c7c4367"}, + {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3da8a678ca8b96c8606bbb8bfacd99a12ad5dd288bc6f7979baddd62f71c63ef"}, + {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:13414591ff516e04fcdee8dc051c13fd3db13b673c7a4cb1350e6b2ad9639ad3"}, + {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf74d08542c3a9ea97bb8f343d4fcbd4d8f91bba5ec9d5d7f792dbe727f88938"}, + {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e7221580dc1db478464cfeef9b03b95c5852cc22894e418562997df0d074ccc"}, + {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:494053246b119b041960ddcd20fd76224149cfea8ed8777b687358727911dd33"}, + {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:52a25809fcbecfc63ac9ba0c0fb586f90837f5425edfd1ec9f3372b119585e45"}, + {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:e65610c5792870d45d7b68c677681376fcf9cc1c289f23e8e8b39c1485384185"}, + {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:1b1bba902cba32cdec51fca038fd53f8beee88b77efc373968d1ed021024cc04"}, + {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:662e6016409828ee910f5d9602a2729a8a57d74b163c89a837de3fea050c7582"}, + {file = "yarl-1.9.2-cp37-cp37m-win32.whl", hash = "sha256:f364d3480bffd3aa566e886587eaca7c8c04d74f6e8933f3f2c996b7f09bee1b"}, + {file = "yarl-1.9.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6a5883464143ab3ae9ba68daae8e7c5c95b969462bbe42e2464d60e7e2698368"}, + {file = "yarl-1.9.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5610f80cf43b6202e2c33ba3ec2ee0a2884f8f423c8f4f62906731d876ef4fac"}, + {file = "yarl-1.9.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b9a4e67ad7b646cd6f0938c7ebfd60e481b7410f574c560e455e938d2da8e0f4"}, + {file = "yarl-1.9.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:83fcc480d7549ccebe9415d96d9263e2d4226798c37ebd18c930fce43dfb9574"}, + {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fcd436ea16fee7d4207c045b1e340020e58a2597301cfbcfdbe5abd2356c2fb"}, + {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84e0b1599334b1e1478db01b756e55937d4614f8654311eb26012091be109d59"}, + {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3458a24e4ea3fd8930e934c129b676c27452e4ebda80fbe47b56d8c6c7a63a9e"}, + {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:838162460b3a08987546e881a2bfa573960bb559dfa739e7800ceeec92e64417"}, + {file = "yarl-1.9.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4e2d08f07a3d7d3e12549052eb5ad3eab1c349c53ac51c209a0e5991bbada78"}, + {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:de119f56f3c5f0e2fb4dee508531a32b069a5f2c6e827b272d1e0ff5ac040333"}, + {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:149ddea5abf329752ea5051b61bd6c1d979e13fbf122d3a1f9f0c8be6cb6f63c"}, + {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:674ca19cbee4a82c9f54e0d1eee28116e63bc6fd1e96c43031d11cbab8b2afd5"}, + {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:9b3152f2f5677b997ae6c804b73da05a39daa6a9e85a512e0e6823d81cdad7cc"}, + {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5415d5a4b080dc9612b1b63cba008db84e908b95848369aa1da3686ae27b6d2b"}, + {file = "yarl-1.9.2-cp38-cp38-win32.whl", hash = "sha256:f7a3d8146575e08c29ed1cd287068e6d02f1c7bdff8970db96683b9591b86ee7"}, + {file = "yarl-1.9.2-cp38-cp38-win_amd64.whl", hash = "sha256:63c48f6cef34e6319a74c727376e95626f84ea091f92c0250a98e53e62c77c72"}, + {file = "yarl-1.9.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:75df5ef94c3fdc393c6b19d80e6ef1ecc9ae2f4263c09cacb178d871c02a5ba9"}, + {file = "yarl-1.9.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c027a6e96ef77d401d8d5a5c8d6bc478e8042f1e448272e8d9752cb0aff8b5c8"}, + {file = "yarl-1.9.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f3b078dbe227f79be488ffcfc7a9edb3409d018e0952cf13f15fd6512847f3f7"}, + {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59723a029760079b7d991a401386390c4be5bfec1e7dd83e25a6a0881859e716"}, + {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b03917871bf859a81ccb180c9a2e6c1e04d2f6a51d953e6a5cdd70c93d4e5a2a"}, + {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c1012fa63eb6c032f3ce5d2171c267992ae0c00b9e164efe4d73db818465fac3"}, + {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a74dcbfe780e62f4b5a062714576f16c2f3493a0394e555ab141bf0d746bb955"}, + {file = "yarl-1.9.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c56986609b057b4839968ba901944af91b8e92f1725d1a2d77cbac6972b9ed1"}, + {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2c315df3293cd521033533d242d15eab26583360b58f7ee5d9565f15fee1bef4"}, + {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:b7232f8dfbd225d57340e441d8caf8652a6acd06b389ea2d3222b8bc89cbfca6"}, + {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:53338749febd28935d55b41bf0bcc79d634881195a39f6b2f767870b72514caf"}, + {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:066c163aec9d3d073dc9ffe5dd3ad05069bcb03fcaab8d221290ba99f9f69ee3"}, + {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8288d7cd28f8119b07dd49b7230d6b4562f9b61ee9a4ab02221060d21136be80"}, + {file = "yarl-1.9.2-cp39-cp39-win32.whl", hash = "sha256:b124e2a6d223b65ba8768d5706d103280914d61f5cae3afbc50fc3dfcc016623"}, + {file = "yarl-1.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:61016e7d582bc46a5378ffdd02cd0314fb8ba52f40f9cf4d9a5e7dbef88dee18"}, + {file = "yarl-1.9.2.tar.gz", hash = "sha256:04ab9d4b9f587c06d801c2abfe9317b77cdf996c65a90d5e84ecc45010823571"}, +] + +[package.dependencies] +idna = ">=2.0" +multidict = ">=4.0" + +[[package]] +name = "zipp" +version = "3.17.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +optional = false +python-versions = ">=3.8" +files = [ + {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, + {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] + +[metadata] +lock-version = "2.0" +python-versions = "^3.8" +content-hash = "4c86911e6ecbd5c2712e7a6ff3c4bfefd477491da3c4c0ae161f874ab4db1cc3" diff --git a/openbb_platform/pyproject.toml b/openbb_platform/pyproject.toml index d19fa4ec9b5f..31017874ff0a 100644 --- a/openbb_platform/pyproject.toml +++ b/openbb_platform/pyproject.toml @@ -33,6 +33,7 @@ openbb-biztoc = { version = "^0.1.0a4", optional = true } openbb-cboe = { version = "^0.1.0a4", optional = true } openbb-nasdaq = { version = "^0.1.0a4", optional = true } openbb-quandl = { version = "^0.1.0a4", optional = true } +openbb-seeking-alpha = { version = "^0.1.0a4", optional = true } openbb-yfinance = { version = "^0.1.0a4", optional = true } openbb-charting = { version = "^0.1.0a4", optional = true } @@ -60,6 +61,7 @@ all = [ "openbb-cboe", "openbb-nasdaq", "openbb-quandl", + "openbb-seeking-alpha", "openbb-yfinance", "openbb-charting", "openbb-futures",