From 3f582a77af34629b660a45f9e87582dc7586aa52 Mon Sep 17 00:00:00 2001 From: Danglewood <85772166+deeleeramone@users.noreply.github.com> Date: Tue, 7 Jan 2025 19:32:54 -0800 Subject: [PATCH] [Feature] Add Deribit Futures Data (#6998) * add deribit futures data * linting * linting * linting * pylint * still pylint * still pylint * try removing --no-update again * trick it... * try putting --no-update back in * cut it back out * more explicit hours ago --- .../provider/standard_models/futures_info.py | 18 + .../standard_models/futures_instruments.py | 12 + openbb_platform/dev_install.py | 4 +- .../integration/test_derivatives_api.py | 50 +- .../integration/test_derivatives_python.py | 44 +- .../openbb_derivatives/derivatives_views.py | 16 +- .../futures/futures_router.py | 35 + openbb_platform/providers/deribit/README.md | 33 + .../deribit/openbb_deribit/__init__.py | 13 +- .../openbb_deribit/models/futures_curve.py | 186 ++++ .../models/futures_historical.py | 155 +++ .../openbb_deribit/models/futures_info.py | 224 +++++ .../models/futures_instruments.py | 133 +++ .../deribit/openbb_deribit/utils/helpers.py | 295 +++++- openbb_platform/providers/deribit/poetry.lock | 898 +++++++++-------- ...ibit_futures_curve_fetcher_urllib3_v1.yaml | 528 ++++++++++ ...ibit_futures_curve_fetcher_urllib3_v2.yaml | 528 ++++++++++ ...futures_historical_fetcher_urllib3_v1.yaml | 916 ++++++++++++++++++ ...futures_historical_fetcher_urllib3_v2.yaml | 916 ++++++++++++++++++ ...ribit_futures_info_fetcher_urllib3_v1.yaml | 132 +++ ...ribit_futures_info_fetcher_urllib3_v2.yaml | 132 +++ ...utures_instruments_fetcher_urllib3_v1.yaml | 79 ++ ...utures_instruments_fetcher_urllib3_v2.yaml | 79 ++ .../deribit/tests/test_deribit_fetchers.py | 52 +- 24 files changed, 5003 insertions(+), 475 deletions(-) create mode 100644 openbb_platform/core/openbb_core/provider/standard_models/futures_info.py create mode 100644 openbb_platform/core/openbb_core/provider/standard_models/futures_instruments.py create mode 100644 openbb_platform/providers/deribit/openbb_deribit/models/futures_curve.py create mode 100644 openbb_platform/providers/deribit/openbb_deribit/models/futures_historical.py create mode 100644 openbb_platform/providers/deribit/openbb_deribit/models/futures_info.py create mode 100644 openbb_platform/providers/deribit/openbb_deribit/models/futures_instruments.py create mode 100644 openbb_platform/providers/deribit/tests/record/http/test_deribit_fetchers/test_deribit_futures_curve_fetcher_urllib3_v1.yaml create mode 100644 openbb_platform/providers/deribit/tests/record/http/test_deribit_fetchers/test_deribit_futures_curve_fetcher_urllib3_v2.yaml create mode 100644 openbb_platform/providers/deribit/tests/record/http/test_deribit_fetchers/test_deribit_futures_historical_fetcher_urllib3_v1.yaml create mode 100644 openbb_platform/providers/deribit/tests/record/http/test_deribit_fetchers/test_deribit_futures_historical_fetcher_urllib3_v2.yaml create mode 100644 openbb_platform/providers/deribit/tests/record/http/test_deribit_fetchers/test_deribit_futures_info_fetcher_urllib3_v1.yaml create mode 100644 openbb_platform/providers/deribit/tests/record/http/test_deribit_fetchers/test_deribit_futures_info_fetcher_urllib3_v2.yaml create mode 100644 openbb_platform/providers/deribit/tests/record/http/test_deribit_fetchers/test_deribit_futures_instruments_fetcher_urllib3_v1.yaml create mode 100644 openbb_platform/providers/deribit/tests/record/http/test_deribit_fetchers/test_deribit_futures_instruments_fetcher_urllib3_v2.yaml diff --git a/openbb_platform/core/openbb_core/provider/standard_models/futures_info.py b/openbb_platform/core/openbb_core/provider/standard_models/futures_info.py new file mode 100644 index 00000000000..3a10f285628 --- /dev/null +++ b/openbb_platform/core/openbb_core/provider/standard_models/futures_info.py @@ -0,0 +1,18 @@ +"""Futures Info Standard Model.""" + +from openbb_core.provider.abstract.data import Data +from openbb_core.provider.abstract.query_params import QueryParams +from openbb_core.provider.utils.descriptions import DATA_DESCRIPTIONS +from pydantic import Field + + +class FuturesInfoQueryParams(QueryParams): + """Futures Info Query.""" + + # leaving this empty to let the provider create custom symbol docstrings. + + +class FuturesInfoData(Data): + """Futures Instruments Data.""" + + symbol: str = Field(description=DATA_DESCRIPTIONS.get("symbol", "")) diff --git a/openbb_platform/core/openbb_core/provider/standard_models/futures_instruments.py b/openbb_platform/core/openbb_core/provider/standard_models/futures_instruments.py new file mode 100644 index 00000000000..adb7141001e --- /dev/null +++ b/openbb_platform/core/openbb_core/provider/standard_models/futures_instruments.py @@ -0,0 +1,12 @@ +"""Futures Instruments Standard Model.""" + +from openbb_core.provider.abstract.data import Data +from openbb_core.provider.abstract.query_params import QueryParams + + +class FuturesInstrumentsQueryParams(QueryParams): + """Futures Instruments Query.""" + + +class FuturesInstrumentsData(Data): + """Futures Instruments Data.""" diff --git a/openbb_platform/dev_install.py b/openbb_platform/dev_install.py index b7e74a6fcf4..0690bfaf054 100644 --- a/openbb_platform/dev_install.py +++ b/openbb_platform/dev_install.py @@ -147,7 +147,7 @@ def install_platform_local(_extras: bool = False): extras_args = ["-E", "all"] if _extras else [] subprocess.run( - CMD + ["lock", "--no-update"], + CMD + ["lock"], cwd=PLATFORM_PATH, check=True, ) @@ -192,7 +192,7 @@ def install_platform_cli(): CMD = [sys.executable, "-m", "poetry"] subprocess.run( - CMD + ["lock", "--no-update"], + CMD + ["lock"], cwd=CLI_PATH, check=True, # noqa: S603 ) diff --git a/openbb_platform/extensions/derivatives/integration/test_derivatives_api.py b/openbb_platform/extensions/derivatives/integration/test_derivatives_api.py index deb3e60fabc..836ac4d62ec 100644 --- a/openbb_platform/extensions/derivatives/integration/test_derivatives_api.py +++ b/openbb_platform/extensions/derivatives/integration/test_derivatives_api.py @@ -113,6 +113,15 @@ def test_derivatives_options_unusual(params, headers): "expiration": "2025-12", } ), + ( + { + "provider": "deribit", + "interval": "1d", + "symbol": "BTC,ETH", + "start_date": "2023-01-01", + "end_date": "2023-06-06", + } + ), ], ) @pytest.mark.integration @@ -144,6 +153,7 @@ def test_derivatives_futures_historical(params, headers): "date": "2024-06-25", } ), + ({"provider": "deribit", "date": None, "symbol": "BTC", "hours_ago": 12}), ], ) @pytest.mark.integration @@ -164,7 +174,9 @@ def test_derivatives_futures_curve(params, headers): ({"provider": "intrinio", "date": None, "only_traded": True}), ], ) -@pytest.mark.integration +@pytest.mark.skip( + reason="This test is skipped because the download is excessively large." +) def test_derivatives_options_snapshots(params, headers): """Test the options snapshots endpoint.""" params = {p: v for p, v in params.items() if v} @@ -174,3 +186,39 @@ def test_derivatives_options_snapshots(params, headers): result = requests.get(url, headers=headers, timeout=60) assert isinstance(result, requests.Response) assert result.status_code == 200 + + +@parametrize( + "params", + [ + ({"provider": "deribit"}), + ], +) +@pytest.mark.integration +def test_derivatives_futures_instruments(params, headers): + """Test the futures instruments endpoint.""" + 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/derivatives/futures/instruments?{query_str}" + result = requests.get(url, headers=headers, timeout=10) + assert isinstance(result, requests.Response) + assert result.status_code == 200 + + +@parametrize( + "params", + [ + ({"provider": "deribit", "symbol": "ETH-PERPETUAL"}), + ], +) +@pytest.mark.integration +def test_derivatives_futures_info(params, headers): + """Test the futures info endpoint.""" + 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/derivatives/futures/info?{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/derivatives/integration/test_derivatives_python.py b/openbb_platform/extensions/derivatives/integration/test_derivatives_python.py index b261e35e895..989a6bcd436 100644 --- a/openbb_platform/extensions/derivatives/integration/test_derivatives_python.py +++ b/openbb_platform/extensions/derivatives/integration/test_derivatives_python.py @@ -114,6 +114,15 @@ def test_derivatives_options_unusual(params, obb): "expiration": "2025-12", } ), + ( + { + "provider": "deribit", + "interval": "1d", + "symbol": "BTC,ETH", + "start_date": "2023-01-01", + "end_date": "2023-06-06", + } + ), ], ) @pytest.mark.integration @@ -130,6 +139,7 @@ def test_derivatives_futures_historical(params, obb): [ ({"provider": "yfinance", "symbol": "ES", "date": None}), ({"provider": "cboe", "symbol": "VX", "date": "2024-06-25"}), + ({"provider": "deribit", "date": None, "symbol": "BTC", "hours_ago": 12}), ], ) @pytest.mark.integration @@ -147,10 +157,42 @@ def test_derivatives_futures_curve(params, obb): ({"provider": "intrinio", "date": None, "only_traded": True}), ], ) -@pytest.mark.integration +@pytest.mark.skip( + reason="This test is skipped because the download is excessively large." +) def test_derivatives_options_snapshots(params, obb): """Test the options snapshots endpoint.""" result = obb.derivatives.options.snapshots(**params) assert result assert isinstance(result, OBBject) assert len(result.results) > 0 + + +@parametrize( + "params", + [ + ({"provider": "deribit"}), + ], +) +@pytest.mark.integration +def test_derivatives_futures_instruments(params, obb): + """Test the futures instruments endpoint.""" + result = obb.derivatives.futures.instruments(**params) + assert result + assert isinstance(result, OBBject) + assert len(result.results) > 0 + + +@parametrize( + "params", + [ + ({"provider": "deribit", "symbol": "ETH-PERPETUAL"}), + ], +) +@pytest.mark.integration +def test_derivatives_futures_info(params, obb): + """Test the futures info endpoint.""" + result = obb.derivatives.futures.info(**params) + assert result + assert isinstance(result, OBBject) + assert len(result.results) > 0 diff --git a/openbb_platform/extensions/derivatives/openbb_derivatives/derivatives_views.py b/openbb_platform/extensions/derivatives/openbb_derivatives/derivatives_views.py index ce1b4b90984..84dfbeda63c 100644 --- a/openbb_platform/extensions/derivatives/openbb_derivatives/derivatives_views.py +++ b/openbb_platform/extensions/derivatives/openbb_derivatives/derivatives_views.py @@ -17,6 +17,8 @@ class DerivativesViews: # pylint: disable=import-outside-toplevel from openbb_charting.charts.price_historical import price_historical + kwargs.update({"candles": False, "same_axis": False}) + return price_historical(**kwargs) @staticmethod @@ -107,7 +109,8 @@ class DerivativesViews: provider = kwargs.get("provider", "") - df["expiration"] = df["expiration"].apply(to_datetime).dt.strftime("%b-%Y") + if provider != "deribit": + df["expiration"] = df["expiration"].apply(to_datetime).dt.strftime("%b-%Y") if ( provider == "cboe" @@ -163,6 +166,15 @@ class DerivativesViews: if "date" in df.columns else ["Current"] ) + + if provider == "deribit" and "hours_ago" in df.columns: + dates = [ + str(d) + " Hours Ago" if d > 0 else "Current" + for d in df["hours_ago"].unique().tolist() + ] + df.loc[:, "date"] = df["hours_ago"].apply( + lambda x: str(x) + " Hours Ago" if x > 0 else "Current" + ) figure, color_count = create_fig(figure, df, dates, color_count) # Set the title for the chart @@ -176,7 +188,7 @@ class DerivativesViews: ) if len(dates) == 1 and dates[0] != "Current": title = f"{title} for {dates[0]}" - elif provider == "yfinance": + else: title = f"{symbol.upper()} Futures Curve" # Use the supplied title, if any. diff --git a/openbb_platform/extensions/derivatives/openbb_derivatives/futures/futures_router.py b/openbb_platform/extensions/derivatives/openbb_derivatives/futures/futures_router.py index d9622df2a10..7e456263a9b 100644 --- a/openbb_platform/extensions/derivatives/openbb_derivatives/futures/futures_router.py +++ b/openbb_platform/extensions/derivatives/openbb_derivatives/futures/futures_router.py @@ -60,3 +60,38 @@ async def curve( ) -> OBBject: """Futures Term Structure, current or historical.""" return await OBBject.from_query(Query(**locals())) + + +@router.command( + model="FuturesInstruments", + examples=[ + APIEx(parameters={"provider": "deribit"}), + ], +) +async def instruments( + cc: CommandContext, + provider_choices: ProviderChoices, + standard_params: StandardParams, + extra_params: ExtraParams, +) -> OBBject: + """Get reference data for available futures instruments by provider.""" + return await OBBject.from_query(Query(**locals())) + + +@router.command( + model="FuturesInfo", + examples=[ + APIEx(parameters={"provider": "deribit", "symbol": "BTC"}), + APIEx(parameters={"provider": "deribit", "symbol": "SOLUSDC"}), + APIEx(parameters={"provider": "deribit", "symbol": "SOL_USDC-PERPETUAL"}), + APIEx(parameters={"provider": "deribit", "symbol": "BTC,ETH"}), + ], +) +async def info( + cc: CommandContext, + provider_choices: ProviderChoices, + standard_params: StandardParams, + extra_params: ExtraParams, +) -> OBBject: + """Get current trading statistics by futures contract symbol.""" + return await OBBject.from_query(Query(**locals())) diff --git a/openbb_platform/providers/deribit/README.md b/openbb_platform/providers/deribit/README.md index af2e097201f..c391522e763 100644 --- a/openbb_platform/providers/deribit/README.md +++ b/openbb_platform/providers/deribit/README.md @@ -10,3 +10,36 @@ - SOL - BNB - PAXG +- obb.derivatives.futures.curve + - Support for symbols: + - BTC + - ETH + - PAXG +- obb.derivatives.futures.historical + - Support for symbols (Perpetual Futures): + - ADAUSDC + - ALGOUSDC + - AVAXUSDC + - BCHUSDC + - BNBUSDC + - BTC + - BTCUSDC + - BTCUSDT + - DOGEUSDC + - DOTUSDC + - ETH + - ETHUSDC + - ETHUSDT + - LINKUSDC + - LTCUSDC + - NEARUSDC + - PAXGUSDC + - SOLUSDC + - TRXUSDC + - UNIUSDC + - XRPUSDC + - Additional symbols include all Deribit instrument names of current open contracts for BTC, ETH, and PAXG futures. +- obb.derivatives.futures.instruments + - Reference data for all current futures instruments. +- obb.derivatives.futures.info + - Key stats by symbol (multiple items allowed). diff --git a/openbb_platform/providers/deribit/openbb_deribit/__init__.py b/openbb_platform/providers/deribit/openbb_deribit/__init__.py index c09d418bf07..ac4d98966bb 100644 --- a/openbb_platform/providers/deribit/openbb_deribit/__init__.py +++ b/openbb_platform/providers/deribit/openbb_deribit/__init__.py @@ -1,7 +1,10 @@ """OpenBB Deribit Provider Module.""" from openbb_core.provider.abstract.provider import Provider - +from openbb_deribit.models.futures_curve import DeribitFuturesCurveFetcher +from openbb_deribit.models.futures_historical import DeribitFuturesHistoricalFetcher +from openbb_deribit.models.futures_info import DeribitFuturesInfoFetcher +from openbb_deribit.models.futures_instruments import DeribitFuturesInstrumentsFetcher from openbb_deribit.models.options_chains import DeribitOptionsChainsFetcher deribit_provider = Provider( @@ -9,7 +12,13 @@ deribit_provider = Provider( website="https://deribit.com/", description="""Unofficial Python client for public data published by Deribit.""", credentials=None, - fetcher_dict={"OptionsChains": DeribitOptionsChainsFetcher}, + fetcher_dict={ + "FuturesCurve": DeribitFuturesCurveFetcher, + "FuturesHistorical": DeribitFuturesHistoricalFetcher, + "FuturesInfo": DeribitFuturesInfoFetcher, + "FuturesInstruments": DeribitFuturesInstrumentsFetcher, + "OptionsChains": DeribitOptionsChainsFetcher, + }, repr_name="Deribit Public Data", instructions="This provider does not require any credentials and is not meant for trading.", ) diff --git a/openbb_platform/providers/deribit/openbb_deribit/models/futures_curve.py b/openbb_platform/providers/deribit/openbb_deribit/models/futures_curve.py new file mode 100644 index 00000000000..364c5c97226 --- /dev/null +++ b/openbb_platform/providers/deribit/openbb_deribit/models/futures_curve.py @@ -0,0 +1,186 @@ +"""Deribit Futures Curve Model.""" + +# pylint: disable=unused-argument + +from typing import Any, Optional, Union + +from openbb_core.app.model.abstract.error import OpenBBError +from openbb_core.provider.abstract.fetcher import Fetcher +from openbb_core.provider.standard_models.futures_curve import ( + FuturesCurveData, + FuturesCurveQueryParams, +) +from openbb_core.provider.utils.descriptions import ( + QUERY_DESCRIPTIONS, +) +from openbb_core.provider.utils.errors import EmptyDataError +from openbb_deribit.utils.helpers import ( + DERIBIT_FUTURES_CURVE_SYMBOLS, + FuturesCurveSymbols, +) +from pydantic import Field, field_validator, model_validator + + +class DeribitFuturesCurveQueryParams(FuturesCurveQueryParams): + """ + Deribit Futures Curve Query. + + Source: https://docs.deribit.com/?shell#public-ticker + """ + + __json_schema_extra__ = { + "symbol": { + "multiple_items_allowed": False, + "choices": DERIBIT_FUTURES_CURVE_SYMBOLS, + }, + "hours_ago": { + "multiple_items_allowed": True, + }, + } + + symbol: FuturesCurveSymbols = Field( + default="BTC", + description=QUERY_DESCRIPTIONS.get("symbol", "") + + " Default is 'btc' Supported symbols are: ['btc', 'eth', 'paxg']", + ) + hours_ago: Optional[Union[int, list[int], str]] = Field( + default=None, + description="Compare the current curve with the specified number of hours ago. Default is None.", + ) + + @field_validator("symbol", mode="before", check_fields=False) + @classmethod + def validate_symbol(cls, v): + """Validate the symbol.""" + symbol = v.upper() + if symbol not in DERIBIT_FUTURES_CURVE_SYMBOLS: + raise ValueError( + f"Invalid Deribit symbol, {symbol}. Supported symbols are: {', '.join(DERIBIT_FUTURES_CURVE_SYMBOLS)}" + ) + return symbol + + @field_validator("hours_ago", mode="before", check_fields=False) + @classmethod + def _validate_hours_ago(cls, v): + """Validate hours ago.""" + if isinstance(v, str): + return v + if isinstance(v, int): + return v + if isinstance(v, list): + return ",".join([str(i) for i in v]) + return None + + @model_validator(mode="before") + @classmethod + def _validate_model(cls, values): + """Validate the model.""" + if values.get("date"): + raise ValueError( + "Date field is not supported for Deribit provider. Use 'hours_ago' instead." + ) + return values + + +class DeribitFuturesCurveData(FuturesCurveData): + """Deribit Futures Curve Data.""" + + hours_ago: Optional[int] = Field( + default=None, + description="The number of hours ago represented by the price." + + " Only available when hours_ago is set in the query.", + ) + + +class DeribitFuturesCurveFetcher( + Fetcher[DeribitFuturesCurveQueryParams, list[DeribitFuturesCurveData]] +): + """Deribit Futures Curve Fetcher.""" + + @staticmethod + def transform_query(params: dict[str, Any]) -> DeribitFuturesCurveQueryParams: + """Transform query params.""" + return DeribitFuturesCurveQueryParams(**params) + + @staticmethod + async def aextract_data( + query: DeribitFuturesCurveQueryParams, + credentials: Optional[dict[str, str]], + **kwargs: Any, + ) -> list: + """Extract the raw data.""" + # pylint: disable=import-outside-toplevel + import asyncio # noqa + from openbb_deribit.utils.helpers import ( + get_futures_curve_symbols, + get_ticker_data, + get_futures_curve_by_hours_ago, + ) + + try: + symbols = await get_futures_curve_symbols(query.symbol) + tasks = [get_ticker_data(s) for s in symbols] + data = await asyncio.gather(*tasks, return_exceptions=True) + + if query.hours_ago is not None: + num_hours = query.hours_ago + + hours_ago = ( + [int(d) for d in num_hours.split(",")] + if isinstance(num_hours, str) + else [int(num_hours)] if isinstance(num_hours, int) else num_hours + ) + + for hours in hours_ago: + hours_data = await get_futures_curve_by_hours_ago( + query.symbol, hours + ) + if hours_data: + data.extend(hours_data) + return data + except Exception as e: # pylint: disable=broad-except + raise OpenBBError( + f"Failed to get futures curve -> {e.__class__.__name__ if hasattr(e, '__class__') else e}: {e.args}" + ) from e + + @staticmethod + def transform_data( + query: DeribitFuturesCurveQueryParams, data: list, **kwargs: Any + ) -> list[DeribitFuturesCurveData]: + """Transform the data.""" + # pylint: disable=import-outside-toplevel + from datetime import datetime # noqa + from pandas import to_datetime + + if not data: + raise EmptyDataError("No data found") + + futures_curve: list[DeribitFuturesCurveData] = [] + + for d in data: + + if not d: + continue + + ins_name = d.get("instrument_name", "") + exp = ins_name.split("-")[1] + hours_ago = d.get("hours_ago", 0) + exp = ( + datetime.today().strftime("%Y-%m-%d") + if exp == "PERPETUAL" + else to_datetime(exp).strftime("%Y-%m-%d") + ) + + price = d.get("last_price", d.get("mark_price")) + + result = {"expiration": exp, "price": price} + if query.hours_ago: + result["hours_ago"] = hours_ago + + if price: + futures_curve.append(DeribitFuturesCurveData.model_validate(result)) + + if not futures_curve: + raise EmptyDataError("No data found.") + + return sorted(futures_curve, key=lambda x: x.expiration) diff --git a/openbb_platform/providers/deribit/openbb_deribit/models/futures_historical.py b/openbb_platform/providers/deribit/openbb_deribit/models/futures_historical.py new file mode 100644 index 00000000000..b5b7394ac41 --- /dev/null +++ b/openbb_platform/providers/deribit/openbb_deribit/models/futures_historical.py @@ -0,0 +1,155 @@ +"""Deribit Futures Historical Model.""" + +# pylint: disable=unused-argument + +from datetime import datetime, timedelta +from typing import Any, Optional + +from openbb_core.app.model.abstract.error import OpenBBError +from openbb_core.provider.abstract.fetcher import Fetcher +from openbb_core.provider.standard_models.futures_historical import ( + FuturesHistoricalData, + FuturesHistoricalQueryParams, +) +from openbb_core.provider.utils.descriptions import QUERY_DESCRIPTIONS +from openbb_core.provider.utils.errors import EmptyDataError +from openbb_deribit.utils.helpers import DERIBIT_INTERVALS, DeribitIntervals +from pydantic import Field, field_validator, model_validator + + +class DeribitFuturesHistoricalQueryParams(FuturesHistoricalQueryParams): + """ + Deribit Futures historical Price Query. + + Source: https://docs.deribit.com/?shell#public-get_tradingview_chart_data + """ + + __json_schema_extra__ = { + "symbol": {"multiple_items_allowed": True}, + "interval": { + "multiple_items_allowed": False, + "choices": DERIBIT_INTERVALS, + }, + } + + interval: DeribitIntervals = Field( + default="1d", description=QUERY_DESCRIPTIONS.get("interval", "") + ) + + @field_validator("symbol", mode="before", check_fields=False) + @classmethod + def _validate_symbol(cls, v): + """Validate the symbol.""" + # pylint: disable=import-outside-toplevel + from openbb_core.provider.utils.helpers import run_async + from openbb_deribit.utils.helpers import ( + get_futures_symbols, + get_perpetual_symbols, + ) + + if not v: + raise ValueError("Symbol is required.") + + futures_symbols = run_async(get_futures_symbols) + perpetual_symbols = run_async(get_perpetual_symbols) + all_symbols = list(perpetual_symbols) + futures_symbols + symbols = v.upper().split(",") + new_symbols: list = [] + + for symbol in symbols: + if symbol not in all_symbols: + raise ValueError( + f"Invalid Deribit symbol: {symbol}. Supported symbols are: {', '.join(all_symbols)}" + ) + if symbol in perpetual_symbols: + new_symbols.append(perpetual_symbols[symbol]) + else: + new_symbols.append(symbol) + + return ",".join(new_symbols) + + @model_validator(mode="before") + @classmethod + def _validate_model(cls, values): + """Validate the model.""" + interval = values.get("interval") + now = datetime.today() + + if not values.get("start_date"): + if interval == "1m": + start = now - timedelta(days=30) + elif interval in ["3m", "5m"]: + start = now - timedelta(days=60) + elif interval in ["15m", "30m"]: + start = now - timedelta(days=90) + else: + start = now - timedelta(days=364) + + values["start_date"] = start.strftime("%Y-%m-%d") + + if not values.get("end_date"): + values["end_date"] = (now + timedelta(days=1)).strftime("%Y-%m-%d") + + return values + + +class DeribitFuturesHistoricalData(FuturesHistoricalData): + """Deribit Futures Historical Data.""" + + volume_notional: float = Field(description="Trading volume in quote currency.") + + +class DeribitFuturesHistoricalFetcher( + Fetcher[DeribitFuturesHistoricalQueryParams, list[DeribitFuturesHistoricalData]] +): + """Deribit Futures Historical Fetcher.""" + + @staticmethod + def transform_query(params: dict[str, Any]) -> DeribitFuturesHistoricalQueryParams: + """Transform the query.""" + return DeribitFuturesHistoricalQueryParams(**params) + + @staticmethod + async def aextract_data( + query: DeribitFuturesHistoricalQueryParams, + credentials: Optional[dict[str, str]], + **kwargs: Any, + ) -> list: + """Extract the raw data.""" + # pylint: disable=import-outside-toplevel + from openbb_deribit.utils.helpers import get_ohlc_data + + symbols = query.symbol.split(",") + results: list = [] + + for symbol in symbols: + try: + data = await get_ohlc_data( + symbol=symbol, + interval=query.interval, + start_date=query.start_date, + end_date=query.end_date, + ) + if data: + results.extend(data) + except OpenBBError as e: + raise e from e + + if not results: + raise EmptyDataError("No data found.") + + return sorted(results, key=lambda x: x["date"]) + + @staticmethod + def transform_data( + query: DeribitFuturesHistoricalQueryParams, data: list, **kwargs: Any + ) -> list[DeribitFuturesHistoricalData]: + """Transform the data.""" + symbols = query.symbol.split(",") + if len(symbols) == 1: + results: list[DeribitFuturesHistoricalData] = [] + for d in data: + _ = d.pop("symbol", None) + results.append(DeribitFuturesHistoricalData.model_validate(d)) + return [DeribitFuturesHistoricalData.model_validate(d) for d in data] + return [DeribitFuturesHistoricalData.model_validate(d) for d in data] diff --git a/openbb_platform/providers/deribit/openbb_deribit/models/futures_info.py b/openbb_platform/providers/deribit/openbb_deribit/models/futures_info.py new file mode 100644 index 00000000000..9f79f0e1d67 --- /dev/null +++ b/openbb_platform/providers/deribit/openbb_deribit/models/futures_info.py @@ -0,0 +1,224 @@ +"""Deribit Futures Info Models.""" + +# pylint: disable=unused-argument + +from datetime import datetime +from typing import Any, Literal, Optional + +from openbb_core.provider.abstract.fetcher import Fetcher +from openbb_core.provider.standard_models.futures_info import ( + FuturesInfoData, + FuturesInfoQueryParams, +) +from openbb_core.provider.utils.descriptions import ( + DATA_DESCRIPTIONS, + QUERY_DESCRIPTIONS, +) +from pydantic import ConfigDict, Field, field_validator + + +class DeribitFuturesInfoQueryParams(FuturesInfoQueryParams): + """Deribit Futures Instruments Query.""" + + __json_schema_extra__ = { + "symbol": {"multiple_items_allowed": True}, + } + + symbol: str = Field( + description=QUERY_DESCRIPTIONS.get("symbol", "") + + " Perpetual contracts can be referenced by their currency pair - i.e, SOLUSDC" + + " - or by their official Deribit symbol - i.e, SOL_USDC-PERPETUAL" + + " For a list of currently available instruments, use `derivatives.futures.instruments()`" + ) + + @field_validator("symbol", mode="before", check_fields=False) + @classmethod + def _validate_symbol(cls, v): + """Validate the symbol.""" + # pylint: disable=import-outside-toplevel + from openbb_core.provider.utils.helpers import run_async + from openbb_deribit.utils.helpers import ( + get_futures_symbols, + get_perpetual_symbols, + ) + + symbols = v.split(",") + new_symbols: list = [] + perpetual_symbols = run_async(get_perpetual_symbols) + futures_symbols = run_async(get_futures_symbols) + all_symbols = futures_symbols + list(perpetual_symbols) + + for s in symbols: + if s not in all_symbols: + raise ValueError( + f"Invalid symbol: {s}. Valid symbols are: {all_symbols}" + ) + if s in perpetual_symbols: + new_symbols.append(perpetual_symbols[s]) + else: + new_symbols.append(s) + + return ",".join(new_symbols) + + +class DeribitFuturesInfoData(FuturesInfoData): + """Deribit Futures Info Data.""" + + __alias_dict__ = { + "symbol": "instrument_name", + "change_percent": "price_change", + } + model_config = ConfigDict(extra="ignore") + + symbol: str = Field(description=DATA_DESCRIPTIONS.get("symbol", "")) + state: Literal["open", "closed"] = Field( + description="The state of the order book. Possible values are open and closed." + ) + open_interest: float = Field( + description="The total amount of outstanding contracts in the corresponding amount units." + ) + index_price: float = Field( + description="Current index (reference) price", + json_schema_extra={"x-unit_measurement": "currency"}, + ) + best_ask_amount: Optional[float] = Field( + default=None, + description="It represents the requested order size of all best asks", + ) + best_ask_price: Optional[float] = Field( + default=None, + description="The current best ask price, null if there aren't any asks", + json_schema_extra={"x-unit_measurement": "currency"}, + ) + best_bid_price: Optional[float] = Field( + default=None, + description="The current best bid price, null if there aren't any bids", + json_schema_extra={"x-unit_measurement": "currency"}, + ) + best_bid_amount: Optional[float] = Field( + default=None, + description="It represents the requested order size of all best bids", + ) + last_price: Optional[float] = Field( + default=None, + description="The price for the last trade", + json_schema_extra={"x-unit_measurement": "currency"}, + ) + high: Optional[float] = Field( + default=None, + description="Highest price during 24h", + json_schema_extra={"x-unit_measurement": "currency"}, + ) + low: Optional[float] = Field( + default=None, + description="Lowest price during 24h", + json_schema_extra={"x-unit_measurement": "currency"}, + ) + change_percent: Optional[float] = Field( + default=None, + description="24-hour price change expressed as a percentage, null if there weren't any trades", + json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, + ) + volume: Optional[float] = Field( + default=None, + description="Volume during last 24h in base currency", + json_schema_extra={"x-unit_measurement": "currency"}, + ) + volume_usd: Optional[float] = Field( + default=None, + description="Volume in USD", + json_schema_extra={"x-unit_measurement": "currency"}, + ) + mark_price: float = Field( + description="The mark price for the instrument", + json_schema_extra={"x-unit_measurement": "currency"}, + ) + settlement_price: Optional[float] = Field( + default=None, + description="The settlement price for the instrument. Only when state = open", + json_schema_extra={"x-unit_measurement": "currency"}, + ) + delivery_price: Optional[float] = Field( + default=None, + description="The settlement price for the instrument. Only when state = closed.", + json_schema_extra={"x-unit_measurement": "currency"}, + ) + estimated_delivery_price: float = Field( + description="Estimated delivery price for the market.", + json_schema_extra={"x-unit_measurement": "currency"}, + ) + current_funding: Optional[float] = Field( + default=None, + description="Current funding (perpetual only)", + ) + funding_8h: Optional[float] = Field( + default=None, + description="Funding 8h (perpetual only)", + ) + interest_value: Optional[float] = Field( + default=None, + description="Value used to calculate realized_funding in positions (perpetual only)", + ) + max_price: float = Field( + description="The maximum price for the future." + + " Any buy orders submitted higher than this price, will be clamped to this maximum.", + json_schema_extra={"x-unit_measurement": "currency"}, + ) + min_price: float = Field( + description="The minimum price for the future." + + " Any sell orders submitted lower than this price will be clamped to this minimum.", + json_schema_extra={"x-unit_measurement": "currency"}, + ) + timestamp: datetime = Field(description="The timestamp of the data.") + + @field_validator("change_percent", mode="before", check_fields=False) + @classmethod + def _validate_change_percent(cls, v): + """Validate the change percent.""" + return v / 100 if v else v + + +class DeribitFuturesInfoFetcher( + Fetcher[DeribitFuturesInfoQueryParams, list[DeribitFuturesInfoData]] +): + """Deribit Futures Info Fetcher.""" + + @staticmethod + def transform_query(params: dict[str, Any]) -> DeribitFuturesInfoQueryParams: + """Transform the query.""" + return DeribitFuturesInfoQueryParams(**params) + + @staticmethod + async def aextract_data( + query: DeribitFuturesInfoQueryParams, + credentials: Optional[dict[str, str]], + **kwargs: Any, + ) -> list: + """Extract data from the response.""" + # pylint: disable=import-outside-toplevel + import asyncio # noqa + from openbb_core.provider.utils.errors import EmptyDataError, OpenBBError + from openbb_deribit.utils.helpers import get_ticker_data + + result: list = [] + symbols = query.symbol.split(",") + try: + tasks = [get_ticker_data(symbol) for symbol in symbols] + for task in asyncio.as_completed(tasks, timeout=10): + result.append(await task) + except Exception as e: # pylint: disable=broad-except + raise OpenBBError(f"Error fetching data: {e}") from e + + if not result: + raise EmptyDataError("No data found for the given symbol(s).") + + return sorted(result, key=lambda x: symbols.index(x["instrument_name"])) + + @staticmethod + def transform_data( + query: DeribitFuturesInfoQueryParams, + data: list, + **kwargs: Any, + ) -> list[DeribitFuturesInfoData]: + """Transform the data.""" + return [DeribitFuturesInfoData(**d) for d in data] diff --git a/openbb_platform/providers/deribit/openbb_deribit/models/futures_instruments.py b/openbb_platform/providers/deribit/openbb_deribit/models/futures_instruments.py new file mode 100644 index 00000000000..91c4113ec67 --- /dev/null +++ b/openbb_platform/providers/deribit/openbb_deribit/models/futures_instruments.py @@ -0,0 +1,133 @@ +"""Deribit Futures Instruments Model.""" + +# pylint: disable=unused-argument + +from datetime import datetime +from typing import Any, Optional + +from openbb_core.app.model.abstract.error import OpenBBError +from openbb_core.provider.abstract.fetcher import Fetcher +from openbb_core.provider.standard_models.futures_instruments import ( + FuturesInstrumentsData, + FuturesInstrumentsQueryParams, +) +from openbb_core.provider.utils.descriptions import DATA_DESCRIPTIONS +from pydantic import ConfigDict, Field, field_validator + + +class DeribitFuturesInstrumentsQueryParams(FuturesInstrumentsQueryParams): + """Deribit Futures Instruments Query.""" + + +class DeribitFuturesInstrumentData(FuturesInstrumentsData): + """Deribit Futures Instrument Data.""" + + __alias_dict__ = { + "symbol": "instrument_name", + } + + model_config = ConfigDict(extra="ignore") + + instrument_id: int = Field(description="Deribit Instrument ID") + symbol: str = Field(description=DATA_DESCRIPTIONS.get("symbol", "")) + base_currency: str = Field(description="The underlying currency being traded.") + counter_currency: str = Field(description="Counter currency for the instrument.") + quote_currency: str = Field( + description="The currency in which the instrument prices are quoted." + ) + settlement_currency: Optional[str] = Field( + default=None, description="Settlement currency for the instrument." + ) + future_type: str = Field(description="Type of the instrument. linear or reversed") + settlement_period: Optional[str] = Field( + default=None, description="The settlement period." + ) + price_index: str = Field( + description="Name of price index that is used for this instrument" + ) + contract_size: float = Field(description="Contract size for instrument.") + is_active: bool = Field( + description="Indicates if the instrument can currently be traded." + ) + creation_timestamp: datetime = Field( + description="The time when the instrument was first created (milliseconds since the UNIX epoch)." + ) + expiration_timestamp: Optional[datetime] = Field( + default=None, + description="The time when the instrument will expire (milliseconds since the UNIX epoch).", + ) + tick_size: float = Field( + description="Specifies minimal price change and, as follows, the number of decimal places for instrument prices." + ) + min_trade_amount: float = Field( + description="Minimum amount for trading, in USD units." + ) + max_leverage: int = Field(description="Maximal leverage for instrument.") + max_liquidation_commission: float = Field( + description="Maximal liquidation trade commission for instrument." + ) + block_trade_commission: float = Field( + description="Block Trade commission for instrument." + ) + block_trade_min_trade_amount: float = Field( + description="Minimum amount for block trading." + ) + block_trade_tick_size: float = Field( + description="Specifies minimal price change for block trading." + ) + + maker_commission: Optional[float] = Field( + default=None, description="Maker commission for instrument." + ) + taker_commission: Optional[float] = Field( + default=None, description="Taker commission for instrument." + ) + + @field_validator("expiration_timestamp", mode="before", check_fields=False) + @classmethod + def _validate_expiration(cls, v): + """Validate the expiration timestamp.""" + if int(v) == 32503708800000: + return None + return v + + +class DeribitFuturesInstrumentsFetcher( + Fetcher[DeribitFuturesInstrumentsQueryParams, list[DeribitFuturesInstrumentData]] +): + """Deribit Futures Instruments Fetcher.""" + + @staticmethod + def transform_query(params: dict[str, Any]) -> DeribitFuturesInstrumentsQueryParams: + """Transform the query.""" + return DeribitFuturesInstrumentsQueryParams(**params) + + @staticmethod + async def aextract_data( + query: DeribitFuturesInstrumentsQueryParams, + credentials: Optional[dict[str, str]], + **kwargs: Any, + ) -> list: + """Extract data from Deribit API.""" + # pylint: disable=import-outside-toplevel + from openbb_deribit.utils.helpers import get_instruments + + try: + data = await get_instruments("all", "future") + except Exception as e: # pylint: disable=broad-except + raise OpenBBError(f"Error fetching data: {e}") from e + if not data: + raise OpenBBError( + "There was an error with the request and it was returned empty." + ) + + return data + + @staticmethod + def transform_data( + query: DeribitFuturesInstrumentsQueryParams, + data: list, + **kwargs: Any, + ) -> list[DeribitFuturesInstrumentData]: + """Transform the data.""" + return [DeribitFuturesInstrumentData.model_validate(d) for d in data] diff --git a/openbb_platform/providers/deribit/openbb_deribit/utils/helpers.py b/openbb_platform/providers/deribit/openbb_deribit/utils/helpers.py index 1cddcf297eb..f388283cb9b 100644 --- a/openbb_platform/providers/deribit/openbb_deribit/utils/helpers.py +++ b/openbb_platform/providers/deribit/openbb_deribit/utils/helpers.py @@ -1,6 +1,6 @@ """Deribit Helpers Module.""" -from typing import Literal, Optional +from typing import Literal, Optional, Union from async_lru import alru_cache from openbb_core.app.model.abstract.error import OpenBBError @@ -11,13 +11,48 @@ CURRENCIES = ["BTC", "ETH", "USDC", "USDT", "EURR", "all"] Currencies = Literal["BTC", "ETH", "USDC", "USDT", "EURR", "all"] DERIVATIVE_TYPES = ["future", "option", "spot", "future_combo", "option_combo"] DerivativeTypes = Literal["future", "option", "spot", "future_combo", "option_combo"] +DERIBIT_FUTURES_CURVE_SYMBOLS = ["BTC", "ETH", "PAXG"] +FuturesCurveSymbols = Literal["BTC", "ETH", "PAXG"] BASE_URL = "https://www.deribit.com" +DERIBIT_INTERVALS = [ + "1m", + "3m", + "5m", + "10m", + "15m", + "30m", + "1h", + "2h", + "3h", + "6h", + "12h", + "1d", +] +DeribitIntervals = Literal[ + "1m", "3m", "5m", "10m", "15m", "30m", "1h", "2h", "3h", "6h", "12h", "1d" +] +INTERVAL_MAP = { + "1m": "1", + "3m": "3", + "5m": "5", + "10m": "10", + "15m": "15", + "30m": "30", + "1h": "60", + "2h": "120", + "3h": "180", + "6h": "360", + "12h": "720", + "1d": "1D", +} + @alru_cache(maxsize=64) async def get_instruments( currency: Currencies = "BTC", derivative_type: Optional[DerivativeTypes] = None, + expired: bool = False, ) -> list[dict]: """ Get Deribit instruments. @@ -51,6 +86,9 @@ async def get_instruments( if derivative_type is not None: url += f"&kind={derivative_type}" + if expired: + url += f"&expired={str(expired).lower()}" + try: response = await amake_request(url) return response.get("result", []) # type: ignore @@ -67,7 +105,7 @@ async def get_options_symbols(symbol: OptionsSymbols = "BTC") -> dict: Parameters ---------- symbol : OptionsSymbols - The underlying symbol to get options for. Default is "BTC". + The underlying symbol to get options for. Default is "btc". Returns ------- @@ -109,3 +147,256 @@ async def get_options_symbols(symbol: OptionsSymbols = "BTC") -> dict: expirations[item[0]] = item[1] return {k: [d for d in all_options if v in d] for k, v in expirations.items()} + + +async def get_futures_curve_symbols(symbol: FuturesCurveSymbols = "BTC") -> list[str]: + """ + Get a list of futures symbols for a given symbol. + + Parameters + ---------- + symbol : FuturesCurveSymbols + The symbol to get futures symbols for. + + Returns + ------- + list[str] + A list of futures symbols. + """ + symbol = symbol.upper() # type: ignore + if symbol not in DERIBIT_FUTURES_CURVE_SYMBOLS: + raise ValueError( + f"Invalid Deribit symbol. Supported symbols are: {', '.join(DERIBIT_FUTURES_CURVE_SYMBOLS)}", + ) + + currency = "USDC" if symbol == "PAXG" else symbol + instruments = await get_instruments(currency, "future") + + symbols: list = [] + for d in instruments: + ins_name = d.get("instrument_name", "") + if ins_name.startswith(symbol): + symbols.append(ins_name) + + return symbols + + +async def get_ticker_data(symbol: str) -> dict: + """ + Get ticker data. + + Parameters + ---------- + symbol : str + The symbol to get ticker data for. + + Returns + ------- + dict + The ticker data. + """ + # pylint: disable=import-outside-toplevel + from openbb_core.provider.utils.helpers import amake_request + + url = f"{BASE_URL}/api/v2/public/ticker?instrument_name={symbol}" + + try: + response = await amake_request(url) + if response.get("error"): + raise OpenBBError(response.get("error")) + data = response.get("result", {}) + stats = data.pop("stats", {}) + return {**data, **stats} + + except Exception as e: # pylint: disable=broad-except + raise OpenBBError(f"Failed to get ticker data -> {e}: {e.args[0]}") from e + + +async def get_perpetual_symbols() -> dict: + """ + Get perpetual symbols. + + Returns + ------- + dict + A dictionary of short symbols to full perpetual symbols. + """ + instruments = await get_instruments("all", "future") + return { + d["instrument_name"].split("-")[0].replace("_", ""): d["instrument_name"] + for d in instruments + if d.get("settlement_period") == "perpetual" + } + + +async def get_ohlc_data( + symbol: str, start_date: str, end_date: str, interval: DeribitIntervals = "1d" +) -> list[dict]: + """Get OHLC data for a given symbol. Enter dates in the format 'YYYY-MM-DD'.""" + # pylint: disable=import-outside-toplevel + import asyncio # noqa + from openbb_core.provider.utils.errors import EmptyDataError + from openbb_core.provider.utils.helpers import amake_request + from pandas import DataFrame, date_range, to_datetime + + new_interval = INTERVAL_MAP.get(interval, interval) + + all_instruments = await get_instruments("all", None) + all_symbols = { + d.get("instrument_name"): d.get("creation_timestamp") for d in all_instruments + } + creation_date = all_symbols.get(symbol, 0) + use_start = to_datetime(start_date).timestamp() * 1000 > creation_date + + if creation_date == 0: + raise ValueError(f"Symbol {symbol} not found") + + def generate_urls(symbol, start_date, end_date, interval, window_size=5000): + """Generate urls for historical data breaking it down into requests of length window_size.""" + interval_period = f"{interval}min" if interval.lower() != "1d" else "1d" + interval = "1D" if interval.lower() == "1d" else interval + dates = date_range( + start=start_date if use_start else creation_date, + end=end_date, + freq=interval_period, + ) + windows = [ + (dates[i], dates[min(i + window_size, len(dates) - 1)]) + for i in range(0, len(dates), window_size) + ] + urls: list = [] + for start, end in windows: + start_timestamp = int(start.timestamp() * 1000) + end_timestamp = int(end.timestamp() * 1000) + url = ( + "https://www.deribit.com/api/v2/public/get_tradingview_chart_data?" + f"instrument_name={symbol}&start_timestamp={start_timestamp}&" + f"end_timestamp={end_timestamp}&resolution={interval}" + ) + urls.append(url) + + return urls + + results: list = [] + + async def get_one(url): + """Get data from one url.""" + json_response = await amake_request(url) + if json_response.get("error"): + raise ValueError(json_response["error"]) + if json_response.get("result"): + result = json_response["result"] + df = DataFrame(result) + df = ( + df.drop(columns=["status"]) + .rename(columns={"ticks": "date", "cost": "volume_notional"}) + .convert_dtypes() + ) + df.date = to_datetime(df.date, unit="ms", origin="unix", utc=True) + if interval == "1D": + df.date = df.date.dt.date + df.loc[:, "symbol"] = symbol + results.extend( + df[ + [ + "date", + "symbol", + "open", + "high", + "low", + "close", + "volume", + "volume_notional", + ] + ].to_dict(orient="records") + ) + + urls = generate_urls(symbol, start_date, end_date, new_interval) + + if len(urls) > 15: + raise OpenBBError( + "The request is too large. Break up the request into smaller chunks." + ) + + tasks = [get_one(url) for url in urls] + + await asyncio.gather(*tasks, return_exceptions=True) + + if results: + return sorted(results, key=lambda x: x["date"]) + raise EmptyDataError("No data found for the given symbol and dates.") + + +async def check_ohlc_symbol(symbol: str) -> Union[bool, str]: + """ + Check if the symbol has OHLC data. + + Parameters + ---------- + symbol : str + The symbol to check. + + Returns + ------- + bool + True if the symbol has OHLC data, False otherwise. + """ + all_instruments = await get_instruments("all", None) + all_symbols = { + d.get("instrument_name", ""): d.get("creation_timestamp") + for d in all_instruments + } + all_perpetuals = await get_perpetual_symbols() + + if symbol in all_perpetuals: + return all_perpetuals.get(symbol, False) + if symbol in all_symbols: + return symbol + return False + + +async def get_futures_symbols() -> list: + """ + Get futures symbols. + + Returns + ------- + list + A list of futures symbols. + """ + instruments = await get_instruments("all", "future") + return [d["instrument_name"] for d in instruments] + + +async def get_futures_curve_by_hours_ago(symbol, hours): + """Get futures curve N hours ago.""" + # pylint: disable=import-outside-toplevel + import asyncio # noqa + from datetime import datetime, timedelta + + symbols = await get_futures_curve_symbols(symbol) + now = datetime.now().replace(microsecond=0, second=0) + + if hours < 24: + start = (now - timedelta(days=1)).strftime("%Y-%m-%d") + else: + start = (now - timedelta(hours=hours)).strftime("%Y-%m-%d") + end = (now + timedelta(days=2)).strftime("%Y-%m-%d") + + results: list = [] + + async def get_one(s): + """Get data for one symbol.""" + data = await get_ohlc_data(s, start, end, "1h") + result = { + "instrument_name": data[-1 - hours]["symbol"], + "hours_ago": hours, + "last_price": data[-1 - hours]["close"], + } + results.append(result) + + tasks = [get_one(s) for s in symbols] + + await asyncio.gather(*tasks, return_exceptions=True) + + return results diff --git a/openbb_platform/providers/deribit/poetry.lock b/openbb_platform/providers/deribit/poetry.lock index 8527753addd..46e069bb6fd 100644 --- a/openbb_platform/providers/deribit/poetry.lock +++ b/openbb_platform/providers/deribit/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.4 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.5 and should not be changed by hand. [[package]] name = "aiohappyeyeballs" @@ -13,87 +13,87 @@ files = [ [[package]] name = "aiohttp" -version = "3.11.10" +version = "3.11.11" description = "Async http client/server framework (asyncio)" optional = false python-versions = ">=3.9" files = [ - {file = "aiohttp-3.11.10-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cbad88a61fa743c5d283ad501b01c153820734118b65aee2bd7dbb735475ce0d"}, - {file = "aiohttp-3.11.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:80886dac673ceaef499de2f393fc80bb4481a129e6cb29e624a12e3296cc088f"}, - {file = "aiohttp-3.11.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:61b9bae80ed1f338c42f57c16918853dc51775fb5cb61da70d590de14d8b5fb4"}, - {file = "aiohttp-3.11.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9e2e576caec5c6a6b93f41626c9c02fc87cd91538b81a3670b2e04452a63def6"}, - {file = "aiohttp-3.11.10-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:02c13415b5732fb6ee7ff64583a5e6ed1c57aa68f17d2bda79c04888dfdc2769"}, - {file = "aiohttp-3.11.10-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4cfce37f31f20800a6a6620ce2cdd6737b82e42e06e6e9bd1b36f546feb3c44f"}, - {file = "aiohttp-3.11.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3bbbfff4c679c64e6e23cb213f57cc2c9165c9a65d63717108a644eb5a7398df"}, - {file = "aiohttp-3.11.10-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49c7dbbc1a559ae14fc48387a115b7d4bbc84b4a2c3b9299c31696953c2a5219"}, - {file = "aiohttp-3.11.10-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:68386d78743e6570f054fe7949d6cb37ef2b672b4d3405ce91fafa996f7d9b4d"}, - {file = "aiohttp-3.11.10-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:9ef405356ba989fb57f84cac66f7b0260772836191ccefbb987f414bcd2979d9"}, - {file = "aiohttp-3.11.10-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:5d6958671b296febe7f5f859bea581a21c1d05430d1bbdcf2b393599b1cdce77"}, - {file = "aiohttp-3.11.10-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:99b7920e7165be5a9e9a3a7f1b680f06f68ff0d0328ff4079e5163990d046767"}, - {file = "aiohttp-3.11.10-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0dc49f42422163efb7e6f1df2636fe3db72713f6cd94688e339dbe33fe06d61d"}, - {file = "aiohttp-3.11.10-cp310-cp310-win32.whl", hash = "sha256:40d1c7a7f750b5648642586ba7206999650208dbe5afbcc5284bcec6579c9b91"}, - {file = "aiohttp-3.11.10-cp310-cp310-win_amd64.whl", hash = "sha256:68ff6f48b51bd78ea92b31079817aff539f6c8fc80b6b8d6ca347d7c02384e33"}, - {file = "aiohttp-3.11.10-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:77c4aa15a89847b9891abf97f3d4048f3c2d667e00f8a623c89ad2dccee6771b"}, - {file = "aiohttp-3.11.10-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:909af95a72cedbefe5596f0bdf3055740f96c1a4baa0dd11fd74ca4de0b4e3f1"}, - {file = "aiohttp-3.11.10-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:386fbe79863eb564e9f3615b959e28b222259da0c48fd1be5929ac838bc65683"}, - {file = "aiohttp-3.11.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3de34936eb1a647aa919655ff8d38b618e9f6b7f250cc19a57a4bf7fd2062b6d"}, - {file = "aiohttp-3.11.10-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0c9527819b29cd2b9f52033e7fb9ff08073df49b4799c89cb5754624ecd98299"}, - {file = "aiohttp-3.11.10-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65a96e3e03300b41f261bbfd40dfdbf1c301e87eab7cd61c054b1f2e7c89b9e8"}, - {file = "aiohttp-3.11.10-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98f5635f7b74bcd4f6f72fcd85bea2154b323a9f05226a80bc7398d0c90763b0"}, - {file = "aiohttp-3.11.10-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:03b6002e20938fc6ee0918c81d9e776bebccc84690e2b03ed132331cca065ee5"}, - {file = "aiohttp-3.11.10-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6362cc6c23c08d18ddbf0e8c4d5159b5df74fea1a5278ff4f2c79aed3f4e9f46"}, - {file = "aiohttp-3.11.10-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:3691ed7726fef54e928fe26344d930c0c8575bc968c3e239c2e1a04bd8cf7838"}, - {file = "aiohttp-3.11.10-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:31d5093d3acd02b31c649d3a69bb072d539d4c7659b87caa4f6d2bcf57c2fa2b"}, - {file = "aiohttp-3.11.10-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:8b3cf2dc0f0690a33f2d2b2cb15db87a65f1c609f53c37e226f84edb08d10f52"}, - {file = "aiohttp-3.11.10-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:fbbaea811a2bba171197b08eea288b9402faa2bab2ba0858eecdd0a4105753a3"}, - {file = "aiohttp-3.11.10-cp311-cp311-win32.whl", hash = "sha256:4b2c7ac59c5698a7a8207ba72d9e9c15b0fc484a560be0788b31312c2c5504e4"}, - {file = "aiohttp-3.11.10-cp311-cp311-win_amd64.whl", hash = "sha256:974d3a2cce5fcfa32f06b13ccc8f20c6ad9c51802bb7f829eae8a1845c4019ec"}, - {file = "aiohttp-3.11.10-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:b78f053a7ecfc35f0451d961dacdc671f4bcbc2f58241a7c820e9d82559844cf"}, - {file = "aiohttp-3.11.10-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ab7485222db0959a87fbe8125e233b5a6f01f4400785b36e8a7878170d8c3138"}, - {file = "aiohttp-3.11.10-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cf14627232dfa8730453752e9cdc210966490992234d77ff90bc8dc0dce361d5"}, - {file = "aiohttp-3.11.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:076bc454a7e6fd646bc82ea7f98296be0b1219b5e3ef8a488afbdd8e81fbac50"}, - {file = "aiohttp-3.11.10-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:482cafb7dc886bebeb6c9ba7925e03591a62ab34298ee70d3dd47ba966370d2c"}, - {file = "aiohttp-3.11.10-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf3d1a519a324af764a46da4115bdbd566b3c73fb793ffb97f9111dbc684fc4d"}, - {file = "aiohttp-3.11.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24213ba85a419103e641e55c27dc7ff03536c4873470c2478cce3311ba1eee7b"}, - {file = "aiohttp-3.11.10-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b99acd4730ad1b196bfb03ee0803e4adac371ae8efa7e1cbc820200fc5ded109"}, - {file = "aiohttp-3.11.10-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:14cdb5a9570be5a04eec2ace174a48ae85833c2aadc86de68f55541f66ce42ab"}, - {file = "aiohttp-3.11.10-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:7e97d622cb083e86f18317282084bc9fbf261801b0192c34fe4b1febd9f7ae69"}, - {file = "aiohttp-3.11.10-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:012f176945af138abc10c4a48743327a92b4ca9adc7a0e078077cdb5dbab7be0"}, - {file = "aiohttp-3.11.10-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:44224d815853962f48fe124748227773acd9686eba6dc102578defd6fc99e8d9"}, - {file = "aiohttp-3.11.10-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c87bf31b7fdab94ae3adbe4a48e711bfc5f89d21cf4c197e75561def39e223bc"}, - {file = "aiohttp-3.11.10-cp312-cp312-win32.whl", hash = "sha256:06a8e2ee1cbac16fe61e51e0b0c269400e781b13bcfc33f5425912391a542985"}, - {file = "aiohttp-3.11.10-cp312-cp312-win_amd64.whl", hash = "sha256:be2b516f56ea883a3e14dda17059716593526e10fb6303189aaf5503937db408"}, - {file = "aiohttp-3.11.10-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8cc5203b817b748adccb07f36390feb730b1bc5f56683445bfe924fc270b8816"}, - {file = "aiohttp-3.11.10-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5ef359ebc6949e3a34c65ce20230fae70920714367c63afd80ea0c2702902ccf"}, - {file = "aiohttp-3.11.10-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9bca390cb247dbfaec3c664326e034ef23882c3f3bfa5fbf0b56cad0320aaca5"}, - {file = "aiohttp-3.11.10-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:811f23b3351ca532af598405db1093f018edf81368e689d1b508c57dcc6b6a32"}, - {file = "aiohttp-3.11.10-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ddf5f7d877615f6a1e75971bfa5ac88609af3b74796ff3e06879e8422729fd01"}, - {file = "aiohttp-3.11.10-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6ab29b8a0beb6f8eaf1e5049252cfe74adbaafd39ba91e10f18caeb0e99ffb34"}, - {file = "aiohttp-3.11.10-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c49a76c1038c2dd116fa443eba26bbb8e6c37e924e2513574856de3b6516be99"}, - {file = "aiohttp-3.11.10-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7f3dc0e330575f5b134918976a645e79adf333c0a1439dcf6899a80776c9ab39"}, - {file = "aiohttp-3.11.10-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:efb15a17a12497685304b2d976cb4939e55137df7b09fa53f1b6a023f01fcb4e"}, - {file = "aiohttp-3.11.10-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:db1d0b28fcb7f1d35600150c3e4b490775251dea70f894bf15c678fdd84eda6a"}, - {file = "aiohttp-3.11.10-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:15fccaf62a4889527539ecb86834084ecf6e9ea70588efde86e8bc775e0e7542"}, - {file = "aiohttp-3.11.10-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:593c114a2221444f30749cc5e5f4012488f56bd14de2af44fe23e1e9894a9c60"}, - {file = "aiohttp-3.11.10-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7852bbcb4d0d2f0c4d583f40c3bc750ee033265d80598d0f9cb6f372baa6b836"}, - {file = "aiohttp-3.11.10-cp313-cp313-win32.whl", hash = "sha256:65e55ca7debae8faaffee0ebb4b47a51b4075f01e9b641c31e554fd376595c6c"}, - {file = "aiohttp-3.11.10-cp313-cp313-win_amd64.whl", hash = "sha256:beb39a6d60a709ae3fb3516a1581777e7e8b76933bb88c8f4420d875bb0267c6"}, - {file = "aiohttp-3.11.10-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0580f2e12de2138f34debcd5d88894786453a76e98febaf3e8fe5db62d01c9bf"}, - {file = "aiohttp-3.11.10-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a55d2ad345684e7c3dd2c20d2f9572e9e1d5446d57200ff630e6ede7612e307f"}, - {file = "aiohttp-3.11.10-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:04814571cb72d65a6899db6099e377ed00710bf2e3eafd2985166f2918beaf59"}, - {file = "aiohttp-3.11.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e44a9a3c053b90c6f09b1bb4edd880959f5328cf63052503f892c41ea786d99f"}, - {file = "aiohttp-3.11.10-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:502a1464ccbc800b4b1995b302efaf426e8763fadf185e933c2931df7db9a199"}, - {file = "aiohttp-3.11.10-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:613e5169f8ae77b1933e42e418a95931fb4867b2991fc311430b15901ed67079"}, - {file = "aiohttp-3.11.10-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cca22a61b7fe45da8fc73c3443150c3608750bbe27641fc7558ec5117b27fdf"}, - {file = "aiohttp-3.11.10-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:86a5dfcc39309470bd7b68c591d84056d195428d5d2e0b5ccadfbaf25b026ebc"}, - {file = "aiohttp-3.11.10-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:77ae58586930ee6b2b6f696c82cf8e78c8016ec4795c53e36718365f6959dc82"}, - {file = "aiohttp-3.11.10-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:78153314f26d5abef3239b4a9af20c229c6f3ecb97d4c1c01b22c4f87669820c"}, - {file = "aiohttp-3.11.10-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:98283b94cc0e11c73acaf1c9698dea80c830ca476492c0fe2622bd931f34b487"}, - {file = "aiohttp-3.11.10-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:53bf2097e05c2accc166c142a2090e4c6fd86581bde3fd9b2d3f9e93dda66ac1"}, - {file = "aiohttp-3.11.10-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c5532f0441fc09c119e1dca18fbc0687e64fbeb45aa4d6a87211ceaee50a74c4"}, - {file = "aiohttp-3.11.10-cp39-cp39-win32.whl", hash = "sha256:47ad15a65fb41c570cd0ad9a9ff8012489e68176e7207ec7b82a0940dddfd8be"}, - {file = "aiohttp-3.11.10-cp39-cp39-win_amd64.whl", hash = "sha256:c6b9e6d7e41656d78e37ce754813fa44b455c3d0d0dced2a047def7dc5570b74"}, - {file = "aiohttp-3.11.10.tar.gz", hash = "sha256:b1fc6b45010a8d0ff9e88f9f2418c6fd408c99c211257334aff41597ebece42e"}, + {file = "aiohttp-3.11.11-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a60804bff28662cbcf340a4d61598891f12eea3a66af48ecfdc975ceec21e3c8"}, + {file = "aiohttp-3.11.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4b4fa1cb5f270fb3eab079536b764ad740bb749ce69a94d4ec30ceee1b5940d5"}, + {file = "aiohttp-3.11.11-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:731468f555656767cda219ab42e033355fe48c85fbe3ba83a349631541715ba2"}, + {file = "aiohttp-3.11.11-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb23d8bb86282b342481cad4370ea0853a39e4a32a0042bb52ca6bdde132df43"}, + {file = "aiohttp-3.11.11-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f047569d655f81cb70ea5be942ee5d4421b6219c3f05d131f64088c73bb0917f"}, + {file = "aiohttp-3.11.11-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dd7659baae9ccf94ae5fe8bfaa2c7bc2e94d24611528395ce88d009107e00c6d"}, + {file = "aiohttp-3.11.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af01e42ad87ae24932138f154105e88da13ce7d202a6de93fafdafb2883a00ef"}, + {file = "aiohttp-3.11.11-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5854be2f3e5a729800bac57a8d76af464e160f19676ab6aea74bde18ad19d438"}, + {file = "aiohttp-3.11.11-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6526e5fb4e14f4bbf30411216780c9967c20c5a55f2f51d3abd6de68320cc2f3"}, + {file = "aiohttp-3.11.11-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:85992ee30a31835fc482468637b3e5bd085fa8fe9392ba0bdcbdc1ef5e9e3c55"}, + {file = "aiohttp-3.11.11-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:88a12ad8ccf325a8a5ed80e6d7c3bdc247d66175afedbe104ee2aaca72960d8e"}, + {file = "aiohttp-3.11.11-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:0a6d3fbf2232e3a08c41eca81ae4f1dff3d8f1a30bae415ebe0af2d2458b8a33"}, + {file = "aiohttp-3.11.11-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:84a585799c58b795573c7fa9b84c455adf3e1d72f19a2bf498b54a95ae0d194c"}, + {file = "aiohttp-3.11.11-cp310-cp310-win32.whl", hash = "sha256:bfde76a8f430cf5c5584553adf9926534352251d379dcb266ad2b93c54a29745"}, + {file = "aiohttp-3.11.11-cp310-cp310-win_amd64.whl", hash = "sha256:0fd82b8e9c383af11d2b26f27a478640b6b83d669440c0a71481f7c865a51da9"}, + {file = "aiohttp-3.11.11-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ba74ec819177af1ef7f59063c6d35a214a8fde6f987f7661f4f0eecc468a8f76"}, + {file = "aiohttp-3.11.11-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4af57160800b7a815f3fe0eba9b46bf28aafc195555f1824555fa2cfab6c1538"}, + {file = "aiohttp-3.11.11-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ffa336210cf9cd8ed117011085817d00abe4c08f99968deef0013ea283547204"}, + {file = "aiohttp-3.11.11-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81b8fe282183e4a3c7a1b72f5ade1094ed1c6345a8f153506d114af5bf8accd9"}, + {file = "aiohttp-3.11.11-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3af41686ccec6a0f2bdc66686dc0f403c41ac2089f80e2214a0f82d001052c03"}, + {file = "aiohttp-3.11.11-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:70d1f9dde0e5dd9e292a6d4d00058737052b01f3532f69c0c65818dac26dc287"}, + {file = "aiohttp-3.11.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:249cc6912405917344192b9f9ea5cd5b139d49e0d2f5c7f70bdfaf6b4dbf3a2e"}, + {file = "aiohttp-3.11.11-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0eb98d90b6690827dcc84c246811feeb4e1eea683c0eac6caed7549be9c84665"}, + {file = "aiohttp-3.11.11-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ec82bf1fda6cecce7f7b915f9196601a1bd1a3079796b76d16ae4cce6d0ef89b"}, + {file = "aiohttp-3.11.11-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:9fd46ce0845cfe28f108888b3ab17abff84ff695e01e73657eec3f96d72eef34"}, + {file = "aiohttp-3.11.11-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:bd176afcf8f5d2aed50c3647d4925d0db0579d96f75a31e77cbaf67d8a87742d"}, + {file = "aiohttp-3.11.11-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:ec2aa89305006fba9ffb98970db6c8221541be7bee4c1d027421d6f6df7d1ce2"}, + {file = "aiohttp-3.11.11-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:92cde43018a2e17d48bb09c79e4d4cb0e236de5063ce897a5e40ac7cb4878773"}, + {file = "aiohttp-3.11.11-cp311-cp311-win32.whl", hash = "sha256:aba807f9569455cba566882c8938f1a549f205ee43c27b126e5450dc9f83cc62"}, + {file = "aiohttp-3.11.11-cp311-cp311-win_amd64.whl", hash = "sha256:ae545f31489548c87b0cced5755cfe5a5308d00407000e72c4fa30b19c3220ac"}, + {file = "aiohttp-3.11.11-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e595c591a48bbc295ebf47cb91aebf9bd32f3ff76749ecf282ea7f9f6bb73886"}, + {file = "aiohttp-3.11.11-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3ea1b59dc06396b0b424740a10a0a63974c725b1c64736ff788a3689d36c02d2"}, + {file = "aiohttp-3.11.11-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8811f3f098a78ffa16e0ea36dffd577eb031aea797cbdba81be039a4169e242c"}, + {file = "aiohttp-3.11.11-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd7227b87a355ce1f4bf83bfae4399b1f5bb42e0259cb9405824bd03d2f4336a"}, + {file = "aiohttp-3.11.11-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d40f9da8cabbf295d3a9dae1295c69975b86d941bc20f0a087f0477fa0a66231"}, + {file = "aiohttp-3.11.11-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ffb3dc385f6bb1568aa974fe65da84723210e5d9707e360e9ecb51f59406cd2e"}, + {file = "aiohttp-3.11.11-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8f5f7515f3552d899c61202d99dcb17d6e3b0de777900405611cd747cecd1b8"}, + {file = "aiohttp-3.11.11-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3499c7ffbfd9c6a3d8d6a2b01c26639da7e43d47c7b4f788016226b1e711caa8"}, + {file = "aiohttp-3.11.11-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8e2bf8029dbf0810c7bfbc3e594b51c4cc9101fbffb583a3923aea184724203c"}, + {file = "aiohttp-3.11.11-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b6212a60e5c482ef90f2d788835387070a88d52cf6241d3916733c9176d39eab"}, + {file = "aiohttp-3.11.11-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:d119fafe7b634dbfa25a8c597718e69a930e4847f0b88e172744be24515140da"}, + {file = "aiohttp-3.11.11-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:6fba278063559acc730abf49845d0e9a9e1ba74f85f0ee6efd5803f08b285853"}, + {file = "aiohttp-3.11.11-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:92fc484e34b733704ad77210c7957679c5c3877bd1e6b6d74b185e9320cc716e"}, + {file = "aiohttp-3.11.11-cp312-cp312-win32.whl", hash = "sha256:9f5b3c1ed63c8fa937a920b6c1bec78b74ee09593b3f5b979ab2ae5ef60d7600"}, + {file = "aiohttp-3.11.11-cp312-cp312-win_amd64.whl", hash = "sha256:1e69966ea6ef0c14ee53ef7a3d68b564cc408121ea56c0caa2dc918c1b2f553d"}, + {file = "aiohttp-3.11.11-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:541d823548ab69d13d23730a06f97460f4238ad2e5ed966aaf850d7c369782d9"}, + {file = "aiohttp-3.11.11-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:929f3ed33743a49ab127c58c3e0a827de0664bfcda566108989a14068f820194"}, + {file = "aiohttp-3.11.11-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0882c2820fd0132240edbb4a51eb8ceb6eef8181db9ad5291ab3332e0d71df5f"}, + {file = "aiohttp-3.11.11-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b63de12e44935d5aca7ed7ed98a255a11e5cb47f83a9fded7a5e41c40277d104"}, + {file = "aiohttp-3.11.11-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa54f8ef31d23c506910c21163f22b124facb573bff73930735cf9fe38bf7dff"}, + {file = "aiohttp-3.11.11-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a344d5dc18074e3872777b62f5f7d584ae4344cd6006c17ba12103759d407af3"}, + {file = "aiohttp-3.11.11-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b7fb429ab1aafa1f48578eb315ca45bd46e9c37de11fe45c7f5f4138091e2f1"}, + {file = "aiohttp-3.11.11-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c341c7d868750e31961d6d8e60ff040fb9d3d3a46d77fd85e1ab8e76c3e9a5c4"}, + {file = "aiohttp-3.11.11-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ed9ee95614a71e87f1a70bc81603f6c6760128b140bc4030abe6abaa988f1c3d"}, + {file = "aiohttp-3.11.11-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:de8d38f1c2810fa2a4f1d995a2e9c70bb8737b18da04ac2afbf3971f65781d87"}, + {file = "aiohttp-3.11.11-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:a9b7371665d4f00deb8f32208c7c5e652059b0fda41cf6dbcac6114a041f1cc2"}, + {file = "aiohttp-3.11.11-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:620598717fce1b3bd14dd09947ea53e1ad510317c85dda2c9c65b622edc96b12"}, + {file = "aiohttp-3.11.11-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:bf8d9bfee991d8acc72d060d53860f356e07a50f0e0d09a8dfedea1c554dd0d5"}, + {file = "aiohttp-3.11.11-cp313-cp313-win32.whl", hash = "sha256:9d73ee3725b7a737ad86c2eac5c57a4a97793d9f442599bea5ec67ac9f4bdc3d"}, + {file = "aiohttp-3.11.11-cp313-cp313-win_amd64.whl", hash = "sha256:c7a06301c2fb096bdb0bd25fe2011531c1453b9f2c163c8031600ec73af1cc99"}, + {file = "aiohttp-3.11.11-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3e23419d832d969f659c208557de4a123e30a10d26e1e14b73431d3c13444c2e"}, + {file = "aiohttp-3.11.11-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:21fef42317cf02e05d3b09c028712e1d73a9606f02467fd803f7c1f39cc59add"}, + {file = "aiohttp-3.11.11-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1f21bb8d0235fc10c09ce1d11ffbd40fc50d3f08a89e4cf3a0c503dc2562247a"}, + {file = "aiohttp-3.11.11-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1642eceeaa5ab6c9b6dfeaaa626ae314d808188ab23ae196a34c9d97efb68350"}, + {file = "aiohttp-3.11.11-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2170816e34e10f2fd120f603e951630f8a112e1be3b60963a1f159f5699059a6"}, + {file = "aiohttp-3.11.11-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8be8508d110d93061197fd2d6a74f7401f73b6d12f8822bbcd6d74f2b55d71b1"}, + {file = "aiohttp-3.11.11-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4eed954b161e6b9b65f6be446ed448ed3921763cc432053ceb606f89d793927e"}, + {file = "aiohttp-3.11.11-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6c9af134da4bc9b3bd3e6a70072509f295d10ee60c697826225b60b9959acdd"}, + {file = "aiohttp-3.11.11-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:44167fc6a763d534a6908bdb2592269b4bf30a03239bcb1654781adf5e49caf1"}, + {file = "aiohttp-3.11.11-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:479b8c6ebd12aedfe64563b85920525d05d394b85f166b7873c8bde6da612f9c"}, + {file = "aiohttp-3.11.11-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:10b4ff0ad793d98605958089fabfa350e8e62bd5d40aa65cdc69d6785859f94e"}, + {file = "aiohttp-3.11.11-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:b540bd67cfb54e6f0865ceccd9979687210d7ed1a1cc8c01f8e67e2f1e883d28"}, + {file = "aiohttp-3.11.11-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1dac54e8ce2ed83b1f6b1a54005c87dfed139cf3f777fdc8afc76e7841101226"}, + {file = "aiohttp-3.11.11-cp39-cp39-win32.whl", hash = "sha256:568c1236b2fde93b7720f95a890741854c1200fba4a3471ff48b2934d2d93fd3"}, + {file = "aiohttp-3.11.11-cp39-cp39-win_amd64.whl", hash = "sha256:943a8b052e54dfd6439fd7989f67fc6a7f2138d0a2cf0a7de5f18aa4fe7eb3b1"}, + {file = "aiohttp-3.11.11.tar.gz", hash = "sha256:bb49c7f1e6ebf3821a42d81d494f538107610c3a705987f53068546b0e90303e"}, ] [package.dependencies] @@ -111,13 +111,13 @@ speedups = ["Brotli", "aiodns (>=3.2.0)", "brotlicffi"] [[package]] name = "aiosignal" -version = "1.3.1" +version = "1.3.2" description = "aiosignal: a list of registered asynchronous callbacks" optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" files = [ - {file = "aiosignal-1.3.1-py3-none-any.whl", hash = "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17"}, - {file = "aiosignal-1.3.1.tar.gz", hash = "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc"}, + {file = "aiosignal-1.3.2-py2.py3-none-any.whl", hash = "sha256:45cde58e409a301715980c2b01d0c28bdde3770d8290b5eb2173759d9acb31a5"}, + {file = "aiosignal-1.3.2.tar.gz", hash = "sha256:a8c255c66fafb1e499c9351d0bf32ff2d8a0321595ebac3b93713656d2436f54"}, ] [package.dependencies] @@ -136,13 +136,13 @@ files = [ [[package]] name = "anyio" -version = "4.7.0" +version = "4.8.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false python-versions = ">=3.9" files = [ - {file = "anyio-4.7.0-py3-none-any.whl", hash = "sha256:ea60c3723ab42ba6fff7e8ccb0488c898ec538ff4df1f1d5e642c3601d07e352"}, - {file = "anyio-4.7.0.tar.gz", hash = "sha256:2f834749c602966b7d456a7567cafcb309f96482b5081d14ac93ccd457f9dd48"}, + {file = "anyio-4.8.0-py3-none-any.whl", hash = "sha256:b5011f270ab5eb0abf13385f851315585cc37ef330dd88e27ec3d34d651fd47a"}, + {file = "anyio-4.8.0.tar.gz", hash = "sha256:1d9fe889df5212298c0c0723fa20479d1b94883a2df44bd3897aa91083316f7a"}, ] [package.dependencies] @@ -153,7 +153,7 @@ typing_extensions = {version = ">=4.5", markers = "python_version < \"3.13\""} [package.extras] doc = ["Sphinx (>=7.4,<8.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx_rtd_theme"] -test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "truststore (>=0.9.1)", "uvloop (>=0.21)"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "trustme", "truststore (>=0.9.1)", "uvloop (>=0.21)"] trio = ["trio (>=0.26.1)"] [[package]] @@ -183,19 +183,19 @@ files = [ [[package]] name = "attrs" -version = "24.2.0" +version = "24.3.0" description = "Classes Without Boilerplate" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "attrs-24.2.0-py3-none-any.whl", hash = "sha256:81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2"}, - {file = "attrs-24.2.0.tar.gz", hash = "sha256:5cfb1b9148b5b086569baec03f20d7b6bf3bcacc9a42bebf87ffaaca362f6346"}, + {file = "attrs-24.3.0-py3-none-any.whl", hash = "sha256:ac96cd038792094f438ad1f6ff80837353805ac950cd2aa0e0625ef19850c308"}, + {file = "attrs-24.3.0.tar.gz", hash = "sha256:8f5c07333d543103541ba7be0e2ce16eeee8130cb0b3f9238ab904ce1e85baff"}, ] [package.extras] benchmark = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins", "pytest-xdist[psutil]"] cov = ["cloudpickle", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit-uv", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier (<24.7)"] tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"] @@ -213,138 +213,125 @@ files = [ [[package]] name = "certifi" -version = "2024.8.30" +version = "2024.12.14" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8"}, - {file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"}, + {file = "certifi-2024.12.14-py3-none-any.whl", hash = "sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56"}, + {file = "certifi-2024.12.14.tar.gz", hash = "sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db"}, ] [[package]] name = "charset-normalizer" -version = "3.4.0" +version = "3.4.1" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false -python-versions = ">=3.7.0" +python-versions = ">=3.7" files = [ - {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5ed2e36c3e9b4f21dd9422f6893dec0abf2cca553af509b10cd630f878d3eb99"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d3ff7fc90b98c637bda91c89d51264a3dcf210cade3a2c6f838c7268d7a4ca"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1110e22af8ca26b90bd6364fe4c763329b0ebf1ee213ba32b68c73de5752323d"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:86f4e8cca779080f66ff4f191a685ced73d2f72d50216f7112185dc02b90b9b7"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f683ddc7eedd742e2889d2bfb96d69573fde1d92fcb811979cdb7165bb9c7d3"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27623ba66c183eca01bf9ff833875b459cad267aeeb044477fedac35e19ba907"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f606a1881d2663630ea5b8ce2efe2111740df4b687bd78b34a8131baa007f79b"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0b309d1747110feb25d7ed6b01afdec269c647d382c857ef4663bbe6ad95a912"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:136815f06a3ae311fae551c3df1f998a1ebd01ddd424aa5603a4336997629e95"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:14215b71a762336254351b00ec720a8e85cada43b987da5a042e4ce3e82bd68e"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:79983512b108e4a164b9c8d34de3992f76d48cadc9554c9e60b43f308988aabe"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-win32.whl", hash = "sha256:c94057af19bc953643a33581844649a7fdab902624d2eb739738a30e2b3e60fc"}, - {file = "charset_normalizer-3.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:55f56e2ebd4e3bc50442fbc0888c9d8c94e4e06a933804e2af3e89e2f9c1c749"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-win32.whl", hash = "sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99"}, - {file = "charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-win32.whl", hash = "sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7"}, - {file = "charset_normalizer-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-win32.whl", hash = "sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67"}, - {file = "charset_normalizer-3.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dbe03226baf438ac4fda9e2d0715022fd579cb641c4cf639fa40d53b2fe6f3e2"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd9a8bd8900e65504a305bf8ae6fa9fbc66de94178c420791d0293702fce2df7"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8831399554b92b72af5932cdbbd4ddc55c55f631bb13ff8fe4e6536a06c5c51"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a14969b8691f7998e74663b77b4c36c0337cb1df552da83d5c9004a93afdb574"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dcaf7c1524c0542ee2fc82cc8ec337f7a9f7edee2532421ab200d2b920fc97cf"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:425c5f215d0eecee9a56cdb703203dda90423247421bf0d67125add85d0c4455"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:d5b054862739d276e09928de37c79ddeec42a6e1bfc55863be96a36ba22926f6"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:f3e73a4255342d4eb26ef6df01e3962e73aa29baa3124a8e824c5d3364a65748"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:2f6c34da58ea9c1a9515621f4d9ac379871a8f21168ba1b5e09d74250de5ad62"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:f09cb5a7bbe1ecae6e87901a2eb23e0256bb524a79ccc53eb0b7629fbe7677c4"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:0099d79bdfcf5c1f0c2c72f91516702ebf8b0b8ddd8905f97a8aecf49712c621"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-win32.whl", hash = "sha256:9c98230f5042f4945f957d006edccc2af1e03ed5e37ce7c373f00a5a4daa6149"}, - {file = "charset_normalizer-3.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:62f60aebecfc7f4b82e3f639a7d1433a20ec32824db2199a11ad4f5e146ef5ee"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:af73657b7a68211996527dbfeffbb0864e043d270580c5aef06dc4b659a4b578"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cab5d0b79d987c67f3b9e9c53f54a61360422a5a0bc075f43cab5621d530c3b6"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9289fd5dddcf57bab41d044f1756550f9e7cf0c8e373b8cdf0ce8773dc4bd417"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b493a043635eb376e50eedf7818f2f322eabbaa974e948bd8bdd29eb7ef2a51"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fa2566ca27d67c86569e8c85297aaf413ffab85a8960500f12ea34ff98e4c41"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8e538f46104c815be19c975572d74afb53f29650ea2025bbfaef359d2de2f7f"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fd30dc99682dc2c603c2b315bded2799019cea829f8bf57dc6b61efde6611c8"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2006769bd1640bdf4d5641c69a3d63b71b81445473cac5ded39740a226fa88ab"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:dc15e99b2d8a656f8e666854404f1ba54765871104e50c8e9813af8a7db07f12"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:ab2e5bef076f5a235c3774b4f4028a680432cded7cad37bba0fd90d64b187d19"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:4ec9dd88a5b71abfc74e9df5ebe7921c35cbb3b641181a531ca65cdb5e8e4dea"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:43193c5cda5d612f247172016c4bb71251c784d7a4d9314677186a838ad34858"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:aa693779a8b50cd97570e5a0f343538a8dbd3e496fa5dcb87e29406ad0299654"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-win32.whl", hash = "sha256:7706f5850360ac01d80c89bcef1640683cc12ed87f42579dab6c5d3ed6888613"}, - {file = "charset_normalizer-3.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:c3e446d253bd88f6377260d07c895816ebf33ffffd56c1c792b13bff9c3e1ade"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:980b4f289d1d90ca5efcf07958d3eb38ed9c0b7676bf2831a54d4f66f9c27dfa"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f28f891ccd15c514a0981f3b9db9aa23d62fe1a99997512b0491d2ed323d229a"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8aacce6e2e1edcb6ac625fb0f8c3a9570ccc7bfba1f63419b3769ccf6a00ed0"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd7af3717683bea4c87acd8c0d3d5b44d56120b26fd3f8a692bdd2d5260c620a"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ff2ed8194587faf56555927b3aa10e6fb69d931e33953943bc4f837dfee2242"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e91f541a85298cf35433bf66f3fab2a4a2cff05c127eeca4af174f6d497f0d4b"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:309a7de0a0ff3040acaebb35ec45d18db4b28232f21998851cfa709eeff49d62"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:285e96d9d53422efc0d7a17c60e59f37fbf3dfa942073f666db4ac71e8d726d0"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5d447056e2ca60382d460a604b6302d8db69476fd2015c81e7c35417cfabe4cd"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:20587d20f557fe189b7947d8e7ec5afa110ccf72a3128d61a2a387c3313f46be"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:130272c698667a982a5d0e626851ceff662565379baf0ff2cc58067b81d4f11d"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:ab22fbd9765e6954bc0bcff24c25ff71dcbfdb185fcdaca49e81bac68fe724d3"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7782afc9b6b42200f7362858f9e73b1f8316afb276d316336c0ec3bd73312742"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-win32.whl", hash = "sha256:2de62e8801ddfff069cd5c504ce3bc9672b23266597d4e4f50eda28846c322f2"}, - {file = "charset_normalizer-3.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:95c3c157765b031331dd4db3c775e58deaee050a3042fcad72cbc4189d7c8dca"}, - {file = "charset_normalizer-3.4.0-py3-none-any.whl", hash = "sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079"}, - {file = "charset_normalizer-3.4.0.tar.gz", hash = "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-win32.whl", hash = "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-win32.whl", hash = "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-win32.whl", hash = "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-win32.whl", hash = "sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-win32.whl", hash = "sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-win32.whl", hash = "sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765"}, + {file = "charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85"}, + {file = "charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3"}, ] [[package]] name = "click" -version = "8.1.7" +version = "8.1.8" 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"}, + {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, + {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"}, ] [package.dependencies] @@ -736,77 +723,77 @@ files = [ [[package]] name = "numpy" -version = "2.1.3" +version = "2.2.1" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.10" files = [ - {file = "numpy-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c894b4305373b9c5576d7a12b473702afdf48ce5369c074ba304cc5ad8730dff"}, - {file = "numpy-2.1.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b47fbb433d3260adcd51eb54f92a2ffbc90a4595f8970ee00e064c644ac788f5"}, - {file = "numpy-2.1.3-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:825656d0743699c529c5943554d223c021ff0494ff1442152ce887ef4f7561a1"}, - {file = "numpy-2.1.3-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:6a4825252fcc430a182ac4dee5a505053d262c807f8a924603d411f6718b88fd"}, - {file = "numpy-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e711e02f49e176a01d0349d82cb5f05ba4db7d5e7e0defd026328e5cfb3226d3"}, - {file = "numpy-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78574ac2d1a4a02421f25da9559850d59457bac82f2b8d7a44fe83a64f770098"}, - {file = "numpy-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c7662f0e3673fe4e832fe07b65c50342ea27d989f92c80355658c7f888fcc83c"}, - {file = "numpy-2.1.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:fa2d1337dc61c8dc417fbccf20f6d1e139896a30721b7f1e832b2bb6ef4eb6c4"}, - {file = "numpy-2.1.3-cp310-cp310-win32.whl", hash = "sha256:72dcc4a35a8515d83e76b58fdf8113a5c969ccd505c8a946759b24e3182d1f23"}, - {file = "numpy-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:ecc76a9ba2911d8d37ac01de72834d8849e55473457558e12995f4cd53e778e0"}, - {file = "numpy-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4d1167c53b93f1f5d8a139a742b3c6f4d429b54e74e6b57d0eff40045187b15d"}, - {file = "numpy-2.1.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c80e4a09b3d95b4e1cac08643f1152fa71a0a821a2d4277334c88d54b2219a41"}, - {file = "numpy-2.1.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:576a1c1d25e9e02ed7fa5477f30a127fe56debd53b8d2c89d5578f9857d03ca9"}, - {file = "numpy-2.1.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:973faafebaae4c0aaa1a1ca1ce02434554d67e628b8d805e61f874b84e136b09"}, - {file = "numpy-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:762479be47a4863e261a840e8e01608d124ee1361e48b96916f38b119cfda04a"}, - {file = "numpy-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc6f24b3d1ecc1eebfbf5d6051faa49af40b03be1aaa781ebdadcbc090b4539b"}, - {file = "numpy-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:17ee83a1f4fef3c94d16dc1802b998668b5419362c8a4f4e8a491de1b41cc3ee"}, - {file = "numpy-2.1.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:15cb89f39fa6d0bdfb600ea24b250e5f1a3df23f901f51c8debaa6a5d122b2f0"}, - {file = "numpy-2.1.3-cp311-cp311-win32.whl", hash = "sha256:d9beb777a78c331580705326d2367488d5bc473b49a9bc3036c154832520aca9"}, - {file = "numpy-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:d89dd2b6da69c4fff5e39c28a382199ddedc3a5be5390115608345dec660b9e2"}, - {file = "numpy-2.1.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f55ba01150f52b1027829b50d70ef1dafd9821ea82905b63936668403c3b471e"}, - {file = "numpy-2.1.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:13138eadd4f4da03074851a698ffa7e405f41a0845a6b1ad135b81596e4e9958"}, - {file = "numpy-2.1.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:a6b46587b14b888e95e4a24d7b13ae91fa22386c199ee7b418f449032b2fa3b8"}, - {file = "numpy-2.1.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:0fa14563cc46422e99daef53d725d0c326e99e468a9320a240affffe87852564"}, - {file = "numpy-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8637dcd2caa676e475503d1f8fdb327bc495554e10838019651b76d17b98e512"}, - {file = "numpy-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2312b2aa89e1f43ecea6da6ea9a810d06aae08321609d8dc0d0eda6d946a541b"}, - {file = "numpy-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a38c19106902bb19351b83802531fea19dee18e5b37b36454f27f11ff956f7fc"}, - {file = "numpy-2.1.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:02135ade8b8a84011cbb67dc44e07c58f28575cf9ecf8ab304e51c05528c19f0"}, - {file = "numpy-2.1.3-cp312-cp312-win32.whl", hash = "sha256:e6988e90fcf617da2b5c78902fe8e668361b43b4fe26dbf2d7b0f8034d4cafb9"}, - {file = "numpy-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:0d30c543f02e84e92c4b1f415b7c6b5326cbe45ee7882b6b77db7195fb971e3a"}, - {file = "numpy-2.1.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:96fe52fcdb9345b7cd82ecd34547fca4321f7656d500eca497eb7ea5a926692f"}, - {file = "numpy-2.1.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f653490b33e9c3a4c1c01d41bc2aef08f9475af51146e4a7710c450cf9761598"}, - {file = "numpy-2.1.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:dc258a761a16daa791081d026f0ed4399b582712e6fc887a95af09df10c5ca57"}, - {file = "numpy-2.1.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:016d0f6f5e77b0f0d45d77387ffa4bb89816b57c835580c3ce8e099ef830befe"}, - {file = "numpy-2.1.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c181ba05ce8299c7aa3125c27b9c2167bca4a4445b7ce73d5febc411ca692e43"}, - {file = "numpy-2.1.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5641516794ca9e5f8a4d17bb45446998c6554704d888f86df9b200e66bdcce56"}, - {file = "numpy-2.1.3-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ea4dedd6e394a9c180b33c2c872b92f7ce0f8e7ad93e9585312b0c5a04777a4a"}, - {file = "numpy-2.1.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b0df3635b9c8ef48bd3be5f862cf71b0a4716fa0e702155c45067c6b711ddcef"}, - {file = "numpy-2.1.3-cp313-cp313-win32.whl", hash = "sha256:50ca6aba6e163363f132b5c101ba078b8cbd3fa92c7865fd7d4d62d9779ac29f"}, - {file = "numpy-2.1.3-cp313-cp313-win_amd64.whl", hash = "sha256:747641635d3d44bcb380d950679462fae44f54b131be347d5ec2bce47d3df9ed"}, - {file = "numpy-2.1.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:996bb9399059c5b82f76b53ff8bb686069c05acc94656bb259b1d63d04a9506f"}, - {file = "numpy-2.1.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:45966d859916ad02b779706bb43b954281db43e185015df6eb3323120188f9e4"}, - {file = "numpy-2.1.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:baed7e8d7481bfe0874b566850cb0b85243e982388b7b23348c6db2ee2b2ae8e"}, - {file = "numpy-2.1.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:a9f7f672a3388133335589cfca93ed468509cb7b93ba3105fce780d04a6576a0"}, - {file = "numpy-2.1.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7aac50327da5d208db2eec22eb11e491e3fe13d22653dce51b0f4109101b408"}, - {file = "numpy-2.1.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4394bc0dbd074b7f9b52024832d16e019decebf86caf909d94f6b3f77a8ee3b6"}, - {file = "numpy-2.1.3-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:50d18c4358a0a8a53f12a8ba9d772ab2d460321e6a93d6064fc22443d189853f"}, - {file = "numpy-2.1.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:14e253bd43fc6b37af4921b10f6add6925878a42a0c5fe83daee390bca80bc17"}, - {file = "numpy-2.1.3-cp313-cp313t-win32.whl", hash = "sha256:08788d27a5fd867a663f6fc753fd7c3ad7e92747efc73c53bca2f19f8bc06f48"}, - {file = "numpy-2.1.3-cp313-cp313t-win_amd64.whl", hash = "sha256:2564fbdf2b99b3f815f2107c1bbc93e2de8ee655a69c261363a1172a79a257d4"}, - {file = "numpy-2.1.3-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:4f2015dfe437dfebbfce7c85c7b53d81ba49e71ba7eadbf1df40c915af75979f"}, - {file = "numpy-2.1.3-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:3522b0dfe983a575e6a9ab3a4a4dfe156c3e428468ff08ce582b9bb6bd1d71d4"}, - {file = "numpy-2.1.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c006b607a865b07cd981ccb218a04fc86b600411d83d6fc261357f1c0966755d"}, - {file = "numpy-2.1.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e14e26956e6f1696070788252dcdff11b4aca4c3e8bd166e0df1bb8f315a67cb"}, - {file = "numpy-2.1.3.tar.gz", hash = "sha256:aa08e04e08aaf974d4458def539dece0d28146d866a39da5639596f4921fd761"}, + {file = "numpy-2.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5edb4e4caf751c1518e6a26a83501fda79bff41cc59dac48d70e6d65d4ec4440"}, + {file = "numpy-2.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:aa3017c40d513ccac9621a2364f939d39e550c542eb2a894b4c8da92b38896ab"}, + {file = "numpy-2.2.1-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:61048b4a49b1c93fe13426e04e04fdf5a03f456616f6e98c7576144677598675"}, + {file = "numpy-2.2.1-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:7671dc19c7019103ca44e8d94917eba8534c76133523ca8406822efdd19c9308"}, + {file = "numpy-2.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4250888bcb96617e00bfa28ac24850a83c9f3a16db471eca2ee1f1714df0f957"}, + {file = "numpy-2.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7746f235c47abc72b102d3bce9977714c2444bdfaea7888d241b4c4bb6a78bf"}, + {file = "numpy-2.2.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:059e6a747ae84fce488c3ee397cee7e5f905fd1bda5fb18c66bc41807ff119b2"}, + {file = "numpy-2.2.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f62aa6ee4eb43b024b0e5a01cf65a0bb078ef8c395e8713c6e8a12a697144528"}, + {file = "numpy-2.2.1-cp310-cp310-win32.whl", hash = "sha256:48fd472630715e1c1c89bf1feab55c29098cb403cc184b4859f9c86d4fcb6a95"}, + {file = "numpy-2.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:b541032178a718c165a49638d28272b771053f628382d5e9d1c93df23ff58dbf"}, + {file = "numpy-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:40f9e544c1c56ba8f1cf7686a8c9b5bb249e665d40d626a23899ba6d5d9e1484"}, + {file = "numpy-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f9b57eaa3b0cd8db52049ed0330747b0364e899e8a606a624813452b8203d5f7"}, + {file = "numpy-2.2.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:bc8a37ad5b22c08e2dbd27df2b3ef7e5c0864235805b1e718a235bcb200cf1cb"}, + {file = "numpy-2.2.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:9036d6365d13b6cbe8f27a0eaf73ddcc070cae584e5ff94bb45e3e9d729feab5"}, + {file = "numpy-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51faf345324db860b515d3f364eaa93d0e0551a88d6218a7d61286554d190d73"}, + {file = "numpy-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38efc1e56b73cc9b182fe55e56e63b044dd26a72128fd2fbd502f75555d92591"}, + {file = "numpy-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:31b89fa67a8042e96715c68e071a1200c4e172f93b0fbe01a14c0ff3ff820fc8"}, + {file = "numpy-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4c86e2a209199ead7ee0af65e1d9992d1dce7e1f63c4b9a616500f93820658d0"}, + {file = "numpy-2.2.1-cp311-cp311-win32.whl", hash = "sha256:b34d87e8a3090ea626003f87f9392b3929a7bbf4104a05b6667348b6bd4bf1cd"}, + {file = "numpy-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:360137f8fb1b753c5cde3ac388597ad680eccbbbb3865ab65efea062c4a1fd16"}, + {file = "numpy-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:694f9e921a0c8f252980e85bce61ebbd07ed2b7d4fa72d0e4246f2f8aa6642ab"}, + {file = "numpy-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3683a8d166f2692664262fd4900f207791d005fb088d7fdb973cc8d663626faa"}, + {file = "numpy-2.2.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:780077d95eafc2ccc3ced969db22377b3864e5b9a0ea5eb347cc93b3ea900315"}, + {file = "numpy-2.2.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:55ba24ebe208344aa7a00e4482f65742969a039c2acfcb910bc6fcd776eb4355"}, + {file = "numpy-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b1d07b53b78bf84a96898c1bc139ad7f10fda7423f5fd158fd0f47ec5e01ac7"}, + {file = "numpy-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5062dc1a4e32a10dc2b8b13cedd58988261416e811c1dc4dbdea4f57eea61b0d"}, + {file = "numpy-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:fce4f615f8ca31b2e61aa0eb5865a21e14f5629515c9151850aa936c02a1ee51"}, + {file = "numpy-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:67d4cda6fa6ffa073b08c8372aa5fa767ceb10c9a0587c707505a6d426f4e046"}, + {file = "numpy-2.2.1-cp312-cp312-win32.whl", hash = "sha256:32cb94448be47c500d2c7a95f93e2f21a01f1fd05dd2beea1ccd049bb6001cd2"}, + {file = "numpy-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:ba5511d8f31c033a5fcbda22dd5c813630af98c70b2661f2d2c654ae3cdfcfc8"}, + {file = "numpy-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f1d09e520217618e76396377c81fba6f290d5f926f50c35f3a5f72b01a0da780"}, + {file = "numpy-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3ecc47cd7f6ea0336042be87d9e7da378e5c7e9b3c8ad0f7c966f714fc10d821"}, + {file = "numpy-2.2.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f419290bc8968a46c4933158c91a0012b7a99bb2e465d5ef5293879742f8797e"}, + {file = "numpy-2.2.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:5b6c390bfaef8c45a260554888966618328d30e72173697e5cabe6b285fb2348"}, + {file = "numpy-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:526fc406ab991a340744aad7e25251dd47a6720a685fa3331e5c59fef5282a59"}, + {file = "numpy-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f74e6fdeb9a265624ec3a3918430205dff1df7e95a230779746a6af78bc615af"}, + {file = "numpy-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:53c09385ff0b72ba79d8715683c1168c12e0b6e84fb0372e97553d1ea91efe51"}, + {file = "numpy-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f3eac17d9ec51be534685ba877b6ab5edc3ab7ec95c8f163e5d7b39859524716"}, + {file = "numpy-2.2.1-cp313-cp313-win32.whl", hash = "sha256:9ad014faa93dbb52c80d8f4d3dcf855865c876c9660cb9bd7553843dd03a4b1e"}, + {file = "numpy-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:164a829b6aacf79ca47ba4814b130c4020b202522a93d7bff2202bfb33b61c60"}, + {file = "numpy-2.2.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4dfda918a13cc4f81e9118dea249e192ab167a0bb1966272d5503e39234d694e"}, + {file = "numpy-2.2.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:733585f9f4b62e9b3528dd1070ec4f52b8acf64215b60a845fa13ebd73cd0712"}, + {file = "numpy-2.2.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:89b16a18e7bba224ce5114db863e7029803c179979e1af6ad6a6b11f70545008"}, + {file = "numpy-2.2.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:676f4eebf6b2d430300f1f4f4c2461685f8269f94c89698d832cdf9277f30b84"}, + {file = "numpy-2.2.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27f5cdf9f493b35f7e41e8368e7d7b4bbafaf9660cba53fb21d2cd174ec09631"}, + {file = "numpy-2.2.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1ad395cf254c4fbb5b2132fee391f361a6e8c1adbd28f2cd8e79308a615fe9d"}, + {file = "numpy-2.2.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:08ef779aed40dbc52729d6ffe7dd51df85796a702afbf68a4f4e41fafdc8bda5"}, + {file = "numpy-2.2.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:26c9c4382b19fcfbbed3238a14abf7ff223890ea1936b8890f058e7ba35e8d71"}, + {file = "numpy-2.2.1-cp313-cp313t-win32.whl", hash = "sha256:93cf4e045bae74c90ca833cba583c14b62cb4ba2cba0abd2b141ab52548247e2"}, + {file = "numpy-2.2.1-cp313-cp313t-win_amd64.whl", hash = "sha256:bff7d8ec20f5f42607599f9994770fa65d76edca264a87b5e4ea5629bce12268"}, + {file = "numpy-2.2.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7ba9cc93a91d86365a5d270dee221fdc04fb68d7478e6bf6af650de78a8339e3"}, + {file = "numpy-2.2.1-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:3d03883435a19794e41f147612a77a8f56d4e52822337844fff3d4040a142964"}, + {file = "numpy-2.2.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4511d9e6071452b944207c8ce46ad2f897307910b402ea5fa975da32e0102800"}, + {file = "numpy-2.2.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:5c5cc0cbabe9452038ed984d05ac87910f89370b9242371bd9079cb4af61811e"}, + {file = "numpy-2.2.1.tar.gz", hash = "sha256:45681fd7128c8ad1c379f0ca0776a8b0c6583d2f69889ddac01559dfe4390918"}, ] [[package]] name = "openbb-core" -version = "1.3.7" +version = "1.3.8" description = "OpenBB package with core functionality." optional = false python-versions = "<4.0,>=3.9" files = [ - {file = "openbb_core-1.3.7-py3-none-any.whl", hash = "sha256:2dd620db5d17c8c4802dd0537de92fb88d11f4f7252ab026e54302c6f86467fa"}, - {file = "openbb_core-1.3.7.tar.gz", hash = "sha256:2e6facd812ee4ad43b9444fedcf3211599d7cda9cbb4999647cd8e4d9e4af210"}, + {file = "openbb_core-1.3.8-py3-none-any.whl", hash = "sha256:0eb832afcb04c34044f641ffe1bb7a001663087fd7cba469db177df33afa4408"}, + {file = "openbb_core-1.3.8.tar.gz", hash = "sha256:e52ba3967dd9bb0cfa83c7ccf9f27bbfe885e1b898d38aad5b028d180495d80f"}, ] [package.dependencies] @@ -824,7 +811,7 @@ requests = ">=2.32.1,<3.0.0" ruff = ">=0.7,<0.8" uuid7 = ">=0.1.0,<0.2.0" uvicorn = ">=0.32.0,<0.33.0" -websockets = ">=13.0,<14.0" +websockets = ">=14.0,<15.0" [[package]] name = "pandas" @@ -914,13 +901,13 @@ xml = ["lxml (>=4.9.2)"] [[package]] name = "posthog" -version = "3.7.4" +version = "3.7.5" description = "Integrate PostHog into any python application." optional = false python-versions = "*" files = [ - {file = "posthog-3.7.4-py2.py3-none-any.whl", hash = "sha256:21c18c6bf43b2de303ea4cd6e95804cc0f24c20cb2a96a8fd09da2ed50b62faa"}, - {file = "posthog-3.7.4.tar.gz", hash = "sha256:19384bd09d330f9787a7e2446aba14c8057ece56144970ea2791072d4e40cd36"}, + {file = "posthog-3.7.5-py2.py3-none-any.whl", hash = "sha256:022132c17069dde03c5c5904e2ae1b9bd68d5059cbc5a8dffc5c1537a1b71cb5"}, + {file = "posthog-3.7.5.tar.gz", hash = "sha256:8ba40ab623da35db72715fc87fe7dccb7fc272ced92581fe31db2d4dbe7ad761"}, ] [package.dependencies] @@ -1028,18 +1015,18 @@ files = [ [[package]] name = "pydantic" -version = "2.10.3" +version = "2.10.4" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic-2.10.3-py3-none-any.whl", hash = "sha256:be04d85bbc7b65651c5f8e6b9976ed9c6f41782a55524cef079a34a0bb82144d"}, - {file = "pydantic-2.10.3.tar.gz", hash = "sha256:cb5ac360ce894ceacd69c403187900a02c4b20b693a9dd1d643e1effab9eadf9"}, + {file = "pydantic-2.10.4-py3-none-any.whl", hash = "sha256:597e135ea68be3a37552fb524bc7d0d66dcf93d395acd93a00682f1efcb8ee3d"}, + {file = "pydantic-2.10.4.tar.gz", hash = "sha256:82f12e9723da6de4fe2ba888b5971157b3be7ad914267dea8f05f82b28254f06"}, ] [package.dependencies] annotated-types = ">=0.6.0" -pydantic-core = "2.27.1" +pydantic-core = "2.27.2" typing-extensions = ">=4.12.2" [package.extras] @@ -1048,111 +1035,111 @@ timezone = ["tzdata"] [[package]] name = "pydantic-core" -version = "2.27.1" +version = "2.27.2" description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic_core-2.27.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:71a5e35c75c021aaf400ac048dacc855f000bdfed91614b4a726f7432f1f3d6a"}, - {file = "pydantic_core-2.27.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f82d068a2d6ecfc6e054726080af69a6764a10015467d7d7b9f66d6ed5afa23b"}, - {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:121ceb0e822f79163dd4699e4c54f5ad38b157084d97b34de8b232bcaad70278"}, - {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4603137322c18eaf2e06a4495f426aa8d8388940f3c457e7548145011bb68e05"}, - {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a33cd6ad9017bbeaa9ed78a2e0752c5e250eafb9534f308e7a5f7849b0b1bfb4"}, - {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:15cc53a3179ba0fcefe1e3ae50beb2784dede4003ad2dfd24f81bba4b23a454f"}, - {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45d9c5eb9273aa50999ad6adc6be5e0ecea7e09dbd0d31bd0c65a55a2592ca08"}, - {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8bf7b66ce12a2ac52d16f776b31d16d91033150266eb796967a7e4621707e4f6"}, - {file = "pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:655d7dd86f26cb15ce8a431036f66ce0318648f8853d709b4167786ec2fa4807"}, - {file = "pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:5556470f1a2157031e676f776c2bc20acd34c1990ca5f7e56f1ebf938b9ab57c"}, - {file = "pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f69ed81ab24d5a3bd93861c8c4436f54afdf8e8cc421562b0c7504cf3be58206"}, - {file = "pydantic_core-2.27.1-cp310-none-win32.whl", hash = "sha256:f5a823165e6d04ccea61a9f0576f345f8ce40ed533013580e087bd4d7442b52c"}, - {file = "pydantic_core-2.27.1-cp310-none-win_amd64.whl", hash = "sha256:57866a76e0b3823e0b56692d1a0bf722bffb324839bb5b7226a7dbd6c9a40b17"}, - {file = "pydantic_core-2.27.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:ac3b20653bdbe160febbea8aa6c079d3df19310d50ac314911ed8cc4eb7f8cb8"}, - {file = "pydantic_core-2.27.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a5a8e19d7c707c4cadb8c18f5f60c843052ae83c20fa7d44f41594c644a1d330"}, - {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f7059ca8d64fea7f238994c97d91f75965216bcbe5f695bb44f354893f11d52"}, - {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bed0f8a0eeea9fb72937ba118f9db0cb7e90773462af7962d382445f3005e5a4"}, - {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a3cb37038123447cf0f3ea4c74751f6a9d7afef0eb71aa07bf5f652b5e6a132c"}, - {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:84286494f6c5d05243456e04223d5a9417d7f443c3b76065e75001beb26f88de"}, - {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acc07b2cfc5b835444b44a9956846b578d27beeacd4b52e45489e93276241025"}, - {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4fefee876e07a6e9aad7a8c8c9f85b0cdbe7df52b8a9552307b09050f7512c7e"}, - {file = "pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:258c57abf1188926c774a4c94dd29237e77eda19462e5bb901d88adcab6af919"}, - {file = "pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:35c14ac45fcfdf7167ca76cc80b2001205a8d5d16d80524e13508371fb8cdd9c"}, - {file = "pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d1b26e1dff225c31897696cab7d4f0a315d4c0d9e8666dbffdb28216f3b17fdc"}, - {file = "pydantic_core-2.27.1-cp311-none-win32.whl", hash = "sha256:2cdf7d86886bc6982354862204ae3b2f7f96f21a3eb0ba5ca0ac42c7b38598b9"}, - {file = "pydantic_core-2.27.1-cp311-none-win_amd64.whl", hash = "sha256:3af385b0cee8df3746c3f406f38bcbfdc9041b5c2d5ce3e5fc6637256e60bbc5"}, - {file = "pydantic_core-2.27.1-cp311-none-win_arm64.whl", hash = "sha256:81f2ec23ddc1b476ff96563f2e8d723830b06dceae348ce02914a37cb4e74b89"}, - {file = "pydantic_core-2.27.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9cbd94fc661d2bab2bc702cddd2d3370bbdcc4cd0f8f57488a81bcce90c7a54f"}, - {file = "pydantic_core-2.27.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5f8c4718cd44ec1580e180cb739713ecda2bdee1341084c1467802a417fe0f02"}, - {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15aae984e46de8d376df515f00450d1522077254ef6b7ce189b38ecee7c9677c"}, - {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1ba5e3963344ff25fc8c40da90f44b0afca8cfd89d12964feb79ac1411a260ac"}, - {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:992cea5f4f3b29d6b4f7f1726ed8ee46c8331c6b4eed6db5b40134c6fe1768bb"}, - {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0325336f348dbee6550d129b1627cb8f5351a9dc91aad141ffb96d4937bd9529"}, - {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7597c07fbd11515f654d6ece3d0e4e5093edc30a436c63142d9a4b8e22f19c35"}, - {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3bbd5d8cc692616d5ef6fbbbd50dbec142c7e6ad9beb66b78a96e9c16729b089"}, - {file = "pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:dc61505e73298a84a2f317255fcc72b710b72980f3a1f670447a21efc88f8381"}, - {file = "pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:e1f735dc43da318cad19b4173dd1ffce1d84aafd6c9b782b3abc04a0d5a6f5bb"}, - {file = "pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f4e5658dbffe8843a0f12366a4c2d1c316dbe09bb4dfbdc9d2d9cd6031de8aae"}, - {file = "pydantic_core-2.27.1-cp312-none-win32.whl", hash = "sha256:672ebbe820bb37988c4d136eca2652ee114992d5d41c7e4858cdd90ea94ffe5c"}, - {file = "pydantic_core-2.27.1-cp312-none-win_amd64.whl", hash = "sha256:66ff044fd0bb1768688aecbe28b6190f6e799349221fb0de0e6f4048eca14c16"}, - {file = "pydantic_core-2.27.1-cp312-none-win_arm64.whl", hash = "sha256:9a3b0793b1bbfd4146304e23d90045f2a9b5fd5823aa682665fbdaf2a6c28f3e"}, - {file = "pydantic_core-2.27.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f216dbce0e60e4d03e0c4353c7023b202d95cbaeff12e5fd2e82ea0a66905073"}, - {file = "pydantic_core-2.27.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a2e02889071850bbfd36b56fd6bc98945e23670773bc7a76657e90e6b6603c08"}, - {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42b0e23f119b2b456d07ca91b307ae167cc3f6c846a7b169fca5326e32fdc6cf"}, - {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:764be71193f87d460a03f1f7385a82e226639732214b402f9aa61f0d025f0737"}, - {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1c00666a3bd2f84920a4e94434f5974d7bbc57e461318d6bb34ce9cdbbc1f6b2"}, - {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3ccaa88b24eebc0f849ce0a4d09e8a408ec5a94afff395eb69baf868f5183107"}, - {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c65af9088ac534313e1963443d0ec360bb2b9cba6c2909478d22c2e363d98a51"}, - {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:206b5cf6f0c513baffaeae7bd817717140770c74528f3e4c3e1cec7871ddd61a"}, - {file = "pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:062f60e512fc7fff8b8a9d680ff0ddaaef0193dba9fa83e679c0c5f5fbd018bc"}, - {file = "pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:a0697803ed7d4af5e4c1adf1670af078f8fcab7a86350e969f454daf598c4960"}, - {file = "pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:58ca98a950171f3151c603aeea9303ef6c235f692fe555e883591103da709b23"}, - {file = "pydantic_core-2.27.1-cp313-none-win32.whl", hash = "sha256:8065914ff79f7eab1599bd80406681f0ad08f8e47c880f17b416c9f8f7a26d05"}, - {file = "pydantic_core-2.27.1-cp313-none-win_amd64.whl", hash = "sha256:ba630d5e3db74c79300d9a5bdaaf6200172b107f263c98a0539eeecb857b2337"}, - {file = "pydantic_core-2.27.1-cp313-none-win_arm64.whl", hash = "sha256:45cf8588c066860b623cd11c4ba687f8d7175d5f7ef65f7129df8a394c502de5"}, - {file = "pydantic_core-2.27.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:5897bec80a09b4084aee23f9b73a9477a46c3304ad1d2d07acca19723fb1de62"}, - {file = "pydantic_core-2.27.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d0165ab2914379bd56908c02294ed8405c252250668ebcb438a55494c69f44ab"}, - {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b9af86e1d8e4cfc82c2022bfaa6f459381a50b94a29e95dcdda8442d6d83864"}, - {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f6c8a66741c5f5447e047ab0ba7a1c61d1e95580d64bce852e3df1f895c4067"}, - {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a42d6a8156ff78981f8aa56eb6394114e0dedb217cf8b729f438f643608cbcd"}, - {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:64c65f40b4cd8b0e049a8edde07e38b476da7e3aaebe63287c899d2cff253fa5"}, - {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdcf339322a3fae5cbd504edcefddd5a50d9ee00d968696846f089b4432cf78"}, - {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bf99c8404f008750c846cb4ac4667b798a9f7de673ff719d705d9b2d6de49c5f"}, - {file = "pydantic_core-2.27.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8f1edcea27918d748c7e5e4d917297b2a0ab80cad10f86631e488b7cddf76a36"}, - {file = "pydantic_core-2.27.1-cp38-cp38-musllinux_1_1_armv7l.whl", hash = "sha256:159cac0a3d096f79ab6a44d77a961917219707e2a130739c64d4dd46281f5c2a"}, - {file = "pydantic_core-2.27.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:029d9757eb621cc6e1848fa0b0310310de7301057f623985698ed7ebb014391b"}, - {file = "pydantic_core-2.27.1-cp38-none-win32.whl", hash = "sha256:a28af0695a45f7060e6f9b7092558a928a28553366519f64083c63a44f70e618"}, - {file = "pydantic_core-2.27.1-cp38-none-win_amd64.whl", hash = "sha256:2d4567c850905d5eaaed2f7a404e61012a51caf288292e016360aa2b96ff38d4"}, - {file = "pydantic_core-2.27.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:e9386266798d64eeb19dd3677051f5705bf873e98e15897ddb7d76f477131967"}, - {file = "pydantic_core-2.27.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4228b5b646caa73f119b1ae756216b59cc6e2267201c27d3912b592c5e323b60"}, - {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b3dfe500de26c52abe0477dde16192ac39c98f05bf2d80e76102d394bd13854"}, - {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aee66be87825cdf72ac64cb03ad4c15ffef4143dbf5c113f64a5ff4f81477bf9"}, - {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b748c44bb9f53031c8cbc99a8a061bc181c1000c60a30f55393b6e9c45cc5bd"}, - {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ca038c7f6a0afd0b2448941b6ef9d5e1949e999f9e5517692eb6da58e9d44be"}, - {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e0bd57539da59a3e4671b90a502da9a28c72322a4f17866ba3ac63a82c4498e"}, - {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ac6c2c45c847bbf8f91930d88716a0fb924b51e0c6dad329b793d670ec5db792"}, - {file = "pydantic_core-2.27.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b94d4ba43739bbe8b0ce4262bcc3b7b9f31459ad120fb595627eaeb7f9b9ca01"}, - {file = "pydantic_core-2.27.1-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:00e6424f4b26fe82d44577b4c842d7df97c20be6439e8e685d0d715feceb9fb9"}, - {file = "pydantic_core-2.27.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:38de0a70160dd97540335b7ad3a74571b24f1dc3ed33f815f0880682e6880131"}, - {file = "pydantic_core-2.27.1-cp39-none-win32.whl", hash = "sha256:7ccebf51efc61634f6c2344da73e366c75e735960b5654b63d7e6f69a5885fa3"}, - {file = "pydantic_core-2.27.1-cp39-none-win_amd64.whl", hash = "sha256:a57847b090d7892f123726202b7daa20df6694cbd583b67a592e856bff603d6c"}, - {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3fa80ac2bd5856580e242dbc202db873c60a01b20309c8319b5c5986fbe53ce6"}, - {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d950caa237bb1954f1b8c9227b5065ba6875ac9771bb8ec790d956a699b78676"}, - {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e4216e64d203e39c62df627aa882f02a2438d18a5f21d7f721621f7a5d3611d"}, - {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02a3d637bd387c41d46b002f0e49c52642281edacd2740e5a42f7017feea3f2c"}, - {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:161c27ccce13b6b0c8689418da3885d3220ed2eae2ea5e9b2f7f3d48f1d52c27"}, - {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:19910754e4cc9c63bc1c7f6d73aa1cfee82f42007e407c0f413695c2f7ed777f"}, - {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:e173486019cc283dc9778315fa29a363579372fe67045e971e89b6365cc035ed"}, - {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:af52d26579b308921b73b956153066481f064875140ccd1dfd4e77db89dbb12f"}, - {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:981fb88516bd1ae8b0cbbd2034678a39dedc98752f264ac9bc5839d3923fa04c"}, - {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5fde892e6c697ce3e30c61b239330fc5d569a71fefd4eb6512fc6caec9dd9e2f"}, - {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:816f5aa087094099fff7edabb5e01cc370eb21aa1a1d44fe2d2aefdfb5599b31"}, - {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c10c309e18e443ddb108f0ef64e8729363adbfd92d6d57beec680f6261556f3"}, - {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98476c98b02c8e9b2eec76ac4156fd006628b1b2d0ef27e548ffa978393fd154"}, - {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c3027001c28434e7ca5a6e1e527487051136aa81803ac812be51802150d880dd"}, - {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:7699b1df36a48169cdebda7ab5a2bac265204003f153b4bd17276153d997670a"}, - {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:1c39b07d90be6b48968ddc8c19e7585052088fd7ec8d568bb31ff64c70ae3c97"}, - {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:46ccfe3032b3915586e469d4972973f893c0a2bb65669194a5bdea9bacc088c2"}, - {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:62ba45e21cf6571d7f716d903b5b7b6d2617e2d5d67c0923dc47b9d41369f840"}, - {file = "pydantic_core-2.27.1.tar.gz", hash = "sha256:62a763352879b84aa31058fc931884055fd75089cccbd9d58bb6afd01141b235"}, + {file = "pydantic_core-2.27.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2d367ca20b2f14095a8f4fa1210f5a7b78b8a20009ecced6b12818f455b1e9fa"}, + {file = "pydantic_core-2.27.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:491a2b73db93fab69731eaee494f320faa4e093dbed776be1a829c2eb222c34c"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7969e133a6f183be60e9f6f56bfae753585680f3b7307a8e555a948d443cc05a"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3de9961f2a346257caf0aa508a4da705467f53778e9ef6fe744c038119737ef5"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e2bb4d3e5873c37bb3dd58714d4cd0b0e6238cebc4177ac8fe878f8b3aa8e74c"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:280d219beebb0752699480fe8f1dc61ab6615c2046d76b7ab7ee38858de0a4e7"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47956ae78b6422cbd46f772f1746799cbb862de838fd8d1fbd34a82e05b0983a"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:14d4a5c49d2f009d62a2a7140d3064f686d17a5d1a268bc641954ba181880236"}, + {file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:337b443af21d488716f8d0b6164de833e788aa6bd7e3a39c005febc1284f4962"}, + {file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:03d0f86ea3184a12f41a2d23f7ccb79cdb5a18e06993f8a45baa8dfec746f0e9"}, + {file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7041c36f5680c6e0f08d922aed302e98b3745d97fe1589db0a3eebf6624523af"}, + {file = "pydantic_core-2.27.2-cp310-cp310-win32.whl", hash = "sha256:50a68f3e3819077be2c98110c1f9dcb3817e93f267ba80a2c05bb4f8799e2ff4"}, + {file = "pydantic_core-2.27.2-cp310-cp310-win_amd64.whl", hash = "sha256:e0fd26b16394ead34a424eecf8a31a1f5137094cabe84a1bcb10fa6ba39d3d31"}, + {file = "pydantic_core-2.27.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:8e10c99ef58cfdf2a66fc15d66b16c4a04f62bca39db589ae8cba08bc55331bc"}, + {file = "pydantic_core-2.27.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:26f32e0adf166a84d0cb63be85c562ca8a6fa8de28e5f0d92250c6b7e9e2aff7"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c19d1ea0673cd13cc2f872f6c9ab42acc4e4f492a7ca9d3795ce2b112dd7e15"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5e68c4446fe0810e959cdff46ab0a41ce2f2c86d227d96dc3847af0ba7def306"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d9640b0059ff4f14d1f37321b94061c6db164fbe49b334b31643e0528d100d99"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:40d02e7d45c9f8af700f3452f329ead92da4c5f4317ca9b896de7ce7199ea459"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c1fd185014191700554795c99b347d64f2bb637966c4cfc16998a0ca700d048"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d81d2068e1c1228a565af076598f9e7451712700b673de8f502f0334f281387d"}, + {file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1a4207639fb02ec2dbb76227d7c751a20b1a6b4bc52850568e52260cae64ca3b"}, + {file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:3de3ce3c9ddc8bbd88f6e0e304dea0e66d843ec9de1b0042b0911c1663ffd474"}, + {file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:30c5f68ded0c36466acede341551106821043e9afaad516adfb6e8fa80a4e6a6"}, + {file = "pydantic_core-2.27.2-cp311-cp311-win32.whl", hash = "sha256:c70c26d2c99f78b125a3459f8afe1aed4d9687c24fd677c6a4436bc042e50d6c"}, + {file = "pydantic_core-2.27.2-cp311-cp311-win_amd64.whl", hash = "sha256:08e125dbdc505fa69ca7d9c499639ab6407cfa909214d500897d02afb816e7cc"}, + {file = "pydantic_core-2.27.2-cp311-cp311-win_arm64.whl", hash = "sha256:26f0d68d4b235a2bae0c3fc585c585b4ecc51382db0e3ba402a22cbc440915e4"}, + {file = "pydantic_core-2.27.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9e0c8cfefa0ef83b4da9588448b6d8d2a2bf1a53c3f1ae5fca39eb3061e2f0b0"}, + {file = "pydantic_core-2.27.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:83097677b8e3bd7eaa6775720ec8e0405f1575015a463285a92bfdfe254529ef"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:172fce187655fece0c90d90a678424b013f8fbb0ca8b036ac266749c09438cb7"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:519f29f5213271eeeeb3093f662ba2fd512b91c5f188f3bb7b27bc5973816934"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05e3a55d124407fffba0dd6b0c0cd056d10e983ceb4e5dbd10dda135c31071d6"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c3ed807c7b91de05e63930188f19e921d1fe90de6b4f5cd43ee7fcc3525cb8c"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fb4aadc0b9a0c063206846d603b92030eb6f03069151a625667f982887153e2"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:28ccb213807e037460326424ceb8b5245acb88f32f3d2777427476e1b32c48c4"}, + {file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:de3cd1899e2c279b140adde9357c4495ed9d47131b4a4eaff9052f23398076b3"}, + {file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:220f892729375e2d736b97d0e51466252ad84c51857d4d15f5e9692f9ef12be4"}, + {file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a0fcd29cd6b4e74fe8ddd2c90330fd8edf2e30cb52acda47f06dd615ae72da57"}, + {file = "pydantic_core-2.27.2-cp312-cp312-win32.whl", hash = "sha256:1e2cb691ed9834cd6a8be61228471d0a503731abfb42f82458ff27be7b2186fc"}, + {file = "pydantic_core-2.27.2-cp312-cp312-win_amd64.whl", hash = "sha256:cc3f1a99a4f4f9dd1de4fe0312c114e740b5ddead65bb4102884b384c15d8bc9"}, + {file = "pydantic_core-2.27.2-cp312-cp312-win_arm64.whl", hash = "sha256:3911ac9284cd8a1792d3cb26a2da18f3ca26c6908cc434a18f730dc0db7bfa3b"}, + {file = "pydantic_core-2.27.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:7d14bd329640e63852364c306f4d23eb744e0f8193148d4044dd3dacdaacbd8b"}, + {file = "pydantic_core-2.27.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:82f91663004eb8ed30ff478d77c4d1179b3563df6cdb15c0817cd1cdaf34d154"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71b24c7d61131bb83df10cc7e687433609963a944ccf45190cfc21e0887b08c9"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fa8e459d4954f608fa26116118bb67f56b93b209c39b008277ace29937453dc9"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce8918cbebc8da707ba805b7fd0b382816858728ae7fe19a942080c24e5b7cd1"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eda3f5c2a021bbc5d976107bb302e0131351c2ba54343f8a496dc8783d3d3a6a"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd8086fa684c4775c27f03f062cbb9eaa6e17f064307e86b21b9e0abc9c0f02e"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8d9b3388db186ba0c099a6d20f0604a44eabdeef1777ddd94786cdae158729e4"}, + {file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7a66efda2387de898c8f38c0cf7f14fca0b51a8ef0b24bfea5849f1b3c95af27"}, + {file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:18a101c168e4e092ab40dbc2503bdc0f62010e95d292b27827871dc85450d7ee"}, + {file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ba5dd002f88b78a4215ed2f8ddbdf85e8513382820ba15ad5ad8955ce0ca19a1"}, + {file = "pydantic_core-2.27.2-cp313-cp313-win32.whl", hash = "sha256:1ebaf1d0481914d004a573394f4be3a7616334be70261007e47c2a6fe7e50130"}, + {file = "pydantic_core-2.27.2-cp313-cp313-win_amd64.whl", hash = "sha256:953101387ecf2f5652883208769a79e48db18c6df442568a0b5ccd8c2723abee"}, + {file = "pydantic_core-2.27.2-cp313-cp313-win_arm64.whl", hash = "sha256:ac4dbfd1691affb8f48c2c13241a2e3b60ff23247cbcf981759c768b6633cf8b"}, + {file = "pydantic_core-2.27.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:d3e8d504bdd3f10835468f29008d72fc8359d95c9c415ce6e767203db6127506"}, + {file = "pydantic_core-2.27.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:521eb9b7f036c9b6187f0b47318ab0d7ca14bd87f776240b90b21c1f4f149320"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85210c4d99a0114f5a9481b44560d7d1e35e32cc5634c656bc48e590b669b145"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d716e2e30c6f140d7560ef1538953a5cd1a87264c737643d481f2779fc247fe1"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f66d89ba397d92f840f8654756196d93804278457b5fbede59598a1f9f90b228"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:669e193c1c576a58f132e3158f9dfa9662969edb1a250c54d8fa52590045f046"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdbe7629b996647b99c01b37f11170a57ae675375b14b8c13b8518b8320ced5"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d262606bf386a5ba0b0af3b97f37c83d7011439e3dc1a9298f21efb292e42f1a"}, + {file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:cabb9bcb7e0d97f74df8646f34fc76fbf793b7f6dc2438517d7a9e50eee4f14d"}, + {file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_armv7l.whl", hash = "sha256:d2d63f1215638d28221f664596b1ccb3944f6e25dd18cd3b86b0a4c408d5ebb9"}, + {file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bca101c00bff0adb45a833f8451b9105d9df18accb8743b08107d7ada14bd7da"}, + {file = "pydantic_core-2.27.2-cp38-cp38-win32.whl", hash = "sha256:f6f8e111843bbb0dee4cb6594cdc73e79b3329b526037ec242a3e49012495b3b"}, + {file = "pydantic_core-2.27.2-cp38-cp38-win_amd64.whl", hash = "sha256:fd1aea04935a508f62e0d0ef1f5ae968774a32afc306fb8545e06f5ff5cdf3ad"}, + {file = "pydantic_core-2.27.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:c10eb4f1659290b523af58fa7cffb452a61ad6ae5613404519aee4bfbf1df993"}, + {file = "pydantic_core-2.27.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ef592d4bad47296fb11f96cd7dc898b92e795032b4894dfb4076cfccd43a9308"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c61709a844acc6bf0b7dce7daae75195a10aac96a596ea1b776996414791ede4"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:42c5f762659e47fdb7b16956c71598292f60a03aa92f8b6351504359dbdba6cf"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c9775e339e42e79ec99c441d9730fccf07414af63eac2f0e48e08fd38a64d76"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57762139821c31847cfb2df63c12f725788bd9f04bc2fb392790959b8f70f118"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d1e85068e818c73e048fe28cfc769040bb1f475524f4745a5dc621f75ac7630"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:097830ed52fd9e427942ff3b9bc17fab52913b2f50f2880dc4a5611446606a54"}, + {file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:044a50963a614ecfae59bb1eaf7ea7efc4bc62f49ed594e18fa1e5d953c40e9f"}, + {file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:4e0b4220ba5b40d727c7f879eac379b822eee5d8fff418e9d3381ee45b3b0362"}, + {file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5e4f4bb20d75e9325cc9696c6802657b58bc1dbbe3022f32cc2b2b632c3fbb96"}, + {file = "pydantic_core-2.27.2-cp39-cp39-win32.whl", hash = "sha256:cca63613e90d001b9f2f9a9ceb276c308bfa2a43fafb75c8031c4f66039e8c6e"}, + {file = "pydantic_core-2.27.2-cp39-cp39-win_amd64.whl", hash = "sha256:77d1bca19b0f7021b3a982e6f903dcd5b2b06076def36a652e3907f596e29f67"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:2bf14caea37e91198329b828eae1618c068dfb8ef17bb33287a7ad4b61ac314e"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b0cb791f5b45307caae8810c2023a184c74605ec3bcbb67d13846c28ff731ff8"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:688d3fd9fcb71f41c4c015c023d12a79d1c4c0732ec9eb35d96e3388a120dcf3"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d591580c34f4d731592f0e9fe40f9cc1b430d297eecc70b962e93c5c668f15f"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:82f986faf4e644ffc189a7f1aafc86e46ef70372bb153e7001e8afccc6e54133"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:bec317a27290e2537f922639cafd54990551725fc844249e64c523301d0822fc"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:0296abcb83a797db256b773f45773da397da75a08f5fcaef41f2044adec05f50"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:0d75070718e369e452075a6017fbf187f788e17ed67a3abd47fa934d001863d9"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:7e17b560be3c98a8e3aa66ce828bdebb9e9ac6ad5466fba92eb74c4c95cb1151"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c33939a82924da9ed65dab5a65d427205a73181d8098e79b6b426bdf8ad4e656"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:00bad2484fa6bda1e216e7345a798bd37c68fb2d97558edd584942aa41b7d278"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c817e2b40aba42bac6f457498dacabc568c3b7a986fc9ba7c8d9d260b71485fb"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:251136cdad0cb722e93732cb45ca5299fb56e1344a833640bf93b2803f8d1bfd"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d2088237af596f0a524d3afc39ab3b036e8adb054ee57cbb1dcf8e09da5b29cc"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:d4041c0b966a84b4ae7a09832eb691a35aec90910cd2dbe7a208de59be77965b"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:8083d4e875ebe0b864ffef72a4304827015cff328a1be6e22cc850753bfb122b"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f141ee28a0ad2123b6611b6ceff018039df17f32ada8b534e6aa039545a3efb2"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7d0c8399fcc1848491f00e0314bd59fb34a9c008761bcb422a057670c3f65e35"}, + {file = "pydantic_core-2.27.2.tar.gz", hash = "sha256:eb026e5a4c1fee05726072337ff51d1efb6f59090b7da90d30ea58625b1ffb39"}, ] [package.dependencies] @@ -1337,13 +1324,13 @@ files = [ [[package]] name = "urllib3" -version = "2.2.3" +version = "2.3.0" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac"}, - {file = "urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9"}, + {file = "urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df"}, + {file = "urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d"}, ] [package.extras] @@ -1395,97 +1382,80 @@ files = [ [[package]] name = "websockets" -version = "13.1" +version = "14.1" description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "websockets-13.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f48c749857f8fb598fb890a75f540e3221d0976ed0bf879cf3c7eef34151acee"}, - {file = "websockets-13.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c7e72ce6bda6fb9409cc1e8164dd41d7c91466fb599eb047cfda72fe758a34a7"}, - {file = "websockets-13.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f779498eeec470295a2b1a5d97aa1bc9814ecd25e1eb637bd9d1c73a327387f6"}, - {file = "websockets-13.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4676df3fe46956fbb0437d8800cd5f2b6d41143b6e7e842e60554398432cf29b"}, - {file = "websockets-13.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a7affedeb43a70351bb811dadf49493c9cfd1ed94c9c70095fd177e9cc1541fa"}, - {file = "websockets-13.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1971e62d2caa443e57588e1d82d15f663b29ff9dfe7446d9964a4b6f12c1e700"}, - {file = "websockets-13.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5f2e75431f8dc4a47f31565a6e1355fb4f2ecaa99d6b89737527ea917066e26c"}, - {file = "websockets-13.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:58cf7e75dbf7e566088b07e36ea2e3e2bd5676e22216e4cad108d4df4a7402a0"}, - {file = "websockets-13.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c90d6dec6be2c7d03378a574de87af9b1efea77d0c52a8301dd831ece938452f"}, - {file = "websockets-13.1-cp310-cp310-win32.whl", hash = "sha256:730f42125ccb14602f455155084f978bd9e8e57e89b569b4d7f0f0c17a448ffe"}, - {file = "websockets-13.1-cp310-cp310-win_amd64.whl", hash = "sha256:5993260f483d05a9737073be197371940c01b257cc45ae3f1d5d7adb371b266a"}, - {file = "websockets-13.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:61fc0dfcda609cda0fc9fe7977694c0c59cf9d749fbb17f4e9483929e3c48a19"}, - {file = "websockets-13.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ceec59f59d092c5007e815def4ebb80c2de330e9588e101cf8bd94c143ec78a5"}, - {file = "websockets-13.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c1dca61c6db1166c48b95198c0b7d9c990b30c756fc2923cc66f68d17dc558fd"}, - {file = "websockets-13.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:308e20f22c2c77f3f39caca508e765f8725020b84aa963474e18c59accbf4c02"}, - {file = "websockets-13.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62d516c325e6540e8a57b94abefc3459d7dab8ce52ac75c96cad5549e187e3a7"}, - {file = "websockets-13.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87c6e35319b46b99e168eb98472d6c7d8634ee37750d7693656dc766395df096"}, - {file = "websockets-13.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5f9fee94ebafbc3117c30be1844ed01a3b177bb6e39088bc6b2fa1dc15572084"}, - {file = "websockets-13.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:7c1e90228c2f5cdde263253fa5db63e6653f1c00e7ec64108065a0b9713fa1b3"}, - {file = "websockets-13.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6548f29b0e401eea2b967b2fdc1c7c7b5ebb3eeb470ed23a54cd45ef078a0db9"}, - {file = "websockets-13.1-cp311-cp311-win32.whl", hash = "sha256:c11d4d16e133f6df8916cc5b7e3e96ee4c44c936717d684a94f48f82edb7c92f"}, - {file = "websockets-13.1-cp311-cp311-win_amd64.whl", hash = "sha256:d04f13a1d75cb2b8382bdc16ae6fa58c97337253826dfe136195b7f89f661557"}, - {file = "websockets-13.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:9d75baf00138f80b48f1eac72ad1535aac0b6461265a0bcad391fc5aba875cfc"}, - {file = "websockets-13.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:9b6f347deb3dcfbfde1c20baa21c2ac0751afaa73e64e5b693bb2b848efeaa49"}, - {file = "websockets-13.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:de58647e3f9c42f13f90ac7e5f58900c80a39019848c5547bc691693098ae1bd"}, - {file = "websockets-13.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1b54689e38d1279a51d11e3467dd2f3a50f5f2e879012ce8f2d6943f00e83f0"}, - {file = "websockets-13.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf1781ef73c073e6b0f90af841aaf98501f975d306bbf6221683dd594ccc52b6"}, - {file = "websockets-13.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d23b88b9388ed85c6faf0e74d8dec4f4d3baf3ecf20a65a47b836d56260d4b9"}, - {file = "websockets-13.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3c78383585f47ccb0fcf186dcb8a43f5438bd7d8f47d69e0b56f71bf431a0a68"}, - {file = "websockets-13.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:d6d300f8ec35c24025ceb9b9019ae9040c1ab2f01cddc2bcc0b518af31c75c14"}, - {file = "websockets-13.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a9dcaf8b0cc72a392760bb8755922c03e17a5a54e08cca58e8b74f6902b433cf"}, - {file = "websockets-13.1-cp312-cp312-win32.whl", hash = "sha256:2f85cf4f2a1ba8f602298a853cec8526c2ca42a9a4b947ec236eaedb8f2dc80c"}, - {file = "websockets-13.1-cp312-cp312-win_amd64.whl", hash = "sha256:38377f8b0cdeee97c552d20cf1865695fcd56aba155ad1b4ca8779a5b6ef4ac3"}, - {file = "websockets-13.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a9ab1e71d3d2e54a0aa646ab6d4eebfaa5f416fe78dfe4da2839525dc5d765c6"}, - {file = "websockets-13.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b9d7439d7fab4dce00570bb906875734df13d9faa4b48e261c440a5fec6d9708"}, - {file = "websockets-13.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:327b74e915cf13c5931334c61e1a41040e365d380f812513a255aa804b183418"}, - {file = "websockets-13.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:325b1ccdbf5e5725fdcb1b0e9ad4d2545056479d0eee392c291c1bf76206435a"}, - {file = "websockets-13.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:346bee67a65f189e0e33f520f253d5147ab76ae42493804319b5716e46dddf0f"}, - {file = "websockets-13.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:91a0fa841646320ec0d3accdff5b757b06e2e5c86ba32af2e0815c96c7a603c5"}, - {file = "websockets-13.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:18503d2c5f3943e93819238bf20df71982d193f73dcecd26c94514f417f6b135"}, - {file = "websockets-13.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:a9cd1af7e18e5221d2878378fbc287a14cd527fdd5939ed56a18df8a31136bb2"}, - {file = "websockets-13.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:70c5be9f416aa72aab7a2a76c90ae0a4fe2755c1816c153c1a2bcc3333ce4ce6"}, - {file = "websockets-13.1-cp313-cp313-win32.whl", hash = "sha256:624459daabeb310d3815b276c1adef475b3e6804abaf2d9d2c061c319f7f187d"}, - {file = "websockets-13.1-cp313-cp313-win_amd64.whl", hash = "sha256:c518e84bb59c2baae725accd355c8dc517b4a3ed8db88b4bc93c78dae2974bf2"}, - {file = "websockets-13.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:c7934fd0e920e70468e676fe7f1b7261c1efa0d6c037c6722278ca0228ad9d0d"}, - {file = "websockets-13.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:149e622dc48c10ccc3d2760e5f36753db9cacf3ad7bc7bbbfd7d9c819e286f23"}, - {file = "websockets-13.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a569eb1b05d72f9bce2ebd28a1ce2054311b66677fcd46cf36204ad23acead8c"}, - {file = "websockets-13.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:95df24ca1e1bd93bbca51d94dd049a984609687cb2fb08a7f2c56ac84e9816ea"}, - {file = "websockets-13.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d8dbb1bf0c0a4ae8b40bdc9be7f644e2f3fb4e8a9aca7145bfa510d4a374eeb7"}, - {file = "websockets-13.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:035233b7531fb92a76beefcbf479504db8c72eb3bff41da55aecce3a0f729e54"}, - {file = "websockets-13.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:e4450fc83a3df53dec45922b576e91e94f5578d06436871dce3a6be38e40f5db"}, - {file = "websockets-13.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:463e1c6ec853202dd3657f156123d6b4dad0c546ea2e2e38be2b3f7c5b8e7295"}, - {file = "websockets-13.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:6d6855bbe70119872c05107e38fbc7f96b1d8cb047d95c2c50869a46c65a8e96"}, - {file = "websockets-13.1-cp38-cp38-win32.whl", hash = "sha256:204e5107f43095012b00f1451374693267adbb832d29966a01ecc4ce1db26faf"}, - {file = "websockets-13.1-cp38-cp38-win_amd64.whl", hash = "sha256:485307243237328c022bc908b90e4457d0daa8b5cf4b3723fd3c4a8012fce4c6"}, - {file = "websockets-13.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9b37c184f8b976f0c0a231a5f3d6efe10807d41ccbe4488df8c74174805eea7d"}, - {file = "websockets-13.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:163e7277e1a0bd9fb3c8842a71661ad19c6aa7bb3d6678dc7f89b17fbcc4aeb7"}, - {file = "websockets-13.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4b889dbd1342820cc210ba44307cf75ae5f2f96226c0038094455a96e64fb07a"}, - {file = "websockets-13.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:586a356928692c1fed0eca68b4d1c2cbbd1ca2acf2ac7e7ebd3b9052582deefa"}, - {file = "websockets-13.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7bd6abf1e070a6b72bfeb71049d6ad286852e285f146682bf30d0296f5fbadfa"}, - {file = "websockets-13.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d2aad13a200e5934f5a6767492fb07151e1de1d6079c003ab31e1823733ae79"}, - {file = "websockets-13.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:df01aea34b6e9e33572c35cd16bae5a47785e7d5c8cb2b54b2acdb9678315a17"}, - {file = "websockets-13.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:e54affdeb21026329fb0744ad187cf812f7d3c2aa702a5edb562b325191fcab6"}, - {file = "websockets-13.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:9ef8aa8bdbac47f4968a5d66462a2a0935d044bf35c0e5a8af152d58516dbeb5"}, - {file = "websockets-13.1-cp39-cp39-win32.whl", hash = "sha256:deeb929efe52bed518f6eb2ddc00cc496366a14c726005726ad62c2dd9017a3c"}, - {file = "websockets-13.1-cp39-cp39-win_amd64.whl", hash = "sha256:7c65ffa900e7cc958cd088b9a9157a8141c991f8c53d11087e6fb7277a03f81d"}, - {file = "websockets-13.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:5dd6da9bec02735931fccec99d97c29f47cc61f644264eb995ad6c0c27667238"}, - {file = "websockets-13.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:2510c09d8e8df777177ee3d40cd35450dc169a81e747455cc4197e63f7e7bfe5"}, - {file = "websockets-13.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1c3cf67185543730888b20682fb186fc8d0fa6f07ccc3ef4390831ab4b388d9"}, - {file = "websockets-13.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bcc03c8b72267e97b49149e4863d57c2d77f13fae12066622dc78fe322490fe6"}, - {file = "websockets-13.1-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:004280a140f220c812e65f36944a9ca92d766b6cc4560be652a0a3883a79ed8a"}, - {file = "websockets-13.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e2620453c075abeb0daa949a292e19f56de518988e079c36478bacf9546ced23"}, - {file = "websockets-13.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9156c45750b37337f7b0b00e6248991a047be4aa44554c9886fe6bdd605aab3b"}, - {file = "websockets-13.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:80c421e07973a89fbdd93e6f2003c17d20b69010458d3a8e37fb47874bd67d51"}, - {file = "websockets-13.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82d0ba76371769d6a4e56f7e83bb8e81846d17a6190971e38b5de108bde9b0d7"}, - {file = "websockets-13.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e9875a0143f07d74dc5e1ded1c4581f0d9f7ab86c78994e2ed9e95050073c94d"}, - {file = "websockets-13.1-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a11e38ad8922c7961447f35c7b17bffa15de4d17c70abd07bfbe12d6faa3e027"}, - {file = "websockets-13.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:4059f790b6ae8768471cddb65d3c4fe4792b0ab48e154c9f0a04cefaabcd5978"}, - {file = "websockets-13.1-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:25c35bf84bf7c7369d247f0b8cfa157f989862c49104c5cf85cb5436a641d93e"}, - {file = "websockets-13.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:83f91d8a9bb404b8c2c41a707ac7f7f75b9442a0a876df295de27251a856ad09"}, - {file = "websockets-13.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7a43cfdcddd07f4ca2b1afb459824dd3c6d53a51410636a2c7fc97b9a8cf4842"}, - {file = "websockets-13.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48a2ef1381632a2f0cb4efeff34efa97901c9fbc118e01951ad7cfc10601a9bb"}, - {file = "websockets-13.1-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:459bf774c754c35dbb487360b12c5727adab887f1622b8aed5755880a21c4a20"}, - {file = "websockets-13.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:95858ca14a9f6fa8413d29e0a585b31b278388aa775b8a81fa24830123874678"}, - {file = "websockets-13.1-py3-none-any.whl", hash = "sha256:a9a396a6ad26130cdae92ae10c36af09d9bfe6cafe69670fd3b6da9b07b4044f"}, - {file = "websockets-13.1.tar.gz", hash = "sha256:a3b3366087c1bc0a2795111edcadddb8b3b59509d5db5d7ea3fdd69f954a8878"}, + {file = "websockets-14.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a0adf84bc2e7c86e8a202537b4fd50e6f7f0e4a6b6bf64d7ccb96c4cd3330b29"}, + {file = "websockets-14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:90b5d9dfbb6d07a84ed3e696012610b6da074d97453bd01e0e30744b472c8179"}, + {file = "websockets-14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2177ee3901075167f01c5e335a6685e71b162a54a89a56001f1c3e9e3d2ad250"}, + {file = "websockets-14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f14a96a0034a27f9d47fd9788913924c89612225878f8078bb9d55f859272b0"}, + {file = "websockets-14.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f874ba705deea77bcf64a9da42c1f5fc2466d8f14daf410bc7d4ceae0a9fcb0"}, + {file = "websockets-14.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9607b9a442392e690a57909c362811184ea429585a71061cd5d3c2b98065c199"}, + {file = "websockets-14.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:bea45f19b7ca000380fbd4e02552be86343080120d074b87f25593ce1700ad58"}, + {file = "websockets-14.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:219c8187b3ceeadbf2afcf0f25a4918d02da7b944d703b97d12fb01510869078"}, + {file = "websockets-14.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ad2ab2547761d79926effe63de21479dfaf29834c50f98c4bf5b5480b5838434"}, + {file = "websockets-14.1-cp310-cp310-win32.whl", hash = "sha256:1288369a6a84e81b90da5dbed48610cd7e5d60af62df9851ed1d1d23a9069f10"}, + {file = "websockets-14.1-cp310-cp310-win_amd64.whl", hash = "sha256:e0744623852f1497d825a49a99bfbec9bea4f3f946df6eb9d8a2f0c37a2fec2e"}, + {file = "websockets-14.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:449d77d636f8d9c17952628cc7e3b8faf6e92a17ec581ec0c0256300717e1512"}, + {file = "websockets-14.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a35f704be14768cea9790d921c2c1cc4fc52700410b1c10948511039be824aac"}, + {file = "websockets-14.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b1f3628a0510bd58968c0f60447e7a692933589b791a6b572fcef374053ca280"}, + {file = "websockets-14.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c3deac3748ec73ef24fc7be0b68220d14d47d6647d2f85b2771cb35ea847aa1"}, + {file = "websockets-14.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7048eb4415d46368ef29d32133134c513f507fff7d953c18c91104738a68c3b3"}, + {file = "websockets-14.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6cf0ad281c979306a6a34242b371e90e891bce504509fb6bb5246bbbf31e7b6"}, + {file = "websockets-14.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cc1fc87428c1d18b643479caa7b15db7d544652e5bf610513d4a3478dbe823d0"}, + {file = "websockets-14.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f95ba34d71e2fa0c5d225bde3b3bdb152e957150100e75c86bc7f3964c450d89"}, + {file = "websockets-14.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9481a6de29105d73cf4515f2bef8eb71e17ac184c19d0b9918a3701c6c9c4f23"}, + {file = "websockets-14.1-cp311-cp311-win32.whl", hash = "sha256:368a05465f49c5949e27afd6fbe0a77ce53082185bbb2ac096a3a8afaf4de52e"}, + {file = "websockets-14.1-cp311-cp311-win_amd64.whl", hash = "sha256:6d24fc337fc055c9e83414c94e1ee0dee902a486d19d2a7f0929e49d7d604b09"}, + {file = "websockets-14.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:ed907449fe5e021933e46a3e65d651f641975a768d0649fee59f10c2985529ed"}, + {file = "websockets-14.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:87e31011b5c14a33b29f17eb48932e63e1dcd3fa31d72209848652310d3d1f0d"}, + {file = "websockets-14.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bc6ccf7d54c02ae47a48ddf9414c54d48af9c01076a2e1023e3b486b6e72c707"}, + {file = "websockets-14.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9777564c0a72a1d457f0848977a1cbe15cfa75fa2f67ce267441e465717dcf1a"}, + {file = "websockets-14.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a655bde548ca98f55b43711b0ceefd2a88a71af6350b0c168aa77562104f3f45"}, + {file = "websockets-14.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3dfff83ca578cada2d19e665e9c8368e1598d4e787422a460ec70e531dbdd58"}, + {file = "websockets-14.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6a6c9bcf7cdc0fd41cc7b7944447982e8acfd9f0d560ea6d6845428ed0562058"}, + {file = "websockets-14.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:4b6caec8576e760f2c7dd878ba817653144d5f369200b6ddf9771d64385b84d4"}, + {file = "websockets-14.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:eb6d38971c800ff02e4a6afd791bbe3b923a9a57ca9aeab7314c21c84bf9ff05"}, + {file = "websockets-14.1-cp312-cp312-win32.whl", hash = "sha256:1d045cbe1358d76b24d5e20e7b1878efe578d9897a25c24e6006eef788c0fdf0"}, + {file = "websockets-14.1-cp312-cp312-win_amd64.whl", hash = "sha256:90f4c7a069c733d95c308380aae314f2cb45bd8a904fb03eb36d1a4983a4993f"}, + {file = "websockets-14.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:3630b670d5057cd9e08b9c4dab6493670e8e762a24c2c94ef312783870736ab9"}, + {file = "websockets-14.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:36ebd71db3b89e1f7b1a5deaa341a654852c3518ea7a8ddfdf69cc66acc2db1b"}, + {file = "websockets-14.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5b918d288958dc3fa1c5a0b9aa3256cb2b2b84c54407f4813c45d52267600cd3"}, + {file = "websockets-14.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00fe5da3f037041da1ee0cf8e308374e236883f9842c7c465aa65098b1c9af59"}, + {file = "websockets-14.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8149a0f5a72ca36720981418eeffeb5c2729ea55fa179091c81a0910a114a5d2"}, + {file = "websockets-14.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77569d19a13015e840b81550922056acabc25e3f52782625bc6843cfa034e1da"}, + {file = "websockets-14.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cf5201a04550136ef870aa60ad3d29d2a59e452a7f96b94193bee6d73b8ad9a9"}, + {file = "websockets-14.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:88cf9163ef674b5be5736a584c999e98daf3aabac6e536e43286eb74c126b9c7"}, + {file = "websockets-14.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:836bef7ae338a072e9d1863502026f01b14027250a4545672673057997d5c05a"}, + {file = "websockets-14.1-cp313-cp313-win32.whl", hash = "sha256:0d4290d559d68288da9f444089fd82490c8d2744309113fc26e2da6e48b65da6"}, + {file = "websockets-14.1-cp313-cp313-win_amd64.whl", hash = "sha256:8621a07991add373c3c5c2cf89e1d277e49dc82ed72c75e3afc74bd0acc446f0"}, + {file = "websockets-14.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:01bb2d4f0a6d04538d3c5dfd27c0643269656c28045a53439cbf1c004f90897a"}, + {file = "websockets-14.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:414ffe86f4d6f434a8c3b7913655a1a5383b617f9bf38720e7c0799fac3ab1c6"}, + {file = "websockets-14.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8fda642151d5affdee8a430bd85496f2e2517be3a2b9d2484d633d5712b15c56"}, + {file = "websockets-14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd7c11968bc3860d5c78577f0dbc535257ccec41750675d58d8dc66aa47fe52c"}, + {file = "websockets-14.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a032855dc7db987dff813583d04f4950d14326665d7e714d584560b140ae6b8b"}, + {file = "websockets-14.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7e7ea2f782408c32d86b87a0d2c1fd8871b0399dd762364c731d86c86069a78"}, + {file = "websockets-14.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:39450e6215f7d9f6f7bc2a6da21d79374729f5d052333da4d5825af8a97e6735"}, + {file = "websockets-14.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:ceada5be22fa5a5a4cdeec74e761c2ee7db287208f54c718f2df4b7e200b8d4a"}, + {file = "websockets-14.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:3fc753451d471cff90b8f467a1fc0ae64031cf2d81b7b34e1811b7e2691bc4bc"}, + {file = "websockets-14.1-cp39-cp39-win32.whl", hash = "sha256:14839f54786987ccd9d03ed7f334baec0f02272e7ec4f6e9d427ff584aeea8b4"}, + {file = "websockets-14.1-cp39-cp39-win_amd64.whl", hash = "sha256:d9fd19ecc3a4d5ae82ddbfb30962cf6d874ff943e56e0c81f5169be2fda62979"}, + {file = "websockets-14.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:e5dc25a9dbd1a7f61eca4b7cb04e74ae4b963d658f9e4f9aad9cd00b688692c8"}, + {file = "websockets-14.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:04a97aca96ca2acedf0d1f332c861c5a4486fdcba7bcef35873820f940c4231e"}, + {file = "websockets-14.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df174ece723b228d3e8734a6f2a6febbd413ddec39b3dc592f5a4aa0aff28098"}, + {file = "websockets-14.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:034feb9f4286476f273b9a245fb15f02c34d9586a5bc936aff108c3ba1b21beb"}, + {file = "websockets-14.1-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:660c308dabd2b380807ab64b62985eaccf923a78ebc572bd485375b9ca2b7dc7"}, + {file = "websockets-14.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:5a42d3ecbb2db5080fc578314439b1d79eef71d323dc661aa616fb492436af5d"}, + {file = "websockets-14.1-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:ddaa4a390af911da6f680be8be4ff5aaf31c4c834c1a9147bc21cbcbca2d4370"}, + {file = "websockets-14.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a4c805c6034206143fbabd2d259ec5e757f8b29d0a2f0bf3d2fe5d1f60147a4a"}, + {file = "websockets-14.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:205f672a6c2c671a86d33f6d47c9b35781a998728d2c7c2a3e1cf3333fcb62b7"}, + {file = "websockets-14.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef440054124728cc49b01c33469de06755e5a7a4e83ef61934ad95fc327fbb0"}, + {file = "websockets-14.1-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e7591d6f440af7f73c4bd9404f3772bfee064e639d2b6cc8c94076e71b2471c1"}, + {file = "websockets-14.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:25225cc79cfebc95ba1d24cd3ab86aaa35bcd315d12fa4358939bd55e9bd74a5"}, + {file = "websockets-14.1-py3-none-any.whl", hash = "sha256:4d4fc827a20abe6d544a119896f6b78ee13fe81cbfef416f3f2ddf09a03f0e2e"}, + {file = "websockets-14.1.tar.gz", hash = "sha256:398b10c77d471c0aab20a845e7a60076b6390bfdaac7a6d2edb0d2c59d75e8d8"}, ] [[package]] diff --git a/openbb_platform/providers/deribit/tests/record/http/test_deribit_fetchers/test_deribit_futures_curve_fetcher_urllib3_v1.yaml b/openbb_platform/providers/deribit/tests/record/http/test_deribit_fetchers/test_deribit_futures_curve_fetcher_urllib3_v1.yaml new file mode 100644 index 00000000000..262b23149c7 --- /dev/null +++ b/openbb_platform/providers/deribit/tests/record/http/test_deribit_fetchers/test_deribit_futures_curve_fetcher_urllib3_v1.yaml @@ -0,0 +1,528 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + method: GET + uri: https://www.deribit.com/api/v2/public/get_instruments?currency=BTC&expired=false&kind=future + response: + body: + string: !!binary | + H4sIAAAAAAAAA+2Y30/bMBDH/xc/B2Q7Tuz0rdBOGtoPBPRpQlGaXjevzQ9sh8EQ//subdkoJRoP + yGVT8pTc1z7fXT7yObkj321VmjonA8IPKQmIAdssHRl8uSO10TmkupzBDcpTl6eNnbVD5ldkMM+W + FgKyQBnFeeMaA6gVukydyWaQZkXVlOiI0UMaEG3TLHf6GsjAmQYn6tLiTQGlS8usQDM5ujg+YPRk + +IlHraNsASbNq6LQ1uqqJIMDdEQpC4jbkVZKtOXU3datUwPXYCy0YcNNrU3mcELqdAHWZUWN4ckw + FklMV1dA8qrE8HOXWv0THoJ3Ol9sDPwQl5kuKzSs03yk4ViMbppZSPPGGCjz23VaZCsyjQUTTMg4 + xuUMPBdRxFUsWLKKyIJzS1jNrMHoqi33D4AFOl1X/ZlUi+wmXbaP2dc25mhj0VeNnq3Xe1o9+SSt + xzrmDAdiW999z3xTwUfx7lQhb4e27+6PMDkfoXDVVA52zb+Lm1oHtUUqL++D/YAp9wCmZJQq32DG + STu4C0yVMM54D+abATNk3WCuGXllKFXIqPALZZjgpTqhxM1ScqY6oSwwym89lT6p5Ord+MgjlYJK + vmnifnt4N5V/6+E9lXug8uPwzCeVIRPKcwMPaSJp0kUlw/aecN7dwHsq/VMpTyY+O3jEKGPcM5UC + 1406qUyimMVM9FS+ISrj8/GpTyqVwi9xz1Ti2VF0dnAuBRe0P1e+LSpH42OPVMbxA5Sez5WyP1f+ + O1Sejs9OxxeT4QdPXIY8oqGkLz5a0tcBkzOqwq7tMgpxt+RcyU4w8aYG12TLl8MZ0f8JzsuANPZ9 + uf7nzLhIKMeSUspb++fGPRGYilthpOdzVBSm4bDaJbgNxve/AJzKofa9FwAA + headers: + Access-Control-Allow-Headers: + - Authorization,User-Agent,Range,X-Requested-With,Content-Type,Partner + Access-Control-Allow-Methods: + - GET, POST, OPTIONS + Access-Control-Allow-Origin: + - '*' + Cache-Control: + - no-store + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Length: + - '672' + Content-Type: + - application/json + Date: + - Mon, 06 Jan 2025 00:55:02 GMT + Server: + - nginx + Strict-Transport-Security: + - max-age=15768000 + Vary: + - Origin,Authorization,Partner + - accept-encoding + X-Frame-Options: + - SAMEORIGIN + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + method: GET + uri: https://www.deribit.com/api/v2/public/ticker?instrument_name=BTC-10JAN25 + response: + body: + string: !!binary | + H4sIAAAAAAAAA2VRy1LDMAz8F51DRrbzcm48LnCAC/eM27itwXEysVNgOv135BTSFnzTrnZXkg/w + 5ns3DmuogacICYzaTzZAfYBgOu2D6gaoWSkKxjOJvBRZAoQGTYp+0A5OpY+KndnuoJYSizzFBGz/ + QVWZszLNExhGs9bNeqfclrSYIkeRwL63U0d1VaS8krks+QI2k2+JyKpSSIx+P7Drg+mdshfcMQHj + Wv3ZzCEUWvFCpCKiPowkcqFxKubA3ev9DcOn22ee0+hW+XAW5WLO8ToEq2fRmUKeVmTYGbeAJQoe + N+vUOZje7BFP0xgXNN2Trsk5ZlJmGJvH9wtbhmlVJLCirkb5K2b2nomVaa8l5EO46egb2qbV1uz1 + +PVv+cVUdf3k4hRVns3ixfWXYViw0x0n/+iuPjxjKLOIv0zhDyFQRuLBbDZkzmjcQMZOU99GWa+P + 395bfrBfAgAA + headers: + Access-Control-Allow-Headers: + - Authorization,User-Agent,Range,X-Requested-With,Content-Type,Partner + Access-Control-Allow-Methods: + - GET, POST, OPTIONS + Access-Control-Allow-Origin: + - '*' + Cache-Control: + - no-store + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Length: + - '351' + Content-Type: + - application/json + Date: + - Mon, 06 Jan 2025 00:55:02 GMT + Server: + - nginx + Strict-Transport-Security: + - max-age=15768000 + Vary: + - Origin,Authorization,Partner + - accept-encoding + X-Frame-Options: + - SAMEORIGIN + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + method: GET + uri: https://www.deribit.com/api/v2/public/ticker?instrument_name=BTC-PERPETUAL + response: + body: + string: !!binary | + H4sIAAAAAAAAA2VSy07DMBD8lz2HyHZsx+mNRw9ISFSonCPTuK3BcarYLiDEv7NOS6Fw3Jkd7+ys + P+A5DH7crWAGrCRQwGhCchFmHxBtb0LU/Q5mtK4kZbwhrK6aAhCNBhXDzng4lCErtnazhVmjlCAl + KcANr1jVTE3VbrQr06622m9Qi1AlZAH7waUea8YkLylpuFDNCW5T6DLFCBOiml45En6IdvDanbGf + BVjfmbd2GpWNMFmVVUZDHFHmY+t1ngZXy+uLxfxhMV8+Xt7hCk6H+Eum6lLgXiZGZybZDyUwJuR6 + 60+gVLTK3nr9M7qpJctYjqi1PhrMFVOlFPdDkk/t48v5TC6y10Nvu9cuHYOiRBHFlcRcJasVK+Ap + d+hwpld53kQ82e7fMojbHs/WtZ1xdm/G938xnR7V/ZA8umWU88MpT89+U7KUBiWrNI45n3XynfWb + yW4Bx6pV+BtUSZk0FwKPk8KtP/tLnFLaZPw+xT9ExWgmbux6jT4IrhzRgjfYt9YumM8vHVcPAroC + AAA= + headers: + Access-Control-Allow-Headers: + - Authorization,User-Agent,Range,X-Requested-With,Content-Type,Partner + Access-Control-Allow-Methods: + - GET, POST, OPTIONS + Access-Control-Allow-Origin: + - '*' + Cache-Control: + - no-store + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Length: + - '401' + Content-Type: + - application/json + Date: + - Mon, 06 Jan 2025 00:55:02 GMT + Server: + - nginx + Strict-Transport-Security: + - max-age=15768000 + Vary: + - Origin,Authorization,Partner + - accept-encoding + X-Frame-Options: + - SAMEORIGIN + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + method: GET + uri: https://www.deribit.com/api/v2/public/ticker?instrument_name=BTC-31JAN25 + response: + body: + string: !!binary | + H4sIAAAAAAAAA2VRy3KDIBT9l7s2DA8VcdfHpl20m+4dEklCi+gIpu1k8u+9mMZJ2o0j59zz4HKE + 99D7cdhADZxQyGA0YXIR6iNE25kQdTdAzaQoGc8V5fiTAaLRoKIfjIfzMSTF3u72UCsluSRFBq7/ + xFPFVEFoBsNoN6bZ7LXfoXZFCRWFyODQu6lDIJekopLmvMovYDOFNhGC5jlNFr+w76PtvXZX3CkD + 61vz1cwpKZWXgoiEhjiiyMfG65QD928PK8Ge7154gd2dDnERKc7mqsHE6MwsWiimBJE8g876BZSS + z706vQQzQqk0ePm0m8b6aHChuE6Wy5IXgs7T48dVJFVEoe8axxodbpi5zEysbbsQOG5wRwjbDt+h + bVrj7MGM3/8uv3jqrp88tpC8pDeeF4LlpTivcQpP/ubBCy5plfDXKf4h8JuIR7vdIqOwVERjb3Bu + q10wpx+MwXpJXwIAAA== + headers: + Access-Control-Allow-Headers: + - Authorization,User-Agent,Range,X-Requested-With,Content-Type,Partner + Access-Control-Allow-Methods: + - GET, POST, OPTIONS + Access-Control-Allow-Origin: + - '*' + Cache-Control: + - no-store + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Length: + - '355' + Content-Type: + - application/json + Date: + - Mon, 06 Jan 2025 00:55:02 GMT + Server: + - nginx + Strict-Transport-Security: + - max-age=15768000 + Vary: + - Origin,Authorization,Partner + - accept-encoding + X-Frame-Options: + - SAMEORIGIN + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + method: GET + uri: https://www.deribit.com/api/v2/public/ticker?instrument_name=BTC-28MAR25 + response: + body: + string: !!binary | + H4sIAAAAAAAAA2VRyU7DMBD9F59Ty2sS51bgwgEhIe6R27itwXGi2ClFVf+dcWhDSyVf5i0z4zdH + 9BE6P/RrVCGGCcrQYMLoIqqOKNrWhKjbHlW04DllQhFWCJkhQKMBR9cbj37LkBw7u92BmFDJCww6 + 132lkhA5lf1g16Ze77TfgntBMBWkzNC+c2MLAKMKSyEUL0l+QesxNMAwWhBKCSYz7rtoO6/dNXnK + kPWNOdTTIFSpkuUc84SGOIDLx9rrNAo9vD8uWPmyfGMSPuB0iBcTbE/EtG4wMTozua64gmIFLVvr + 5zFYSSMA0oc/IZNcpnVTRLX10UCukKpgeV5KUpIkHz6vG1MYCo1XoKt1uKPOzMo2N8w0BAjbwkma + ujHO7s3wfRfB3Fa33ehjShu2SOa57YUR/BzmGJ79ze0lPJHw1zH+I1T60hie7GaTTgIHjNDXG9Bt + tAvm9AN3pHxTagIAAA== + headers: + Access-Control-Allow-Headers: + - Authorization,User-Agent,Range,X-Requested-With,Content-Type,Partner + Access-Control-Allow-Methods: + - GET, POST, OPTIONS + Access-Control-Allow-Origin: + - '*' + Cache-Control: + - no-store + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Length: + - '355' + Content-Type: + - application/json + Date: + - Mon, 06 Jan 2025 00:55:02 GMT + Server: + - nginx + Strict-Transport-Security: + - max-age=15768000 + Vary: + - Origin,Authorization,Partner + - accept-encoding + X-Frame-Options: + - SAMEORIGIN + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + method: GET + uri: https://www.deribit.com/api/v2/public/ticker?instrument_name=BTC-17JAN25 + response: + body: + string: !!binary | + H4sIAAAAAAAAA2VRuXKDMBD9l60JowMkoMvRJEXSpNfIRjZKhGCQcJLx+N+zwmMHTwoV+449no7w + EQY/jVtogOUEMphMmF2E5gjR9iZE3Y/QUMkFZUVN8IkMEI0GHcNoPJzLkByd3XfQ1DUrSU4ycMMX + VlIWZarGyW6N2nba79G7CA6Dm3ssOM9JXXEiygum5tAizkQhi5VU+SHawWu34k4ZWN+ab7UMwIEV + EzznCQ1xQpOPyus0Bh7eH++ofLl/ZSWu7XSIfybJZI7jg4nRmcW0ojAamkFv/RWUrFj0vb4OpoQw + yhKYclHWR4NhYpSCVZTXJImnz3XbOpe45wZFSoc1w5ebF2Jj29tNsD/itscvaFVrnD2Y6eff8dem + uh9mj0swWt42vRClOIc4h2e//mlZsoqLhL/N8ZbghMpEPNndDpkKs4nY1hvU7bQL5vQLMMZctVgC + AAA= + headers: + Access-Control-Allow-Headers: + - Authorization,User-Agent,Range,X-Requested-With,Content-Type,Partner + Access-Control-Allow-Methods: + - GET, POST, OPTIONS + Access-Control-Allow-Origin: + - '*' + Cache-Control: + - no-store + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Length: + - '344' + Content-Type: + - application/json + Date: + - Mon, 06 Jan 2025 00:55:02 GMT + Server: + - nginx + Strict-Transport-Security: + - max-age=15768000 + Vary: + - Origin,Authorization,Partner + - accept-encoding + X-Frame-Options: + - SAMEORIGIN + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + method: GET + uri: https://www.deribit.com/api/v2/public/ticker?instrument_name=BTC-26SEP25 + response: + body: + string: !!binary | + H4sIAAAAAAAAA2VRy07DMBD8lz2nke34kfTI48AJJLhHbuO2BseJYqcUVf131mlLAxw9szM7nj3C + e+j80K9hCSwnkMFgwugiLI8QbWtC1G0PS6oKSRmvCCuIzADRaFDR9cbD+RmSYme3OxwmipYsFxm4 + 7jM9hRQkJxn0g12ber3TfovqBWKC4tS+c2OLABN5RZUUtJJXsB5Dg4SShJ8tLrDvou28djPulIH1 + jTnU0xZYViWTRV4kNMQBRT7WXqc9cPd2v2Dy9fGFCUzvdIhXESVSUZEWBROjM5Pqxkl0pGUGrfU3 + VJBSpc+2+nADS1ZNeVNDtfXRYK1YKi245FxxksaHj7k1mpSYdoVztQ5/KXFhVrb5lWeqGQnb4kWa + ujHO7s3w9a+EH1vddqPHJCynppiZXnF6rnIMT35+diWYrIqEP4/xD1FylogHu9kgw6sMIrp6g3Mb + 7YI5fQOBB4bEZQIAAA== + headers: + Access-Control-Allow-Headers: + - Authorization,User-Agent,Range,X-Requested-With,Content-Type,Partner + Access-Control-Allow-Methods: + - GET, POST, OPTIONS + Access-Control-Allow-Origin: + - '*' + Cache-Control: + - no-store + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Length: + - '355' + Content-Type: + - application/json + Date: + - Mon, 06 Jan 2025 00:55:02 GMT + Server: + - nginx + Strict-Transport-Security: + - max-age=15768000 + Vary: + - Origin,Authorization,Partner + - accept-encoding + X-Frame-Options: + - SAMEORIGIN + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + method: GET + uri: https://www.deribit.com/api/v2/public/ticker?instrument_name=BTC-26DEC25 + response: + body: + string: !!binary | + H4sIAAAAAAAAA2VRwXKDIBT8l3c2joKKeGzSQ0+99O6QSBJaQEcwbSeTf++DxNS0M17Y3bf73nqG + d9fbcdhBAyTNIIFRukl7aM7glZHOCzNAkzNa5aTgGaFZlQCiXuJEP0gL16cLE0d1OKI44zXP0iwB + 3X+GZ00zkpYJDKPayXZ3FPaA0yuUkOB26vVkEKB5WlFeMF6UM9hOrkOiKAtSRMcbbHuveiv0grsk + oGwnv9qYAg2vSUVTGlDnRxyyvrUi5MDT23pFqs3zmpS4vRbOz0O4OuFlCHLSey3j1IKreEoSMMr+ + gqy63mrEPTpHKYsXh4JaZb3EVn2okbGCk6gePxbGFG9ndQJblLXCPVAk7hOZreoeNo3BSCiD/6Nr + O6nVSY7f/yq42wrTTxYXubV5N51xjJIUm5zci13+dVbixwL+Ovk/BKYEYqP2ezQmeLVHWytRtxfa + ycsPJLJ86WQCAAA= + headers: + Access-Control-Allow-Headers: + - Authorization,User-Agent,Range,X-Requested-With,Content-Type,Partner + Access-Control-Allow-Methods: + - GET, POST, OPTIONS + Access-Control-Allow-Origin: + - '*' + Cache-Control: + - no-store + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Length: + - '353' + Content-Type: + - application/json + Date: + - Mon, 06 Jan 2025 00:55:02 GMT + Server: + - nginx + Strict-Transport-Security: + - max-age=15768000 + Vary: + - Origin,Authorization,Partner + - accept-encoding + X-Frame-Options: + - SAMEORIGIN + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + method: GET + uri: https://www.deribit.com/api/v2/public/ticker?instrument_name=BTC-28FEB25 + response: + body: + string: !!binary | + H4sIAAAAAAAAA2VRyW6DMBD9lzlTywvGgWO6SD310jtygpO4NQZhk6aK8u8dEyUB9ei3zLx5PsNX + 6PzQb6ECTihkMJgwugjVGaJtTYi67aFiShSM5yXlgosMEI0GHV1vPFyfITkOdn9AMaWFVERm4Lof + qMqSienVD3Zr6u1B+z2anyihqlxlcOzc2CLAOJEyl1LRO1iPoUmEVEyh/A77LtrOazfjLhlY35hT + PW3BrSteCCISGuKAJh9rr9MeWH8+P/HV2+uaSwzvdIg3EyZnfMoaTIzOTK45J0mRZ9Ba/1hTXI9r + 9emhZEUuU9zUT219NFgqVsql4EoomtTD93xwzgjFrBuU1TosKDkdPjEb2yxM02IkbIvf0dSNcfZo + ht9/FdzH6rYbfQpCVbEce2MwtsmxyzG8+/m3K8lLzhP+McYlIVipEvFidzscrTBTxLHeoG6nXTCX + P4lKSENlAgAA + headers: + Access-Control-Allow-Headers: + - Authorization,User-Agent,Range,X-Requested-With,Content-Type,Partner + Access-Control-Allow-Methods: + - GET, POST, OPTIONS + Access-Control-Allow-Origin: + - '*' + Cache-Control: + - no-store + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Length: + - '351' + Content-Type: + - application/json + Date: + - Mon, 06 Jan 2025 00:55:02 GMT + Server: + - nginx + Strict-Transport-Security: + - max-age=15768000 + Vary: + - Origin,Authorization,Partner + - accept-encoding + X-Frame-Options: + - SAMEORIGIN + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + method: GET + uri: https://www.deribit.com/api/v2/public/ticker?instrument_name=BTC-27JUN25 + response: + body: + string: !!binary | + H4sIAAAAAAAAA2VRy1LDMAz8F52Dx484TnIELnCAC5wzbuO2BsfJxE4p0+m/I6fTNh2O2tWupNUR + vkLvx2ENNXBCIYPRhMlFqI8QbWdC1N0ANVOiYDyvKJeKZYBoNKjoB+PhXIak2NntDptpXghOZAau + /0ml4Hwuh9GuTbPeab9F9QMljHGVwb53U4dAKQkVgpVCiAvYTKFFopSsUpTQK+z7aHuv3YI7ZWB9 + aw7NPAXqquSFICKhIY4o8rHxOs2Bx4+nB65eP9+4xO2dDvEiwtVZIdOgYGJ0ZlYtOClJhZad9TcU + I5lX6/ThBsqiUunklFBjfTQYK4bKMUjOSz63j99LayFImWewwr5Ghzsqn/1nZmXbO9E8BAnb4Ufa + pjXO7s34+y+Eq63u+smnTWSh7m0vDP7uHOcUXvzy9UrySsmEv0/xnhCS0UQ8280GaiwziOjrDfZt + tAvm9Ac5r1NEaQIAAA== + headers: + Access-Control-Allow-Headers: + - Authorization,User-Agent,Range,X-Requested-With,Content-Type,Partner + Access-Control-Allow-Methods: + - GET, POST, OPTIONS + Access-Control-Allow-Origin: + - '*' + Cache-Control: + - no-store + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Length: + - '355' + Content-Type: + - application/json + Date: + - Mon, 06 Jan 2025 00:55:02 GMT + Server: + - nginx + Strict-Transport-Security: + - max-age=15768000 + Vary: + - Origin,Authorization,Partner + - accept-encoding + X-Frame-Options: + - SAMEORIGIN + status: + code: 200 + message: OK +version: 1 diff --git a/openbb_platform/providers/deribit/tests/record/http/test_deribit_fetchers/test_deribit_futures_curve_fetcher_urllib3_v2.yaml b/openbb_platform/providers/deribit/tests/record/http/test_deribit_fetchers/test_deribit_futures_curve_fetcher_urllib3_v2.yaml new file mode 100644 index 00000000000..2ebad1838e2 --- /dev/null +++ b/openbb_platform/providers/deribit/tests/record/http/test_deribit_fetchers/test_deribit_futures_curve_fetcher_urllib3_v2.yaml @@ -0,0 +1,528 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + method: GET + uri: https://www.deribit.com/api/v2/public/get_instruments?currency=BTC&expired=false&kind=future + response: + body: + string: !!binary | + H4sIAAAAAAAAA+2Y30/bMBDH/xc/B2Q7ju30DWgnDe0H4sfThKI0vW5emx/YDoMh/vdd2rIBJRoP + yLApeUrva5/P5498l96Q766ubFOQEeG7lETEgmuXnoy+3JDGmgIyU83gCuWpL7LWzboh8wsymudL + BxFZoIzivPWtBdRKU2Xe5jPI8rJuK3TE6C6NiHFZXnhzCWTkbYsTTeXwpYTKZ1Veopnsnx7sMHq4 + 94knnaN8ATYr6rI0zpm6IqMddEQpi4jfklZK8sCpv246pxYuwTrowoarxtjc44TMmxKcz8sGw1Ox + FKmkqyciRV1h+IXPnPkJd8F7Uyw2Br6Ly0yXNRrW27yn4ViMbpo7yIrWWqiK6/W2yIPIDCZMMKGk + xOUsPBVRwrUULF1F5MD7JaxmNmBN3aX7B8ACna6z/sRWy/wqW3Y/869dzMnGYi5aM1uv9zh76tG2 + 7uu4Z9gRD/Xtc+abDN6LdysLRTe0O7s/wtnJGIWLtvawbf6d3Mx5aBxSeX4bvQ6Y6hXAVIxSHRpM + mXaD+8DUKeOMD2C+GTBj1g/mmpEXhlLHjIqwUMYpProXSrwsFWe6F8oSo/w2UBmSSq7fTfYDUimo + 4psiHraG91P5txo+UPkKVH7cOw5JZcyEDlzAY5oqmvZRybC8p5z3F/CByvBUqsOzkBU8YZQxHphK + gesmvVSmiWSSiYHKN0SlPJkchaRSa/wSD0wl9o6it4JzJbigQ1/5tqgcTw4CUinlHZSB+0o19JX/ + DpVHk+OjyenZ3odAXMY8obGiz24t6cuAyRnVcd91mcR4W3KuVS+Y+NKAb/Pl8+FM6P8E53lEWve+ + Wv/nzLhQiRSJ1Jx19s+tfySkYiWMzXyOCu+OFLNdgd9gfPsLcvm6kb0XAAA= + headers: + Access-Control-Allow-Headers: + - Authorization,User-Agent,Range,X-Requested-With,Content-Type,Partner + Access-Control-Allow-Methods: + - GET, POST, OPTIONS + Access-Control-Allow-Origin: + - '*' + Cache-Control: + - no-store + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Length: + - '671' + Content-Type: + - application/json + Date: + - Mon, 06 Jan 2025 00:52:36 GMT + Server: + - nginx + Strict-Transport-Security: + - max-age=15768000 + Vary: + - Origin,Authorization,Partner + - accept-encoding + X-Frame-Options: + - SAMEORIGIN + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + method: GET + uri: https://www.deribit.com/api/v2/public/ticker?instrument_name=BTC-17JAN25 + response: + body: + string: !!binary | + H4sIAAAAAAAAA2VRu3LDIBD8l6sVBhASlro8mqRImvQabJ1tEoQ0AjnJePzvOZSxbE/K273dPZYj + fITej8MGapCMQwYjhslFqI8QbYchmm6AWui8FFLpQgsuMyA0Iin6AT38jSEp9na3h7qqZMEZz8D1 + XzRprYo0DaPdYLPZG78j7R1tKF5kcOjd1BGQ54xXuuIiF2ewmUJLBJOl0lguqO+j7b1xF+qUgfUt + fjdzBmWupCiYUgkOcSSRj403KQYe3h/vhH65f5UFne5MiBdVudKMTgoYo8NZtFBaUj10WWf9AjIt + kTI6swQLzkUpk0eqprE+IvVJbZZyJVTO0/L4eR3IWUGua1pqTLhiNJ9Lm4m1ba8k1dwt4bajX2ib + Fp094Pjz//GLq+n6ydMVuSz5jeuZEExhTi1O4dnf/LZeVZwn/G2Kt0Ql0u9N4clut1DLNESy9Uh7 + W+MCnn4Boe+AJVwCAAA= + headers: + Access-Control-Allow-Headers: + - Authorization,User-Agent,Range,X-Requested-With,Content-Type,Partner + Access-Control-Allow-Methods: + - GET, POST, OPTIONS + Access-Control-Allow-Origin: + - '*' + Cache-Control: + - no-store + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Length: + - '356' + Content-Type: + - application/json + Date: + - Mon, 06 Jan 2025 00:52:37 GMT + Server: + - nginx + Strict-Transport-Security: + - max-age=15768000 + Vary: + - Origin,Authorization,Partner + - accept-encoding + X-Frame-Options: + - SAMEORIGIN + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + method: GET + uri: https://www.deribit.com/api/v2/public/ticker?instrument_name=BTC-28FEB25 + response: + body: + string: !!binary | + H4sIAAAAAAAAA2VSyW7DIBD9lzm7FmBjjI/pIvXUS+8WiUlCi7FlcJoqyr93IEriqNx424wenODL + D24aN9AAywlkMGk/2wDNCYLptQ+qH6GhoqgoKwUXtKIZIBo0OoZRO7hcfXTszW6PYkIqLnKegR1+ + oJGSFuk2Tmaj281euR2an0hOZFlncBjs3CNAWc7jKevqCraz7yLBBRMov8FuCGZwyi64cwbGdfrY + pik4tWaU52UZYR8mdLnQOhUHwerz+YnVb68rxnF7q3y4unB1ytKyXodgdXItOZ5XGNkbd5/DBY+r + 9ep4V1IuUkosqDUuaGwVO2W8YKIQST19L4KJqHLGMlijrFX+gZIsJiVmbbolUycGCdPje3Rtp605 + 6On3fwe3XNUPs8NNCiZTobfYKyFremlz9u/u4eFFLUkR8Y85PBKS8DISL2a7RYbjDwmY6zTqtsp6 + ff4DhydV1GcCAAA= + headers: + Access-Control-Allow-Headers: + - Authorization,User-Agent,Range,X-Requested-With,Content-Type,Partner + Access-Control-Allow-Methods: + - GET, POST, OPTIONS + Access-Control-Allow-Origin: + - '*' + Cache-Control: + - no-store + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Length: + - '353' + Content-Type: + - application/json + Date: + - Mon, 06 Jan 2025 00:52:37 GMT + Server: + - nginx + Strict-Transport-Security: + - max-age=15768000 + Vary: + - Origin,Authorization,Partner + - accept-encoding + X-Frame-Options: + - SAMEORIGIN + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + method: GET + uri: https://www.deribit.com/api/v2/public/ticker?instrument_name=BTC-10JAN25 + response: + body: + string: !!binary | + H4sIAAAAAAAAA2VRy1LDMAz8F51Tj+3YsZ0bjwsc4MI94zZua0icTOwUmE7/HSVAmoGjdrVarXSG + 19iFod9BCZxQyGBwcWwSlGdIvnUx2baHkqm8YFwoqZg2GSCaHCq63gX4LuOkOPrDEUpjaCEJzaDp + 3rFSkikiM+gHv3PV7mjDAbUbSiineQanrhlbBHRBuMmZMGYBqzHWSAitlKDTwB84dMl3wTYr7pKB + D7X7qGYXdNWcSSLEBMc0oCqkKtjJCG5f7jaMPt48cYnLNzamq0qY2Si6lBo3ixZKUk407tb6sICF + 0XO21l6djRFz+uk4lQ/J4UXxnpxTzCbo1Dy8rRyLgjCdwRa7KhvXjJ53mYmtr1eEmg0Q9y0+oq5q + 1/iTGz7/p1+m2rYbA65REOny1dBfnBEmnMAzjvEhrB/OmeKUTfjzmP4QQuQTce/3ewwoeAYJ5waH + fXvbRHf5AqMF+TpfAgAA + headers: + Access-Control-Allow-Headers: + - Authorization,User-Agent,Range,X-Requested-With,Content-Type,Partner + Access-Control-Allow-Methods: + - GET, POST, OPTIONS + Access-Control-Allow-Origin: + - '*' + Cache-Control: + - no-store + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Length: + - '357' + Content-Type: + - application/json + Date: + - Mon, 06 Jan 2025 00:52:37 GMT + Server: + - nginx + Strict-Transport-Security: + - max-age=15768000 + Vary: + - Origin,Authorization,Partner + - accept-encoding + X-Frame-Options: + - SAMEORIGIN + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + method: GET + uri: https://www.deribit.com/api/v2/public/ticker?instrument_name=BTC-26SEP25 + response: + body: + string: !!binary | + H4sIAAAAAAAAA2VRS3PCIBD+L3uODBAgicc+Dj21M+09gwaVlpBMINaO43/vEqvG6XG/F8u3R/gM + nR/6NSyBEwoZDCaMLsLyCNG2JkTd9rBkRa4YF4UsWFllgGg06Oh64+E8huTY2e0OxRRVnMgMXPed + RqkkJTSDfrBrU6932m/RvUBMMlTtOze2CHBJKlYoySp1AesxNEgUiopzxB/su2g7r92MO2VgfWMO + 9fQKLKuSM0mESHCIA7p8rL1OD8HDx+OCq/fnNy5xfadDvLgYVQXa8KVgYnRmct04pXLCygxa62+o + pGL6basPN7DkYopJFdXWR4O9YqssF0qIQtAkH77m0SInWO0KZbUOd4wsUvzErGwzZ86rImFbvEhT + N8bZvRl+/pdwzdVtN3rcJOfV1Og19kIwQo3ANsfw4ueX55xXkib8dYz3RM5klYgnu9ngSSgOEWO9 + Qd1Gu2BOv3IS2hpoAgAA + headers: + Access-Control-Allow-Headers: + - Authorization,User-Agent,Range,X-Requested-With,Content-Type,Partner + Access-Control-Allow-Methods: + - GET, POST, OPTIONS + Access-Control-Allow-Origin: + - '*' + Cache-Control: + - no-store + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Length: + - '357' + Content-Type: + - application/json + Date: + - Mon, 06 Jan 2025 00:52:37 GMT + Server: + - nginx + Strict-Transport-Security: + - max-age=15768000 + Vary: + - Origin,Authorization,Partner + - accept-encoding + X-Frame-Options: + - SAMEORIGIN + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + method: GET + uri: https://www.deribit.com/api/v2/public/ticker?instrument_name=BTC-27JUN25 + response: + body: + string: !!binary | + H4sIAAAAAAAAA2VRTVPDIBD9L5xTBjYhIT2qFz3oRc8Z2tAWJSQTSK3T6X93obapetz3sW/n7ZG8 + +96Nw5osCVBGMjJqP9lAlkcSTKd9UN1AlrzKSw5FJSou64wgGjQ6+kE7ch59dOzMdodiVpQ5UJER + 23/GMQdI4zCatW7WO+W26F4wyiVARva9nToEZEFrKYXkBb+AzeRbJGRR5Tmj7Aq7PpjeKXvDnTJi + XKsPTUohy1oCF7QoIuzDiC4XGqdiELl7vV9A9fT2DALPt8qHiwtvZ1LEJK9DsDq5Zo4LQes8I51x + MwoCkqNThxkUpUgHx4oa44LGXrFVwCY5MJHk48ev2JJKXL1CXaP8TFGM1eKHWJn21lOnDCRMhx9p + m1Zbs9fj1/8SrmtV108uXoIfTe7r3gtTQnXuc/KP7vb3ADljZcRfpvCH4DVE4sFsNshIVAXc6zTq + Nsp6ffoGy3fWDmoCAAA= + headers: + Access-Control-Allow-Headers: + - Authorization,User-Agent,Range,X-Requested-With,Content-Type,Partner + Access-Control-Allow-Methods: + - GET, POST, OPTIONS + Access-Control-Allow-Origin: + - '*' + Cache-Control: + - no-store + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Length: + - '356' + Content-Type: + - application/json + Date: + - Mon, 06 Jan 2025 00:52:37 GMT + Server: + - nginx + Strict-Transport-Security: + - max-age=15768000 + Vary: + - Origin,Authorization,Partner + - accept-encoding + X-Frame-Options: + - SAMEORIGIN + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + method: GET + uri: https://www.deribit.com/api/v2/public/ticker?instrument_name=BTC-26DEC25 + response: + body: + string: !!binary | + H4sIAAAAAAAAA2VRu3KDMBD8l6uxRuiBgDJ2ilRp0jOykW05QjBIOMl4/O854dhhklK7t7u6vQuc + Qu/HYQc1MEIhg9GEyUWoLxBtZ0LU3QB1rniRM6FkoSqZAaLRoKIfjIfbMyTF0R6OOEyrsqKEZuD6 + j/QsOWUEZcNod6bZHbU/oHpFSc6kyuDcu6lDgOekEDmOy+oONlNokRBSCDY7/sC+j7b32i24awbW + t+azmVOgrkqWSyJEgkMcUeVj43UKgqe39YoVm+c1k/h9p0O8q/DvTMqUFEyMzsyqBVdUhGXQWf8L + qkLM23X6kZ3PNsklNdRYHw3WGlOPSomK0TQ9vi+NS05KXHuLY40OSwo3TE4zs7XtUsRVCkbCdniQ + tmmNs2czfv3v4OGru37yMZV9O9HD9k5gmOFY5hRe/OLwijFOuUj46xT/EIwWidjY/T4x2FBEW29w + bq9dMNdvYSt3zWcCAAA= + headers: + Access-Control-Allow-Headers: + - Authorization,User-Agent,Range,X-Requested-With,Content-Type,Partner + Access-Control-Allow-Methods: + - GET, POST, OPTIONS + Access-Control-Allow-Origin: + - '*' + Cache-Control: + - no-store + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Length: + - '356' + Content-Type: + - application/json + Date: + - Mon, 06 Jan 2025 00:52:37 GMT + Server: + - nginx + Strict-Transport-Security: + - max-age=15768000 + Vary: + - Origin,Authorization,Partner + - accept-encoding + X-Frame-Options: + - SAMEORIGIN + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + method: GET + uri: https://www.deribit.com/api/v2/public/ticker?instrument_name=BTC-PERPETUAL + response: + body: + string: !!binary | + H4sIAAAAAAAAA2VSy27bMBD8F55lgcuHSPmWNDkUKJCgSM8CY9E2G4oyRNJpEeTfu2RSx06OO7Oz + OzvkC/kd57AcNmRNWEtJQxYbs09k/UKSm2xMZjqQNSjeARNKKsZ4QxBNFhXzwQbyVsai2Lvdnqx7 + rSVtaUP8/IyVYrpWh8Vt7LDZm7BD7QoxzqEhx9nnCQHGOmip6noBoP7DQ45joUAxJaGOeSfCnNwc + jL9gXxviwmj/DHVXccJAtkIUOKYFdSENwZR15Prh2+r+9uf97cOvqx94hDcxnemEbCVeZlPytso+ + KIlBITe5cAI7JXUxN5mP3b2idUYJaXAhWUwWcwWQPUNfrLYvT2eDObSdKl7feoej8RmZkhRQpXoF + nILWVHS6IY+lw8RzveiKh0o8uvHLMYi7CR9uHEbr3dEuf7/mdJpqpjmHYpcLEPRi7omCvhKbvCwl + oW0Oowu7argh79Wg8UfoFjjYlcT3yfF7uPxPWoi+4Hc5fSI6rgpx47ZbZDQendBDsNi3NT7a138K + i9jIvgIAAA== + headers: + Access-Control-Allow-Headers: + - Authorization,User-Agent,Range,X-Requested-With,Content-Type,Partner + Access-Control-Allow-Methods: + - GET, POST, OPTIONS + Access-Control-Allow-Origin: + - '*' + Cache-Control: + - no-store + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Length: + - '406' + Content-Type: + - application/json + Date: + - Mon, 06 Jan 2025 00:52:37 GMT + Server: + - nginx + Strict-Transport-Security: + - max-age=15768000 + Vary: + - Origin,Authorization,Partner + - accept-encoding + X-Frame-Options: + - SAMEORIGIN + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + method: GET + uri: https://www.deribit.com/api/v2/public/ticker?instrument_name=BTC-28MAR25 + response: + body: + string: !!binary | + H4sIAAAAAAAAA2VSyW7DIBD9lzm7CDDYxrculx6qSlXvFolJQouxZXCaKsq/d3CVxe1x3jJvZuAI + H6H347CGGjihkMFowuQi1EeItjMh6m6AmpV5wbgoZclZkQGi0aCjH4yH3zIkx85udyimTOYlkRm4 + /iuVlMq5HEa7Ns16p/0W3XeUsIqKDPa9mzoEOFMkl5ghq/KMNlNokeFMMqYooRfc99H2Xrtb8pSB + 9a05NHMQ1KpCigiR4BBHtPnYeJ2y4OH98Y5XL/dvXOIGTod4duH4OHCKCiZGZ2bXDVcyovIMOusv + OUqIebZOH65KPBdPW6cjNdZHg5fFuwpeFJVS5SwfP696qqQkafMV6hodFlQxDzQzK9sumDkZCdvh + o7RNa5zdm/H7/xEufXXXTx5HqSq66HrG8SMYgcecwrNfvH2uyqJK+OsU/xCKq0Q82c0GmYJlELGt + N6jbaBfM6QeRjc7xagIAAA== + headers: + Access-Control-Allow-Headers: + - Authorization,User-Agent,Range,X-Requested-With,Content-Type,Partner + Access-Control-Allow-Methods: + - GET, POST, OPTIONS + Access-Control-Allow-Origin: + - '*' + Cache-Control: + - no-store + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Length: + - '358' + Content-Type: + - application/json + Date: + - Mon, 06 Jan 2025 00:52:37 GMT + Server: + - nginx + Strict-Transport-Security: + - max-age=15768000 + Vary: + - Origin,Authorization,Partner + - accept-encoding + X-Frame-Options: + - SAMEORIGIN + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + method: GET + uri: https://www.deribit.com/api/v2/public/ticker?instrument_name=BTC-31JAN25 + response: + body: + string: !!binary | + H4sIAAAAAAAAA2VRy1LDIBT9l7tOmUBICNn52OhCN+4ztKEtSkgmkKrT6b97QRszOqw4554HlzO8 + +sFN4w4aYCSHDCbtZxugOUMwvfZB9SM0VBQVZVyUglKeAaJBo2IYtYPvq4+KozkcoZFSMEHKDOzw + jreaypLkGYyT2el2d1TugNpNTnIuZAanwc49AlwQwfEUvL6C7ey7SDBeFnm0+IHdEMzglF1xlwyM + 6/RHm1JiKqMl4TzCPkyocqF1KgbB7cvdpqCPN0+sxPJW+bCoJK1Tc69DsDqJfilZEMEy6I1bQFGJ + 9LZeLck0z6uSRZO4nda4oHGluFDKRcWwbBqf3lbGFSMVzWCLY63ya0akNonYmm5NpATETY9f0bWd + tuakp8//719cVT/MDnvUIu1yMb3ilHDNcY+zf3DrH2eFrGoW8ec5/CFqwSNxb/Z7ZCROBbR1Guf2 + ynp9+QJ/d3xeYAIAAA== + headers: + Access-Control-Allow-Headers: + - Authorization,User-Agent,Range,X-Requested-With,Content-Type,Partner + Access-Control-Allow-Methods: + - GET, POST, OPTIONS + Access-Control-Allow-Origin: + - '*' + Cache-Control: + - no-store + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Length: + - '355' + Content-Type: + - application/json + Date: + - Mon, 06 Jan 2025 00:52:37 GMT + Server: + - nginx + Strict-Transport-Security: + - max-age=15768000 + Vary: + - Origin,Authorization,Partner + - accept-encoding + X-Frame-Options: + - SAMEORIGIN + status: + code: 200 + message: OK +version: 1 diff --git a/openbb_platform/providers/deribit/tests/record/http/test_deribit_fetchers/test_deribit_futures_historical_fetcher_urllib3_v1.yaml b/openbb_platform/providers/deribit/tests/record/http/test_deribit_fetchers/test_deribit_futures_historical_fetcher_urllib3_v1.yaml new file mode 100644 index 00000000000..7c0b1806394 --- /dev/null +++ b/openbb_platform/providers/deribit/tests/record/http/test_deribit_fetchers/test_deribit_futures_historical_fetcher_urllib3_v1.yaml @@ -0,0 +1,916 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + method: GET + uri: https://www.deribit.com/api/v2/public/get_instruments?currency=any&expired=false&kind=future + response: + body: + string: !!binary | + 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 + faUNqbrakUyXKP/4D7B0jAQFbgAA + headers: + Access-Control-Allow-Headers: + - Authorization,User-Agent,Range,X-Requested-With,Content-Type,Partner + Access-Control-Allow-Methods: + - GET, POST, OPTIONS + Access-Control-Allow-Origin: + - '*' + Cache-Control: + - no-store + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Length: + - '1788' + Content-Type: + - application/json + Date: + - Mon, 06 Jan 2025 00:55:21 GMT + Server: + - nginx + Strict-Transport-Security: + - max-age=15768000 + Vary: + - Origin,Authorization,Partner + - accept-encoding + X-Frame-Options: + - SAMEORIGIN + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + method: GET + uri: https://www.deribit.com/api/v2/public/get_instruments?currency=any&expired=false + response: + body: + string: !!binary | + H4sIAAAAAAAAA+zdbZPc1pmt6f+iz00GXjawgf4m0bR1Oty2QqInHDExUcGXtMVpipSLlEbnOPzf + B5lJ0iQrsasShYXnZnH1mTkzRbLFrMLFBWCvZwP//Or/ff3q5eXPT7/6z6+a+9VX//HV5e71Ly/e + fPWf//c/v/r58vnT3cXzl892v02//eTlk4tfXj97uv8zf/vHV//5t8cvXu/+46v/mX5/+t1XP795 + /url9Hs/PX958eby8bPdxeOfXv3ycvov1f/x1fPXF4+fvnn+6+6r/3xz+cv0v/X85evp/+en3cs3 + Fy8f/zT98lff/Ombi7/88LsH9/r/+vpPTXevb6p7D/b/vcf/s7u8ePrqp5+ev369/yv+s7pfVdX0 + H31z+ne6j/7rb/73z/v/+ovnL3ePL6f/3O63n59fPt5/1os3z3/avX7z+Kefp4+Y277uqlTt/+c/ + vnr66uX0LTx9c/H6+f+Z/rfr+9OvTf/F5/8zfTF9rv2Xb54//Z+3v13dnz7Mkxevpl84fuNXfu/x + 693F018uL3cvn/7v47f61Ucf8vn0E0x17uo8/d2Xu1Mfrxtz7vvjx3u9e/Pmxe7wv/nz7vL5q/3P + /9nj/z39N49H4d03/fTxixdfffzRrvy02o9//+rRa7pP/soPvpH98fpq/+Oa/uT+UFz5nX/88urN + 7sSvv/8JXbx+s/v59aTt//nXfwDAffelgRtWBffzL2/s7cbeWmjAtUJvowMuFBwy4ITgmsoBF+Yt + QQMuCb3VDrhQcMiAU4JrHHBh3jpowHVCb60DLhQcMuCU4JIDLsxbDw24Xuitc8CFgkMGnBJc74AL + 85ahAZeF3lwyxIJDBpwSnEuGOG8DNOAGoTeXDLHgkAEnBNe6ZAj01kEDrtN5c8kQC44ZcEJwLhni + vI3QK7hReEJ1yRALDhlwSnAuGQK9Qa/gRuEJ1SVDLDhmwAnBuWQI85Yr5hXc9Ll03lwyxIIjBpwU + nEuGQG/MK7jpc+m8uWSIBccMOB245JIhzlsNvYKrdSfU5JIhFhwy4JTgXDIEeoNewdXCE6pLhlhw + zIATgnPJEOcN+jSRLHy4Q3LJEAsOGXBKcC4ZAr1Br+Aa4QnVJUMsOGbACcG5ZIjzBn1cUhY+vSa5 + ZIgFhww4IbjOJUOgN+gVXKs7oXYuGWLBMQNOCM4lQ5w36PPgsvDxXJ1LhlhwyIBTgnPJEOgNegWX + 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 + uP6By6RGplym6x8uTO4OoCTfZ9G4/oHLpEamXKbrnzNh/vz4t7/vZT4V0fzu67/+4WL6dh68B9p0 + TTE661mg3SmgL56/3D2+XIPn/oNdGYLrCji7qzL33+4pmikVbs2nv7dqo0JzFuf+oM3qfHCK59tf + v+qT464QjHfV3fyN9yJ3K0XiF8QuUeMu6di1hbeS79lVfe2407tjxp3U3Xybvcid4+5cdj017nol + u/mu2nG3mTtm3EndzTfRjrtN2A3UuBuU7Mo3s467Tdwx407qrnwz67iTsxupcTfK2HV5KNxUdENX + Rb3G+8tyx4w7qbvCXcUSd467M9ldMxgTx+7E8MF6J9n5iRhf3G3GDpl2Unbz4y6+tttEXQ0Nu+mD + CW8p5odZnHabuUOmndbd/KiK424TdtQxlF45DlB4g6vjbjN3zLiTunMvG8yupcZdq2TnXhbgjhl3 + UnfuZYPZUafueuH0Uyq8N9Vxt5k7ZtxJ3bmXDWZXfup1ILsTDxZej52bCoA7ZtxJ3bmqCGZHHTLu + hcOeqfC2UsfdZu6YcSd156oimF2mxl0Wsiu8aNRxt5k7ZtxJ3bmqCGZH3VPRC2fbU+EdoY67zdwx + 407qzlVFLLuMHTLOsmnPVHi7p9NuM3bItJOyc1ERrI46dZeV00+Fd8w57TZzh0w7rTsXFcHsqGMo + WTkOUHg/nONuM3fMuJO6c1ERzI7ay2ZlP1Z4t5vjbjN3zLiTunNREcyOWlRk5YJx4b1sjrvN3DHj + TurORUUsu2veeRG4Ynz1vQKrqSs+YbEd+lQ57fTskGknZVfqxxaw+7zD7vWrFwvRVTdS98Of//gx + uhoUdR+Qmz7WlfNr6fUpJ96dMn2rp8RNpK5btPuygi6EHCXmtiJ33XqdQ04qDtTFfijuRCO2lrh8 + 3VKdQ05OjhhySnLXrdI55KTiQA3sh+JO9GCribtugc4hJydHDDkluevW5hxyUnGg7f8fijuxCXs1 + cdcNEDvk5OSIIackd93wsENOKg40XPKhuBMV/2rirpsbdsjJyRFDTknuupFhh5xW3MAMuUEkLqW+ + FHL7t6A45OTkkCEnJFcKuQXkHHLniQM9z+RDcSeeKrHaadXtajg5YsgpybldjRXXMEOukYkb3K6G + k0OGnJCc29VYcT0z5HqdOLer4eSQISck53Y1VBxom9eH4k5stllNnNvVcHLEkFOSc7saKy4xQy7p + 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 + qpuxrr3GCcBJDU41zqG0AL8Ep4NzTZvgnUOjenNG15c2ZwzD6HEkAE5qcMpxloaMl+B0cK5pE7xz + aNRuzhjffoKZk3rbVbXXOAE4qcEpx1lo1RfhdHCuaRO8c2gUb85ox352GWn/5K4++4oTgJManHKc + pSfQLMHp4FzTJnjn0Ch/rUvth3zwcVKDU42z8UM+yDbBO4dG8eaMVKX5uyE/Vo6Ckxqccpyze9X9 + WDmATfAA/CieMU5NLmwHbtrGe9UJOKnBKcdZWEdahNPBuaLN4xIzNDmnL3ad9nbIj0f6DHQyo3MD + nX4+EhoneCJp+qKR6sylgqiu6jR4lpPAE5udcp6FUeNFPB2eq+oEl+vTF0mqc2wKDzTe727rfctO + 4IkNTznP8s7g83k6PFfVCS7Ypy869X2RHzH3GfDEhqecpx8yh9YJLtmnL3rtqT21pSvPvhv9Kg0C + T2x4ynmWrjyX8HR4rqoTXLRPXwxinUN5//rhdQ4Oz2ie2PBU8yw+QnYJT4fnmjoPdSY2PGv1bZEf + 0/kZ6KRmp1ynn9OJxonu2mtpmTlOB6DwMMS261p37QSe2OyU8yyMgizi6fBcVSe6a6+lZebY5cK7 + C6aL0rHziieBJzY85TzndxYt4+nwXFUnumuv5WWmH3X8GfDEhqecpx92jNaJ7tprZZmZqjTMLyq1 + 7V6v6yICT2x4ynnOryot4+nwXFUnumuvlWVmqrq+nx2jm3SO023T6PCM54kNTznP+Tm6ZTwdnmvq + PCw5Y8NTu/mtHYfSwzv73o+LR+ikZqdcZ+npnUt0OjpXxYnu2hulzsOJvXTT7utOCE9sdsp5lm7a + fd0ZrhNdFzXa9fjUFHRWTTN0HlQi8MSGp5xn6WF0S3g6PNfU2aJv2lspzmEovvG6Th7yROikZqdc + Z2HGc5FOR+eqONHXna32xD604+wjQabPmPcvjHF2xvPEZqec53yXuYynw3NNnQl93Sl+2NdY3L2R + ar8iE6GTmp1ynYVHLizS6ehcFSf6ujNJT+xjVbfzmzema55x9IQngSc2O+U8C7dFi3g6PNfU2aGv + O+U3RYUn0fmenaKTmp1ynYUH0fmWPRxnj45O6VMSx2rsCpedXd0M3tJO0EmNTrnOwlXnIp2OzjVx + DujolD4jcaJZuCVq6rEbBl91AnRSo1Ouc74oWqbT0bkizsOMAzU6G+37CPc452/YHZ0Ynczo3EDn + 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 + lNmAQ7NRn849p0mnSQ1NOU3PaYJltuDQbNUyPadJp0kNTTlNz2mCZXLnNFvpMNxBpkeO6DSpoSmn + 6ZEjsEzunGYrH4Yb3J7TaVJDU01zdHsOlsmd02ylw3AHmW7P6TSpoSmn6fYcLDODQzOrZboIotOk + hqacposgsEzucHsrnyAeXQTRaVJDU07TRRBY5ggOzVEt00UQnSY1NOU0XQRxZe73sEJDM8m3XRSe + cuTQZNBkhqacZukpRw7NcJncHUFJuu1ikjkUX2c1dskP7AinSQ1NOc1SEbSEpkNzRZncHUFJve2i + qdye02lSQ1NO0+05WCZ3R1CSbrtIVcrNvMzpf4aucmhG06SGppzm/GDHMpoOzRVlcncEJfW2i6by + yBGdJjU05TQ9cgSWyd0RlKTbLlLVN33hfZRdXbcOzXCa1NCU0yy8jHIRTYfmijK5O4KSettFU3lO + k06TGppymp7TBMvkDrcn9QRxU3lOk06TGppymp7T5MrcryhDQ7PTD8N5TpNOkxmaepq15zTBMrkj + R510riNVXW7nZe6fSzY6NMNpUkNTTnN+Gm4ZTYfmijK5RVCnfv5WU3tOk06TGppymp7T5Mrsubfn + vf4eyCNHdJrM0NyApkeOwDK5V5q9eK6jy0359nzwNspwmtTQlNMs356fT9OhuZ7MgXulOUhP56lK + feEdQW3bVOP+4WQOzVCazNDcgOb8yNEymg7N9WTWFTc1py92SUuzMN3u1GTYZMbmBjYL4+2OzWia + 4KmjeroNEtOcnzpybEJsUmNTbbPwniDH5mmaPz/+7e97m09FOL/7+q9/uJi+nQfviTZtV0zPelZo + d0roi+cvd48v1/C5/2D7rz/6WXYFnd1Vmvtv94TNuhqGeZupS+N+xjomN2d17o/aLM8Hp3y+/fWr + QDnwCtF4V+HNr1sug7dSKH457q558EacuxPPNliHXTX0TWFRchyrFFZ/f1nukHkndVdYcVzkznF3 + Ljvq9V2SnWb37grLic67zeAh804Lr7BW6MDbwt01AzuB59mrMxHrsSusAzrvNnOHzDulu9IGLsfd + JuwaaNxNH0y2jDIWHtOXur7d71xz3unhIfNOC29+IWUZPAfeue4SNfCS7L5ibPr5hZSJ5fTbDrwt + 4DEDTwpvfiVlGTwH3rnuqCt4nXIhpbT/3ne0m8FjBp4UXuGNHr6l3cRdTw28XuduLDwPNFVNTr6l + 3QQeM/Ck8ApXeIvgOfDOdZepgZeFSyldaQavH+Je0vplwWMGnhReaQZvCTwH3rnuBmrgDco7i8IL + 2XxLuxk8ZuBJ4c23Zb6l3cbdSA28UXiirQt3Fl3f1w68TeAxA08Kb34Kbxk8B96Z7q556VTgNNTV + 9/qsd571LguCO2TeSd15l0U0uxoad9MHk80G9O381HFq6qb3Ct4m8JB5J4WXCkvHi+A58M51Rx07 + 7mXTn/sTrbeVEeAxA08Kz9vKot211MBrhdOfXWkoZRwaD6VsAo8ZeFJ4paGUJfAceOe6o+6z6HXj + 7kPpltZXeNvBYwaeEl7hltZXeNu4o+6z6IXj7mM1P+6equn6z0/C2wQeM/Ck8OanoZbBc+Cd6466 + z6IXjrv3yRvLCPCYgSeF541l0e6o+yx62bj73p3HjgnwmIEnheex42h31H0WvXLcPXkMjwCPGXhS + eJ7Di3ZH3WfRy8bd9+48lkKAxww8KTyPpQS7y9h9Flk3755c0hLcIfNO6a7wxArH3TbsqPsssm7c + fXLnyoIAD5l3WniuLKLdUfdZZOW4e+fKggCPGXhSeK4sot1R91lk3bj75M6VBQEeM/Ck8FxZRLuj + 7rPIynH3wv4eB9528JiBJ4XnyiLaHXWfRRa++H2sC89K6freO2m3gccMPCW8Zr60WAbPgXeuO+o+ + i6wcd+9c0hLgMQNPCa93Sxvtjjp2nJXTn71bWgI8ZuBJ4bmlDXY3YKfwBt00VO+SluAOmXdSd+5o + o9lRh1IG5WxA746WAA+Zd1p47mij3VEri0H5JuTCq98deNvBYwaeFJ472mB3I/aGdhTeWLixILhD + 5p3SXXZhEc2Oen03Kk+z2YUFAR4y77TwXFjEumsr6PVde78SnmddWBDcEfNO686FRTQ76PXd/oMJ + T7MuLAjwkHmnhefCIthdjb2+q2Xn2aEpsqt7590m7pB5J3VX7MkWuPu84+7Jm6d7dafR/e2XN79c + Hr6fJ69O0zucl26g75tHD+79/oeJ3n9//X3TXbwlOGdvBt4pdZe7X3eXr3fPlro7fWL9RNP06U9g + qlMe50uIrhmGPOZrMZ0+6Me/8fQxnznk0COe/+svf7o7R3yo5pf/fcSPR7z/4eF3d+mIzy+8H4/4 + 4CP+u4cP7tIRn1/x9hF/ex4/HOmL7x5+P3sB+fkc7vmVZuzh3r358TaH+0bH+uGjb5nXbJ8c6+rE + wZ4+++mDXdhgvT/YE4aFB/v4N372Bxt3uXarg10+dQ9V+rIPNu5K7VYHu3zW9sGmXaTd6mCXz9lf + /MFmXZ/d6kjP97HHI919Zkf67erhGkf6h0ff/+7fy7m5qgDH+sql+HEl+YbHe/oPz/eg3djVbb3V + Bdrxz4OPd383jvd8D3Q43s3SBbW7cbz/8O/jPcG/SO1dOOhjPb9npK/roeuAB/0GKyy3X1t5e7N9 + 5iGeaeRucpTb6RQ73HBZpSm2cKcAnFxzaasxV7PFSV3349gcHnRWBvD2iunq9/rT498uXuy/fPz3 + /Yfu3v7K83/88vzZ43f/Nj/68eVuvsCbvundvXRtgVddqQ0xC0G3DCEUyU9ipzkX5MlEOoCcrYWP + IOvra+EVQY639VgXPQovfa8ZYyiIPB6wMycZVqR5/fxCAebxw3/Ery7QPCFzbmKhbYbCjqPpE9Xd + 9fe6H9N8/51+DHP/wqzbJOX7q4BbJGXgsENhwuZwwM47g987fJ+lsa52lmerSM6PN8hVu3T6Cm42 + TE9e4M2d36tq9gJvitO6mdDGTHetdYY+/vmr6P555Yc6/ZWPn7z6dXdxoHj8xe5fCJyF2a+7jbN0 + 8bkE5zojYLZ5sNmCg7OV26xnT/YOTgxOZnBugHO2T3VwxttM4OBMepuz9a+DE4OTGZwb4Jytqx2c + AJsdOTg7pc2UmjS78tlUdZ/DNmIZ5wc4qcEpxzm7jrQQp4NzRZsd+Iqz05/UZyeTfMWJwckMzg1w + zo5R+YoTYBN8xdlpT+p13XTza5xN1Y6p8hVnPE5qcMpxzq9xLsPp4FzRZg++4uz1J/XZWVlfcWJw + MoNzA5ylCbr/v72za27jSLP0H1ohKr+zLmWabfes162w2Bveiw0FZcGyYmTLLVMOb0z0f98qgORI + AjIBFOtUHlBnroa0ooliPXzezDxvZmrE2ZpN4hFnxBb1kU21I/HDySpOOJxqRyJmMxGPOBO8qJeP + S5A4aeDkFOcCcKodiZlN4hFnghf18mkUEicNnKzihMOpdiRiNjPxiDPji7pSdX44OcW5AJxK1ZnZ + JB5xZnxRVzjEDyerOOFwKhwiZrMnHnH2+KKucIgfTk5xLgCnwiFmNolHnD22qA9/luVdbc64YHrt + HCKAk1WccDjL58ZOg1PinJHN7flkpOYcvlgHaFV3itXPgE5OdS5Ap3J1ajiJB53DFwFJZ9/1sXxA + uAnDR91cWCt3NsaT1p1wPMvnmU/DU/Kck05DPe406MqurqQzoJPVnXA61ZZEDSf1uNPAC3v54nCN + O2nwpHUnHM/ylSoad7ank/k4eLOy6Mqups4zoJPVnXA61dVJDSf1uNNiC3uw5VmRsyZ7L3cy4Enr + Tjie5Zx9Gp6S55x0Mt+mYVYOXdnVE38GdLK6E06nmuKp4aQedzpkYfddiKmYFTnn+tyZw9cOyp1w + PGndCcezPC2ahqfkOSedzJcRmZVHV3ZtKToDOlndCadTe4qo4aQed3poYTed8+Vxp3c+p6CcnQBP + WnfC8SyPO6fhKXnOSSfzlURmBV2MHyq7176iM6CT1Z1wOrWviBlO5rs1zCqi4VRr/BnQyapOOJ1q + jWeGk/mQeLNK0KV4n8tHdjrnsjW5kzrb08mqTjid5f3C0+iUOueEk/m0Y7PK6LquxvgzoJNVnXA6 + 1RhPDOdm0warOi38lBqv3s4zoJNTnQvQqd5OZjiZt2Na+IY3r/akM6CTVZ1wOtWexAwnc8JusRmm + 6eq3XPd9dlInAZ2s6oTTWSvsU+iUOmeE0zFP2B12SjTCWavrUicJnZzqxNNZvela6twD5/rml0lw + Hofm5dW3n5zHTarN8TRuNweYw/MWwKx0zaXhP7dK17sSmtsnOR7N7b8/ZzQ5nbkAmpWeuUlozuNM + kXnXbEwrzYAks+tNONAI3+pqIqF5jyarNOFoHuiCb3Qxkci8a/iglWZGkhmi64qJurV5bKXLkmZj + NFmlCUezuOw+EU1Jcz4yLe/03GLnQGM5P7BvSCPN5mhySnMBNA9sGtJIsyWZlliaFlrOQ98Xp+dD + OXf27kNKmu3QZJUmHM3i9HwimpLmjGR6Yml66Gp7rJVz14XNkWaSZls0WaUJR7O8jW0ampLmjGTy + BkEWv9p+YIOlpufN0WSVJhzNA7srNT1vSWYklmZEk3lga6Wk2RxNVmnC0Tywr1LSbEkmb3pusRHl + SOaBTZWSZnM0WaUJR/PAjkpJsyGZ474LUmk6eEQZ1afJjianNBdAU32axGTypucOG1GOZKrliB1N + VmnC0VTLETGZjliaDk2mgiB2NFmlCUdTQRAxmbwtRw7b1zGSqSCIHU1WacLRVBBETCZvy5GD93VE + BUHsaLJKE46mgiBiMnlbjhy8ryMpCGJHk1WacDQVBBGTmYilmdBkKghiR5NVmnA0FQQRk8nbp+ng + zXBJQRA7mqzShKOpIIiXzHEXK6k0PbwZLikIYkeTU5oLoKkgiJhM3j5ND2+GSwqC2NFklSYcTQVB + xGTythx5eF9HVhDEjiarNOFoKggiJpO35chj+zrGi1gq5TwNryZImq3RZJUmGk1XqeeT0JQ0ZyST + t+XIw/s6stJzdjRZpQlHU+k5MZm86bmHR5RZ6Tk7mqzShKOp9JyXzHGYTyrNAI8os9JzdjQ5pbkA + mkrPicnkXdMM8L1qWek5O5qs0oSjqfScl8zIO9KM8HJevlhN0iRBk1OaC6Cp9JyYTN6RZoSX815B + EDuarNKEo6kgiJfMxDvSTPhyriCIHU1OaS6ApoIgYjJ5R5oJ3gzX1cjs+9hJmq3RZJUmHM1aRjkF + TUlzPjIz70gzY8v5SGYtopQ0GdDklOYCaNYySkmzLZk9rzR7PJm1iFLSZECTU5p4NE0to5Q025I5 + qoPVmsMXa49Fs5ZRypoUbHJqcwE2aymltNkYTcOsTQNG01ZSyjT85yxtNmeTVZtwNis55SQ2pc0Z + 0bTM2rToil5r7hgq+qamS5tN2WTVJpzNWnvHFDalzRnRJN5NaVYBjeaBEF3abM8mqzbhbB5I0aXN + HTR/v/7r9cjmTyA4nz398ZsXw+Nc3CN6aNBpioSGfYS+ffPb+vr9HHzaPWvvoQJn2CVzfNpdNH3X + xfLJHc7mPibbapJehHN8aUU6L/bhefv9XT55uKuY8ZFyVyzXE7mbSYlfDnaGVncGiF2xEkt3C3LH + qTskd8VuNeluGewOXDnRELvdU/3nw67YiSbdLcgdp+6Q3BX7zKS7ZbBztLpzOOzK51xIdwtyx6k7 + JHfFBjHpbiHsAqnuhg82fg3irtj8Jd8tCB6l77DgFXsUJLxluDtwGVjDOrt739J82CmsYOCO0ndQ + 7hRWtMaOdXznoWVWaQUDeJS+w4KnuKIxdwfOw2lYZ3ePHJkPO8UVDNxR+g7KneKK1th5Ut0NHwxV + ZkMun2HjnHc+efluCfAofYcFr1xop4En4Z3KHeuENgDnFalTQMsAHqfwoOApoW3NXWQVXkRyp4SW + ATxO4UHBU0LbmrvMKryM5E4RLQN4nMKDgqeMtjF3kTayiLCl41Q+IF2+W5A7St9BuVNC2xo7S6q7 + 4YMBy6wiWgbwKH2HBU8ZbWvuWDPaiIvKulQ+l1zCWxA8TuFBwVNk0Zo71sgiIleOyyeKS3gLgscp + PCh4iixac8caWUTkynH5UFsJb0HwOIUHBU+RRWPuEm1kkXBLx+XTaOW7Bbmj9B2UO0UWrbFjjSwS + cuXYKLJgAI/Sd1jwFFm05o41skjIlWOryIIBPE7hQcFTZNGaO9ZtZQm3uyfkSrO7885Z7aNdBDxO + 4UHBKy8dTwNPwjuVO9aMNiGjMquMlgE8TuFBwVNG25o71ow24aKy1PvKSSnZpy5KeEuAxyk8KHiV + k1ImgSfhnchdps1oMy4rK99PrwHegtxR+g7KnVpSWmPHmtFmXFSWsy9HFq7vvZHvFgGP0ndY8MqR + xTTwJLxTuWONLDLyQDKrJjwG8DiFBwVPXXiNuetpJ7Q9cGKhJjwG7ih9B+VOPXitsWMd3/XIMuvU + g8cAHqXvsOCpB68td64jHd+5VYers04dKQzcMfoOy50aUlpjRzq+Gz8YsMwqoGUAj9J3WPCU0Dbm + ztCO7wywziqvYOCO0ndQ7hRXNMbO0urOArFTXMHAHafukNwprmiMnaPVncNhV2m/k+6W445Td0ju + FFY0xs7T6s4DsVNYwcAdp+6Q3CmsaIxdoNVdAGKnrIKBO07dIblTVPExdi9vfhqp2w/dzx9uPrzf + PM/Ld/vR22RKR9D31dXFk789v0PvxbPLH4rgFajbh9z79Z/r93+sX02Fbn8i9hlKw0ffJWlc9w5F + gxmTOmtcf5Ck/W98+xP3v/DC+yZ93ek//vn98LpvX/t5v3Fvu/IJN6YPcbCL+eLfeHx++eyxvPGh + IqTi0qcdJmzR9fobj19fXjySN+6H/9XK6WnB5pz6zPfG1ze/POSNH/W6L6++Jazgn73obs+bHj74 + /vqdiiPBbf32YeKb3v7Es3/TdMV78sseSnd5leO2dE/9s34kL5uubk9+2WlMLapV228OSPqSXzZb + yZ76sseCXTkdZizYuTs3jd8uL8zxsp9f/fD1f6/3DNQTvOud0dl2qenI951i5ZL52I0jtKVMvv33 + xO87PY73Xe562rzvbPne9xFTsIdPvm4HaCe+4sLq7RFvOZjObI+eOWLSZasrtvsAKKy6DD+3PE4f + hm4mGn8QgNv6ufusv17/9eLt+OX16/FDh9vvvPnXhzevru/+LD/59aVQXuwdHnr9xB9c7O12lphp + pokP9A8Vkp9px54KZGEuMfzU6jKgiUcML2cEsn8oj6bKI3AUdCDyqhC5fWGnpV5zonkw66qBuf3w + n+BnKmjuIbOQbpmuz+XVKx/6YI07Ec37J/0UzNA9zJT3o4AHmLJhMFZJYzcv7LQK/mTznLUWAFfE + 0yHM+elBKN3a7x/BFWW6d4BXqu8mFGfrpveDbFsdoz1Xhd7++13o/mvnlzr8yOuX7/5cv9iguP1m + +DcFnJU+gccNZ7EZdCKc87QLiM0Nm45YnA7PZmUcKnGSwMkpzgXgrAQuEmdrNj2xOD2ezXLnlsTJ + AienOBeAs7LcKXE2ZzMwizNA2XR9+eBS25loY5Y428PJKk40nOXTTSfCKXHOyGYgHnEGfFEvnlSk + EScNnJziXADOYkeNRpwEbBKPOAO4qA9sFrt/JE4aOFnFCYezOB2SONuzGYlHnBFe1KNSdX44OcW5 + AJxK1ZnZJB5xRnhRj0rV+eFkFSccTqXqxGwm4hFnwhd1per8cHKKcwE4laozs0k84kz4oq5wiB9O + VnHC4VQ4RMxmJh5xZnxRVzjEDyenOBeAU+EQM5vEI86MLerB5q64/m6tdZv+a4mzNZys4oTDWVyA + nwinxDkjmz3xiLOHF/WkVJ0fTk5xLgCnUnVmNolHnD22qOfelQ/bdcYGkzTiJICTVZxwOMv3SE+D + U+Kckc3t+WSk5hy+WAdsVVc/0hnQyanOBehUQxI1nMSDzuGLgKSz72z5wh5nXPK51SVzwvNjPGnd + CcezfPXmNDwlzznpNNTjToOu7GrnPAM6Wd0Jp1P9nNRwUo87DbawB2uKK/HOmhR7rXYy4EnrTjie + 5WnRNDwlzznpZD4O3qwsurKrG/4M6GR1J5xOtcNTw0k97rTIwu5N53zl+hfnc+oP35Umd8LxpHUn + HM9yE8g0PCXPOelkvk3DrBy6smsz0RnQyepOOJ3aTUQNJ/W408ELe7mBTuNOGjxp3QnHs3xluMad + 7elkvozIrDy4smdtKToDOlndCadTe4qY4WS+VcOsoDlmcJXLWa21IXZq72Sgk1WdcDpr+9in0Cl1 + zgkn8/HwZhXRdV27is6ATlZ1wunUriJmOJnPOTarBN610ZVDduNS5zTqZKCTVZ1wOisHLUyiU+qc + E07mAzvNKqPruvYUnQGdrOqE06k9RcxwMp88Z1Y9ds9GcMX2JGetzVInBZ2s6oTTWWxPmkin1Dkj + nFtGSNVp0WfUxOqejT5tj5SVOhvTyanOBeis9R1PoVPqnBNO5s2YFrvdLffOVtY6rUtW6mSgk1Wd + cDprh8pOoVPqnBNO5r5Oi+2cG2aD5R0bzrgQTSd1EtDJqk40neWu44l0Sp1zwsnc12nBnXOdq3TO + mej7sDk2UupsTCerOuF0FpuTJtIpdc4JJ3Nfp8V2zvXeh3JdH+jsrJqTGOhkVSecztq5iFPolDrn + hJO5OclC2z/GXcJ9+TRu75LtlbAz0MmqTjidtaO9ptApdc4I5+ZwGlZ1OmyGOU6JinBqws5DJ6c6 + F6CzGBNpwt4eTs+sTg+F05uQcvlsmhB612nUyUAnpzoXoLPcdTyNzkevzvXNL5PgPA7Ny6tvP7l5 + kFSb472Dbg4wh+fdU9O9MYb01KSuhOb2SY5Hc/vvzxlNTmcugCbnkUki8+5MGlppBjSZpId+CM17 + NFmlCUeT88QPkXm3L5hWmhlJZojWVg6Zy65vtntIaN6jySpNOJqVE+YmoSlpzkem5Z2eW/wciPSg + D6F5jyanNBdAk/OUD5F5t6GNVpoWWs5DXzswNtvYZ0mzNZqs0oSjWe55n4ampDkjmZ5Ymh5azl3v + y9PzzkSbND1vjiarNOFoluv5NDQlzRnJ5A2CLH61nfSOdaF5jyarNOFocl6wLjLvtq/RSjNiy7mN + 5TlQ16XtAZCSZlM0WaUJR7O8/2IampLmjGTypucWG1GO5Zz0VnWheY8mqzThaHJeqS4y77askUrT + wSNKq+Z2djQ5pbkAmmpuJyaTNz132IhyJFPN7exoskoTjqaa24nJ5E3PHTiiHD6F+jTZ0WSVJhxN + 9WkSk8mbnjtsRBlCjMWFI2tTn1OrMzaF5j2arNJEo5mKK0cT0ZQ0ZySTNz134Ihy+BRqOWJHk1Wa + cDTVckRMJm967uARpVV6zo4mqzThaCo95yVz3FlAKk0Pjyid0nN2NDmluQCaSs+JyeRNzz06ooyh + Vs57H7T3vDmarNJEoxlr9XwKmpLmjGTypuceGlH6zoTK7eiuMylrpNkcTVZpwtEsX40+DU1Jc0Yy + edNzD9/g69SnyY4mqzThaKpPk5hM3vTcQyNK34XkyvewuKHcG51y1BxNVmnC0SyuHE1EU9Kcj8zA + GwQF/Gq7mtvZ0eSU5gJoqrmdmEze6XnAz4HUp8mOJqs04WiqT5OXzMg70oz4cq4+TXY0OaW5AJrq + 0yQmk3ekGeHl3KtPkx1NVmnC0VSfJi+ZiXekmeDlvHyngKRJgianNBdAU+k5MZm8I82ELucx1cjs + Y1Rze3M0WaUJR7OWUU5BU9Kcj8zMO9LM+HKu9JwdTU5pLoCm0nNeMnteafZ4MpWes6PJKc0F0FR6 + zkum6XitOXyx9lg0FZ/Ts8mpzQXYVH5OjKZh1qbBohmrrZp9p01BBGyyahPOZm20OYVNaXNGNC2z + Ni0UzRRTcbRpzTiDd07abM0mqzbhbJavFpjGprQ5I5rEl1KalQOjmYvtmtImC5us2oSzWezXlDbb + o0l8GrFZeTSaxYZNaZOFTVZtwtks9sVJm+3RJD67w6wCGs1i95G0ycImqzbhbBbbj6TNApq/X//1 + emTzJxCcz57++M2L4XEu/hvRA/cGmSKhYR+hb9/8tr5+Pw+fu1ezhAqcYZfM8Wl30fRdb8tnZbvh + P/e+Wad7Ec7xpRXpvNiH5+33d/nk4a5ixkfKXXECPpG7mZT45WDX0+quR2GXfVdMGZ3r+843axz6 + srjj1B2Su8pxrJO4k+5Ow+5QgN0MO7unj3c+7CpHrUp3i3HHqDsod6Y8q5DuFsHO0OrOALErTyqk + u+W449QdkrtiZCfdLYPdgZsYG2K3e9ndfNgV0zjpbkHuOHWH5K5yi510twh2gVR3wwcbvwZwZ7q+ + 4jsf4vZaT/kODh6l77DglYU3DTwJ70TuHO34zgHrbOVKTo3vFuOO0ndQ7orbRDW+Wwg71vGdg5XZ + kTuFswzgUfoOC57S2cbcedrx3e696/Nhp3SWgTtK3yG5s0pnW2PHOr7zyDJrFc8ygEfpOyx4ymcb + c3fgMoGGdXb3vPb5sFM+y8Adpe+g3CmfbY2dJdXd8MFwMVlXXjf2Ibq+2fGCXxZ4lL7DgldeOJ4G + noR3KneeVXgeNq/oXVfZxGhsn6yEtwR4nMKDglee0E4DT8I7lTvWFbwAXUhRRwoDeJzCg4KnlpTW + 3EVW4UVcod2ckVM+piKYTsJbAjxO4UHBq56PMgE8Ce9U7jKr8DKu0Oa+JjzTd5rSLgIep/Cg4NWE + NwU8Ce9E7iJtRhuBWZl6jhm4o/QdlDu1HLfGjjWjjbCobOROPccM4FH6DgqeU9Nxa+5YM9qIi8oG + 7tR0zAAep/Cg4KnpuDV3rJFFxK0cD9yp65gBPE7hQcFT23Fr7lgjiwhcOfZOTSkM4HEKDwqemlIa + c5doI4uEWzp2iiwYuKP0HZQ7RRatsWONLBJ05ViRBQN4lL6DgucVWbTmjjWySMiVY6/IggE8TuFB + wVNk0Zo71sgiIVeOvSILBvA4hQcFT5FFa+5YI4uEXDn2iiwYwOMUHhQ8RRaNucu0kQXstvcBO0UW + DNxR+g7KnSKL1tixRhYZunKsyIIBPErfQcGrnFch4S3DHWtkkZErx5XjKiS85cDjFB4UPEUWrblj + PQkvAw8kG8iqHFdho80S3hLgcQoPCl556XgaeBLeqdyxZrQZGZUFZbQM4HEKDwqeMtrG3PW0kUWP + WzoOimgZuKP0HZQ7JbStsWOd0PbIE7aDIloG8Ch9hwVPGW1b7lxHOr5zqw5YZxXRMnDH6Dsod1EJ + bWvsSMd34wfDldmohJYBPErfYcFTQtuYO0M7vjPAOqu8goE7St9BuVNc0Ro71vGdgZZZ5RUM4FH6 + DgueAovG3Fna8Z0F1lnlFQzcUfoOyp3iitbYsY7vLLTMKq9gAI/Sd1DwkgKLxtw52vGdw9XZpLyC + gTtK30G5U1zRGDtPqzsPxE5xBQN3nLpDcqe4ojF2gVZ3AYid0goG7jh1h+ROYUVj7CKt7oC3vSeF + FQzcceoOyZ3CisbYsd5Q5pA3RSVlFQzcceoOyF1WVNEYO9bTjR3ylNmsqIKBO07dIblTVNEYO9aT + URzyhIqsqIKBO07dIblTVPExdi9vfhqp2w/dzx9uPrzfPM/Ld/vR23QMHUHfV1cXT/72/A69F88u + fyiCV6BuH3Lv13+u3/+xfjUVuv39Tp+hNHz0XZKct50tGsz0IfrhD+ggSfvf+PYn7n/hhfdN+rrj + 88tnw+u+fe3n/caTs+WZoU3extEfX/wb//ry4pG8cW98rpyTGmzOifGNr29+ecgbP+p1X159S+jz + z150t+dNDx98v83Ll/jd2nzqm97+xLN/03Qqn/yyh4FeV1xr2Yjcd/ELf9lsFp/6skeH23JaPzp8 + cDzfy65W7dv5R/lld6vjXvdYtC/uLf7EjGcpdS/M+PvoCF76TuXeTkqPLN5dzOW83A/zQOenvvhT + i/f23881XHv4QO1W5ie+4sK8/5i3PIyUXDxygGarc/2jARjH6+WL20bN+87kgwDcinX3WX+9/uvF + 2/HL69fjhw6333nzrw9vXl3f/X1+8utLobxMMDz0+ok/uEzQ7SxO0AwpH1h1qJD8TDv2VCBL4w7j + iksGt0CmJYHsH8qjqfLYtjw+uDDeEvlk80dXW593RTgdAs5Pz5Du1n5/kSzyenwNdWm8RrhMrHMp + xsOLXJBlenRp/q+dX+rwI69fvvtz/WKD4vab4d8UcFYW8R83nJVp3CQ451nLF5sbNh2xOB2ezWKs + LnHSwMkpzgXgrIxDJc7WbHpicXo8m8WFeImTBk5OcS4AZzEPlDjbsxmIxRnwbBZzDomTBk5OcS4A + ZzGLkTgJ2AzM4gxoNisxkcRJAierOOFwFndBSpzt2YzEI84IL+q9wiF+ODnFuQCcCoeY2SQecUZ4 + Ue8VDvHDySpOOJwKh4jZTMQjzoQv6gqH+OHkFOcCcCocYmaTeMSZ8EVd4RA/nKzihMOpcIiYzUw8 + 4sz4oq5wiB9OTnEuAKfCIWY2iUecGVvUs+nKV6fb3qe42XspcTaGk1WccDjL60jT4JQ4Z2SzJx5x + 9uiinjul6vxwcopzATiVqjOzSTzi7MFFPfeufIK2sbbrNOIkgJNVnHA4y8dsT4NT4pyRze1JJqTm + HL5YB2xVVz/SGdDJqc4F6FRDEjWcxIPO4YuApLPvTOX+DOPi5uhYubM5nrTuhONZvmdjGp6S55x0 + Gupxp0FXdrVzngGdrO6E06l+Tmo4qcedBlvYvTfl062tsa6zGncS4EnrTjie5Uujp+Epec5JJ/Op + xmZl0ZVd3fBnQCerO+F0qh2eGk7qcadFFnbfhWTK1+k433VJ404GPGndCcezPC2ahqfkOSedzIfC + m5VDV3ZtJjoDOlndCadTu4mY4WQ+Ft6sPBhOo674M6CTVZ1wOtUWzwwn88HwZgVdis+uT+UOpc6E + FNShxEAnqzrhdJYblKbRKXXOCSfzCcdmFdF1XY3xZ0AnqzrhdKoxnhlO5qM6zSpB63rvUnkh3thg + snIiBjpZ1Qmns9yeNI1OqXNOOJnPnDOrjK7raos/AzpZ1QmnU23xzHAyH55kVj12u1tfvqDVmaAz + QEjoZFUnnM5y79w0OqXOGeHcjPlZ1WnhxyyUGzs16uShk1OdC9CppnhmOJn3sVvoTmHf+coJNc65 + PNR9jToJ6GRVJ5zO4nLSRDqlzjnhZN6KabGb3bLvyp1zrjMx5Sh1EtDJqk44nbXWuSl0Sp1zwsnc + Em+xTcc55/J9g85Y43qpk4FOVnXC6aysdU6iU+qcE07mvk6L7ZzL/QBf5VREb4zUyUAnqzrhdFYu + MphEp9Q5J5zMzUkW2/7Rd72vHCgbuj51UicBnazqhNNZXuucRqfUOSOcm/MVWNXpsBlmH3ylJd5a + E4PUyUAnpzoXoLNyYuckOqXOGeH0zOr0UDi9CanS1xlC7zpN2Bno5FTnAnSW1zqn0fno1bm++WUS + nMeheXn17T2agdaawycbv3w4l8Pj7inpyUdTOdErd6ZrdfJHVyJz+yTHk7n992dMJqcx8WTaynFe + k8icx5gC8+6+QVJnjrcNOiCZ1vWkB80JzXs0OaW5AJqcp8yJzLtjvGilGdBkkp6TJDTv0WSVJhxN + zkOSRObdpjZSaVp8OSc95kNo3qPJKc0F0OQ840Nk3u3JoJWmRZNJuktdaN6jySpNOJqcW9RF5t1u + DFppejSZpPcOCc17NFmlCUeT89Ihkbkhk3dN02IXjnLOvrK90vTOtTrAWGjeo8kqTTialb2Vk9CU + NGckMxJLM2LLue+UnrOjySpNOJpKz4nJzMTSzGgylZ6zo8kqTTiaSs95yXS86blDR5S+fKqhpEmC + Jqc0F0BT6TkxmbzpuUNHlL5Tes6OJqs04WgqPScmkzc9d9iIMieTK4fA9iF67aJsjiarNOFolg/j + moampDkjmbzpuUNvu/CdWo7Y0WSVJhxNtRwRk8mbnjtsRJmz9+WRpjGdD63uERKa92iyShOOZnmk + OQ1NSXNGMnnTc4eNKPPwOcqnahrbxSxpNkeTVZpwNMtHak5DU9Kcj0zPm557eERp1KfJjianNBdA + U32axGTypuceG1H22VRuA7TBd7nTSLM1mqzShKNZnp5PQ1PSnJFM3vTcYyPKPufyoYXOptAZpefN + 0WSVJhzNSj2fhKakOSOZvOm5h0eU5ZGmpuckaLJKE46mdgQRk8mbnntoROk7n0x5tX34v2w1PW+O + Jqs04WgWW44moilpzkgmb3ruoRGl76KN5VOOXDDGKD1vjiarNOFolk85moampDkfmeN1oKTSDPiI + UnvP2dHklOYCaGrvOTGZvGuaAb9wpL3n7GiyShOOpvae85IZeUeaEV/OtY2SHU1OaS6AprZREpPJ + O9KM8OOxbe3kdr/hUtJsiyarNOFo1k5un4KmpDkfmYl3pJng5dxqRxA7mpzSXABN7QgiJpN3pJmw + 5bzPOZZbjgY0Y4oaabZGk1WacDTLLUfT0JQ05yMz8440M76cq7mdHU1OaS6ApprbecnseaXZY8nM + qc/FliNnOuuDtlE2R5NTmgugWVlun4SmpDkfmZsVZVJrDl+sPRDNvq+dWuhc73WHb3s2ObW5AJuV + ij6JTWlzRjQNszYNEs2+eqSmTd6ETtpsziarNuFs1pbcp7Apbc6IpmXWpgWiOW5Yc5Vdvr7PRmlQ + ezZZtYlm0xfbOyay+fi1+fLmpzKaP3+4+fB+88wv3+0HtBtf8BGMfnV18eRvz+8wffHs8ociowVA + EXRuf9rHv7qwS9vw0fetozubKx0b3kbX9wdp24/F9icej8X227tYELzury8vhtd9+9rP+o1743P5 + ZlEX7PBjGd94tfYcfuNHVyC+v+7PS82eN13IyJzrKvHt8Lc9FJuJb/pU5bO+abY/7Kkve/yztuWV + gPHPOneB72UfIfKHK/z2NZ/4ejejj0lvOMa7F3yEuu1G3cWR455xY8nrKVYBiN4c9vrt39fus/56 + /deLt+OX16/HDx1uv/PmXx/evNr+wM9/fSmUh5zDQ6+f+INDzt31AZpi8+CJDhGSn0nHngpkyUix + pwKyfyiPe3Z8EFiyMvHuVscR+ZEkn9jlQ8gqnB9Pve1cQU9Boa6vnEsYxt9Mq2WhuSS4/ffLTb0h + cC66LsQEZ3nNchqc86wLic0Nm45YnA7OZnlLmsRJAyenOBeAs3yvhcTZnE1PLE6PZ7N8sYXEyQIn + pzgXgLPckylxNmczEIsz4Nks92RKnCxwcopzATjL+ywkzuZsRmJxRjybtfhf4uSAk1OcC8BZi4wk + zsZsJmJxJjybCof44eQU5wJwKhxiZnP5O1hOYDNA2Qy+1pgUOpdaXVwlOD+Ck1WccDgrVX0SnBLn + jGxm4hFnhhd1p1SdH05OcS4Ap1J1ZjaJR5wZXNQHNpWq88PJKk44nErVidnsiUecPb6oK1Xnh5NT + nAvAqVSdmU3iEWePL+pK1fnhZBUnHE6l6sRsbveVkppzPFwzYOFUrH4GdHKqcwE6latTw0k86By+ + CGA6K0fFyZ00eNK6E46nIiJmOhtcOHACnQYNpzKiM6CT1Z1wOhUSUcNJPe408MKumOgM8KR1JxxP + BUXMdDKfMTce7w6GU0nRGdDJ6k44nYqKmOFkPmXOrBwaTkVFZ0AnqzrhdCoqYoaT+Zw5s/JgOIOS + ojOgk1WdcDoVFDHDyXzSnFmhV5OCgqIzoJNVnXA6FRQxw8l81pxZRTScyonOgE5WdcLpVEzEDCfz + aXNmldBwKiY6AzpZ1QmnUzERM5zMxyaZVUbDqZjoDOhkVSecTsVEzHAyn/9hVj0YzqiY6AzoZFUn + nE7FRMRwbu/rJlWnhe8UjoqJzoBOTnUuQKdiImY4mbdiWvhmt6iY6AzoZFUnnE7FRMxwMu8msvD9 + GlEx0RnQyapOOJ2KiZjhZG6Jt/Cm49rNL1InC52s6oTTqZiIGU7mvk4L75xLionOgE5WdcLpVEzE + DCdzc5KFt38kxURnQCerOuF0KiYihnNzvgKrOh08w0yKic6ATk51LkCnYiJiOD2zOj0YzpBypa6H + 3kmdFHRyqnMBOiuFfRKdj16d65tfJsF5HJqXV99+cv8LqTbH21/cHGAOz7u3pmdLOuLsSmhun+R4 + NLf//pzR5HTmAmhyDjdF5t2ZNLTSDGgySVuShOY9mqzShKPJ2Y8kMu92aJBK0+LLOWkzktC8R5NT + mgugydmJJDI3ZPKONC28nDvSNiSheY8mqzThaHL2IInMuyYPWmlmNJmkDUhC8x5NVmnC0eTsPhKZ + d+0dpNJ08DmQUxDEjianNBdAU0EQMZmWWJoWTaaCIHY0WaUJR1NBEDGZnliaHk2mgiB2NFmlCUdT + QRAxmZFYmhFMplcQxI4mqzThaCoIIiaTNwhy8NV2ryCIHU1WacLRVBDES+a4WY1Umh6+2u4VBLGj + ySnNBdBUEERMJm8Q5OGr7V5BEDuarNKEo6kgiJhM3iDIg1fbk63d2NI7FzpJszWarNKEo1mZBE1C + U9KckUzeHUEevu3CKz1nR5NVmnA0lZ7zkhl41zQDfOEoKD1nR5NTmgugqfScmEzekWaAl/Og9Jwd + TVZpwtFUes5LZuQdaUZ8OVd6zo4mpzQXQFPpOTGZvCPNiC/nSs/Z0WSVJhxNpee8ZCbekWbCl3MF + QexockpzATQVBBGTyTvSTPByHhUEsaPJKk04mgqCeMnMvCPNDC/nUUEQO5qc0lwATQVBvGT2vNLs + 8WQqCGJHk1OaC6CpIIiXzPHKP1Zrjnf+eSyaSoLo2eTU5gJsKgoiRpP6Fl8DRdPXrwnqt2RKm23Z + ZNUmnM3auuYUNh+/Nl/e/FRG8+cPNx/eb5755bv9gHbjCz6C0a+uLp787fkdpi+eXf5QZLQAKILO + 7U/7+FcXdmnbXji/h7auVqRzTn1/kLb9WGx/4vFYbL+9i8WpJjr8uo/2Ed+7/lw8e9500SvV+0Rz + zhuzTHnTpwrghDd9/ep6fNM/1V514W/6qLf89OunL4aPc/FkfL+XV/98+t2JL3kjqd33/PbNb+vr + 98W37AadutTlXPqTnqPADM+2C4I1xpvS4Cf6NAzaawVm+H9+X998uB7HOrd/aJ8/8a/Xf714O2J+ + /Xo91o3b77z514c3r7Y/8vNfYQoHqpM5WJ12P/KnvJVVdFEg9OJoRN++fodl9Ltv/vF4IR0ebh+l + IRW7r2MYGO69KRcmUbpL6Z/D402itFsdVzCf/u+nPxJiuvn4n4JYpXQfo8OT7TVpl0pB72DSYG0n + k57C6MuffpmKaGePG8BffEuJ6PjxH8bo8GQFjZZaC0eNBpOtEaInIPrby8mIHqfRr77/ihPRvXOP + IqL7pqDff7WLqIt9NsUpqI0hGtvLoqcgengt5OGrIDPDeXBafHAsuncN5CSB7lsgGeRYvn0pOG+9 + tTlNoPOjB/6Uz3GZ7SF8jteYP/EP4xO4cnML5yR/HivQqwtOgX5m0M2qcgHR7X87jlCTulLnTPQx + W+/G01zn8udD+Twbf97gEb36QhDN1pWPRumsj9727tEhelVE9KqA6NWxiL5693o9dcnpuBr/9T++ + uSS06Objfwrh+km50t//588wHZ+uMFsqFfvtbClNKvZf7FD01bubiZgeCekVI6M7y6L1VdE9Y9Hh + wfZW+ljs3o4+9cFrvekkPI+IER8YILJNk06awh/bszBMklJxm2AINsTsN2wuOknqHzpHMlUygZnn + LZbANabhwxOKc88aU82cx+NpXFfMknyy0eY5vUky/MR7c9IM6SRA+SZIEEDH+VFxW5bmR6fPj4YH + /0/kwPO7v3//PwkFOsPIc3yywsyouMh0G8fPuMj0+Ieeb6evgx6JKOkq6IPD+O/2r4IOgJbaZreA + Oqd+kRMAHR8bqdDvL5/+QAjoDAodn6xAaGmv1q1C7ZRJ0hdL6O/Xf70Gz5OePf3xG0JIHz4OHR9s + l1HfOWvLR1e4YR5lxrMNH9lAFMjoH+/eYsv88398Rwnog8v88GD7JOo6V+xn8sn5fs/blkTLgN68 + n9gVemyQdPUDY1PoTDnS8HCFSl/qaLqLkdR0dwKkH357gxyK/vP7vzMi+vCR6PBgBTyLMdJ2ICqH + noLnX+9/h+7/+PGHZ4x8zrL948fNrrodRG1yRYP65F0IlW2JQvTEtuU/fn9387CJ0l3T8olgEvQp + 76Vyb6ey77ypXIvnrOmz39b1CiiHU0d0Y9sECE5tvWTA4JRetiIHe9cag4+mWECzdeNSuOXnoBDf + zcjB1ePmIA9/8cXTlzrrkt8slqA4eHBKNsa4Aws4DMYUd/uro6Ng4nBlf347CqHYYLAVgksgELa/ + 3x0Ott+eod1kLg5Yy0J96fRUCooZ6ZYC64jLQr2rY0YOKMvCfByMZaG4oW1bFhJwmPjgsvDr8LEn + DRSPg+B/Pb36O8kocZaSsHmePRj0MeQyBn03HoHHPFs4EK89fM54H6415+DEPG0/B5VIrXzktjPO + jLNKXgzqCVaFgtPyKwIGTous9jKwP7QaTVA8emlrAm4EbsahwXpzABRoZPD8ahwbbOtpaw7mmits + nmkXB+djVz590naxj6nzIBy2n+joE/mKMGDnC1saSLQwy0ixwoItXv21YSFQLyWNHEyZNBwZzA2f + hGPCMIsQbn+x++YL5fKwmS9k1OrBHPOFD3/8P+B04Z/P/89jmi2Mj7PHAynZ8g5pm3303vfEHqhH + oA9E4C7/fBwE7E88xzFisRBsx4g28gDwf//H8Gf/9982c5horO+tNdb2fRi//48PN5/+B2fHX8SH + P75+8/PPYw4ah//R4el+W9/ckvLv/w86TWanLLUdAA== + headers: + Access-Control-Allow-Headers: + - Authorization,User-Agent,Range,X-Requested-With,Content-Type,Partner + Access-Control-Allow-Methods: + - GET, POST, OPTIONS + Access-Control-Allow-Origin: + - '*' + Cache-Control: + - no-store + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Length: + - '43294' + Content-Type: + - application/json + Date: + - Mon, 06 Jan 2025 00:55:22 GMT + Server: + - nginx + Strict-Transport-Security: + - max-age=15768000 + Vary: + - Origin,Authorization,Partner + - accept-encoding + X-Frame-Options: + - SAMEORIGIN + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + method: GET + uri: https://www.deribit.com/api/v2/public/get_tradingview_chart_data?end_timestamp=1733184000000&instrument_name=BTC-PERPETUAL&resolution=720&start_timestamp=1733011200000 + response: + body: + string: '{"usOut":1736124923261326,"usIn":1736124923259456,"usDiff":1870,"testnet":false,"result":{"volume":[1765.50937228,1795.26276348,3824.28604442,7511.65710613,3391.8982902],"ticks":[1732996800000,1733040000000,1733083200000,1733126400000,1733169600000],"status":"ok","open":[97116.5,96529.5,97288.0,96077.0,95872.5],"low":[95555.0,96487.5,95843.5,94377.5,95153.5],"high":[97116.5,97627.0,98275.0,97469.0,96375.0],"cost":[170140340.0,174409490.0,371629810.0,720033750.0,324979260.0],"close":[96530.0,97288.0,96077.5,95872.5,95602.0]},"jsonrpc":"2.0"}' + headers: + Connection: + - keep-alive + Content-Length: + - '546' + Content-Type: + - application/json + Date: + - Mon, 06 Jan 2025 00:55:23 GMT + Server: + - nginx + Strict-Transport-Security: + - max-age=15768000 + X-Frame-Options: + - SAMEORIGIN + status: + code: 200 + message: OK +version: 1 diff --git a/openbb_platform/providers/deribit/tests/record/http/test_deribit_fetchers/test_deribit_futures_historical_fetcher_urllib3_v2.yaml b/openbb_platform/providers/deribit/tests/record/http/test_deribit_fetchers/test_deribit_futures_historical_fetcher_urllib3_v2.yaml new file mode 100644 index 00000000000..5d21a3d3f4d --- /dev/null +++ b/openbb_platform/providers/deribit/tests/record/http/test_deribit_fetchers/test_deribit_futures_historical_fetcher_urllib3_v2.yaml @@ -0,0 +1,916 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + method: GET + uri: https://www.deribit.com/api/v2/public/get_instruments?currency=any&expired=false&kind=future + response: + body: + string: !!binary | + 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 + fKqWO5LpkuUf/wEjI6skBm4AAA== + headers: + Access-Control-Allow-Headers: + - Authorization,User-Agent,Range,X-Requested-With,Content-Type,Partner + Access-Control-Allow-Methods: + - GET, POST, OPTIONS + Access-Control-Allow-Origin: + - '*' + Cache-Control: + - no-store + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Length: + - '1786' + Content-Type: + - application/json + Date: + - Mon, 06 Jan 2025 00:34:14 GMT + Server: + - nginx + Strict-Transport-Security: + - max-age=15768000 + Vary: + - Origin,Authorization,Partner + - accept-encoding + X-Frame-Options: + - SAMEORIGIN + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + method: GET + uri: https://www.deribit.com/api/v2/public/get_instruments?currency=any&expired=false + response: + body: + string: !!binary | + H4sIAAAAAAAAA+zdbZPc1pmt6f+iz00GXjawgf4m0bR1Oty2QqInHDExUcGXtMVpipSLlEbnOPzf + B5lJ0iQrsasShYXnZnH1mTkzRbLFrMLFBWCvZwP//Or/ff3q5eXPT7/6z6+a+9VX//HV5e71Ly/e + fPWf//c/v/r58vnT3cXzl892v02//eTlk4tfXj97uv8zf/vHV//5t8cvXu/+46v/mX5/+t1XP795 + /url9Hs/PX958eby8bPdxeOfXv3ycvov1f/x1fPXF4+fvnn+6+6r/3xz+cv0v/X85evp/+en3cs3 + Fy8f/zT98lff/Ombi7/88LsH9/r/+vpPTXevb6p7D/b/vcf/s7u8ePrqp5+ev369/yv+s7pfVdX0 + H31z+ne6j/7rb/73z/v/+ovnL3ePL6f/3O63n59fPt5/1os3z3/avX7z+Kefp4+Y277uqlTt/+c/ + vnr66uX0LTx9c/H6+f+Z/rfr+9OvTf/F5/8zfTF9rv2Xb54//Z+3v13dnz7Mkxevpl84fuNXfu/x + 693F018uL3cvn/7v47f61Ucf8vn0E0x17uo8/d2Xu1Mfrxtz7vvjx3u9e/Pmxe7wv/nz7vL5q/3P + /9nj/z39N49H4d03/fTxixdfffzRrvy02o9//+rRa7pP/soPvpH98fpq/+Oa/uT+UFz5nX/88urN + 7sSvv/8JXbx+s/v59aTt//nXfwDAffelgRtWBffzL2/s7cbeWmjAtUJvowMuFBwy4ITgmsoBF+Yt + QQMuCb3VDrhQcMiAU4JrHHBh3jpowHVCb60DLhQcMuCU4JIDLsxbDw24Xuitc8CFgkMGnBJc74AL + 85ahAZeF3lwyxIJDBpwSnEuGOG8DNOAGoTeXDLHgkAEnBNe6ZAj01kEDrtN5c8kQC44ZcEJwLhni + vI3QK7hReEJ1yRALDhlwSnAuGQK9Qa/gRuEJ1SVDLDhmwAnBuWQI85Yr5hXc9Ll03lwyxIIjBpwU + nEuGQG/MK7jpc+m8uWSIBccMOB245JIhzlsNvYKrdSfU5JIhFhwy4JTgXDIEeoNewdXCE6pLhlhw + zIATgnPJEOcN+jSRLHy4Q3LJEAsOGXBKcC4ZAr1Br+Aa4QnVJUMsOGbACcG5ZIjzBn1cUhY+vSa5 + ZIgFhww4IbjOJUOgN+gVXKs7oXYuGWLBMQNOCM4lQ5w36PPgsvDxXJ1LhlhwyIBTgnPJEOgNegWX + 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 + uP6By6RGplym6x8uTO4OoCTfZ9G4/oHLpEamXKbrnzNh/vz4t7/vZT4V0fzu67/+4WL6dh68B9p0 + TTE661mg3SmgL56/3D2+XIPn/oNdGYLrCji7qzL33+4pmikVbs2nv7dqo0JzFuf+oM3qfHCK59tf + v+qT464QjHfV3fyN9yJ3K0XiF8QuUeMu6di1hbeS79lVfe2407tjxp3U3Xybvcid4+5cdj017nol + u/mu2nG3mTtm3EndzTfRjrtN2A3UuBuU7Mo3s467Tdwx407qrnwz67iTsxupcTfK2HV5KNxUdENX + Rb3G+8tyx4w7qbvCXcUSd467M9ldMxgTx+7E8MF6J9n5iRhf3G3GDpl2Unbz4y6+tttEXQ0Nu+mD + CW8p5odZnHabuUOmndbd/KiK424TdtQxlF45DlB4g6vjbjN3zLiTunMvG8yupcZdq2TnXhbgjhl3 + UnfuZYPZUafueuH0Uyq8N9Vxt5k7ZtxJ3bmXDWZXfup1ILsTDxZej52bCoA7ZtxJ3bmqCGZHHTLu + hcOeqfC2UsfdZu6YcSd156oimF2mxl0Wsiu8aNRxt5k7ZtxJ3bmqCGZH3VPRC2fbU+EdoY67zdwx + 407qzlVFLLuMHTLOsmnPVHi7p9NuM3bItJOyc1ERrI46dZeV00+Fd8w57TZzh0w7rTsXFcHsqGMo + WTkOUHg/nONuM3fMuJO6c1ERzI7ay2ZlP1Z4t5vjbjN3zLiTunNREcyOWlRk5YJx4b1sjrvN3DHj + TurORUUsu2veeRG4Ynz1vQKrqSs+YbEd+lQ57fTskGknZVfqxxaw+7zD7vWrFwvRVTdS98Of//gx + uhoUdR+Qmz7WlfNr6fUpJ96dMn2rp8RNpK5btPuygi6EHCXmtiJ33XqdQ04qDtTFfijuRCO2lrh8 + 3VKdQ05OjhhySnLXrdI55KTiQA3sh+JO9GCribtugc4hJydHDDkluevW5hxyUnGg7f8fijuxCXs1 + cdcNEDvk5OSIIackd93wsENOKg40XPKhuBMV/2rirpsbdsjJyRFDTknuupFhh5xW3MAMuUEkLqW+ + FHL7t6A45OTkkCEnJFcKuQXkHHLniQM9z+RDcSeeKrHaadXtajg5YsgpybldjRXXMEOukYkb3K6G + k0OGnJCc29VYcT0z5HqdOLer4eSQISck53Y1VBxom9eH4k5stllNnNvVcHLEkFOSc7saKy4xQy7p + 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 + qpuxrr3GCcBJDU41zqG0AL8Ep4NzTZvgnUOjenNG15c2ZwzD6HEkAE5qcMpxloaMl+B0cK5pE7xz + aNRuzhjffoKZk3rbVbXXOAE4qcEpx1lo1RfhdHCuaRO8c2gUb85ox352GWn/5K4++4oTgJManHKc + pSfQLMHp4FzTJnjn0Ch/rUvth3zwcVKDU42z8UM+yDbBO4dG8eaMVKX5uyE/Vo6Ckxqccpyze9X9 + WDmATfAA/CieMU5NLmwHbtrGe9UJOKnBKcdZWEdahNPBuaLN4xIzNDmnL3ad9nbIj0f6DHQyo3MD + nX4+EhoneCJp+qKR6sylgqiu6jR4lpPAE5udcp6FUeNFPB2eq+oEl+vTF0mqc2wKDzTe727rfctO + 4IkNTznP8s7g83k6PFfVCS7Ypy869X2RHzH3GfDEhqecpx8yh9YJLtmnL3rtqT21pSvPvhv9Kg0C + T2x4ynmWrjyX8HR4rqoTXLRPXwxinUN5//rhdQ4Oz2ie2PBU8yw+QnYJT4fnmjoPdSY2PGv1bZEf + 0/kZ6KRmp1ynn9OJxonu2mtpmTlOB6DwMMS261p37QSe2OyU8yyMgizi6fBcVSe6a6+lZebY5cK7 + C6aL0rHziieBJzY85TzndxYt4+nwXFUnumuv5WWmH3X8GfDEhqecpx92jNaJ7tprZZmZqjTMLyq1 + 7V6v6yICT2x4ynnOryot4+nwXFUnumuvlWVmqrq+nx2jm3SO023T6PCM54kNTznP+Tm6ZTwdnmvq + PCw5Y8NTu/mtHYfSwzv73o+LR+ikZqdcZ+npnUt0OjpXxYnu2hulzsOJvXTT7utOCE9sdsp5lm7a + fd0ZrhNdFzXa9fjUFHRWTTN0HlQi8MSGp5xn6WF0S3g6PNfU2aJv2lspzmEovvG6Th7yROikZqdc + Z2HGc5FOR+eqONHXna32xD604+wjQabPmPcvjHF2xvPEZqec53yXuYynw3NNnQl93Sl+2NdY3L2R + ar8iE6GTmp1ynYVHLizS6ehcFSf6ujNJT+xjVbfzmzema55x9IQngSc2O+U8C7dFi3g6PNfU2aGv + O+U3RYUn0fmenaKTmp1ynYUH0fmWPRxnj45O6VMSx2rsCpedXd0M3tJO0EmNTrnOwlXnIp2OzjVx + DujolD4jcaJZuCVq6rEbBl91AnRSo1Ouc74oWqbT0bkizsOMAzU6G+37CPc452/YHZ0Ynczo3EDn + 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 + lNmAQ7NRn849p0mnSQ1NOU3PaYJltuDQbNUyPadJp0kNTTlNz2mCZXLnNFvpMNxBpkeO6DSpoSmn + 6ZEjsEzunGYrH4Yb3J7TaVJDU01zdHsOlsmd02ylw3AHmW7P6TSpoSmn6fYcLDODQzOrZboIotOk + hqacposgsEzucHsrnyAeXQTRaVJDU07TRRBY5ggOzVEt00UQnSY1NOU0XQRxZe73sEJDM8m3XRSe + cuTQZNBkhqacZukpRw7NcJncHUFJuu1ikjkUX2c1dskP7AinSQ1NOc1SEbSEpkNzRZncHUFJve2i + qdye02lSQ1NO0+05WCZ3R1CSbrtIVcrNvMzpf4aucmhG06SGppzm/GDHMpoOzRVlcncEJfW2i6by + yBGdJjU05TQ9cgSWyd0RlKTbLlLVN33hfZRdXbcOzXCa1NCU0yy8jHIRTYfmijK5O4KSettFU3lO + k06TGppymp7TBMvkDrcn9QRxU3lOk06TGppymp7T5MrcryhDQ7PTD8N5TpNOkxmaepq15zTBMrkj + R510riNVXW7nZe6fSzY6NMNpUkNTTnN+Gm4ZTYfmijK5RVCnfv5WU3tOk06TGppymp7T5Mrsubfn + vf4eyCNHdJrM0NyApkeOwDK5V5q9eK6jy0359nzwNspwmtTQlNMs356fT9OhuZ7MgXulOUhP56lK + feEdQW3bVOP+4WQOzVCazNDcgOb8yNEymg7N9WTWFTc1py92SUuzMN3u1GTYZMbmBjYL4+2OzWia + 4KmjeroNEtOcnzpybEJsUmNTbbPwniDH5mmaPz/+7e97m09FOL/7+q9/uJi+nQfviTZtV0zPelZo + d0roi+cvd48v1/C5/2D7rz/6WXYFnd1Vmvtv94TNuhqGeZupS+N+xjomN2d17o/aLM8Hp3y+/fWr + QDnwCtF4V+HNr1sug7dSKH457q558EacuxPPNliHXTX0TWFRchyrFFZ/f1nukHkndVdYcVzkznF3 + Ljvq9V2SnWb37grLic67zeAh804Lr7BW6MDbwt01AzuB59mrMxHrsSusAzrvNnOHzDulu9IGLsfd + JuwaaNxNH0y2jDIWHtOXur7d71xz3unhIfNOC29+IWUZPAfeue4SNfCS7L5ibPr5hZSJ5fTbDrwt + 4DEDTwpvfiVlGTwH3rnuqCt4nXIhpbT/3ne0m8FjBp4UXuGNHr6l3cRdTw28XuduLDwPNFVNTr6l + 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 + r9/8/PO4JXB8Y8PT/ba+uSXl3/8fS0hArCy1HQA= + headers: + Access-Control-Allow-Headers: + - Authorization,User-Agent,Range,X-Requested-With,Content-Type,Partner + Access-Control-Allow-Methods: + - GET, POST, OPTIONS + Access-Control-Allow-Origin: + - '*' + Cache-Control: + - no-store + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Length: + - '43292' + Content-Type: + - application/json + Date: + - Mon, 06 Jan 2025 00:34:15 GMT + Server: + - nginx + Strict-Transport-Security: + - max-age=15768000 + Vary: + - Origin,Authorization,Partner + - accept-encoding + X-Frame-Options: + - SAMEORIGIN + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + method: GET + uri: https://www.deribit.com/api/v2/public/get_tradingview_chart_data?end_timestamp=1733184000000&instrument_name=BTC-PERPETUAL&resolution=720&start_timestamp=1733011200000 + response: + body: + string: '{"usOut":1736123656142468,"usIn":1736123656140693,"usDiff":1775,"testnet":false,"result":{"volume":[1765.50937228,1795.26276348,3824.28604442,7511.65710613,3391.8982902],"ticks":[1732996800000,1733040000000,1733083200000,1733126400000,1733169600000],"status":"ok","open":[97116.5,96529.5,97288.0,96077.0,95872.5],"low":[95555.0,96487.5,95843.5,94377.5,95153.5],"high":[97116.5,97627.0,98275.0,97469.0,96375.0],"cost":[170140340.0,174409490.0,371629810.0,720033750.0,324979260.0],"close":[96530.0,97288.0,96077.5,95872.5,95602.0]},"jsonrpc":"2.0"}' + headers: + Connection: + - keep-alive + Content-Length: + - '546' + Content-Type: + - application/json + Date: + - Mon, 06 Jan 2025 00:34:16 GMT + Server: + - nginx + Strict-Transport-Security: + - max-age=15768000 + X-Frame-Options: + - SAMEORIGIN + status: + code: 200 + message: OK +version: 1 diff --git a/openbb_platform/providers/deribit/tests/record/http/test_deribit_fetchers/test_deribit_futures_info_fetcher_urllib3_v1.yaml b/openbb_platform/providers/deribit/tests/record/http/test_deribit_fetchers/test_deribit_futures_info_fetcher_urllib3_v1.yaml new file mode 100644 index 00000000000..205e715fc3d --- /dev/null +++ b/openbb_platform/providers/deribit/tests/record/http/test_deribit_fetchers/test_deribit_futures_info_fetcher_urllib3_v1.yaml @@ -0,0 +1,132 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + method: GET + uri: https://www.deribit.com/api/v2/public/get_instruments?currency=any&kind=future + response: + body: + string: !!binary | + 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 + ZLpk+cd/1CYNgAZuAAA= + headers: + Access-Control-Allow-Headers: + - Authorization,User-Agent,Range,X-Requested-With,Content-Type,Partner + Access-Control-Allow-Methods: + - GET, POST, OPTIONS + Access-Control-Allow-Origin: + - '*' + Cache-Control: + - no-store + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Length: + - '1781' + Content-Type: + - application/json + Date: + - Mon, 06 Jan 2025 19:35:30 GMT + Server: + - nginx + Strict-Transport-Security: + - max-age=15768000 + Vary: + - Origin,Authorization,Partner + - accept-encoding + X-Frame-Options: + - SAMEORIGIN + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + method: GET + uri: https://www.deribit.com/api/v2/public/ticker?instrument_name=BTC-PERPETUAL + response: + body: + string: !!binary | + H4sIAAAAAAAAA21Sy27bMBD8lz0rAl/iQ7e0zaFAgQRFehYYi7bZUJQhkk6LIP/epeKkzuPInZ2d + 2Vk+wu80x+WwgR5YS6CBxaUSMvSPkP3kUrbTAXqquKSGUU6UNg1gNTtkzAcX4fmZKmPvd3tsJkxS + 3XYNhPkBeqOMUC1p4LD4jRs2ext3SOatoZQ3cJxDmdzKoqyVWgulmXqpDyWNKya04JqTOueExDn7 + OdrwFn5qwMfR/RlWtYpRzXirRa2nvCAz5iHaKglfbr9e3Fz9vLm6/XX5AxcJNuVzYrdukVzOwa28 + E2YMxtEKdDn5+J9AODWVMNkzec5VV4s1q8HH7DBgjJcyFGCqE6T2L/fnshiXYNXvc/NwtKEghNup + rhNKSU6JQXZd6q422HT/0faK3PnxHYJ6CPgJLzgOowv+6Ja/n6T1OthOc4noWFAqu/UAr5NfINST + Djmbsiw1pm2Jo4+71XIDp9eg699opeDcXQi8U0nf45uvZaiUptavS34HGKIr8M1vt9Azjl0ZTUSH + fVsbknv6B2sLSIvJAgAA + headers: + Access-Control-Allow-Headers: + - Authorization,User-Agent,Range,X-Requested-With,Content-Type,Partner + Access-Control-Allow-Methods: + - GET, POST, OPTIONS + Access-Control-Allow-Origin: + - '*' + Cache-Control: + - no-store + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Length: + - '414' + Content-Type: + - application/json + Date: + - Mon, 06 Jan 2025 19:35:30 GMT + Server: + - nginx + Strict-Transport-Security: + - max-age=15768000 + Vary: + - Origin,Authorization,Partner + - accept-encoding + X-Frame-Options: + - SAMEORIGIN + status: + code: 200 + message: OK +version: 1 diff --git a/openbb_platform/providers/deribit/tests/record/http/test_deribit_fetchers/test_deribit_futures_info_fetcher_urllib3_v2.yaml b/openbb_platform/providers/deribit/tests/record/http/test_deribit_fetchers/test_deribit_futures_info_fetcher_urllib3_v2.yaml new file mode 100644 index 00000000000..7acf8a10ad7 --- /dev/null +++ b/openbb_platform/providers/deribit/tests/record/http/test_deribit_fetchers/test_deribit_futures_info_fetcher_urllib3_v2.yaml @@ -0,0 +1,132 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + method: GET + uri: https://www.deribit.com/api/v2/public/get_instruments?currency=any&kind=future + response: + body: + string: !!binary | + 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 + lKqrHcl0ifKP/wA0kD8VBW4AAA== + headers: + Access-Control-Allow-Headers: + - Authorization,User-Agent,Range,X-Requested-With,Content-Type,Partner + Access-Control-Allow-Methods: + - GET, POST, OPTIONS + Access-Control-Allow-Origin: + - '*' + Cache-Control: + - no-store + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Length: + - '1786' + Content-Type: + - application/json + Date: + - Mon, 06 Jan 2025 19:35:48 GMT + Server: + - nginx + Strict-Transport-Security: + - max-age=15768000 + Vary: + - Origin,Authorization,Partner + - accept-encoding + X-Frame-Options: + - SAMEORIGIN + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + method: GET + uri: https://www.deribit.com/api/v2/public/ticker?instrument_name=BTC-PERPETUAL + response: + body: + string: !!binary | + H4sIAAAAAAAAA2WST2/cIBDFv8ucHQswf/fWJjlEitSoSs8WWbO7JDZeGdi2ivLdO5BNu26OzG/e + zOPBKzzHOSzHLWyAtQQaWFzMY4LNKyQ/uZjsdIQNVZ2khlFuKJMNYDU5VMxHF+D9GIvi4PcHbCZM + Ut2KBsb5J2yMMly1pIHj4reu3x5s2KO4aw0RtIHTPObJVRXlrZBMU2b0R73PcahMkI4rTsqcMwlz + 8nOw4xq/NeDD4H71dVthVHPdmlKOaUFhSH2wZSN8fby+erj9/nD7+OPLPd5jtDFd6gQrl4gupdFV + 3ZkZg2m0XDUw+fBPgBZk8TfZi+0dJ3VKiar3ITnMF9OlDPs55lT7l5fLtYq3VBa/7839yY4ZEV5O + CcGVkh0lhlCmeQNPpcHGlV7XtCt58sOKyGIFgZ/wAYd+cKM/ueX357D+zrXTnAMa1oIospr7QfBT + dKyibV6WEtMuh8GHfbXcwPnU6/I1Wsm7zl1xfKYc78L6ZykpulL/ltN/QJeccrzxux0SgckntBEc + 9u3sGN3bH+ZnaX7IAgAA + headers: + Access-Control-Allow-Headers: + - Authorization,User-Agent,Range,X-Requested-With,Content-Type,Partner + Access-Control-Allow-Methods: + - GET, POST, OPTIONS + Access-Control-Allow-Origin: + - '*' + Cache-Control: + - no-store + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Length: + - '414' + Content-Type: + - application/json + Date: + - Mon, 06 Jan 2025 19:35:49 GMT + Server: + - nginx + Strict-Transport-Security: + - max-age=15768000 + Vary: + - Origin,Authorization,Partner + - accept-encoding + X-Frame-Options: + - SAMEORIGIN + status: + code: 200 + message: OK +version: 1 diff --git a/openbb_platform/providers/deribit/tests/record/http/test_deribit_fetchers/test_deribit_futures_instruments_fetcher_urllib3_v1.yaml b/openbb_platform/providers/deribit/tests/record/http/test_deribit_fetchers/test_deribit_futures_instruments_fetcher_urllib3_v1.yaml new file mode 100644 index 00000000000..06bfcb4ccc5 --- /dev/null +++ b/openbb_platform/providers/deribit/tests/record/http/test_deribit_fetchers/test_deribit_futures_instruments_fetcher_urllib3_v1.yaml @@ -0,0 +1,79 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + method: GET + uri: https://www.deribit.com/api/v2/public/get_instruments?currency=any&kind=future + response: + body: + string: !!binary | + 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 + VF3uSKZLln/8BwWVErMGbgAA + headers: + Access-Control-Allow-Headers: + - Authorization,User-Agent,Range,X-Requested-With,Content-Type,Partner + Access-Control-Allow-Methods: + - GET, POST, OPTIONS + Access-Control-Allow-Origin: + - '*' + Cache-Control: + - no-store + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Length: + - '1785' + Content-Type: + - application/json + Date: + - Mon, 06 Jan 2025 16:43:09 GMT + Server: + - nginx + Strict-Transport-Security: + - max-age=15768000 + Vary: + - Origin,Authorization,Partner + - accept-encoding + X-Frame-Options: + - SAMEORIGIN + status: + code: 200 + message: OK +version: 1 diff --git a/openbb_platform/providers/deribit/tests/record/http/test_deribit_fetchers/test_deribit_futures_instruments_fetcher_urllib3_v2.yaml b/openbb_platform/providers/deribit/tests/record/http/test_deribit_fetchers/test_deribit_futures_instruments_fetcher_urllib3_v2.yaml new file mode 100644 index 00000000000..57834285ab9 --- /dev/null +++ b/openbb_platform/providers/deribit/tests/record/http/test_deribit_fetchers/test_deribit_futures_instruments_fetcher_urllib3_v2.yaml @@ -0,0 +1,79 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + method: GET + uri: https://www.deribit.com/api/v2/public/get_instruments?currency=any&kind=future + response: + body: + string: !!binary | + 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 + rTzqckcyXbL84z9ZbTVhBm4AAA== + headers: + Access-Control-Allow-Headers: + - Authorization,User-Agent,Range,X-Requested-With,Content-Type,Partner + Access-Control-Allow-Methods: + - GET, POST, OPTIONS + Access-Control-Allow-Origin: + - '*' + Cache-Control: + - no-store + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Length: + - '1786' + Content-Type: + - application/json + Date: + - Mon, 06 Jan 2025 16:43:31 GMT + Server: + - nginx + Strict-Transport-Security: + - max-age=15768000 + Vary: + - Origin,Authorization,Partner + - accept-encoding + X-Frame-Options: + - SAMEORIGIN + status: + code: 200 + message: OK +version: 1 diff --git a/openbb_platform/providers/deribit/tests/test_deribit_fetchers.py b/openbb_platform/providers/deribit/tests/test_deribit_fetchers.py index 121d5ec1b3b..ed5508a139f 100644 --- a/openbb_platform/providers/deribit/tests/test_deribit_fetchers.py +++ b/openbb_platform/providers/deribit/tests/test_deribit_fetchers.py @@ -1,10 +1,15 @@ """Deribit Fetcher Tests.""" +from datetime import date from unittest.mock import MagicMock, patch import pytest from openbb_core.app.service.user_service import UserService from openbb_core.provider.utils.helpers import run_async +from openbb_deribit.models.futures_curve import DeribitFuturesCurveFetcher +from openbb_deribit.models.futures_historical import DeribitFuturesHistoricalFetcher +from openbb_deribit.models.futures_info import DeribitFuturesInfoFetcher +from openbb_deribit.models.futures_instruments import DeribitFuturesInstrumentsFetcher from openbb_deribit.models.options_chains import ( DeribitOptionsChainsData, DeribitOptionsChainsFetcher, @@ -63,7 +68,7 @@ def vcr_config(): return { "filter_headers": [("User-Agent", None)], "filter_query_parameters": [ - None, + ("expired", None), ], } @@ -97,3 +102,48 @@ async def test_deribit_options_chains_fetcher(credentials=test_credentials): ): result = await fetcher.fetch_data(params, {}) assert isinstance(result, DeribitOptionsChainsData) + + +@pytest.mark.record_http +def test_deribit_futures_curve_fetcher(credentials=test_credentials): + """Test Deribit Futures Curve Fetcher.""" + params = {"symbol": "BTC"} + + fetcher = DeribitFuturesCurveFetcher() + result = fetcher.test(params, credentials) + assert result is None + + +@pytest.mark.record_http +def test_deribit_futures_historical_fetcher(credentials=test_credentials): + """Test Deribit Futures Historical Fetcher.""" + params = { + "symbol": "BTC-PERPETUAL", + "start_date": date(2024, 12, 1), + "end_date": date(2024, 12, 3), + "interval": "12h", + } + + fetcher = DeribitFuturesHistoricalFetcher() + result = fetcher.test(params, credentials) + assert result is None + + +@pytest.mark.record_http +def test_deribit_futures_instruments_fetcher(credentials=test_credentials): + """Test Deribit Futures Instruments Fetcher.""" + params = {} + + fetcher = DeribitFuturesInstrumentsFetcher() + result = fetcher.test(params, credentials) + assert result is None + + +@pytest.mark.record_http +def test_deribit_futures_info_fetcher(credentials=test_credentials): + """Test Deribit Futures Info Fetcher.""" + params = {"symbol": "BTC-PERPETUAL"} + + fetcher = DeribitFuturesInfoFetcher() + result = fetcher.test(params, credentials) + assert result is None