diff --git a/openbb_platform/providers/finviz/README.md b/openbb_platform/providers/finviz/README.md deleted file mode 100644 index f311018e281..00000000000 --- a/openbb_platform/providers/finviz/README.md +++ /dev/null @@ -1,111 +0,0 @@ -# OpenBB Finviz Data Provider Extension - -This extension integrates the [Finviz](https://finviz.com/) data provider into the OpenBB Platform. - -It will install, [finvizfinance](https://github.com/lit26/finvizfinance/), to power the functions. - -## Installation - -To install the extension: - -```bash -pip install openbb-finviz -``` - -## Endpoints - -- obb.equity.compare.groups -- obb.equity.estimates.price_target -- obb.equity.fundamental.metrics -- obb.equity.profile -- obb.equity.price.performance -- obb.equity.screener - -## Screener - -The screener is a faithful replication of the public-facing stock screener - - -Some options are directly accessible through the function parameters, all others are exposed via `presets` or `filters_dict`. -The filters list below are exposed in the function, with choices visible in the docstring: - -- `exchange` -- `index` -- `sector` -- `industry` -- `mktcap` -- `recommendation` (analyst's mean score from 1-5) -- `signal` (same as the "Signal" on the Finviz page) - -When the function is run without any parameters, it will default to the "top_gainers" signal. - -```python -res = obb.equity.screener(provider="finviz") -``` - -### Metric - -The `metric` parameter defines the type of data fields to return. Choices are: - -- `overview` -- `ownership` -- `performance` -- `technical` -- `valuation` - -Default is, "overview". - -```python -res = obb.equity.screener(provider="finviz", metric="performance") -``` - -### Preset Files - -Presets can be created and customized in the "OpenBBUserData" folder. Template and default presets are created on the first run of the function. - -Files are loaded on runtime, changes are effective without restarting the Python interpreter. - -The `preset` parameter will override all others, except `metric` and `limit`. - -Run the function to create the template and default presets in your `OpenBBUserData` folder. - -Presets from the legacy OpenBB Terminal will continue to work, simply move your presets into the folder below. - -```python -res = obb.equity.screener(provider="finviz", index="nasdaq") -``` - -Then find the presets here: `$HOME/OpenBBUserData/presets/finviz` - -```python -res = obb.equity.screener(provider="finviz", preset="short_squeeze") -``` - -### Filters Dict - -The `filters_dict` parameter acts as an alternative to `preset`, accepting a dictionary or JSON encoded string. - -```python -res = obb.equity.screener(provider="finviz", filters_dict={"Index": "NASDAQ 100"}) -``` - -Or as a JSON: - -```python -res = obb.equity.screener(provider="finviz", filters_dict='{"Index": "NASDAQ 100"}') -``` - -When using the Fast API, this is sent in the request body. - -### Error Messages - -All parameters are validated, incorrect keys and choices will raise an error with information to help correct. For example: - -```python -obb.equity.screener(provider="finviz", filters_dict='{"Index": "NASDAQ"}') -``` - -```console -Invalid filter option 'NASDAQ'. Possible filter options: ['Any', 'S&P 500', 'NASDAQ 100', 'DJIA', 'RUSSELL 2000'] -``` - -Read the OpenBB Platform documentation [here](https://docs.openbb.co) diff --git a/openbb_platform/providers/finviz/__init__.py b/openbb_platform/providers/finviz/__init__.py deleted file mode 100644 index c89b671ab79..00000000000 --- a/openbb_platform/providers/finviz/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""Finviz provider.""" diff --git a/openbb_platform/providers/finviz/openbb_finviz/__init__.py b/openbb_platform/providers/finviz/openbb_finviz/__init__.py deleted file mode 100644 index 7368e032f0a..00000000000 --- a/openbb_platform/providers/finviz/openbb_finviz/__init__.py +++ /dev/null @@ -1,26 +0,0 @@ -"""Finviz provider module.""" - -from openbb_core.provider.abstract.provider import Provider -from openbb_finviz.models.compare_groups import FinvizCompareGroupsFetcher -from openbb_finviz.models.equity_profile import FinvizEquityProfileFetcher -from openbb_finviz.models.equity_screener import FinvizEquityScreenerFetcher -from openbb_finviz.models.key_metrics import FinvizKeyMetricsFetcher -from openbb_finviz.models.price_performance import FinvizPricePerformanceFetcher -from openbb_finviz.models.price_target import FinvizPriceTargetFetcher - -finviz_provider = Provider( - name="finviz", - website="https://finviz.com", - description="Unofficial Finviz API - https://github.com/lit26/finvizfinance/releases", - credentials=None, - fetcher_dict={ - "CompareGroups": FinvizCompareGroupsFetcher, - "EtfPricePerformance": FinvizPricePerformanceFetcher, - "EquityInfo": FinvizEquityProfileFetcher, - "EquityScreener": FinvizEquityScreenerFetcher, - "KeyMetrics": FinvizKeyMetricsFetcher, - "PricePerformance": FinvizPricePerformanceFetcher, - "PriceTarget": FinvizPriceTargetFetcher, - }, - repr_name="FinViz", -) diff --git a/openbb_platform/providers/finviz/openbb_finviz/models/__init__.py b/openbb_platform/providers/finviz/openbb_finviz/models/__init__.py deleted file mode 100644 index 3370d9d3dc3..00000000000 --- a/openbb_platform/providers/finviz/openbb_finviz/models/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""Finviz Provider models.""" diff --git a/openbb_platform/providers/finviz/openbb_finviz/models/compare_groups.py b/openbb_platform/providers/finviz/openbb_finviz/models/compare_groups.py deleted file mode 100644 index aeeaeb86919..00000000000 --- a/openbb_platform/providers/finviz/openbb_finviz/models/compare_groups.py +++ /dev/null @@ -1,273 +0,0 @@ -"""Finviz Compare Groups Model.""" - -# pylint: disable=unused-argument - -from typing import Any - -from openbb_core.provider.abstract.data import ForceInt -from openbb_core.provider.abstract.fetcher import Fetcher -from openbb_core.provider.standard_models.compare_groups import ( - CompareGroupsData, - CompareGroupsQueryParams, -) -from openbb_core.provider.utils.descriptions import DATA_DESCRIPTIONS -from openbb_finviz.utils.definitions import GROUPS, GROUPS_DICT, METRICS -from pydantic import Field, field_validator - -GROUPS_CHOICES = sorted(list(GROUPS_DICT)) - - -class FinvizCompareGroupsQueryParams(CompareGroupsQueryParams): - """Finviz Compare Groups Query Params.""" - - __json_schema_extra__ = { - "group": { - "multiple_items_allowed": False, - "choices": GROUPS_CHOICES, - }, - "metric": { - "multiple_items_allowed": False, - "choices": ["performance", "valuation", "overview"], - }, - } - - group: GROUPS = Field( - default="sector", - description="US-listed stocks only." - + " When an individual sector is selected, it is broken down by industry." - + " The default is 'sector'.", - ) - metric: METRICS = Field( - default="performance", - description="Statistical metric to return. Select from: ['performance', 'valuation', 'overview']" - + " The default is 'performance'.", - ) - - -class FinvizCompareGroupsData(CompareGroupsData): - """Finviz Compare Groups Data.""" - - __alias_dict__ = { - "name": "Name", - "stocks": "Number of Stocks", - "market_cap": "Market Cap", - "performance_1d": "Change", - "performance_1w": "Perf Week", - "performance_1m": "Perf Month", - "performance_3m": "Perf Quart", - "performance_6m": "Perf Half", - "performance_1y": "Perf Year", - "performance_ytd": "Perf YTD", - "volume": "Volume", - "volume_average": "Avg Volume", - "volume_relative": "Rel Volume", - "pe": "P/E", - "forward_pe": "Fwd P/E", - "peg": "PEG", - "eps_growth_past_5y": "EPS past 5Y", - "eps_growth_next_5y": "EPS next 5Y", - "sales_growth_past_5_years": "Sales past 5Y", - "price_to_sales": "P/S", - "price_to_book": "P/B", - "price_to_cash": "P/C", - "price_to_free_cash_flow": "P/FCF", - "dividend_yield": "Dividend", - "float_short": "Float Short", - "analyst_recommendation": "Recom", - } - - name: str = Field(description="Name or label of the group.") - - stocks: int | None = Field( - default=None, - description="The number of stocks in the group.", - ) - market_cap: ForceInt | None = Field( - default=None, - description="The market cap of the group.", - ) - performance_1d: float | None = Field( - default=None, - description="The performance in the last day, as a normalized percent.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - performance_1w: float | None = Field( - default=None, - description="The performance in the last week, as a normalized percent.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - performance_1m: float | None = Field( - default=None, - description="The performance in the last month, as a normalized percent.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - performance_3m: float | None = Field( - default=None, - description="The performance in the last quarter, as a normalized percent.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - performance_6m: float | None = Field( - default=None, - description="The performance in the last half year, as a normalized percent.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - performance_1y: float | None = Field( - default=None, - description="The performance in the last year, as a normalized percent.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - performance_ytd: float | None = Field( - default=None, - description="The performance in the year to date, as a normalized percent.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - dividend_yield: float | None = Field( - default=None, - description="The dividend yield of the group, as a normalized percent.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - pe: float | None = Field( - default=None, - description="The P/E ratio of the group.", - ) - forward_pe: float | None = Field( - default=None, - description="The forward P/E ratio of the group.", - ) - peg: float | None = Field( - default=None, - description="The PEG ratio of the group.", - ) - eps_growth_past_5y: float | None = Field( - default=None, - description="The EPS growth of the group for the past 5 years, as a normalized percent.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - eps_growth_next_5y: float | None = Field( - default=None, - description="The estimated EPS growth of the groupo for the next 5 years," - + " as a normalized percent.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - sales_growth_past_5y: float | None = Field( - default=None, - description="The sales growth of the group for the past 5 years, as a normalized percent.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - float_short: float | None = Field( - default=None, - description="The percent of the float shorted for the group, as a normalized value.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - analyst_recommendation: float | None = Field( - default=None, - description="The analyst consensus, on a scale of 1-5 where 1 is a buy and 5 is a sell.", - ) - volume: ForceInt | None = Field( - default=None, description=DATA_DESCRIPTIONS.get("volume", "") - ) - volume_average: ForceInt | None = Field( - default=None, - description="The 3-month average volume of the group.", - ) - volume_relative: float | None = Field( - default=None, - description="The relative volume compared to the 3-month average volume.", - ) - - @field_validator( - "performance_1w", - "performance_1m", - "performance_3m", - "performance_6m", - "performance_1y", - "performance_ytd", - "dividend_yield", - "eps_growth_past_5y", - "eps_growth_next_5y", - "sales_growth_past_5y", - "float_short", - mode="before", - check_fields=False, - ) - @classmethod - def validate_percent_values(cls, v): - """Check fields for the presence of a % character.""" - if v is not None and "%" in str(v): - return float(v.replace("%", "")) / 100 - return v if v else None - - @field_validator("market_cap", "volume", mode="before", check_fields=False) - @classmethod - def validate_abbreviated_numbers(cls, v): - """Check for abbreviated string values.""" - if v is not None and isinstance(v, str): - v = ( - v.replace("M", "e+6") - .replace("B", "e+9") - .replace("T", "e+12") - .replace("K", "e+3") - ) - return int(float(v)) - return v if v else None - - -class FinvizCompareGroupsFetcher( - Fetcher[FinvizCompareGroupsQueryParams, list[FinvizCompareGroupsData]] -): - """Finviz Compare Groups Fetcher.""" - - @staticmethod - def transform_query(params: dict[str, Any]) -> FinvizCompareGroupsQueryParams: - """Transform the query params.""" - if params.get("group") is None: - params["group"] = "sector" - if params.get("metric") is None: - params["metric"] = "performance" - return FinvizCompareGroupsQueryParams(**params) - - @staticmethod - def extract_data( - query: FinvizCompareGroupsQueryParams, - credentials: dict[str, str] | None, - **kwargs: Any, - ) -> list[dict]: - """Extract the raw data from Finviz.""" - # pylint: disable=import-outside-toplevel - from finvizfinance import util - from finvizfinance.group import Overview, Performance, Valuation - from openbb_core.provider.utils.helpers import get_requests_session - from pandas import DataFrame - - util.session = get_requests_session() - results: list = [] - data = DataFrame() - if query.metric == "performance": - data = Performance().screener_view( - group=GROUPS_DICT[query.group], # type: ignore - order="Performance (Week)", - ) - if query.metric == "valuation": - data = Valuation().screener_view( - group=GROUPS_DICT[query.group], # type: ignore - order="Forward Price/Earnings", - ) - if query.metric == "overview": - data = Overview().screener_view( - group=GROUPS_DICT[query.group], # type: ignore - order="Change", - ) - - if not data.empty: - results = data.fillna("N/A").replace("N/A", None).to_dict(orient="records") - - return results - - @staticmethod - def transform_data( - query: FinvizCompareGroupsQueryParams, - data: list[dict], - **kwargs: Any, - ) -> list[FinvizCompareGroupsData]: - """Transform the raw data.""" - return [FinvizCompareGroupsData.model_validate(d) for d in data] diff --git a/openbb_platform/providers/finviz/openbb_finviz/models/equity_profile.py b/openbb_platform/providers/finviz/openbb_finviz/models/equity_profile.py deleted file mode 100644 index 21839209a8d..00000000000 --- a/openbb_platform/providers/finviz/openbb_finviz/models/equity_profile.py +++ /dev/null @@ -1,241 +0,0 @@ -"""Finviz Equity Profile Model.""" - -# pylint: disable=unused-argument - -from typing import Any -from warnings import warn - -from openbb_core.provider.abstract.fetcher import Fetcher -from openbb_core.provider.standard_models.equity_info import ( - EquityInfoData, - EquityInfoQueryParams, -) -from pydantic import Field - - -class FinvizEquityProfileQueryParams(EquityInfoQueryParams): - """ - Finviz Equity Profile Query. - - Source: https://finviz.com/screener.ashx - """ - - __json_schema_extra__ = {"symbol": {"multiple_items_allowed": True}} - - -class FinvizEquityProfileData(EquityInfoData): - """Finviz Equity Profile Data.""" - - __alias_dict__ = { - "stock_exchange": "exchange", - } - - index: str | None = Field( - default=None, - description="Included in indices - i.e., Dow, Nasdaq, or S&P.", - ) - optionable: str | None = Field( - default=None, - description="Whether options trade against the ticker.", - ) - shortable: str | None = Field( - default=None, - description="If the asset is shortable.", - ) - shares_outstanding: str | None = Field( - default=None, - description="The number of shares outstanding, as an abbreviated string.", - ) - shares_float: str | None = Field( - default=None, - description="The number of shares in the public float, as an abbreviated string.", - ) - short_interest: str | None = Field( - default=None, - description="The last reported number of shares sold short, as an abbreviated string.", - ) - institutional_ownership: float | None = Field( - default=None, - description="The institutional ownership of the stock, as a normalized percent.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - market_cap: str | None = Field( - default=None, - description="The market capitalization of the stock, as an abbreviated string.", - ) - dividend_yield: float | None = Field( - default=None, - description="The dividend yield of the stock, as a normalized percent.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - earnings_date: str | None = Field( - default=None, - description="The last, or next confirmed, earnings date and announcement time, as a string." - + " The format is Nov 02 AMC - for after market close.", - ) - beta: float | None = Field( - default=None, - description="The beta of the stock relative to the broad market.", - ) - - -class FinvizEquityProfileFetcher( - Fetcher[FinvizEquityProfileQueryParams, list[FinvizEquityProfileData]] -): - """Finviz Equity Profile Fetcher.""" - - @staticmethod - def transform_query(params: dict[str, Any]) -> FinvizEquityProfileQueryParams: - """Transform the query params.""" - return FinvizEquityProfileQueryParams(**params) - - @staticmethod - def extract_data( - query: FinvizEquityProfileQueryParams, - credentials: dict[str, str] | None, - **kwargs: Any, - ) -> list[dict]: - """Extract the raw data from Finviz.""" - # pylint: disable=import-outside-toplevel - from finvizfinance import util - from finvizfinance.quote import finvizfinance - from openbb_core.app.model.abstract.error import OpenBBError - from openbb_core.provider.utils.errors import EmptyDataError - from openbb_core.provider.utils.helpers import get_requests_session - - util.session = get_requests_session() - results: list = [] - messages: list = [] - - def get_one(symbol) -> dict: - """Get the data for one symbol.""" - result: dict = {} - try: - data = finvizfinance(symbol) - fundament = data.ticker_fundament() - description = data.ticker_description() - except Exception as e: # pylint: disable=W0718 - messages.append(f"Failed to get data for {symbol} -> {e}") - return result - div_yield = ( - float(str(fundament.get("Dividend %", None)).replace("%", "")) / 100 - if fundament.get("Dividend %", "-") != "-" - else None - ) - inst_own = ( - float(str(fundament.get("Inst Own", None)).replace("%", "")) / 100 - if fundament.get("Inst Own", "-") != "-" - else None - ) - result.update( - { - "symbol": symbol, - "exchange": ( - fundament.get("Exchange", None) - if fundament.get("Exchange", "-") != "-" - else None - ), - "name": ( - fundament.get("Company", None) - if fundament.get("Company", "-") != "-" - else None - ), - "sector": ( - fundament.get("Sector", None) - if fundament.get("Sector", "-") != "-" - else None - ), - "industry_category": ( - fundament.get("Industry", None) - if fundament.get("Industry", "-") != "-" - else None - ), - "hq_country": ( - fundament.get("Country", None) - if fundament.get("Country", "-") != "-" - else None - ), - "employees": ( - fundament.get("Employees", None) - if fundament.get("Employees", "-") != "-" - else None - ), - "index": ( - fundament.get("Index", None) - if fundament.get("Index", "-") != "-" - else None - ), - "beta": ( - fundament.get("Beta", None) - if fundament.get("Beta", "-") != "-" - else None - ), - "optionable": ( - fundament.get("Optionable", None) - if fundament.get("Optionable", "-") != "-" - else None - ), - "shortable": ( - fundament.get("Shortable", None) - if fundament.get("Shortable", "-") != "-" - else None - ), - "shares_outstanding": ( - fundament.get("Shs Outstand", None) - if fundament.get("Shs Outstand", "-") != "-" - else None - ), - "shares_float": ( - fundament.get("Shs Float", None) - if fundament.get("Shs Float", "-") != "-" - else None - ), - "short_interest": ( - fundament.get("Short Interest", None) - if fundament.get("Short Interest", "-") != "-" - else None - ), - "institutional_ownership": inst_own if inst_own else None, - "market_cap": ( - fundament.get("Market Cap", None) - if fundament.get("Market Cap", "-") != "-" - else None - ), - "dividend_yield": div_yield if div_yield else None, - "earnings_date": ( - fundament.get("Earnings", None) - if fundament.get("Earnings", "-") != "-" - else None - ), - "long_description": description if description else None, - } - ) - - return result - - symbols = query.symbol.split(",") - for symbol in symbols: - result = get_one(symbol) - if result is not None and result: - results.append(result) - - if not results and messages: - raise OpenBBError("\n".join(messages)) - - if not results and not messages: - raise EmptyDataError("No data was returned for any symbol") - - if results and messages: - for message in messages: - warn(message) - - return results - - @staticmethod - def transform_data( - query: FinvizEquityProfileQueryParams, - data: list[dict], - **kwargs: Any, - ) -> list[FinvizEquityProfileData]: - """Transform and validate the raw data.""" - return [FinvizEquityProfileData.model_validate(d) for d in data] diff --git a/openbb_platform/providers/finviz/openbb_finviz/models/equity_screener.py b/openbb_platform/providers/finviz/openbb_finviz/models/equity_screener.py deleted file mode 100644 index d9dd29c0a39..00000000000 --- a/openbb_platform/providers/finviz/openbb_finviz/models/equity_screener.py +++ /dev/null @@ -1,737 +0,0 @@ -"""Finviz Equity Screener Model.""" - -# pylint: disable=unused-argument,too-many-statements,too-many-branches,too-many-locals - -from typing import Any, Literal -from warnings import warn - -from openbb_core.app.model.abstract.error import OpenBBError -from openbb_core.provider.abstract.fetcher import Fetcher -from openbb_core.provider.standard_models.equity_screener import ( - EquityScreenerData, - EquityScreenerQueryParams, -) -from openbb_core.provider.utils.descriptions import ( - DATA_DESCRIPTIONS, - QUERY_DESCRIPTIONS, -) -from openbb_core.provider.utils.errors import EmptyDataError -from openbb_finviz.utils.screener_helper import ( - EXCHANGE_MAP, - INDEX_MAP, - INDUSTRY_MAP, - MARKET_CAP_MAP, - RECOMMENDATION_MAP, - SECTOR_MAP, - SIGNALS, - SIGNALS_DESC_STR, - MarketCap, - Recommendation, - Sectors, -) -from pydantic import Field, field_validator, model_validator - - -class FinvizEquityScreenerQueryParams(EquityScreenerQueryParams): - """Finviz Equity Screener Query Params.""" - - __json_schema_extra__ = { - "metric": { - "choices": [ - "overview", - "valuation", - "financial", - "ownership", - "performance", - "technical", - ], - }, - "signal": {"choices": SIGNALS}, - "exchange": {"choices": list(EXCHANGE_MAP)}, - "index": {"choices": list(INDEX_MAP)}, - "sector": {"choices": list(SECTOR_MAP)}, - "industry": {"choices": list(INDUSTRY_MAP)}, - "market_cap": {"choices": list(MARKET_CAP_MAP)}, - "recommendation": {"choices": list(RECOMMENDATION_MAP)}, - } - - metric: Literal[ - "overview", - "valuation", - "financial", - "ownership", - "performance", - "technical", - ] = Field( - default="overview", - description="The data group to return, default is 'overview'.", - ) - exchange: Literal["all", "amex", "nasdaq", "nyse"] = Field( - default="all", description="Filter by exchange." - ) - index: Literal["all", "dow", "nasdaq", "sp500", "russell"] = Field( - default="all", - description="Filter by index.", - ) - sector: Sectors = Field( - default="all", - description="Filter by sector.", - ) - industry: str | None = Field( - default="all", - description="Filter by industry.", - ) - mktcap: MarketCap = Field( - default="all", - description="Filter by market cap." - + "\n Mega - > 200B" - + "\n Large - 10B - 200B" - + "\n Mid - 2B - 10B" - + "\n Small - 300M - 2B" - + "\n Micro - 50M - 300M" - + "\n Nano - < 50M", - ) - recommendation: Recommendation = Field( - default="all", description="Filter by analyst recommendation." - ) - signal: str | None = Field( - default=None, - description="The Finviz screener signal to use." - + " When no parameters are provided, the screener defaults to 'top_gainers'." - + f" Available signals are:{SIGNALS_DESC_STR}", - ) - preset: str | None = Field( - default=None, - description="A configured preset file to use for the query." - + " This overrides all other query parameters except 'metric', and 'limit'." - + " Presets (.ini text files) can be created and modified in the '~/OpenBBUserData/finviz/presets' directory." - + " If the path does not exist, it will be created and populated with the default presets on the first run." - + " Refer to the file, 'screener_template.ini', for the format and options." - + "\n\nNote: Syntax of parameters in preset files must follow the template file exactly " - + " - i.e, Analyst Recom. = Strong Buy (1)", - ) - filters_dict: dict | str | None = Field( - default=None, - kw_only=True, - description="A formatted dictionary, or serialized JSON string, of additional filters to apply to the query." - + " This parameter can be used as an alternative to preset files, and is ignored when a preset is supplied." - + " Invalid entries will raise an error. Syntax should follow the 'screener_template.ini' file.", - ) - limit: int | None = Field( - default=None, - description=QUERY_DESCRIPTIONS.get("limit", ""), - ) - - @field_validator("signal", mode="before", check_fields=False) - @classmethod - def validate_signal(cls, v): - """Validate the signal.""" - if v is not None and v not in SIGNALS: - raise OpenBBError( - f"Invalid signal '{v}'. Available signals are:\n{SIGNALS_DESC_STR}" - ) - return v if v else None - - @field_validator("industry", mode="before", check_fields=False) - @classmethod - def validate_industry(cls, v): - """Validate the industry.""" - if v is not None and v not in INDUSTRY_MAP: - raise OpenBBError( - f"Invalid industry '{v}'. Available industries are:\n{', '.join(INDUSTRY_MAP)}" - ) - return v if v else None - - @field_validator("preset", mode="before", check_fields=False) - @classmethod - def validate_preset(cls, v): - """Check to reject running template file.""" - if v is not None and v == "screener_template": - raise OpenBBError( - f"Invalid preset '{v}'. Please rename the file to use as a preset." - ) - return v if v else None - - @field_validator("filters_dict", mode="before", check_fields=False) - @classmethod - def validate_filters_dict(cls, v): - """Validate the filters_dict.""" - if isinstance(v, str): - # pylint: disable=import-outside-toplevel - import json - - try: - v = json.loads(v) - except json.JSONDecodeError as e: - raise OpenBBError(f"Invalid JSON format for 'filters_dict': {e}") from e - if v is not None and not isinstance(v, dict): - raise OpenBBError( - "Invalid 'filters_dict' format. Must be a dictionary or serialized JSON string." - ) - - return v - - -class FinvizEquityScreenerData(EquityScreenerData): - """Finviz Equity Screener Data. Actual returned data varies by the 'metric' parameter.""" - - __alias_dict__ = { - "symbol": "Ticker", - "name": "Company", - "earnings_date": "Earnings", - "sector": "Sector", - "industry": "Industry", - "country": "Country", - "shares_outstanding": "Outstanding", - "shares_float": "Float", - "short_interest": "Float Short", - "short_ratio": "Short Ratio", - "insider_ownership": "Insider Own", - "insider_ownership_change": "Insider Trans", - "institutional_ownership": "Inst Own", - "institutional_ownership_change": "Inst Trans", - "analyst_recommendation": "Recom", - "beta": "Beta", - "market_cap": "Market Cap", - "price": "Price", - "change_percent": "Change", - "change_from_open": "from Open", - "gap": "Gap", - "year_high_percent": "52W High", - "year_low_percent": "52W Low", - "sma20_percent": "SMA20", - "sma50_percent": "SMA50", - "sma200_percent": "SMA200", - "rsi": "RSI", - "volume": "Volume", - "volume_avg": "Avg Volume", - "volume_relative": "Rel Volume", - "average_true_range": "ATR", - "price_change_1w": "Perf Week", - "price_change_1m": "Perf Month", - "price_change_3m": "Perf Quart", - "price_change_6m": "Perf Half", - "price_change_1y": "Perf Year", - "price_change_ytd": "Perf YTD", - "volatility_1w": "Volatility W", - "volatility_1m": "Volatility M", - "price_to_earnings": "P/E", - "forward_pe": "Fwd P/E", - "peg_ratio": "PEG", - "price_to_sales": "P/S", - "price_to_book": "P/B", - "price_to_cash": "P/C", - "price_to_free_cash_flow": "P/FCF", - "eps_growth_past_1y": "EPS This Y", - "eps_growth_next_1y": "EPS Next Y", - "eps_growth_past_5y": "EPS Past 5Y", - "eps_growth_next_5y": "EPS Next 5Y", - "sales_growth_past_5y": "Sales Past 5Y", - "dividend_yield": "Dividend", - "return_on_assets": "ROA", - "return_on_equity": "ROE", - "return_on_investment": "ROI", - "current_ratio": "Curr R", - "quick_ratio": "Quick R", - "long_term_debt_to_equity": "LTDebt/Eq", - "debt_to_equity": "Debt/Eq", - "gross_margin": "Gross M", - "operating_margin": "Oper M", - "profit_margin": "Profit M", - } - - earnings_date: str | None = Field( - default=None, - description="Earnings date, where 'a' and 'b' mean after and before market close, respectively.", - ) - country: str | None = Field( - default=None, - description="Country of the company.", - ) - sector: str | None = Field( - default=None, - description="Sector of the company.", - ) - industry: str | None = Field( - default=None, - description="Industry of the company.", - ) - beta: float | None = Field( - default=None, - description="Beta of the stock.", - ) - analyst_recommendation: float | None = Field( - default=None, - description="Analyst's mean recommendation. (1=Buy 5=Sell).", - ) - market_cap: float | None = Field( - default=None, - description="Market capitalization of the company.", - json_schema_extra={"x-unit_measurement": "currency"}, - ) - price: float | None = Field( - default=None, - description="Price of a share.", - json_schema_extra={"x-unit_measurement": "currency"}, - ) - change_percent: float | None = Field( - default=None, - description="Price change percentage.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - change_from_open: float | None = Field( - default=None, - description="Price change percentage, from the opening price.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - gap: float | None = Field( - default=None, - description="Price gap percentage, from the previous close.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - volume: int | float | None = Field( - default=None, - description=DATA_DESCRIPTIONS.get("volume", ""), - ) - volume_avg: int | float | None = Field( - default=None, - description="3-month average daily volume.", - ) - volume_relative: float | None = Field( - default=None, - description="Current volume relative to the average.", - ) - average_true_range: float | None = Field( - default=None, - description="Average true range (14).", - json_schema_extra={"x-unit_measurement:": "currency"}, - ) - price_change_1w: float | None = Field( - default=None, - description="One-week price return.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - price_change_1m: float | None = Field( - default=None, - description="One-month price return.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - price_change_3m: float | None = Field( - default=None, - description="Three-month price return.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - price_change_6m: float | None = Field( - default=None, - description="Six-month price return.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - price_change_1y: float | None = Field( - default=None, - description="One-year price return.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - price_change_ytd: float | None = Field( - default=None, - description="Year-to-date price return.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - volatility_1w: float | None = Field( - default=None, - description="One-week volatility.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - volatility_1m: float | None = Field( - default=None, - description="One-month volatility.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - year_high_percent: float | None = Field( - default=None, - description="Percent difference from current price to the 52-week high.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - year_low_percent: float | None = Field( - default=None, - description="Percent difference from current price to the 52-week low.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - sma20_percent: float | None = Field( - default=None, - description="Percent difference from current price to the 20-day simple moving average.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - sma50_percent: float | None = Field( - default=None, - description="Percent difference from current price to the 50-day simple moving average.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - sma200_percent: float | None = Field( - default=None, - description="Percent difference from current price to the 200-day simple moving average.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - rsi: float | None = Field( - default=None, - description="Relative strength index (14).", - ) - shares_outstanding: int | float | None = Field( - default=None, - description="Number of shares outstanding.", - ) - shares_float: int | float | None = Field( - default=None, - description="Number of shares available to trade.", - ) - short_interest: float | None = Field( - default=None, - description="Percent of float reported as short.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - short_ratio: float | None = Field( - default=None, - description="Short interest ratio", - ) - insider_ownership: float | None = Field( - default=None, - description="Insider ownership as a percentage.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - insider_ownership_change: float | None = Field( - default=None, - description="6-month change in insider ownership percentage.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - institutional_ownership: float | None = Field( - default=None, - description="Institutional ownership as a percentage.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - institutional_ownership_change: float | None = Field( - default=None, - description="3-month change in institutional ownership percentage.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - price_to_earnings: float | None = Field( - default=None, - description="Price to earnings ratio.", - ) - forward_pe: float | None = Field( - default=None, - description="Forward price to earnings ratio.", - ) - peg_ratio: float | None = Field( - default=None, - description="Price/Earnings-To-Growth (PEG) ratio.", - ) - price_to_sales: float | None = Field( - default=None, - description="Price to sales ratio.", - ) - price_to_book: float | None = Field( - default=None, - description="Price to book ratio.", - ) - price_to_cash: float | None = Field( - default=None, - description="Price to cash ratio.", - ) - price_to_fcf: float | None = Field( - default=None, - description="Price to free cash flow ratio.", - ) - eps_growth_past_1y: float | None = Field( - default=None, - description="EPS growth for this year.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - eps_growth_next_1y: float | None = Field( - default=None, - description="EPS growth next year.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - eps_growth_past_5y: float | None = Field( - default=None, - description="EPS growth for the previous 5 years.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - eps_growth_next_5y: float | None = Field( - default=None, - description="EPS growth for the next 5 years.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - sales_growth_past_5y: float | None = Field( - default=None, - description="Sales growth for the previous 5 years.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - dividend_yield: float | None = Field( - default=None, - description="Annualized dividend yield.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - return_on_assets: float | None = Field( - default=None, - description="Return on assets.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - return_on_equity: float | None = Field( - default=None, - description="Return on equity.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - return_on_investment: float | None = Field( - default=None, - description="Return on investment.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - current_ratio: float | None = Field( - default=None, - description="Current ratio.", - ) - quick_ratio: float | None = Field( - default=None, - description="Quick ratio.", - ) - long_term_debt_to_equity: float | None = Field( - default=None, - description="Long term debt to equity ratio.", - ) - debt_to_equity: float | None = Field( - default=None, - description="Total debt to equity ratio.", - ) - gross_margin: float | None = Field( - default=None, - description="Gross margin.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - operating_margin: float | None = Field( - default=None, - description="Operating margin.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - profit_margin: float | None = Field( - default=None, - description="Profit margin.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - - @model_validator(mode="before") - @classmethod - def validate_data(cls, values): - """Strip % from strings and convert to float.""" - for k, v in values.items(): - if isinstance(v, str) and v.strip().endswith("%"): - values[k] = float(v.strip().rstrip("%")) / 100 - return values - - -class FinvizEquityScreenerFetcher( - Fetcher[FinvizEquityScreenerQueryParams, list[FinvizEquityScreenerData]] -): - """Finviz Equity Screener Fetcher.""" - - @staticmethod - def transform_query(params: dict[str, Any]) -> FinvizEquityScreenerQueryParams: - """Transform query parameters.""" - transformed_params = params.copy() - if not transformed_params.get("filters_dict"): - transformed_params["filters_dict"] = {} - return FinvizEquityScreenerQueryParams(**transformed_params) - - @staticmethod - def extract_data( # noqa = PRL0912 - query: FinvizEquityScreenerQueryParams, - credentials: dict[str, str] | None, - **kwargs: Any, - ) -> list[dict]: - """Extract data from Finviz.""" - # pylint: disable=import-outside-toplevel - import configparser # noqa - from finvizfinance import util - from finvizfinance.screener import ( - financial, - overview, - ownership, - performance, - technical, - valuation, - ) - from numpy import nan - from openbb_core.provider.utils.helpers import get_requests_session - from openbb_finviz.utils.screener_helper import ( - get_preset_choices, - d_check_screener, - d_signals, - ) - from pandas import DataFrame - - preset = None - util.session = get_requests_session() - - try: - data_dir = kwargs.get("preferences", {}).get("data_directory") - preset_choices = get_preset_choices(data_dir) - preset = query.preset - if preset is not None and preset not in preset_choices: - raise OpenBBError( - f"Invalid preset '{preset}'. Available presets are:\n{list(preset_choices)}" - ) - except Exception as e: - if preset is not None: - raise e from e - warn(f"Error loading presets -> {e.__class__.__name__}: {e}") - preset = None - - data_type = query.metric - ascend = False - limit = query.limit - sleep = 0.1 # For optimized pagination speed without creating too many requests error from Finviz. - sort_by = "Change" - df_screen = DataFrame() - screen_type = { - "overview": overview.Overview, - "valuation": valuation.Valuation, - "financial": financial.Financial, - "ownership": ownership.Ownership, - "performance": performance.Performance, - "technical": technical.Technical, - } - - if data_type in screen_type: - screen = screen_type[data_type]() - - if preset is not None: - preset_filter = configparser.RawConfigParser() - preset_filter.optionxform = str # type: ignore - preset_filter.read(preset_choices[preset]) - d_general = preset_filter["General"] - d_filters = { - **preset_filter["Descriptive"], - **preset_filter["Fundamental"], - **preset_filter["Technical"], - } - for section in ["General", "Descriptive", "Fundamental", "Technical"]: - for key, val in {**preset_filter[section]}.items(): - if key not in d_check_screener: - raise OpenBBError( - f"The screener variable {section}.{key} shouldn't exist!\n" - ) - - if val not in d_check_screener[key]: - raise OpenBBError( - f"Invalid [{section}] {key}={val}. " - f"Choose one of the following options:\n{', '.join(d_check_screener[key])}.\n" - ) - - d_filters = {k: v for k, v in d_filters.items() if v is not None} - screen.set_filter(filters_dict=d_filters) - asc = None - - asc = d_general.get("Ascend") - - if asc is not None: - ascend = asc == "true" - - df_screen = screen.screener_view( - order=d_general.get("Order", "Change"), - limit=limit if limit else 100000, - ascend=ascend, - sleep_sec=sleep, - verbose=0, - ) - # If no preset is supplied, then set the filters based on the query parameters. - else: - if query.signal is not None: - screen.set_filter(signal=d_signals[query.signal]) - if query.signal in ["unusual_volume", "most_active"]: - sort_by = "Relative Volume" - elif query.signal == "top_losers": - ascend = True - elif query.signal in ["new_low", "multiple_bottom", "double_bottom"]: - sort_by = "52-Week Low (Relative)" - ascend = True - elif query.signal in ["new_high", "multiple_top", "double_top"]: - sort_by = "52-Week High (Relative)" - elif query.signal == "oversold": - sort_by = "Relative Strength Index (14)" - ascend = True - elif query.signal == "overbought": - sort_by = "Relative Strength Index (14)" - elif query.signal == "most_volatile": - sort_by = "Volatility (Week)" - else: - pass - - filters_dict: dict = {} - - if query.sector != "all": - filters_dict["Sector"] = SECTOR_MAP[query.sector] - - if query.industry != "all": - filters_dict["Industry"] = INDUSTRY_MAP[query.industry] # type: ignore - - if query.exchange != "all": - filters_dict["Exchange"] = EXCHANGE_MAP[query.exchange] - - if query.index != "all": - filters_dict["Index"] = INDEX_MAP[query.index] - - if query.recommendation != "all": - filters_dict["Analyst Recom."] = RECOMMENDATION_MAP[ - query.recommendation - ] - - if query.mktcap != "all": - filters_dict["Market Cap."] = MARKET_CAP_MAP[query.mktcap] - - if query.filters_dict is not None: - _filters_dict = query.filters_dict.copy() # type: ignore - order = _filters_dict.pop("Order", None) - asc = _filters_dict.pop("Ascend", None) - if asc: - ascend = asc == "true" - if order: - sort_by = order - filters_dict.update(_filters_dict) - - if filters_dict: - screen.set_filter(filters_dict=filters_dict) - - if not filters_dict and query.signal is None: - screen.set_filter(signal=d_signals["top_gainers"]) - warn( - "No filters or signal provided. Defaulting to 'top_gainers' signal." - + " Use the preset, 'all_stocks', to explicitly return every stock on Finviz." - + " Returning 10K symbols can take several minutes." - ) - - df_screen = screen.screener_view( - order=sort_by, - limit=limit if limit else 100000, - ascend=ascend, - sleep_sec=sleep, - verbose=0, - ) - - if df_screen is None or df_screen.empty: - raise EmptyDataError( - "No tickers found for the supplied parameters. Try relaxing the constraints." - ) - - df_screen.columns = [val.strip("\n") for val in df_screen.columns] - # Commas in the company name can cause issues with delimiters. - if "Company" in df_screen.columns: - df_screen["Company"] = df_screen["Company"].str.replace(",", "") - - return df_screen.convert_dtypes().replace({nan: None}).to_dict(orient="records") - - @staticmethod - def transform_data( - query: FinvizEquityScreenerQueryParams, - data: list[dict], - **kwargs: Any, - ) -> list[FinvizEquityScreenerData]: - """Transform data.""" - return [FinvizEquityScreenerData.model_validate(d) for d in data] diff --git a/openbb_platform/providers/finviz/openbb_finviz/models/key_metrics.py b/openbb_platform/providers/finviz/openbb_finviz/models/key_metrics.py deleted file mode 100644 index ab238c79881..00000000000 --- a/openbb_platform/providers/finviz/openbb_finviz/models/key_metrics.py +++ /dev/null @@ -1,299 +0,0 @@ -"""Finviz Key Metrics Model.""" - -# pylint: disable=unused-argument - -from typing import Any -from warnings import warn - -from openbb_core.provider.abstract.fetcher import Fetcher -from openbb_core.provider.standard_models.key_metrics import ( - KeyMetricsData, - KeyMetricsQueryParams, -) -from pydantic import Field - - -class FinvizKeyMetricsQueryParams(KeyMetricsQueryParams): - """ - Finviz Key Metrics Query. - - Source: https://finviz.com/screener.ashx - """ - - __json_schema_extra__ = {"symbol": {"multiple_items_allowed": True}} - - -class FinvizKeyMetricsData(KeyMetricsData): - """Finviz Key Metrics Data.""" - - pe_ratio: float | None = Field( - default=None, description="Price-to-earnings ratio (TTM)." - ) - forward_pe: float | None = Field( - default=None, description="Forward price-to-earnings ratio (forward P/E)" - ) - eps: float | None = Field(default=None, description="Earnings per share (EPS)") - price_to_sales: float | None = Field( - default=None, description="Price-to-sales ratio (P/S)" - ) - price_to_book: float | None = Field( - default=None, description="Price-to-book ratio (P/B)" - ) - book_value_per_share: float | None = Field( - default=None, description="Book value per share (Book/sh)" - ) - price_to_cash: float | None = Field( - default=None, description="Price-to-cash ratio (P/C)" - ) - cash_per_share: float | None = Field( - default=None, description="Cash per share (Cash/sh)" - ) - price_to_free_cash_flow: float | None = Field( - default=None, description="Price-to-free cash flow ratio (P/FCF)" - ) - debt_to_equity: float | None = Field( - default=None, description="Debt-to-equity ratio (Debt/Eq)" - ) - long_term_debt_to_equity: float | None = Field( - default=None, description="Long-term debt-to-equity ratio (LT Debt/Eq)" - ) - quick_ratio: float | None = Field(default=None, description="Quick ratio") - current_ratio: float | None = Field(default=None, description="Current ratio") - gross_margin: float | None = Field( - default=None, - description="Gross margin, as a normalized percent.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - profit_margin: float | None = Field( - default=None, - description="Profit margin, as a normalized percent.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - operating_margin: float | None = Field( - default=None, - description="Operating margin, as a normalized percent.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - return_on_assets: float | None = Field( - default=None, - description="Return on assets (ROA), as a normalized percent.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - return_on_investment: float | None = Field( - default=None, - description="Return on investment (ROI), as a normalized percent.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - return_on_equity: float | None = Field( - default=None, - description="Return on equity (ROE), as a normalized percent.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - payout_ratio: float | None = Field( - default=None, - description="Payout ratio, as a normalized percent.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - dividend_yield: float | None = Field( - default=None, - description="Dividend yield, as a normalized percent.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - - -class FinvizKeyMetricsFetcher( - Fetcher[FinvizKeyMetricsQueryParams, list[FinvizKeyMetricsData]] -): - """Finviz Key Metrics Fetcher.""" - - @staticmethod - def transform_query(params: dict[str, Any]) -> FinvizKeyMetricsQueryParams: - """Transform the query params.""" - return FinvizKeyMetricsQueryParams(**params) - - @staticmethod - def extract_data( - query: FinvizKeyMetricsQueryParams, - credentials: dict[str, str] | None, - **kwargs: Any, - ) -> list[dict]: - """Extract the raw data from Finviz.""" - # pylint: disable=import-outside-toplevel - from finvizfinance import util - from finvizfinance.quote import finvizfinance - from openbb_core.app.model.abstract.error import OpenBBError - from openbb_core.provider.utils.errors import EmptyDataError - from openbb_core.provider.utils.helpers import get_requests_session - - results: list = [] - messages: list = [] - util.session = get_requests_session() - - def get_one(symbol) -> dict: - """Get the data for one symbol.""" - result: dict = {} - try: - data = finvizfinance(symbol) - fundament = data.ticker_fundament() - mkt_cap = ( - fundament.get("Market Cap", None) - if fundament.get("Market Cap", "-") != "-" - else None - ) - if mkt_cap: - mkt_cap = float( - str(mkt_cap) - .replace("B", "e+9") - .replace("M", "e+6") - .replace("K", "e+3") - ) - except Exception as e: # pylint: disable=W0718 - warn(f"Failed to get data for {symbol} -> {e}") - return result - result.update( - { - "symbol": symbol, - "market_cap": int(mkt_cap) if mkt_cap is not None else None, - "pe_ratio": ( - fundament.get("P/E", None) - if fundament.get("P/E", "-") != "-" - else None - ), - "eps": ( - fundament.get("EPS (ttm)", None) - if fundament.get("EPS (ttm)", "-") != "-" - else None - ), - "forward_pe": ( - fundament.get("Forward P/E", None) - if fundament.get("Forward P/E", "-") != "-" - else None - ), - "price_to_sales": ( - fundament.get("P/S", None) - if fundament.get("P/S", "-") != "-" - else None - ), - "price_to_book": ( - fundament.get("P/B", None) - if fundament.get("P/B", "-") != "-" - else None - ), - "book_value_per_share": ( - fundament.get("Book/sh", None) - if fundament.get("Book/sh", "-") != "-" - else None - ), - "price_to_cash": ( - fundament.get("P/C", None) - if fundament.get("P/C", "-") != "-" - else None - ), - "cash_per_share": ( - fundament.get("Cash/sh", None) - if fundament.get("Cash/sh", "-") != "-" - else None - ), - "price_to_free_cash_flow": ( - fundament.get("P/FCF", None) - if fundament.get("P/FCF", "-") != "-" - else None - ), - "debt_to_equity": ( - fundament.get("Debt/Eq", None) - if fundament.get("Debt/Eq", "-") != "-" - else None - ), - "long_term_debt_to_equity": ( - fundament.get("LT Debt/Eq", None) - if fundament.get("LT Debt/Eq", "-") != "-" - else None - ), - "quick_ratio": ( - fundament.get("Quick Ratio", None) - if fundament.get("Quick Ratio", "-") != "-" - else None - ), - "current_ratio": ( - fundament.get("Current Ratio", None) - if fundament.get("Current Ratio", "-") != "-" - else None - ), - "gross_margin": ( - float(str(fundament.get("Gross Margin", None)).replace("%", "")) - / 100 - if fundament.get("Gross Margin", "-") != "-" - else None - ), - "profit_margin": ( - float( - str(fundament.get("Profit Margin", None)).replace("%", "") - ) - / 100 - if fundament.get("Profit Margin", "-") != "-" - else None - ), - "operating_margin": ( - float(str(fundament.get("Oper. Margin", None)).replace("%", "")) - / 100 - if fundament.get("Oper. Margin", "-") != "-" - else None - ), - "return_on_assets": ( - float(str(fundament.get("ROA", None)).replace("%", "")) / 100 - if fundament.get("ROA", "-") != "-" - else None - ), - "return_on_investment": ( - float(str(fundament.get("ROI", None)).replace("%", "")) / 100 - if fundament.get("ROI", "-") != "-" - else None - ), - "return_on_equity": ( - float(str(fundament.get("ROE", None)).replace("%", "")) / 100 - if fundament.get("ROE", "-") != "-" - else None - ), - "payout_ratio": ( - float(str(fundament.get("Payout", None)).replace("%", "")) / 100 - if fundament.get("Payout", "-") != "-" - else None - ), - "dividend_yield": ( - float(str(fundament.get("Dividend %", None)).replace("%", "")) - / 100 - if fundament.get("Dividend %", "-") != "-" - else None - ), - } - ) - - return result - - symbols = query.symbol.split(",") - - for symbol in symbols: - result = get_one(symbol) - if result is not None and result: - results.append(result) - - if not results and messages: - raise OpenBBError("\n".join(messages)) - - if not results and not messages: - raise EmptyDataError("No data was returned for any symbol") - - if results and messages: - for message in messages: - warn(message) - - return results - - @staticmethod - def transform_data( - query: FinvizKeyMetricsQueryParams, - data: list[dict], - **kwargs: Any, - ) -> list[FinvizKeyMetricsData]: - """Transform and validate the raw data.""" - return [FinvizKeyMetricsData.model_validate(d) for d in data] diff --git a/openbb_platform/providers/finviz/openbb_finviz/models/price_performance.py b/openbb_platform/providers/finviz/openbb_finviz/models/price_performance.py deleted file mode 100644 index 586d89d1cbf..00000000000 --- a/openbb_platform/providers/finviz/openbb_finviz/models/price_performance.py +++ /dev/null @@ -1,136 +0,0 @@ -"""Finviz Price Performance Model.""" - -# pylint: disable=unused-argument -from typing import Any -from warnings import warn - -from openbb_core.provider.abstract.fetcher import Fetcher -from openbb_core.provider.standard_models.recent_performance import ( - RecentPerformanceData, - RecentPerformanceQueryParams, -) -from openbb_core.provider.utils.errors import EmptyDataError -from pydantic import Field - - -class FinvizPricePerformanceQueryParams(RecentPerformanceQueryParams): - """ - Finviz Price Performance Query. - - Source: https://finviz.com/screener.ashx - """ - - __json_schema_extra__ = {"symbol": {"multiple_items_allowed": True}} - - -class FinvizPricePerformanceData(RecentPerformanceData): - """Finviz Price Performance Data.""" - - __alias_dict__ = { - "symbol": "Ticker", - "one_week": "Perf Week", - "one_month": "Perf Month", - "three_month": "Perf Quart", - "six_month": "Perf Half", - "one_year": "Perf Year", - "ytd": "Perf YTD", - "volatility_week": "Volatility W", - "volatility_month": "Volatility M", - "price": "Price", - "one_day": "Change", - "volume": "Volume", - "average_volume": "Avg Volume", - "relative_volume": "Rel Volume", - "analyst_score": "Recom", - } - - volatility_week: float | None = Field( - default=None, - description="One-week realized volatility, as a normalized percent.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - volatility_month: float | None = Field( - default=None, - description="One-month realized volatility, as a normalized percent.", - json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100}, - ) - price: float | None = Field( - default=None, - description="Last Price.", - ) - volume: float | None = Field( - default=None, - description="Current volume.", - ) - average_volume: float | None = Field( - default=None, - description="Average daily volume.", - ) - relative_volume: float | None = Field( - default=None, - description="Relative volume as a ratio of current volume to average volume.", - ) - analyst_recommendation: float | None = Field( - default=None, - description="The analyst consensus, on a scale of 1-5 where 1 is a buy and 5 is a sell.", - ) - symbol: str | None = Field( - default=None, - description="The ticker symbol.", - ) - - -class FinvizPricePerformanceFetcher( - Fetcher[FinvizPricePerformanceQueryParams, list[FinvizPricePerformanceData]] -): - """Finviz Price Performance Fetcher.""" - - @staticmethod - def transform_query(params: dict[str, Any]) -> FinvizPricePerformanceQueryParams: - """Transform the query params.""" - return FinvizPricePerformanceQueryParams(**params) - - @staticmethod - def extract_data( - query: FinvizPricePerformanceQueryParams, - credentials: dict[str, str] | None, - **kwargs: Any, - ) -> list[dict]: - """Extract the raw data from Finviz.""" - # pylint: disable=import-outside-toplevel - from finvizfinance import util - from finvizfinance.screener import performance - from openbb_core.provider.utils.helpers import get_requests_session - - util.session = get_requests_session() - screen = performance.Performance() - screen.set_filter(ticker=query.symbol) - try: - screen_df = screen.screener_view(verbose=0) - if screen_df is None: - raise EmptyDataError() - screen_df.columns = screen_df.columns.str.strip() # type: ignore - screen_df = screen_df.fillna("N/A").replace("N/A", None) # type: ignore - except Exception as e: - raise e from e - - symbols = query.symbol.split(",") - - # Check for missing symbols and warn of the missing symbols. - for symbol in symbols: - if symbol not in screen_df["Ticker"].tolist(): - warn(f"Symbol Error: {symbol} was not found.") - - return sorted( - screen_df.to_dict(orient="records"), - key=(lambda item: (symbols.index(item.get("Ticker", len(symbols))))), - ) - - @staticmethod - def transform_data( - query: FinvizPricePerformanceQueryParams, - data: list[dict], - **kwargs: Any, - ) -> list[FinvizPricePerformanceData]: - """Transform the raw data.""" - return [FinvizPricePerformanceData.model_validate(d) for d in data] diff --git a/openbb_platform/providers/finviz/openbb_finviz/models/price_target.py b/openbb_platform/providers/finviz/openbb_finviz/models/price_target.py deleted file mode 100644 index 2111f7674bc..00000000000 --- a/openbb_platform/providers/finviz/openbb_finviz/models/price_target.py +++ /dev/null @@ -1,134 +0,0 @@ -"""Finviz Price Target Model.""" - -# pylint: disable=unused-argument - -from typing import Any - -from openbb_core.provider.abstract.fetcher import Fetcher -from openbb_core.provider.standard_models.price_target import ( - PriceTargetData, - PriceTargetQueryParams, -) -from pydantic import Field - - -class FinvizPriceTargetQueryParams(PriceTargetQueryParams): - """Finviz Price Target Query. - - Source: https://finviz.com/quote.ashx? - """ - - __json_schema_extra__ = {"symbol": {"multiple_items_allowed": True}} - - -class FinvizPriceTargetData(PriceTargetData): - """Finviz Price Target Data.""" - - __alias_dict__ = { - "published_date": "Date", - "status": "Status", - "analyst_company": "Outer", - "rating_change": "Rating", - } - - status: str | None = Field( - default=None, - description="The action taken by the firm." - + " This could be 'Upgrade', 'Downgrade', 'Reiterated', etc.", - ) - rating_change: str | None = Field( - default=None, - description="The rating given by the analyst." - + " This could be 'Buy', 'Sell', 'Underweight', etc." - + " If the rating is a revision, the change is indicated by '->'", - ) - - -class FinvizPriceTargetFetcher( - Fetcher[FinvizPriceTargetQueryParams, list[FinvizPriceTargetData]] -): - """Finviz Price Target Fetcher.""" - - @staticmethod - def transform_query(params: dict[str, Any]) -> FinvizPriceTargetQueryParams: - """Transform the query params.""" - return FinvizPriceTargetQueryParams(**params) - - @staticmethod - def extract_data( - query: FinvizPriceTargetQueryParams, - credentials: dict[str, str] | None, - **kwargs: Any, - ) -> list[dict]: - """Return the raw data from the Finviz endpoint.""" - # pylint: disable=import-outside-toplevel - from finvizfinance import util # noqa - from finvizfinance.quote import finvizfinance - from openbb_core.app.model.abstract.error import OpenBBError - from openbb_core.provider.utils.errors import EmptyDataError - from openbb_core.provider.utils.helpers import get_requests_session - from pandas import DataFrame - from warnings import warn - - results: list[dict] = [] - util.session = get_requests_session() - messages: list = [] - - def get_one(symbol) -> list[dict]: - """Get the data for one symbol.""" - price_targets = DataFrame() - result: list[dict] = [] - try: - data = finvizfinance(symbol) - price_targets = data.ticker_outer_ratings() - if price_targets is None or len(price_targets) == 0: - messages.append(f"Failed to get data for {symbol}") - return result - price_targets["symbol"] = symbol - prices = ( - price_targets["Price"].astype(str).str.replace("$", "", regex=False) - ) - price_targets["price_target"] = ( - prices.str.split("→").str.get(0).str.strip() - ) - price_targets["adj_price_target"] = ( - prices.str.split("→").str.get(-1).str.strip() - ) - price_targets.loc[ - price_targets["adj_price_target"] == price_targets["price_target"], - "price_target", - ] = None - price_targets = price_targets.replace("", None).drop(columns="Price") - except Exception as e: # pylint: disable=W0718 - messages.append(f"Failed to get data for {symbol} -> {e}") - return result - result = price_targets.to_dict(orient="records") - return result - - symbols = query.symbol.split(",") if query.symbol else [] - - for symbol in symbols: - result = get_one(symbol) - if result: - results.extend(result) - - if not results and messages: - raise OpenBBError("\n".join(messages)) - - if not results and not messages: - raise EmptyDataError("No data was returned for any symbol") - - if results and messages: - for message in messages: - warn(message) - - return results - - @staticmethod - def transform_data( - query: FinvizPriceTargetQueryParams, - data: list[dict], - **kwargs: Any, - ) -> list[FinvizPriceTargetData]: - """Transform and validate the raw data.""" - return [FinvizPriceTargetData.model_validate(d) for d in data] diff --git a/openbb_platform/providers/finviz/openbb_finviz/models/py.typed b/openbb_platform/providers/finviz/openbb_finviz/models/py.typed deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/openbb_platform/providers/finviz/openbb_finviz/py.typed b/openbb_platform/providers/finviz/openbb_finviz/py.typed deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/openbb_platform/providers/finviz/openbb_finviz/utils/__init__.py b/openbb_platform/providers/finviz/openbb_finviz/utils/__init__.py deleted file mode 100644 index e5a38b98d21..00000000000 --- a/openbb_platform/providers/finviz/openbb_finviz/utils/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""Finviz provider utils.""" diff --git a/openbb_platform/providers/finviz/openbb_finviz/utils/definitions.py b/openbb_platform/providers/finviz/openbb_finviz/utils/definitions.py deleted file mode 100644 index b5555dae85f..00000000000 --- a/openbb_platform/providers/finviz/openbb_finviz/utils/definitions.py +++ /dev/null @@ -1,45 +0,0 @@ -"""Finviz Definitions.""" - -from typing import Literal - -GROUPS = Literal[ - "sector", - "industry", - "country", - "capitalization", - "energy", - "materials", - "industrials", - "consumer_cyclical", - "consumer_defensive", - "healthcare", - "financial", - "technology", - "communication_services", - "utilities", - "real_estate", -] - -GROUPS_DICT = { - "sector": "Sector", - "industry": "Industry", - "country": "Country (U.S. listed stocks only)", - "capitalization": "Capitalization", - "energy": "Industry (Energy)", - "materials": "Industry (Basic Materials)", - "industrials": "Industry (Industrials)", - "consumer_cyclical": "Industry (Consumer Cyclical)", - "consumer_defensive": "Industry (Consumer Defensive)", - "healthcare": "Industry (Healthcare)", - "financial": "Industry (Financial)", - "technology": "Industry (Technology)", - "communication_services": "Industry (Communication Services)", - "utilities": "Industry (Utilities)", - "real_estate": "Industry (Real Estate)", -} - -METRICS = Literal[ - "performance", - "valuation", - "overview", -] diff --git a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/__init__.py b/openbb_platform/providers/finviz/openbb_finviz/utils/presets/__init__.py deleted file mode 100644 index ab1edf111b5..00000000000 --- a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""Finviz Screener Presets.""" diff --git a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/all_stocks.ini b/openbb_platform/providers/finviz/openbb_finviz/utils/presets/all_stocks.ini deleted file mode 100644 index aa935e57326..00000000000 --- a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/all_stocks.ini +++ /dev/null @@ -1,12 +0,0 @@ -# Author of preset: OpenBB -# Description: All stocks available from Finviz, with no filters. This preset will take a couple of minutes to execute, and may not be useful for most users. - -[General] - -Order = Market Cap. - -[Descriptive] - -[Fundamental] - -[Technical] diff --git a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/analyst_strong_buy.ini b/openbb_platform/providers/finviz/openbb_finviz/utils/presets/analyst_strong_buy.ini deleted file mode 100644 index b3220f2a66c..00000000000 --- a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/analyst_strong_buy.ini +++ /dev/null @@ -1,17 +0,0 @@ -# Author of preset: JohnnyDankseed -# Description: Analyst Strong Buy - -[General] - -Order = Change -Signal = Top Gainers - -[Descriptive] -Analyst Recom. = Strong Buy (1) - -[Fundamental] -Debt/Equity = Under 0.6 - -[Technical] -50-Day Simple Moving Average = Price above SMA50 -200-Day Simple Moving Average = Price above SMA200 diff --git a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/buffet_like.ini b/openbb_platform/providers/finviz/openbb_finviz/utils/presets/buffet_like.ini deleted file mode 100644 index 6b06052985b..00000000000 --- a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/buffet_like.ini +++ /dev/null @@ -1,18 +0,0 @@ -# Author of preset: Traceabl3 -# Description: Buffet like value screener (Value invsting for long term growth) - -[General] - -[Descriptive] -Market Cap. = +Mid (over $2bln) -Dividend Yield = Positive (>0%) - -[Fundamental] -EPS growthnext 5 years = Positive (>0%) -Debt/Equity = Under 0.5 -Price/Free Cash Flow = Under 50 -Sales growthpast 5 years = Positive (>0%) -Return on Investment = Over +15% -P/B = Under 3 - -[Technical] \ No newline at end of file diff --git a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/bull_runs_over_10pct.ini b/openbb_platform/providers/finviz/openbb_finviz/utils/presets/bull_runs_over_10pct.ini deleted file mode 100644 index 85f8d2fcfd1..00000000000 --- a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/bull_runs_over_10pct.ini +++ /dev/null @@ -1,13 +0,0 @@ -# Author of preset: OpenBB -# Description: Bull runs over 10% - -[General] -Order = Change -Signal = Top Gainers - -[Descriptive] - -[Fundamental] - -[Technical] -Performance = Today +10% \ No newline at end of file diff --git a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/canslim.ini b/openbb_platform/providers/finviz/openbb_finviz/utils/presets/canslim.ini deleted file mode 100644 index aece03f2f4e..00000000000 --- a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/canslim.ini +++ /dev/null @@ -1,28 +0,0 @@ -# Author of preset: mmistroni@gmail.com -# Description: Canslim stocks are ones that are likely to explode , cfr https://en.wikipedia.org/wiki/CAN_SLIM -# Params picked from https://medium.com/the-investors-handbook/the-best-finviz-screens-for-growth-investors-72795f507b91 -# This config add some extra filters to make the list more robust - -[General] - -Order = Market Cap. - -[Descriptive] -Average Volume = Over 200K -Float = Under 50M - -[Fundamental] -EPS growththis year = Over 20% -EPS growthnext year = Over 20% -EPS growthqtr over qtr = Over 20% -Sales growthqtr over qtr = Over 20% -EPS growthpast 5 years = Over 20% -Gross Margin = Positive (>0%) -Return on Equity = Positive (>0%) -InstitutionalOwnership = Over 20% - -[Technical] -20-Day Simple Moving Average = Price above SMA20 -50-Day Simple Moving Average = Price above SMA50 -200-Day Simple Moving Average = Price above SMA200 -52-Week High/Low = 0-10% below High \ No newline at end of file diff --git a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/cheap_dividend.ini b/openbb_platform/providers/finviz/openbb_finviz/utils/presets/cheap_dividend.ini deleted file mode 100644 index ee2835209f7..00000000000 --- a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/cheap_dividend.ini +++ /dev/null @@ -1,14 +0,0 @@ -# Author of preset: Traceabl3 -# Description: Cheap dividend stocks - -[General] -Signal = Oversold - -[Descriptive] -Dividend Yield = Over 1% - -[Fundamental] -P/E = Under 15 -P/B = Under 1 - -[Technical] \ No newline at end of file diff --git a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/cheap_oversold.ini b/openbb_platform/providers/finviz/openbb_finviz/utils/presets/cheap_oversold.ini deleted file mode 100644 index 8eab824c36b..00000000000 --- a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/cheap_oversold.ini +++ /dev/null @@ -1,12 +0,0 @@ -# Author of preset: Traceabl3 -# Description: Cheap stonks that are oversold: under 10% above the low, and oversold on the RSI. - -[General] - -[Descriptive] - -[Fundamental] - -[Technical] -52-Week High/Low = 0-10% above Low -RSI (14) = Oversold (20) \ No newline at end of file diff --git a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/continued_momentum.ini b/openbb_platform/providers/finviz/openbb_finviz/utils/presets/continued_momentum.ini deleted file mode 100644 index af73a8ecfc1..00000000000 --- a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/continued_momentum.ini +++ /dev/null @@ -1,20 +0,0 @@ -# Author of preset: JohnnyDankseed -# Description: Continued Momentum Scan - -[General] -Order = Change -Signal = Top Gainers - -[Descriptive] -Market Cap. = -Mid (under $10bln) -Average Volume = Over 50K -Relative Volume = Over 2 -Current Volume = Over 1M -Price = Under $30 - -[Fundamental] - -[Technical] - -Beta = Over 1 -Volatility = Week - Over 3% \ No newline at end of file diff --git a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/death_cross.ini b/openbb_platform/providers/finviz/openbb_finviz/utils/presets/death_cross.ini deleted file mode 100644 index c57cefb7e5b..00000000000 --- a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/death_cross.ini +++ /dev/null @@ -1,11 +0,0 @@ -# Author of preset: Traceabl3 -# Description: When the 50 sma crosses below the 200 sma. More information can be found in https://www.investopedia.com/terms/d/deathcross.asp - -[General] - -[Descriptive] - -[Fundamental] - -[Technical] -200-Day Simple Moving Average = SMA200 crossed SMA50 above \ No newline at end of file diff --git a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/fastgrowths.ini b/openbb_platform/providers/finviz/openbb_finviz/utils/presets/fastgrowths.ini deleted file mode 100644 index ec1053e7efd..00000000000 --- a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/fastgrowths.ini +++ /dev/null @@ -1,23 +0,0 @@ -# Author of preset: mmistroni@gmail.com -# Description: Fastest growth watch list. Again, from Medium article https://medium.com/the-investors-handbook/the-best-finviz-screens-for-growth-investors-72795f507b91 -# -[General] -Order = Market Cap. - -[Descriptive] -Market Cap. = +Mid (over $2bln) -Average Volume = Over 200K -Price = Over $10 -[Fundamental] -EPS growththis year = Over 20% -EPS growthnext year = Over 20% -EPS growthqtr over qtr = Over 20% -Sales growthqtr over qtr = Over 20% -Return on Equity = Over +20% -Gross Margin = Over 20% - -[Technical] -20-Day Simple Moving Average = Price above SMA20 -50-Day Simple Moving Average = Price above SMA50 -200-Day Simple Moving Average = Price above SMA200 - diff --git a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/golden_cross.ini b/openbb_platform/providers/finviz/openbb_finviz/utils/presets/golden_cross.ini deleted file mode 100644 index 8fb05cd1c1c..00000000000 --- a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/golden_cross.ini +++ /dev/null @@ -1,11 +0,0 @@ -# Author of preset: Traceabl3 -# Description: Golden Cross when the 50 day moves above the200 day from below. - -[General] - -[Descriptive] - -[Fundamental] - -[Technical] -50-Day Simple Moving Average = SMA50 crossed SMA200 above \ No newline at end of file diff --git a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/growth_stocks.ini b/openbb_platform/providers/finviz/openbb_finviz/utils/presets/growth_stocks.ini deleted file mode 100644 index c9ef7f28e3a..00000000000 --- a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/growth_stocks.ini +++ /dev/null @@ -1,24 +0,0 @@ -# Author of preset: JohnnyDankseed -# Description: Growth Stocks - -[General] -Order = PEG (Price/Earnings/Growth) -Signal = Top Gainers - -[Descriptive] -Market Cap. = +Micro (over $50mln) -Average Volume = Over 300K -Country = USA -Price = Over $10 - -[Fundamental] -EPS growthnext 5 years = Over 15% -Debt/Equity = Under 0.5 -PEG = Under 2 -EPS growththis year = Over 15% -EPS growthqtr over qtr = Over 15% -EPS growthpast 5 years = Over 15% - -[Technical] -20-Day Simple Moving Average = SMA20 above SMA200 -50-Day Simple Moving Average = SMA50 above SMA200 \ No newline at end of file diff --git a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/heavy_inst_ins.ini b/openbb_platform/providers/finviz/openbb_finviz/utils/presets/heavy_inst_ins.ini deleted file mode 100644 index 07f9b9a8dfd..00000000000 --- a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/heavy_inst_ins.ini +++ /dev/null @@ -1,15 +0,0 @@ -# Author of preset: Traceabl3 -# Description: Heavily owned by institutions and insiders (>30% each) - -[General] - -[Descriptive] -Analyst Recom. = Hold or better - -[Fundamental] -InsiderOwnership = High (>30%) -InsiderTransactions = Positive (>0%) -PEG = Under 1 -InstitutionalOwnership = Over 30% - -[Technical] \ No newline at end of file diff --git a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/large_cap_rsi20.ini b/openbb_platform/providers/finviz/openbb_finviz/utils/presets/large_cap_rsi20.ini deleted file mode 100644 index 605b49e6703..00000000000 --- a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/large_cap_rsi20.ini +++ /dev/null @@ -1,17 +0,0 @@ -# Author of preset: OpenBB -# Description: Large caps with RSI under 20 - -[General] - -Order = Relative Strength Index (14) -Ascend = true - -[Descriptive] - -Market Cap. = +Large (over $10bln) - -[Fundamental] - -[Technical] - -RSI (14) = Oversold (20) diff --git a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/large_cap_rsi80.ini b/openbb_platform/providers/finviz/openbb_finviz/utils/presets/large_cap_rsi80.ini deleted file mode 100755 index 95b6b4d4cf5..00000000000 --- a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/large_cap_rsi80.ini +++ /dev/null @@ -1,17 +0,0 @@ -# Author of preset: OpenBB -# Description: Large caps with RSI over 80 - -[General] - -Order = Relative Strength Index (14) -Ascend = false - -[Descriptive] - -Market Cap. = +Large (over $10bln) - -[Fundamental] - -[Technical] - -RSI (14) = Overbought (80) diff --git a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/modified_dreman.ini b/openbb_platform/providers/finviz/openbb_finviz/utils/presets/modified_dreman.ini deleted file mode 100644 index 81b77de635d..00000000000 --- a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/modified_dreman.ini +++ /dev/null @@ -1,17 +0,0 @@ -# Author of preset: Traceabl3 -# Description: Modified Version of the Dreman Screener. - -[General] - -Order = Dividend Yield - -[Descriptive] -Dividend Yield = Over 1% - -[Fundamental] -P/E = Under 20 -EPS growthnext 5 years = Positive Low (<10%) -Sales growthpast 5 years = Positive Low (0-10%) -EPS growththis year = Positive Low (0-10%) - -[Technical] \ No newline at end of file diff --git a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/modified_neff.ini b/openbb_platform/providers/finviz/openbb_finviz/utils/presets/modified_neff.ini deleted file mode 100644 index d634484b825..00000000000 --- a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/modified_neff.ini +++ /dev/null @@ -1,16 +0,0 @@ -# Author of preset: Traceabl3 -# Description: Neff Screener with modifications // operational margin <50%. More information can be found in https://marketxls.com/template/neff-screen/ - -[General] - -Order = Sales growth past 5 years - -[Descriptive] - -[Fundamental] -Sales growthpast 5 years = Under 20% -PEG = Under 2 -EPS growththis year = Under 20% -Operating Margin = Under 50% - -[Technical] \ No newline at end of file diff --git a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/newhigh.ini b/openbb_platform/providers/finviz/openbb_finviz/utils/presets/newhigh.ini deleted file mode 100644 index 0053166f2c6..00000000000 --- a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/newhigh.ini +++ /dev/null @@ -1,28 +0,0 @@ -# Author of preset: mmistroni@gmail.com -# Description: Custom filters for new highs. Copied from an interesting Medium article -# https://medium.com/the-investors-handbook/the-best-finviz-screens-for-growth-investors-72795f507b91 - -[General] - -Order = Market Cap. - -[Descriptive] -Market Cap. = +Small (over $300mln) -Average Volume = Over 200K -Relative Volume = Over 1 -Price = Over $10 -[Fundamental] -EPS growththis year = Positive (>0%) -EPS growthnext year = Positive (>0%) -EPS growthqtr over qtr = Positive (>0%) -Sales growthqtr over qtr = Positive (>0%) -Return on Equity = Positive (>0%) -[Technical] -Performance = Today Up -20-Day Simple Moving Average = Price above SMA20 -50-Day Simple Moving Average = Price above SMA50 -200-Day Simple Moving Average = Price above SMA200 -Change = Up -Change from Open = Up -52-Week High/Low = New High - diff --git a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/profitable_low_price_sales.ini b/openbb_platform/providers/finviz/openbb_finviz/utils/presets/profitable_low_price_sales.ini deleted file mode 100644 index 4e96fa92580..00000000000 --- a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/profitable_low_price_sales.ini +++ /dev/null @@ -1,21 +0,0 @@ -# Author of preset: OpenBB -# Description: Profitable companies with high sales growth, low P/S, and decent trading volume. - -[General] - -Order = Price/Sales -Ascend = true - -[Descriptive] - -Market Cap. = +Mid (over $2bln) -Average Volume = Over 1M - -[Fundamental] - -P/S = Under 10 -Sales growthqtr over qtr = High (>25%) -Sales growthpast 5 years = Over 30% -Net Profit Margin = Positive (>0%) - -[Technical] diff --git a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/recent_growth_support.ini b/openbb_platform/providers/finviz/openbb_finviz/utils/presets/recent_growth_support.ini deleted file mode 100644 index 9f57f32fe86..00000000000 --- a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/recent_growth_support.ini +++ /dev/null @@ -1,19 +0,0 @@ -# Author of preset: OpenBB -# Description: Recent Growth, Support - -[General] -Order = 200-Day SMA (Relative) -Signal = Top Gainers -Ascend = false - -[Descriptive] -Average Volume = Over 500K -Country = USA -Price = Over $10 - -[Fundamental] - -[Technical] -Performance = Quarter +20% -Performance 2 = Month +10% -Pattern = TL Support \ No newline at end of file diff --git a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/screener_template.ini b/openbb_platform/providers/finviz/openbb_finviz/utils/presets/screener_template.ini deleted file mode 100644 index 5e9092479e7..00000000000 --- a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/screener_template.ini +++ /dev/null @@ -1,353 +0,0 @@ -# Author of preset: OpenBBTerminal (https://github.com/OpenBB-finance/OpenBB) -# Description: Template with all available filters, with choices for each. -# More information can be found in https://finviz.com/help/screener.ashx -# and https://finviz.com/help/technical-analysis/charts-patterns.ashx - -# To use this template, place the file in your OpenBBUserData folder, `~/OpenBBUserData/presets/finviz` and then launch the program. -# Uncomment (remomve the "#") the lines below, containing,"=", corresponding with the filter you want to use. -# Valid choices for each filter are listed directly above the corresponding line to un-comment, i.e. "Order = Ticker". -# It is recommended to modify filters one-at-a-time. -# Presets are loaded on runtime, there is no need to restart the program after modifying a file. -# This file must be renamed in order to use it. - -[General] -# Ticker, Company, Sector, Industry, Country, Market Cap., Price/Earnings, Forward Price/Earnings, PEG (Price/Earnings/Growth), Price/Sales, Price/Book, Price/Cash, Price/Free Cash Flow, Dividend Yield, Payout Ratio, EPS (ttm), EPS growth this year, EPS growth next year, EPS growth past 5 years, EPS growth next 5 years, Sales growth past 5 years, EPS growth qtr over qtr, Sales growth qtr over qtr, Shares Outstanding, Shares Float, Insider Ownership, Insider Transactions, Institutional Ownership, Institutional Transactions, Short Interest Share, Short Interest Ratio, Earnings Date, Return on Assets, Return on Equity, Return on Investment, Current Ratio, Quick Ratio, LT Debt/Equity, Total Debt/Equity, Gross Margin, Operating Margin, Net Profit Margin, Analyst Recommendation, Performance (Week), Performance (Month), Performance (Quarter), Performance (Half Year), Performance (Year), Performance (Year To Date), Beta, Average True Range, Volatility (Week), Volatility (Month), 20-Day SMA (Relative), 50-Day SMA (Relative), 200-Day SMA (Relative), 50-Day High (Relative), 50-Day Low (Relative), 52-Week High (Relative), 52-Week Low (Relative), Relative Strength Index (14), Average Volume (3 Month), Relative Volume, Change, Change from Open, Gap, Volume, Price, Target Price, IPO Date - -#Order = Ticker - - -# true, false - -#Ascend = false - -# None (all stocks), Top Gainers, Top Losers, New High, New Low, Most Volatile, Most Active, Unusual Volume, Overbought, Oversold, Downgrades, Upgrades, Earnings Before, Earnings After, Recent Insider Buying, Recent Insider Selling, Major News, Horizontal S/R, TL Resistance, TL Support, Wedge Up, Wedge Down, Triangle Ascending, Triangle Descending, Wedge, Channel Up, Channel Down, Channel, Double Top, Double Bottom, Multiple Top, Multiple Bottom, Head & Shoulders, Head & Shoulders Inverse - -#Signal = Top Gainers - - -[Descriptive] -# Any, AMEX, NASDAQ, NYSE - -#Exchange = NASDAQ - - -# Any, Mega ($200bln and more), Large ($10bln to $200bln), Mid ($2bl to $10bln), Small ($300mln to $2bln), Micro ($50mln to $300mln), Nano (under $50mln), +Large (over $10bln), +Mid (over $2bln), +Small (over $300mln), +Micro (over $50mln), -Large (under $200bln), -Mid (under $10bln), -Small (under $2bln), -Micro (under $300mln) - -#Market Cap. = Large ($10bln to $200bln) - - -# Any, Today, Today Before Market Open, Today Before Market Close, Tomorrow, Tomorrow Before Market Open, Tomorrow Before Market Close, Yesterday, Yesterday Before Market Open, Yesterday Before Market Close, Next 5 Days, Previous 5 Days, This Week, Next Week, Previous Week, This Month - -#Earnings Date = Any - - -# Any, 50% Above Price, 40% Above Price, 30% Above Price, 20% Above Price, 10% Above Price, 5% Above Price, Above Price, Below Price, 5% Below Price, 10% Below Price, 20% Below Price, 30% Below Price, 40% Below Price, 50% Below Price - -#Target Price = Any - - -# Any, S&P 500, DJIA - -#Index = Any - - -# Any, None (0%), Positive (>0%), High (>5%), Very High (>10%), Over 1%, Over 2%, Over 3%, Over 4%, Over 5%, Over 6%, Over 7%, Over 8%, Over 9%, Over 10% - -#Dividend Yield = Over 5% - - -# Any, Under 50K, Under 100K, Under 500K, Under 750K, Under 1M, Over 50K, Over 100K, Over 300K, Over 400K, Over 500K, Over 750K, Over 1M, Over 2M, 100K to 500K, 100K to 1M, 500K to 1M, 500K to 10M - -#Average Volume = Over 1M - - -# Any, Today, Yesterday, In the last week, In the last month, In the last quarter, In the last year, In the last 2 years, In the last 3 years, In the last 5 years, More than a year ago, More that 5 years ago, More than 10 years ago, More than 15 years ago, More than 20 years ago, More than 25 years ago - -#IPO Date = Any - - -# Any, Basic Materials, Communication Services, Consumer Cyclical, Consumer Defensive, Energy, Financial, Healthcare, Industrials, Real Estate, Technology, Utilities - -#Sector = Technology - - -# Any, Low (<5%), High (>20%), Under 5%, Under 10%, Under 15%, Under 20%, Under 25%, Under 30%, Over 5%, Over 10%, Over 15%, Over 20%, Over 25%, Over 30% - -#Float Short = Any - - -# Any, Over 10, Over 5, Over 3, Over 2, Over 1.5, Over 1, Over 0.75, Over 0.5, Over 0.25, Under 2, Under 1, Under 1.5, Under 1, Under 0.75, Under 0.5, Under 0.25, Under 0.1 - -#Relative Volume = Over 1.5 - - -# Any, Under 1M, Under 5M, Under 10M, Under 20M, Under 50M, Under 100M, Over 1M, Over 2M, Over 5M, Over 10M, Over 20M, Over 50M, Over 100M, Over 200M, Over 500M, Over 1000M - -#Shares Outstanding = Any - - -# Any, Stocks only (ex-Funds), Exchange Traded Fund, Advertising Agencies, Aerospace & Defense, Agricultural Inputs, Airlines, Airports & Air Services, Aluminum, Apparel Manufacturing, Apparel Retail, Asset Management, Auto Manufacturers, Auto Parts, Auto & Truck Dealerships, Banks - Diversified, Banks - Regional, Beverages - Brewers, Beverages - Non-Alcoholic, Beverages - Wineries & Distilleries, Biotechnology, Broadcasting, Building Materials, Building Products & Equipment, Business Equipment & Supplies, Capital Markets, Chemicals, Closed-End Fund - Debt, Closed-End Fund - Equity, Closed-End Fund - Foreign, Coking Coal, Communication Equipment, Computer Hardware, Confectioners, Conglomerates, Consulting Services, Consumer Electronics, Copper, Credit Services, Department Stores, Diagnostics & Research, Discount Stores, Drug Manufacturers - General, Drug Manufacturers - Specialty & Generic, Education & Training Services, Electrical Equipment & Parts, Electronic Components, Electronic Gaming & Multimedia, Electronics & Computer Distribution, Engineering & Construction, Entertainment, Farm & Heavy Construction Machinery, Farm Products, Financial Conglomerates, Financial Data & Stock Exchanges, Food Distribution, Footwear & Accessories, Furnishings, Fixtures & Appliances, Gambling, Gold, Grocery Stores, Healthcare Plans, Health Information Services, Home Improvement Retail, Household & Personal Products, Industrial Distribution, Information Technology Services, Infrastructure Operations, Insurance Brokers, Insurance - Diversified, Insurance - Life, Insurance - Property & Casualty, Insurance - Reinsurance, Insurance - Specialty, Integrated Freight & Logistics, Internet Content & Information, Internet Retail, Leisure, Lodging, Lumber & Wood Production, Luxury Goods, Marine Shipping, Medical Care Facilities, Medical Devices, Medical Distribution, Medical Instruments & Supplies, Metal Fabrication, Mortgage Finance, Oil & Gas Drilling, Oil & Gas E&P, Oil & Gas Equipment & Services, Oil & Gas Integrated, Oil & Gas Midstream, Oil & Gas Refining & Marketing, Other Industrial Metals & Mining, Other Precious Metals & Mining, Packaged Foods, Packaging & Containers, Paper & Paper Products, Personal Services, Pharmaceutical Retailers, Pollution & Treatment Controls, Publishing, Railroads, Real Estate - Development, Real Estate - Diversified, Real Estate Services, Recreational Vehicles, REIT - Diversified, REIT - Healthcare Facilities, REIT - Hotel & Motel, REIT - Industrial, REIT - Mortgage, REIT - Office, REIT - Residential, REIT - Retail, REIT - Specialty, Rental & Leasing Services, Residential Construction, Resorts & Casinos, Restaurants, Scientific & Technical Instruments, Security & Protection Services, Semiconductor Equipment & Materials, Semiconductors, Shell Companies, Silver, Software - Application, Software - Infrastructure, Solar, Specialty Business Services, Specialty Chemicals, Specialty Industrial Machinery, Specialty Retail, Staffing & Employment Services, Steel, Telecom Services, Textile Manufacturing, Thermal Coal, Tobacco, Tools & Accessories, Travel Services, Trucking, Uranium, Utilities - Diversified, Utilities - Independent Power Producers, Utilities - Regulated Electric, Utilities - Regulated Gas, Utilities - Regulated Water, Utilities - Renewable, Waste Management - -#Industry = Any - - -# Any, Strong Buy (1), Buy or better, Buy, Hold or better, Hold, Hold or worse, Sell, Sell or worse, Strong Sell (5) - -#Analyst Recom. = Any - - -# Any, Under 100K, Under 500K, Under 750K, Under 1M, Over 0, Over 50K, Over 100K, Over 200K, Over 300K, Over 400K, Over 500K, Over 750K, Over 1M, Over 2M, Over 5M, Over 10M, Over 20M - -#Current Volume = Any - - -# Any, Under 1M, Under 5M, Under 10M, Under 20M, Under 50M, Under 100M, Over 1M, Over 2M, Over 5M, Over 10M, Over 20M, Over 50M, Over 100M, Over 200M, Over 500M, Over 1000M - -#Float = Any - - -# Any, Asia, Europe, Latin America, BRIC, Argentina, Australia, Bahamas, Belgium, BeNeLux, Bermuda, Brazil, Canada, Cayman Islands, Chile, China, China & Hong Kong, Colombia, Cyprus, Denmark, Finland, France, Germany, Greece, Hong Kong, Hungary, Iceland, India, Indonesia, Ireland, Israel, Italy, Japan, Kazakhstan, Luxembourg, Malaysia, Malta, Mexico, Monaco, Netherlands, New Zealand, Norway, Panama, Peru, Philippines, Portugal, Russia, Singapore, South Africa, South Korea, Spain, Sweden, Switzerland, Taiwan, Turkey, United Arab Emirates, United Kingdom, Uruguay - -#Country = Any - - -# Any, Optionable, Shortable, Optionable and shortable - -#Option/Short = Any - - -# Any, Under $1, Under $2, Under $3, Under $4, Under $5, Under $7, Under $10, Under $15, Under $20, Under $30, Under $40, Under $50, Over $1, Over $2, Over $3, Over $4, Over $5 ,Over $7, Over $10, Over $15, Over $20, Over $30, Over $40, Over $50, Over $60, Over $70, Over $80, Over $90, Over $100, $1 to $5, $1 to $10, $1 to $20, $5 to $10, $5 to $20, $5 to $50, $10 to $20, $10 to $50, $20 to $50, $50 to $100 - -#Price = Any - - -[Fundamental] -# Any, Low (<15), Profitable (>0), High (>50), Under 5, Under 10, Under 15, Under 20, Under 25, Under 30, Under 35, Under 40, Under 45, Under 50, Over 5, Over 10, Over 15, Over 25, Over 30, Over 35, Over 40, Over 45, Over 50 - -#P/E = Any - - -# Any, Low (<3), High (>50), Under 1, Under 2, Under 3, Under 4, Under 5, Under 6, Under 7, Under 8, Under 9, Under 10, Over 1, Over 2, Over 3, Over 4, Over 5, Over 6, Over 7, Over 8, Over 9, Over 10, Over 20, Over 30, Over 40, Over 50 - -#Price/Cash = Any - - -# Any, Negative (<0%), Positive (>0%), Positive Low (<10%), High (>25%), Under 5%, Under 10%, Under 15%, Under 20%, Under 25%, Under 30%, Over 5%, Over 10%, Over 15%, Over 20%, Over 25%, Over 30% - -#EPS growthnext 5 years = Any - - -# Any, Positive (>0%), Negative (<0%), Very Positive (>30%), Very Negative (<-15%), Under -50%, Under -40%, Under -35%, Under -30%, Under -25%, Under -20%, Under -15%, Under -10%, Under -5%, Over +50%, Over +45%, Over +40%, Over +35%, Over +30%, Over +25%, Over +20%, Over +15%, Over +10%, Over +5% - -#Return on Equity = Any - - -# Any, High (>0.5), Low (<0.1), Under 1, Under 0.9, Under 0.8, Under 0.7, Under 0.6, Under 0.5, Under 0.4, Under 0.3, Under 0.2, Under 0.1, Over 0.1, Over 0.2, Over 0.3, Over 0.4, Over 0.5, Over 0.6, Over 0.7, Over 0.8, Over 0.9, Over 1 - -#Debt/Equity = Any - - -# Any, Low (<5%), High (>30%), Very High (>50%), Over 10%, Over 20%, Over 30%, Over 40%, Over 50%, Over 60%, Over 70%, Over 80%, Over 90% - -#InsiderOwnership = Any - - -# Any, Low (<15), Profitable (>0), High (>50), Under 5, Under 10, Under 15, Under 20, Under 25, Under 30, Under 35, Under 40, Under 45, Under 50, Over 5, Over 10, Over 15, Over 20, Over 25, Over 30, Over 35, Over 40, Over 45, Over 50 - -#Forward P/E = Any - - -# Any, Low (<15), High (>50), Under 5, Under 10, Under 15, Under 20, Under 25, Under 30, Under 35, Under 40, Under 45, Under 50, Under 60, Under 70, Under 80, Under 90, Under 100, Over 5, Over 10, Over 15, Over 20, Over 25, Over 30, Over 35, Over 40, Over 45, Over 50, Over 60, Over 70, Over 80, Over 90, Over 100 - -#Price/Free Cash Flow = Any - - -# Any, Negative (<0%), Positive (>0%), Positive Low (0-10%), High (>25%), Under 5%, Under 10%, Under 15%, Under 20%, Under 25%, Under 30%, Over 5%, Over 10%, Over 15%, Over 20%, Over 25%, Over 30% - -#Sales growthpast 5 years = Any - - -# Any, Positive (>0%), Negative (<0%), Very Positive (>25%), Very Negative (<-10%), Under -50%, Under -45%, Under -40%, Under -35%, Under -30%, Under -25%, Under -20%, Under -15%, Under -10%, Under -5%, Over +5%, Over +10%, Over +15%, Over +20%, Over +25%, Over +30%, Over +35%, Over +40%, Over +45%, Over +50% - -#Return on Investment = Any - - -# Any, Positive (>0%), Negative (<0%), High (>50%), Under 90%, Under 80%, Under 70%, Under 60%, Under 50%, Under 45%, Under 40%, Under 35%, Under 30%, Under 25%, Under 20%, Under 15%, Under 10%, Under 5%, Under 0%, Under -10%, Under -20%, Under -30%, Under -50%, Under -70%, Under -100%, Over 0%, Over 5%, Over 10%, Over 15%, Over 20%, Over 25%, Over 30%, Over 40%, Over 45%, Over 50%, Over 60%, Over 70%, Over 80%, Over 90% - -#Gross Margin = Any - - -# Any, Very Negative (<20%), Negative (<0%), Positive (>0%), Very Positive (>20%), Under -90%, Under -80%, Under -70%, Under -60%, Under -50%, Under -45%, Under -40%, Under -35%, Under -30%, Under -25%, Under -20%, Under -15%, Under -10%, Under -5%, Over +5%, Over +10%, Over +15%, Over +20%, Over +25%, Over +30%, Over +35%, Over +40%, Over +45%, Over +50%, Over +60%, Over +70%, Over +80%, Over +90% - -#InsiderTransactions = Any - - -# Any, Low (<1), High (>2), Under 1, Under 2, Under 3, Over 1, Over 2, Over 3 - -#PEG = Any - - -# Any, Negative (<0%), Positive (>0%), Positive Low (0-10%), High (>25%), Under 5%, Under 10%, Under 15%, Under 20%, Under 25%, Under 30%, Over 5%, Over 10%, Over 15%, Over 20%, Over 25%, Over 30% - -#EPS growththis year = Any - - -# Any, Negative (<0%), Positive (>0%), Positive Low (0-10%), High (>25%), Under 5%, Under 10%, Under 15%, Under 20%, Under 25%, Under 30%, Over 5%, Over 10%, Over 15%, Over 20%, Over 25%, Over 30% - -#EPS growthqtr over qtr = Any - - -# Any, High (>3), Low (<1), Under 1, Under 0.5, Over 0.5, Over 1, Over 1.5, Over 2, Over 3, Over 4, Over 5, Over 10 - -#Current Ratio = Any - - -# Any, Negative (<0%), Positive (>0%), Very Negative (<-20%), High (>25%), Under 90%, Under 80%, Under 70%, Under 60%, Under 50%, Under 45%, Under 40%, Under 35%, Under 30%, Under 25%, Under 20%, Under 15%, Under 10%, Under 5%, Under 0%, Under -10%, Under -20%, Under -30%, Under -50%, Under -70%, Under -100%, Over 0%, Over 10%, Under 15%, Over 20%, Over 25%, Over 30%, Over 35%, Over 40%, Over 45%, Over 50%, Over 60%, Over 70%, Over 80%, Over 90% - -#Operating Margin = Any - - -# Any, Low (<5%), High (>90%), Under 90%, Under 80%, Under 70%, Under 60%, Under 50%, Under 40%, Under 30%, Under 20%, Under 10%, Over 10%, Over 20%, Over 30%, Over 40%, Over 50%, Over 60%, Over 70%, Over 80%, Over 90% - -#InstitutionalOwnership = Any - - -# Any, Low (<1), High (>10), Under 1, Under 2, Under 3, Under 4, Under 5, Under 6, Under 7, Under 8, Under 9, Under 10, Over 1, Over 2, Over 3, Over 4, Over 5, Over 6, Over 6, Over 7, Over 8, Over 9, Over 10 - -#P/S = Any - - -# Any, Negative (<0%), Positive (>0%), Positive Low (0-10%), High (>25%), Under 5%, Under 10%, Under 15%, Under 20%, Under 25%, Under 30%, Over 5%, Over 10%, Over 15%, Over 20%, Over 25%, Over 30% - -#EPS growthnext year = Any - - -# Any, Negative (<0%), Positive (>0%), Positive Low (0-10%), High (>25%), Under 5%, Under 10%, Under 15%, Under 20%, Under 25%, Under 30%, Over 5%, Over 10%, Over 15%, Over 20%, Over 25%, Over 30% - -#Sales growthqtr over qtr = Any - - -# Any, High (>3), Low (<0.5), Under 1, Under 0.5, Over 0.5, Over 1, Over 1.5, Over 2, Over 3, Over 4, Over 5, Over 10 - -#Quick Ratio = Any - - -# Any, Positive (>0%), Negative (<0%), Very Negative (<-20%), High (>20%), Under 90%, Under 80%, Under 70%, Under 60%, Under 50%, Under 45%, Under 40%, Under 35%, Under 30%, Under 25%, Under 20%, Under 15%, Under 10%, Under 5%, Under 0%, Under -10%, Under -20%, Under -30%, Under -50%, Under -70%, Under -100%, Over 0%, Over 5%, Over 10%, Over 15%, Over 20%, Over 25%, Over 30%, Over 35%, Over 40%, Over 45%, Over 50%, Over 60%, Over 70%, Over 80%, Over 90% - -#Net Profit Margin = Any - - -# Any, Very Negative (<20%), Negative (<0%), Positive (>0%), Very Positive (>20%), Under -50%, Under -45%, Under -40%, Under -35%, Under -30%, Under -25%, Under -20%, Under -15%, Under -10%, Under -5%, Over +5%, Over +10%, Over +15%, Over +20%, Over +25%, Over +30%, Over +35%, Over +40%, Over +45%, Over +50% - -#InstitutionalTransactions = Any - - -# Any, Low (<1), High (>5), Under 1, Under 2, Under 3, Under 4, Under 5, Under 6, Under 7, Under 8, Under 9, Under 10, Over 1, Over 2, Over 3, Over 4, Over 5, Over 6, Over 7, Over 8, Over 9, Over 10 - -#P/B = Any - - -# Any, Negative (<0%), Positive (>0%), Positive Low (0-10%), High (>25%), Under 5%, Under 10%, Under 15%, Under 20%, Under 25%, Under 30%, Over 5%, Over 10%, Over 15%, Over 20%, Over 25%, Over 30% - -#EPS growthpast 5 years = Any - - -# Any, Positive (>0%), Negative (<0%), Very Positive (>15%), Very Negative (<-15%), Under -50%, Under -45%, Under -40%, Under -35%, Under -30%, Under -25%, Under -20%, Under -15%, Under -10%, Under -5%, Over +5%, Over +10%, Over +15%, Over +20%, Over +25%, Over +30%, Over +35%, Over +40%, Over +45%, Over +50% - -#Return on Assets = Any - - -# Any, High (>0.5), Low (<0.1), Under 1, Under 0.9, Under 0.8, Under 0.7, Under 0.6, Under 0.5, Under 0.4, Under 0.3, Under 0.2, Under 0.1, Over 0.1, Over 0.2, Over 0.3, Over 0.4, Over.5, Over 0.6, Over 0.7, Over 0.8, Over 0.9, Over 1 - -#LT Debt/Equity = Any - - -# Any, None (0%), Positive (>0%), Low (<20%), High (>50%), Over 0%, Over 10%, Over 20%, Over 30%, Over 40%, Over 50%, Over 60%, Over 70%, Over 80%, Over 90%, Over 100%, Under 10%, Under 20%, Under 30%, Under 40%, Under 50%, Under 60%, Under 70%, Under 80%, Under 90%, Under 100% - -#Payout Ratio = Any - - -[Technical] -# Any, Today Up, Today Down, Today -15%, Today -10%, Today -5%, Today +5%, Today +10%, Today +15%, Week -30%, Week -20%, Week -10%, Week Down, Week Up, Week +10%, Week +20%, Week +30%, Month -50%, Month -30%, Month -20%, Month -10%, Month Down, Month Up, Month +10%, Month +20%, Month +30%, Month +50%, Quarter -50%, Quarter -30%, Quarter -20%, Quarter -10%, Quarter Down, Quarter Up, Quarter +10%, Quarter +20%, Quarter +30%, Quarter +50%, Half -75%, Half -50%, Half -30%, Half -20%, Half -10%, Half Down, Half Up, Half +10%, Half +20%, Half +30%, Half +50%, Half +100%, Year -75%, Year -50%, Year -30%, Year -20%, Year -10%, Year Down, Year Up, Year +10%, Year +20%, Year +30%, Year +50%, Year +100%, Year +200%, Year +300%, Year +500%, YTD -75%, YTD -50%, YTD -30%, YTD -20%, YTD -10%, YTD -5%, YTD Down, YTD Up, YTD +5%, YTD +10%, YTD +20%, YTD +30, YTD +50%, YTD +100% - -#Performance = Any - - -# Any, Price below SMA20, Price 10% below SMA20, Price 20% below SMA20, Price 30% below SMA20, Price 40% below SMA20, Price 50% below SMA20, Price above SMA20, Price 10% above SMA20, Price 20% above SMA20, Price 30% above SMA20, Price 40% above SMA20, Price 50% above SMA20, Price crossed SMA20, Price crossed SMA20 above, Price crossed SMA20 below, SMA20 crossed SMA50, SMA20 crossed SMA50 above, SMA20 crossed SMA50 below, SMA20 cross SMA200, SMA20 crossed SMA200 below, SMA20 crossed SMA200 above, SMA20 above SMA50, SMA20 below SMA50, SMA20 above SMA200, SMA20 below SMA200 - -#20-Day Simple Moving Average = Any - - -# Any, New High, New Low, 5% or more below High, 10% or more below High, 15% or more below High, 20% or more below High, 30% or more below High, 40% or more below High, 50% or more below High, 0-3% below High, 0-5% below High, 0-10% below High, 5% or more above Low, 10% or more above Low, 15% or more above Low, 20% or more above Low, 30% or more above Low, 40% or more above Low, 50% or more above Low, 0-3% above Low, 0-5% above Low, 0-10% above Low - -#20-Day High/Low = Any - - -# Any, Under 0, Under 0.5, Under 1, Under 1.5, Under 2, Over 0, Over 0.5, Over 1, Over 1.5, Over 2, Over 2.5, Over 3, Over 4, 0 to 0.5, 0 to 1, 0.5 to 1, 0.5 to 1.5, 1 to 1.5, 1 to 2 - -#Beta = Any - - -# Any, Today Up, Today Down, Today -15%, Today -10%, Today -5%, Today +5%, Today +10%, Today +15%, Week -30%, Week -20%, Week -10%, Week Down, Week Up, Week +10%, Week +20%, Week +30%, Month -50%, Month -30%, Month -20%, Month -10%, Month Down, Month Up, Month +10%, Month +20%, Month +30%, Month +50%, Quarter -50%, Quarter -30%, Quarter -20%, Quarter -10%, Quarter Down, Quarter Up, Quarter +10%, Quarter +20%, Quarter +30%, Quarter +50%, Half -75%, Half -50%, Half -30%, Half -20%, Half -10%, Half Down, Half Up, Half +10%, Half +20%, Half +30%, Half +50%, Half +100%, Year -75%, Year -50%, Year -30%, Year -20%, Year -10%, Year Down, Year Up, Year +10%, Year +20%, Year +30%, Year +50%, Year +100%, Year +200%, Year +300%, Year +500%, YTD -75%, YTD -50%, YTD -30%, YTD -20%, YTD -10%, YTD -5%, YTD Down, YTD Up, YTD +5%, YTD +10%, YTD +20%, YTD +30, YTD +50%, YTD +100% - -#Performance 2 = Any - - -# Any, Price below SMA50, Price 10% below SMA50, Price 20% below SMA50, Price 30% below SMA50, Price 40% below SMA50, Price 50% below SMA50, Price above SMA50, Price 10% above SMA50, Price 20% above SMA50, Price 30% above SMA50, Price 40% above SMA50, Price 50% above SMA50, Price crossed SMA50, Price crossed SMA50 above, Price crossed SMA50 below, SMA50 crossed SMA20, SMA50 crossed SMA20 above, SMA50 crossed SMA20 below, SMA50 cross SMA200, SMA50 crossed SMA200 below, SMA50 crossed SMA200 above, SMA50 above SMA20, SMA50 below SMA20, SMA50 above SMA200, SMA50 below SMA200 - -#50-Day Simple Moving Average = Any - - -# Any, New High, New Low, 5% or more below High, 10% or more below High, 15% or more below High, 20% or more below High, 30% or more below High, 40% or more below High, 50% or more below High, 0-3% below High, 0-5% below High, 0-10% below High, 5% or more above Low, 10% or more above Low, 15% or more above Low, 20% or more above Low, 30% or more above Low, 40% or more above Low, 50% or more above Low, 0-3% above Low, 0-5% above Low, 0-10% above Low - -#50-Day High/Low = Any - - -# Any, Over 0.25, Over 0.5, Over 0.75, Over 1, Over 1.5, Over 2. Over 2.5, Over 3, Over 3.5, Over 4, Over 4.5, Over 5, Under 0.25, Under 0.5, Under 0.75, Under 1, Under 1.5, Under 2, Under 2.5, Under 3, Under 3.5, Under 4, Under 4.5, Under 5 - -#Average True Range = Any - - -# Any, Week - Over 3%, Week - Over 4%, Week - Over 5%, Week - Over 6%, Week - Over 7%, Week - Over 8%, Week - Over 9%, Week - Over 10%, Week - Over 12%, Week - Over 15%, Month - Over2%, Month - Over3%, Month - Over4%, Month - Over 5%, Month - Over 5%, Month - Over 6%, Month - Over 7%, Month - Over 8%, Month - Over 9%, Month - Over 10%, Month - Over 12%, Month - Over 15% - -#Volatility = Any - - -# Any, Price below SMA200, Price 10% below SMA200, Price 20% below SMA200, Price 30% below SMA200, Price 40% below SMA200, Price 50% below SMA200, Price above SMA200, Price 10% above SMA200, Price 20% above SMA200, Price 30% above SMA200, Price 40% above SMA200, Price 50% above SMA200, Price crossed SMA200, Price crossed SMA200 above, Price crossed SMA200 below, SMA200 crossed SMA20, SMA20 crossed SMA20 above, SMA20 crossed SMA20 below, SMA200 cross SMA50, SMA200 crossed SMA50 below, SMA200 crossed SMA50 above, SMA200 above SMA20, SMA200 below SMA20, SMA200 above SMA50, SMA200 below SMA50 - -#200-Day Simple Moving Average = Any - - -# Any, New High, New Low, 5% or more below High, 10% or more below High, 15% or more below High, 20% or more below High, 30% or more below High, 40% or more below High, 50% or more below High, 0-3% below High, 0-5% below High, 0-10% below High, 5% or more above Low, 10% or more above Low, 15% or more above Low, 20% or more above Low, 30% or more above Low, 40% or more above Low, 50% or more above Low, 0-3% above Low, 0-5% above Low, 0-10% above Low - -#52-Week High/Low = Any - - -# Any, Overbought (90), Overbought (80), Overbought (70), Overbought (60), Oversold (40), Oversold (30), Oversold (20), Oversold (10), Not Overbought (<60), Not Overbought (<50), Not Oversold (>50), Not Oversold (>40) - -#RSI (14) = Any - - -# Any, Up, Up 1%, Up 2%, Up 3%, Up 4%, Up 5%, Up 6%, Up 7%, Up 8%, Up 9%, Up 10%, Up 15%, Up 20%, Down, Down 1%, Down 2%, Down 3%, Down 4%, Down 5%, Down 6%, Down 7%, Down 8%, Down 9%, Down 10%, Down 15%, Down 20% - -#Change = Any - - -# Any, Horizontal S/R, Horizontal S/R (Strong), TL Resistance, TL Resistance (Strong), TL Support, TL Support (Strong), Wedge Up, Wedge Up (Strong), Wedge Down, Wedge Down (Strong), Triangle Ascending, Triangle Ascending (Strong), Triangle Descending, Triangle Descending (Strong), Wedge, Wedge (Strong), Channel Up, Channel Up (Strong), Channel Down, Channel Down (Strong), Channel, Channel (Strong), Double Top, Double Bottom, Multiple Top, Multiple Bottom, Head & Shoulders, Head & Shoulders Inverse - -#Pattern = Any - - -# Any, Up, Up 1%, Up 2%, Up 3%, Up 4%, Up 5%, Up 6%, Up 7%, Up 8%, Up 9%, Up 10%, Up 15%, Up 20%, Down, Down 1%, Down 2%, Down 3%, Down 4%, Down 5%, Down 6%, Down 7%, Down 8%, Down 9%, Down 10%, Down 15%, Down 20% - -#Gap = Any - - -# Any, Up, Up 1%, Up 2%, Up 3%, Up 4%, Up 5%, Up 6%, Up 7%, Up 8%, Up 9%, Up 10%, Up 15%, Up 20%, Down, Down 1%, Down 2%, Down 3%, Down 4%, Down 5%, Down 6%, Down 7%, Down 8%, Down 9%, Down 10%, Down 15%, Down 20% - -#Change from Open = Any - - -# Any, Long Lower Shadow, Long Upper Shadow, Hammer, Inverted Hammer, Spinning Top White, Spinning Top Black, Doji, Dragonfly Doji, Gravestone Doji, Marubozu White, Marubozu Black - -#Candlestick = Any diff --git a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/short_squeeze.ini b/openbb_platform/providers/finviz/openbb_finviz/utils/presets/short_squeeze.ini deleted file mode 100644 index 04d21985705..00000000000 --- a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/short_squeeze.ini +++ /dev/null @@ -1,20 +0,0 @@ -# Author of preset: OpenBB -# Description: Short Squeeze Candidates - -[General] -Order = Relative Volume -Ascend = false -Signal = Top Gainers - -[Descriptive] - -Float Short = Over 20% -Relative Volume = Over 1 - -[Fundamental] - - -[Technical] - -Performance = Week Up -Beta = Over 1 \ No newline at end of file diff --git a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/undervalue.ini b/openbb_platform/providers/finviz/openbb_finviz/utils/presets/undervalue.ini deleted file mode 100644 index d92d148194d..00000000000 --- a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/undervalue.ini +++ /dev/null @@ -1,16 +0,0 @@ -# Author of preset: Traceabl3 -# Description: Potential Undervalued stocks - -[General] -Signal = Upgrades -Order = Market Cap. -Ascend = false - -[Descriptive] - -[Fundamental] -PEG = Low (<1) -P/B = Under 3 -EPS growthpast 5 years = Over 15% - -[Technical] \ No newline at end of file diff --git a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/weak_support_top_performers.ini b/openbb_platform/providers/finviz/openbb_finviz/utils/presets/weak_support_top_performers.ini deleted file mode 100644 index 05ead450bf1..00000000000 --- a/openbb_platform/providers/finviz/openbb_finviz/utils/presets/weak_support_top_performers.ini +++ /dev/null @@ -1,20 +0,0 @@ -# Author of preset: OpenBB -# Description: Weak support trendlines among top performers - -[General] - -Signal = Top Gainers - -[Descriptive] - -Option/Short = Optionable and shortable -Average Volume = Over 500K -Country = USA -Price = Over $20 - -[Fundamental] - -[Technical] -Performance = Quarter +20% -Performance 2 = Month +10% -Pattern = TL Support \ No newline at end of file diff --git a/openbb_platform/providers/finviz/openbb_finviz/utils/py.typed b/openbb_platform/providers/finviz/openbb_finviz/utils/py.typed deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/openbb_platform/providers/finviz/openbb_finviz/utils/screener_helper.py b/openbb_platform/providers/finviz/openbb_finviz/utils/screener_helper.py deleted file mode 100644 index 78c6e09ea1d..00000000000 --- a/openbb_platform/providers/finviz/openbb_finviz/utils/screener_helper.py +++ /dev/null @@ -1,2112 +0,0 @@ -"""Screener Helpers""" - -# pylint: disable=too-many-lines - -from typing import Literal - -MARKET_CAP_MAP = { - "all": "Any", - "mega": "Mega ($200bln and more)", - "large": "Large ($10bln to $200bln)", - "large_over": "+Large (over $10bln)", - "large_under": "-Large (under $200bln)", - "mid": "Mid ($2bl to $10bln)", - "mid_over": "+Mid (over $2bln)", - "mid_under": "-Mid (under $10bln)", - "small": "Small ($300mln to $2bln)", - "small_over": "+Small (over $300mln)", - "small_under": "-Small (under $2bln)", - "micro": "Micro ($50mln to $300mln)", - "micro_over": "+Micro (over $50mln)", - "micro_under": "-Micro (under $300mln)", - "nano": "Nano (under $50mln)", -} - -MarketCap = Literal[ - "all", - "mega", - "large", - "large_over", - "large_under", - "mid", - "mid_over", - "mid_under", - "small", - "small_over", - "small_under", - "micro", - "micro_over", - "micro_under", - "nano", -] - -INDUSTRY_MAP = { - "all": "Any", - "stocks_only": "Stocks only (ex-Funds)", - "etf": "Exchange Traded Fund", - "advertising_agencies": "Advertising Agencies", - "aerospace_defense": "Aerospace & Defense", - "agricultural_inputs": "Agricultural Inputs", - "airlines": "Airlines", - "airports_airservices": "Airports & Air Services", - "aluminum": "Aluminum", - "apparel_manufacturing": "Apparel Manufacturing", - "apparel_retail": "Apparel Retail", - "asset_management": "Asset Management", - "auto_manufacturers": "Auto Manufacturers", - "auto_parts": "Auto Parts", - "auto_dealerships": "Auto & Truck Dealerships", - "banks_diversified": "Banks - Diversified", - "banks_regional": "Banks - Regional", - "beverages_brewers": "Beverages - Brewers", - "beverages_nonalcoholic": "Beverages - Non-Alcoholic", - "beverages_wineries_distilleries": "Beverages - Wineries & Distilleries", - "biotechnology": "Biotechnology", - "broadcasting": "Broadcasting", - "building_materials": "Building Materials", - "building_products_equipment": "Building Products & Equipment", - "business_equipment_supplies": "Business Equipment & Supplies", - "capital_markets": "Capital Markets", - "chemicals": "Chemicals", - "closed_end_fund_debt": "Closed-End Fund - Debt", - "closed_end_fund_equity": "Closed-End Fund - Equity", - "closed_end_fund_foreign": "Closed-End Fund - Foreign", - "coking_coal": "Coking Coal", - "communication_equipment": "Communication Equipment", - "computer_hardware": "Computer Hardware", - "confectioners": "Confectioners", - "conglomerates": "Conglomerates", - "consulting_services": "Consulting Services", - "consumer_electronics": "Consumer Electronics", - "copper": "Copper", - "credit_services": "Credit Services", - "department_stores": "Department Stores", - "diagnostics_research": "Diagnostics & Research", - "discount_stores": "Discount Stores", - "drug_manufacturers_general": "Drug Manufacturers - General", - "drug_manufacturers_specialty_generic": "Drug Manufacturers - Specialty & Generic", - "education_training_services": "Education & Training Services", - "electrical_equipment_parts": "Electrical Equipment & Parts", - "electronic_components": "Electronic Components", - "electronic_gaming_multimedia": "Electronic Gaming & Multimedia", - "electronics_computer_distribution": "Electronics & Computer Distribution", - "engineering_construction": "Engineering & Construction", - "entertainment": "Entertainment", - "farm_heavy_construction_machinery": "Farm & Heavy Construction Machinery", - "farm_products": "Farm Products", - "financial_conglomerates": "Financial Conglomerates", - "financial_data_stock_exchanges": "Financial Data & Stock Exchanges", - "food_distribution": "Food Distribution", - "footwear_accessories": "Footwear & Accessories", - "furnishings_fixtures_appliances": "Furnishings, Fixtures & Appliances", - "gambling": "Gambling", - "gold": "Gold", - "grocery_stores": "Grocery Stores", - "health_care_plans": "Healthcare Plans", - "health_information_services": "Health Information Services", - "home_improvement_retail": "Home Improvement Retail", - "household_personal_products": "Household & Personal Products", - "industrial_distribution": "Industrial Distribution", - "information_technology_services": "Information Technology Services", - "infrastructure_operations": "Infrastructure Operations", - "insurance_brokers": "Insurance Brokers", - "insurance_diversified": "Insurance - Diversified", - "insurance_life": "Insurance - Life", - "insurance_property_casualty": "Insurance - Property & Casualty", - "insurance_reinsurance": "Insurance - Reinsurance", - "insurance_specialty": "Insurance - Specialty", - "integrated_freight_logistics": "Integrated Freight & Logistics", - "internet_content_information": "Internet Content & Information", - "internet_retail": "Internet Retail", - "leisure": "Leisure", - "lodging": "Lodging", - "lumber_wood_production": "Lumber & Wood Production", - "luxury_goods": "Luxury Goods", - "marine_shipping": "Marine Shipping", - "medical_care_facilities": "Medical Care Facilities", - "medical_devices": "Medical Devices", - "medical_distribution": "Medical Distribution", - "medical_instruments_supplies": "Medical Instruments & Supplies", - "metal_fabrication": "Metal Fabrication", - "mortgage_finance": "Mortgage Finance", - "oil_gas_drilling": "Oil & Gas Drilling", - "oil_gas_ep": "Oil & Gas E&P", - "oil_gas_equipment_services": "Oil & Gas Equipment & Services", - "oil_gas_integrated": "Oil & Gas Integrated", - "oil_gas_midstream": "Oil & Gas Midstream", - "oil_gas_refining_marketing": "Oil & Gas Refining & Marketing", - "other_industrial_metals_mining": "Other Industrial Metals & Mining", - "other_precious_metals_mining": "Other Precious Metals & Mining", - "packaged_foods": "Packaged Foods", - "packaging_containers": "Packaging & Containers", - "paper_paper_products": "Paper & Paper Products", - "personal_services": "Personal Services", - "pharmaceutical_retailers": "Pharmaceutical Retailers", - "pollution_treatment_controls": "Pollution & Treatment Controls", - "publishing": "Publishing", - "railroads": "Railroads", - "real_estate_development": "Real Estate - Development", - "real_estate_diversified": "Real Estate - Diversified", - "real_estate_services": "Real Estate Services", - "recreational_vehicles": "Recreational Vehicles", - "reit_diversified": "REIT - Diversified", - "reit_health_care_facilities": "REIT - Healthcare Facilities", - "reit_hotel_motel": "REIT - Hotel & Motel", - "reit_industrial": "REIT - Industrial", - "reit_mortgage": "REIT - Mortgage", - "reit_office": "REIT - Office", - "reit_residential": "REIT - Residential", - "reit_retail": "REIT - Retail", - "reit_specialty": "REIT - Specialty", - "rental_leasing_services": "Rental & Leasing Services", - "residential_construction": "Residential Construction", - "resorts_casinos": "Resorts & Casinos", - "restaurants": "Restaurants", - "scientific_technical_instruments": "Scientific & Technical Instruments", - "security_protection_services": "Security & Protection Services", - "semiconductor_equipment_materials": "Semiconductor Equipment & Materials", - "semiconductors": "Semiconductors", - "shell_companies": "Shell Companies", - "silver": "Silver", - "software_application": "Software - Application", - "software_infrastructure": "Software - Infrastructure", - "solar": "Solar", - "specialty_business_services": "Specialty Business Services", - "specialty_chemicals": "Specialty Chemicals", - "specialty_industrial_machinery": "Specialty Industrial Machinery", - "specialty_retail": "Specialty Retail", - "staffing_employment_services": "Staffing & Employment Services", - "steel": "Steel", - "telecom_services": "Telecom Services", - "textile_manufacturing": "Textile Manufacturing", - "thermal_coal": "Thermal Coal", - "tobacco": "Tobacco", - "tools_accessories": "Tools & Accessories", - "travel_services": "Travel Services", - "trucking": "Trucking", - "uranium": "Uranium", - "utilities_diversified": "Utilities - Diversified", - "utilities_independent_power_producers": "Utilities - Independent Power Producers", - "utilities_regulated_electric": "Utilities - Regulated Electric", - "utilities_regulated_gas": "Utilities - Regulated Gas", - "utilities_regulated_water": "Utilities - Regulated Water", - "utilities_renewable": "Utilities - Renewable", - "waste_management": "Waste Management", -} - -d_signals = { - "top_gainers": "Top Gainers", - "top_losers": "Top Losers", - "new_high": "New High", - "new_low": "New Low", - "most_volatile": "Most Volatile", - "most_active": "Most Active", - "unusual_volume": "Unusual Volume", - "overbought": "Overbought", - "oversold": "Oversold", - "downgrades": "Downgrades", - "upgrades": "Upgrades", - "earnings_before": "Earnings Before", - "earnings_after": "Earnings After", - "recent_insider_buying": "Recent Insider Buying", - "recent_insider_selling": "Recent Insider Selling", - "major_news": "Major News", - "horizontal_sr": "Horizontal S/R", - "tl_resistance": "TL Resistance", - "tl_support": "TL Support", - "wedge_up": "Wedge Up", - "wedge_down": "Wedge Down", - "wedge": "Wedge", - "triangle_ascending": "Triangle Ascending", - "triangle_descending": "Triangle Descending", - "channel_up": "Channel Up", - "channel_down": "Channel Down", - "channel": "Channel", - "double_top": "Double Top", - "double_bottom": "Double Bottom", - "multiple_top": "Multiple Top", - "multiple_bottom": "Multiple Bottom", - "head_shoulders": "Head & Shoulders", - "head_shoulders_inverse": "Head & Shoulders Inverse", -} - - -d_signals_desc = { - "top_gainers": "stocks with the highest price gain percent today", - "top_losers": "stocks with the highest price percent loss today", - "new_high": "stocks making 52-week high today", - "new_low": "stocks making 52-week low today", - "most_volatile": "stocks with the highest widest high/low trading range today", - "most_active": "stocks with the highest trading volume today", - "unusual_volume": "stocks with unusually high volume today - the highest relative volume ratio", - "overbought": "stock is becoming overvalued and may experience a pullback.", - "oversold": "oversold stocks may represent a buying opportunity for investors", - "downgrades": "stocks downgraded by analysts today", - "upgrades": "stocks upgraded by analysts today", - "earnings_before": "companies reporting earnings today, before market open", - "earnings_after": "companies reporting earnings today, after market close", - "recent_insider_buying": "stocks with recent insider buying activity", - "recent_insider_selling": "stocks with recent insider selling activity", - "major_news": "stocks with the highest news coverage today", - "horizontal_sr": "horizontal channel of price range between support and resistance trendlines", - "tl_resistance": "once a rising trendline is broken", - "tl_support": "once a falling trendline is broken", - "wedge_up": "upward trendline support and upward trendline resistance (reversal)", - "wedge_down": "downward trendline support and downward trendline resistance (reversal)", - "wedge": "upward trendline support, downward trendline resistance (continuation)", - "triangle_ascending": "upward trendline support and horizontal trendline resistance", - "triangle_descending": "horizontal trendline support and downward trendline resistance", - "channel_up": "both support and resistance trendlines slope upward", - "channel_down": "both support and resistance trendlines slope downward", - "channel": "both support and resistance trendlines are horizontal", - "double_top": "stock with 'M' shape that indicates a bearish reversal in trend", - "double_bottom": "stock with 'W' shape that indicates a bullish reversal in trend", - "multiple_top": "same as double_top hitting more highs", - "multiple_bottom": "same as double_bottom hitting more lows", - "head_shoulders": "chart formation that predicts a bullish-to-bearish trend reversal", - "head_shoulders_inverse": "chart formation that predicts a bearish-to-bullish trend reversal", -} - -Recommendation = Literal[ - "all", - "strong_buy", - "buy+", - "buy", - "hold+", - "hold", - "hold-", - "sell", - "sell-", - "strong_sell", -] - -RECOMMENDATION_MAP = { - "all": "Any", - "strong_buy": "Strong Buy (1)", - "buy+": "Buy or better", - "buy": "Buy", - "hold+": "Hold or better", - "hold": "Hold", - "hold-": "Hold or worse", - "sell": "Sell", - "sell-": "Sell or worse", - "strong_sell": "Strong Sell (5)", -} - -d_check_screener = { - "Order": [ - "Any", - "Signal", - "Ticker", - "Company", - "Sector", - "Industry", - "Country", - "Market Cap.", - "Price/Earnings", - "Forward Price/Earnings", - "PEG (Price/Earnings/Growth)", - "Price/Sales", - "Price/Book", - "Price/Cash", - "Price/Free Cash Flow", - "Dividend Yield", - "Payout Ratio", - "EPS(ttm)", - "EPS growth this year", - "EPS growth next year", - "EPS growth past 5 years", - "EPS growth next 5 years", - "Sales growth past 5 years", - "EPS growth qtr over qtr", - "Sales growth qtr over qtr", - "Shares Outstanding", - "Shares Float", - "Insider Ownership", - "Insider Transactions", - "Institutional Ownership", - "Institutional Transactions", - "Short Interest Share", - "Short Interest Ratio", - "Earnings Date", - "Return on Assets", - "Return on Equity", - "Return on Investment", - "Current Ratio", - "Quick Ratio", - "LT Debt/Equity", - "Total Debt/Equity", - "Gross Margin", - "Operating Margin", - "Net Profit Margin", - "Analyst Recommendation", - "Performance (Week)", - "Performance (Month)", - "Performance (Quarter)", - "Performance (Half Year)", - "Performance (Year)", - "Performance (Year To Date)", - "Beta", - "Average True Range", - "Volatility (Week)", - "Volatility (Month)", - "20-Day SMA (Relative)", - "50-Day SMA (Relative)", - "200-Day SMA (Relative)", - "50-Day High (Relative)", - "50-Day Low (Relative)", - "52-Week High (Relative)", - "52-Week Low (Relative)", - "Relative Strength Index (14)", - "Average Volume (3 Month)", - "Relative Volume", - "Change", - "Change from Open", - "Gap", - "Volume", - "Price", - "Target Price", - "IPO Date", - ], - "Ascend": ["true", "false"], - "Signal": [ - "Any", - "Top Gainers", - "Top Losers", - "New High", - "New Low", - "Most Volatile", - "Most Active", - "Unusual Volume", - "Overbought", - "Oversold", - "Downgrades", - "Upgrades", - "Earnings Before", - "Earnings After", - "Recent Insider Buying", - "Recent Insider Selling", - "Major News", - "Horizontal S/R", - "TL Resistance", - "TL Support", - "Wedge Up", - "Wedge Down", - "Triangle Ascending", - "Triangle Descending", - "Wedge", - "Channel Up", - "Channel Down", - "Channel", - "Double Top", - "Double Bottom", - "Multiple Top", - "Multiple Bottom", - "Head & Shoulders", - "Head & Shoulders Inverse", - ], - "Exchange": ["Any", "AMEX", "NASDAQ", "NYSE"], - "Market Cap.": [ - "Any", - "Mega ($200bln and more)", - "Large ($10bln to $200bln)", - "Mid ($2bln to $10bln)", - "Small ($300mln to $2bln)", - "Micro ($50mln to $300mln)", - "Nano (under $50mln)", - "+Large (over $10bln)", - "+Mid (over $2bln)", - "+Small (over $300mln)", - "+Micro (over $50mln)", - "-Large (under $200bln)", - "-Mid (under $10bln)", - "-Small (under $2bln)", - "-Micro (under $300mln)", - ], - "Earnings Date": [ - "Any", - "Today", - "Today Before Market Open", - "Today Before Market Close", - "Tomorrow", - "Tomorrow Before Market Open", - "Tomorrow Before Market Close", - "Yesterday", - "Yesterday Before Market Open", - "Yesterday Before Market Close", - "Next 5 Days", - "Previous 5 Days", - "This Week", - "Next Week", - "Previous Week", - "This Month", - ], - "Target Price": [ - "Any", - "50% Above Price", - "40% Above Price", - "30% Above Price", - "20% Above Price", - "10% Above Price", - "5% Above Price", - "Above Price", - "Below Price", - "5% Below Price", - "10% Below Price", - "20% Below Price", - "30% Below Price", - "40% Below Price", - "50% Below Price", - ], - "Index": ["Any", "S&P 500", "DJIA", "NASDAQ 100", "Russell 2000"], - "Dividend Yield": [ - "Any", - "None (0%)", - "Positive (>0%)", - "High (>5%)", - "Very High (>10%)", - "Over 1%", - "Over 2%", - "Over 3%", - "Over 4%", - "Over 5%", - "Over 6%", - "Over 7%", - "Over 8%", - "Over 9%", - "Over 10%", - ], - "Average Volume": [ - "Any", - "Under 50K", - "Under 100K", - "Under 500K", - "Under 750K", - "Under 1M", - "Over 50K", - "Over 100K", - "Over 200K", - "Over 300K", - "Over 400K", - "Over 500K", - "Over 750K", - "Over 1M", - "Over 2M", - "100K to 500K", - "100K to 1M", - "500K to 1M", - "500K to 10M", - ], - "IPO Date": [ - "Any", - "Today", - "Yesterday", - "In the last week", - "In the last month", - "In the last quarter", - "In the last year", - "In the last 2 years", - "In the last 3 years", - "In the last 5 years", - "More than a year ago", - "More that 5 years ago", - "More than 10 years ago", - "More than 15 years ago", - "More than 20 years ago", - "More than 25 years ago", - ], - "Sector": [ - "Any", - "Basic Materials", - "Communication Services", - "Consumer Cyclical", - "Consumer Defensive", - "Energy", - "Financial", - "Healthcare", - "Industrials", - "Real Estate", - "Technology", - "Utilities", - ], - "Float Short": [ - "Any", - "Low (<5%)", - "High(>20%)", - "Under 5%", - "Under 10%", - "Under 15%", - "Under 20%", - "Under 25%", - "Under 30%", - "Over 5%", - "Over 10%", - "Over 15%", - "Over 20%", - "Over 25%", - "Over 30%", - ], - "Relative Volume": [ - "Any", - "Over 10", - "Over 5", - "Over 3", - "Over 2", - "Over 1.5", - "Over 1", - "Over 0.75", - "Over 0.5", - "Over 0.25", - "Under 2", - "Under 1", - "Under 1.5", - "Under 1", - "Under 0.75", - "Under 0.5", - "Under 0.25", - "Under 0.1", - ], - "Shares Outstanding": [ - "Any", - "Under 1M", - "Under 5M", - "Under 10M", - "Under 20M", - "Under 50M", - "Under 100M", - "Over 1M", - "Over 2M", - "Over 5M", - "Over 10M", - "Over 20M", - "Over 50M", - "Over 100M", - "Over 200M", - "Over 500M", - "Over 1000M", - ], - "Industry": list(INDUSTRY_MAP.values()), - "Analyst Recom.": [ - "Any", - "Strong Buy (1)", - "Buy or better", - "Buy", - "Hold or better", - "Hold", - "Hold or worse", - "Sell", - "Sell or worse", - "Strong Sell (5)", - ], - "Current Volume": [ - "Any", - "Under 100K", - "Under 500K", - "Under 750K", - "Under 1M", - "Over 0", - "Over 50K", - "Over 100K", - "Over 200K", - "Over 300K", - "Over 400K", - "Over 500K", - "Over 750K", - "Over 1M", - "Over 2M", - "Over 5M", - "Over 10M", - "Over 20M", - ], - "Float": [ - "Any", - "Under 1M", - "Under 5M", - "Under 10M", - "Under 20M", - "Under 50M", - "Under 100M", - "Over 1M", - "Over 2M", - "Over 5M", - "Over 10M", - "Over 20M", - "Over 50M", - "Over 100M", - "Over 200M", - "Over 500M", - "Over 1000M", - ], - "Country": [ - "Any", - "Asia", - "Europe", - "Latin America", - "BRIC", - "Argentina", - "Australia", - "Bahamas", - "Belgium", - "BeNeLux", - "Bermuda", - "Brazil", - "Canada", - "Cayman Islands", - "Chile", - "China", - "China & Hong Kong", - "Colombia", - "Cyprus", - "Denmark", - "Finland", - "France", - "Germany", - "Greece", - "Hong Kong", - "Hungary", - "Iceland", - "Iceland", - "India", - "Indonesia", - "Ireland", - "Israel", - "Italy", - "Japan", - "Kazakhstan", - "Luxembourg", - "Malaysia", - "Malta", - "Mexico", - "Monaco", - "Netherlands", - "New Zealand", - "Norway", - "Panama", - "Peru", - "Philippines", - "Portugal", - "Russia", - "Singapore", - "South Africa", - "South Korea", - "Spain", - "Sweden", - "Switzerland", - "Taiwan", - "Turkey", - "United Arab Emirates", - "United Kingdom", - "Uruguay", - "USA", - "Foreign (ex-USA)", - ], - "Option/Short": ["Any", "Optionable", "Shortable", "Optionable and shortable"], - "Price": [ - "Any", - "Under $1", - "Under $2", - "Under $3", - "Under $4", - "Under $5", - "Under $7", - "Under $10", - "Under $15", - "Under $20", - "Under $30", - "Under $40", - "Under $50", - "Over $1", - "Over $2", - "Over $3", - "Over $4", - "Over $5", - "Over $7", - "Over $10", - "Over $15", - "Over $20", - "Over $30", - "Over $40", - "Over $50", - "Over $60", - "Over $70", - "Over $80", - "Over $90", - "Over $100", - "$1 to $5", - "$1 to $10", - "$1 to $20", - "$5 to %10", - "$5 to $20", - "$5 to $50", - "$10 to $20", - "$10 to $50", - "$20 to $50", - "$50 to $100", - ], - "P/E": [ - "Any", - "Low (<15)", - "Profitable (>0)", - "High (>50)", - "Under 5", - "Under 10", - "Under 15", - "Under 20", - "Under 25", - "Under 30", - "Under 35", - "Under 40", - "Under 45", - "Under 50", - "Over 5", - "Over 10", - "Over 15", - "Over 25", - "Over 30", - "Over 35", - "Over 40", - "Over 45", - "Over 50", - ], - "Price/Cash": [ - "Any", - "Low (<3)", - "High (>50)", - "Under 1", - "Under 2", - "Under 3", - "Under 4", - "Under 5", - "Under 6", - "Under 7", - "Under 8", - "Under 9", - "Under 10", - "Over 1", - "Over 2", - "Over 3", - "Over 4", - "Over 5", - "Over 6", - "Over 7", - "Over 8", - "Over 9", - "Over 10", - "Over 20", - "Over 30", - "Over 40", - "Over 50", - ], - "EPS growthnext 5 years": [ - "Any", - "Negative (<0%)", - "Positive (>0%)", - "Positive Low (<10%)", - "High (>25%)", - "Under 5%", - "Under 10%", - "Under 15%", - "Under 20%", - "Under 25%", - "Under 30%", - "Over 5%", - "Over 10%", - "Over 15%", - "Over 20%", - "Over 25%", - "Over 30%", - ], - "Return on Equity": [ - "Any", - "Positive (>0%)", - "Negative (<0%)", - "Very Positive (>30%)", - "Very Negative (<-15%)", - "Under -50%", - "Under -40%", - "Under -35%", - "Under -30%", - "Under -25%", - "Under -20%", - "Under -15%", - "Under -10%", - "Under -5%", - "Over +50%", - "Over +45%", - "Over +40%", - "Over +35%", - "Over +30%", - "Over +25%", - "Over +20%", - "Over +15%", - "Over +10%", - "Over +5%", - ], - "Debt/Equity": [ - "Any", - "High (>0.5)", - "Low (<0.1)", - "Under 1", - "Under 0.9", - "Under 0.8", - "Under 0.7", - "Under 0.6", - "Under 0.5", - "Under 0.4", - "Under 0.3", - "Under 0.2", - "Under 0.1", - "Over 0.1", - "Over 0.2", - "Over 0.3", - "Over 0.4", - "Over 0.5", - "Over 0.6", - "Over 0.7", - "Over 0.8", - "Over 0.9", - "Over 1", - ], - "InsiderOwnership": [ - "Any", - "Low (<5%)", - "High (>30%)", - "Very High (>50%)", - "Over 10%", - "Over 20%", - "Over 30%", - "Over 40%", - "Over 50%", - "Over 60%", - "Over 70%", - "Over 80%", - "Over 90%", - ], - "Forward P/E": [ - "Any", - "Low (<15)", - "Profitable (>0)", - "High (>50)", - "Under 5", - "Under 10", - "Under 15", - "Under 20", - "Under 25", - "Under 30", - "Under 35", - "Under 40", - "Under 45", - "Under 50", - "Over 5", - "Over 10", - "Over 15", - "Over 20", - "Over 25", - "Over 30", - "Over 35", - "Over 40", - "Over 45", - "Over 50", - ], - "Price/Free Cash Flow": [ - "Any", - "Low (<15)", - "High (>50)", - "Under 5", - "Under 10", - "Under 15", - "Under 20", - "Under 25", - "Under 30", - "Under 35", - "Under 40", - "Under 45", - "Under 50", - "Under 60", - "Under 70", - "Under 80", - "Under 90", - "Under 100", - "Over 5", - "Over 10", - "Over 15", - "Over 20", - "Over 25", - "Over 30", - "Over 35", - "Over 40", - "Over 45", - "Over 50", - "Over 60", - "Over 70", - "Over 80", - "Over 90", - "Over 100", - ], - "Sales growthpast 5 years": [ - "Any", - "Negative (<0%)", - "Positive (>0%)", - "Positive Low (0-10%)", - "High (>25%)", - "Under 5%", - "Under 10%", - "Under 15%", - "Under 20%", - "Under 25%", - "Under 30%", - "Over 5%", - "Over 10%", - "Over 15%", - "Over 20%", - "Over 25%", - "Over 30%", - ], - "Return on Investment": [ - "Any", - "Positive (>0%)", - "Negative (<0%)", - "Very Positive (>25%)", - "Very Negative (<-10%)", - "Under -50%", - "Under -45%", - "Under -40%", - "Under -35%", - "Under -30%", - "Under -25%", - "Under -20%", - "Under -15%", - "Under -10%", - "Under -5%", - "Over +5%", - "Over +10%", - "Over +15%", - "Over +20%", - "Over +25%", - "Over +30%", - "Over +35%", - "Over +40%", - "Over +45%", - "Over +50%", - ], - "Gross Margin": [ - "Any", - "Positive (>0%)", - "Negative (<0%)", - "High (>50%)", - "Under 90%", - "Under 80%", - "Under 70%", - "Under 60%", - "Under 50%", - "Under 45%", - "Under 40%", - "Under 35%", - "Under 30%", - "Under 25%", - "Under 20%", - "Under 15%", - "Under 10%", - "Under 5%", - "Under 0%", - "Under -10%", - "Under -20%", - "Under -30%", - "Under -50%", - "Under -70%", - "Under -100%", - "Over 0%", - "Over 5%", - "Over 10%", - "Over 15%", - "Over 20%", - "Over 25%", - "Over 30%", - "Over 40%", - "Over 45%", - "Over 50%", - "Over 60%", - "Over 70%", - "Over 80%", - "Over 90%", - ], - "InsiderTransactions": [ - "Any", - "Very Negative (<20%)", - "Negative (<0%)", - "Positive (>0%)", - "Very Positive (>20%)", - "Under -90%", - "Under 80%", - "Under 70%", - "Under -60%", - "Under -50%", - "Under -45%", - "Under 40%", - "Under -35%", - "Under -30%", - "Under -25%", - "Under -20%", - "Under -15%", - "Under -10%", - "Under -5%", - "Over +5%", - "Over +10%", - "Over +15%", - "Over +20%", - "Over +25%", - "Over +30%", - "Over +35%", - "Over +40%", - "Over +45%", - "Over +50%", - "Over +60%", - "Over +70%", - "Over +80%", - "Over +90%", - ], - "PEG": [ - "Any", - "Low (<1)", - "High (>2)", - "Under 1", - "Under 2", - "Under 3", - "Over 1", - "Over 2", - "Over 3", - ], - "EPS growththis year": [ - "Any", - "Negative (<0%)", - "Positive (>0%)", - "Positive Low (0-10%)", - "High (>25%)", - "Under 5%", - "Under 10%", - "Under 15%", - "Under 20%", - "Under 25%", - "Under 30%", - "Over 5%", - "Over 10%", - "Over 15%", - "Over 20%", - "Over 25%", - "Over 30%", - ], - "EPS growthqtr over qtr": [ - "Any", - "Negative (<0%)", - "Positive (>0%)", - "Positive Low (0-10%)", - "High (>25%)", - "Under 5%", - "Under 10%", - "Under 15%", - "Under 20%", - "Under 25%", - "Under 30%", - "Over 5%", - "Over 10%", - "Over 15%", - "Over 20%", - "Over 25%", - "Over 30%", - ], - "Current Ratio": [ - "Any", - "High (>3)", - "Low (<1)", - "Under 1", - "Under 0.5", - "Over 0.5", - "Over 1", - "Over 1.5", - "Over 2", - "Over 3", - "Over 4", - "Over 5", - "Over 10", - ], - "Operating Margin": [ - "Any", - "Negative (<0%)", - "Positive (>0%)", - "Very Negative (<-20%)", - "High (>25%)", - "Under 90%", - "Under 80%", - "Under 70%", - "Under 60%", - "Under 50%", - "Under 45%", - "Under 40%", - "Under 35%", - "Under 30%", - "Under 25%", - "Under 20%", - "Under 15%", - "Under 10%", - "Under 5%", - "Under 0%", - "Under -10%", - "Under -20%", - "Under -30%", - "Under -50%", - "Under -70%", - "Under -100%", - "Over 0%", - "Over 10%", - "Under 15%", - "Over 20%", - "Over 25%", - "Over 30%", - "Over 35%", - "Over 40%", - "Over 45%", - "Over 50%", - "Over 60%", - "Over 70%", - "Over 80%", - "Over 90%", - ], - "InstitutionalOwnership": [ - "Any", - "Low (<5%)", - "High (>90%)", - "Under 90%", - "Under 80%", - "Under 70%", - "Under 60%", - "Under 50%", - "Under 40%", - "Under 30%", - "Under 20%", - "Under 10%", - "Over 10%", - "Over 20%", - "Over 30%", - "Over 40%", - "Over 50%", - "Over 60%", - "Over 70%", - "Over 80%", - "Over 90%", - ], - "P/S": [ - "Any", - "Low (<1)", - "High (>10)", - "Under 1", - "Under 2", - "Under 3", - "Under 4", - "Under 5", - "Under 6", - "Under 7", - "Under 8", - "Under 9", - "Under 10", - "Over 1", - "Over 2", - "Over 3", - "Over 4", - "Over 5", - "Over 6", - "Over 6", - "Over 7", - "Over 8", - "Over 9", - "Over 10", - ], - "EPS growthnext year": [ - "Any", - "Negative (<0%)", - "Positive (>0%)", - "Positive Low (0-10%)", - "High (>25%)", - "Under 5%", - "Under 10%", - "Under 15%", - "Under 20%", - "Under 25%", - "Under 30%", - "Over 5%", - "Over 10%", - "Over 15%", - "Over 20%", - "Over 25%", - "Over 30%", - ], - "Sales growthqtr over qtr": [ - "Any", - "Negative (<0%)", - "Positive (>0%)", - "Positive Low (0-10%)", - "High (>25%)", - "Under 5%", - "Under 10%", - "Under 15%", - "Under 20%", - "Under 25%", - "Under 30%", - "Over 5%", - "Over 10%", - "Over 15%", - "Over 20%", - "Over 25%", - "Over 30%", - ], - "Quick Ratio": [ - "Any", - "High (>3)", - "Low (<0.5)", - "Under 1", - "Under 0.5", - "Over 0.5", - "Over 1", - "Over 1.5", - "Over 2", - "Over 3", - "Over 4", - "Over 5", - "Over 10", - ], - "Net Profit Margin": [ - "Any", - "Positive (>0%)", - "Negative (<0%)", - "Very Negative (<-20%)", - "High (>20%)", - "Under 90%", - "Under 80%", - "Under 70%", - "Under 60%", - "Under 50%", - "Under 45%", - "Under 40%", - "Under 35%", - "Under 30%", - "Under 25%", - "Under 20%", - "Under 15%", - "Under 10%", - "Under 5%", - "Under 0%", - "Under -10%", - "Under -20%", - "Under -30%", - "Under -50%", - "Under -70%", - "Under -100%", - "Over 0%", - "Over 5%", - "Over 10%", - "Over 15%", - "Over 20%", - "Over 25%", - "Over 30%", - "Over 35%", - "Over 40%", - "Over 45%", - "Over 50%", - "Over 60%", - "Over 70%", - "Over 80%", - "Over 90%", - ], - "InstitutionalTransactions": [ - "Any", - "Very Negative (<20%)", - "Negative (<0%)", - "Positive (>0%)", - "Very Positive (>20%)", - "Under -50%", - "Under -45%", - "Under -40%", - "Under -35%", - "Under -30%", - "Under -25%", - "Under -20%", - "Under -15%", - "Under -10%", - "Under -5%", - "Over +5%", - "Over +10%", - "Over +15%", - "Over +20%", - "Over +25%", - "Over +30%", - "Over +35%", - "Over +40%", - "Over +45%", - "Over +50%", - ], - "P/B": [ - "Any", - "Low (<1)", - "High (>5)", - "Under 1", - "Under 2", - "Under 3", - "Under 4", - "Under 5", - "Under 6", - "Under 7", - "Under 8", - "Under 9", - "Under 10", - "Over 1", - "Over 2", - "Over 3", - "Over 4", - "Over 5", - "Over 6", - "Over 7", - "Over 8", - "Over 9", - "Over 10", - ], - "EPS growthpast 5 years": [ - "Any", - "Negative (<0%)", - "Positive (>0%)", - "Positive Low (0-10%)", - "High (>25%)", - "Under 5%", - "Under 10%", - "Under 15%", - "Under 20%", - "Under 25%", - "Under 30%", - "Over 5%", - "Over 10%", - "Over 15%", - "Over 20%", - "Over 25%", - "Over 30%", - ], - "Return on Assets": [ - "Any", - "Positive (>0%)", - "Negative (<0%)", - "Very Positive (>15%)", - "Very Negative (<-15%)", - "Under -50%", - "Under -45%", - "Under -40%", - "Under -35%", - "Under -30%", - "Under -25%", - "Under -20%", - "Under -15%", - "Under -10%", - "Under -5%", - "Over +5%", - "Over +10%", - "Over +15%", - "Over +20%", - "Over +25%", - "Over +30%", - "Over +35%", - "Over +40%", - "Over +45%", - "Over +50%", - ], - "LT Debt/Equity": [ - "Any", - "High (>0.5)", - "Low (<0.1)", - "Under 1", - "Under 0.9", - "Under 0.8", - "Under 0.7", - "Under 0.6", - "Under 0.5", - "Under 0.4", - "Under 0.3", - "Under 0.2", - "Under 0.1", - "Over 0.1", - "Over 0.2", - "Over 0.3", - "Over 0.4", - "Over.5", - "Over 0.6", - "Over 0.7", - "Over 0.8", - "Over 0.9", - "Over 1", - ], - "Payout Ratio": [ - "Any", - "None (0%)", - "Positive (>0%)", - "Low (<20%)", - "High (>50%)", - "Over 0%", - "Over 10%", - "Over 20%", - "Over 30%", - "Over 40%", - "Over 50%", - "Over 60%", - "Over 70%", - "Over 80%", - "Over 90%", - "Over 100%", - "Under 10%", - "Under 20%", - "Under 30%", - "Under 40%", - "Under 50%", - "Under 60%", - "Under 70%", - "Under 80%", - "Under 90%", - "Under 100%", - ], - "Performance": [ - "Any", - "Today Up", - "Today Down", - "Today -15%", - "Today -10%", - "Today -5%", - "Today +5%", - "Today +10%", - "Today +15%", - "Week -30%", - "Week -20%", - "Week -10%", - "Week Down", - "Week Up", - "Week +10%", - "Week +20%", - "Week +30%", - "Month -50%", - "Month -30%", - "Month -20%", - "Month -10%", - "Month Down", - "Month Up", - "Month +10%", - "Month +20%", - "Month +30%", - "Month +50%", - "Quarter -50%", - "Quarter -30%", - "Quarter -20%", - "Quarter -10%", - "Quarter Down", - "Quarter Up", - "Quarter +10%", - "Quarter +20%", - "Quarter +30%", - "Quarter +50%", - "Half -75%", - "Half -50%", - "Half -30%", - "Half -20%", - "Half -10%", - "Half Down", - "Half Up", - "Half +10%", - "Half +20%", - "Half +30%", - "Half +50%", - "Half +100%", - "Year -75%", - "Year -50%", - "Year -30%", - "Year -20%", - "Year -10%", - "Year Down", - "Year Up", - "Year +10%", - "Year +20%", - "Year +30%", - "Year +50%", - "Year +100%", - "Year +200%", - "Year +300%", - "Year +500%", - "YTD -75%", - "YTD -50%", - "YTD -30%", - "YTD -20%", - "YTD -10%", - "YTD -5%", - "YTD Down", - "YTD Up", - "YTD +5%", - "YTD +10%", - "YTD +20%", - "YTD +30", - "YTD +50%", - "YTD +100%", - ], - "20-Day Simple Moving Average": [ - "Any", - "Price below SMA20", - "Price 10% below SMA20", - "Price 20% below SMA20", - "Price 30% below SMA20", - "Price 40% below SMA20", - "Price 50% below SMA20", - "Price above SMA20", - "Price 10% above SMA20", - "Price 20% above SMA20", - "Price 30% above SMA20", - "Price 40% above SMA20", - "Price 50% above SMA20", - "Price crossed SMA20", - "Price crossed SMA20 above", - "Price crossed SMA20 below", - "SMA20 crossed SMA50", - "SMA20 crossed SMA50 above", - "SMA20 crossed SMA50 below", - "SMA20 cross SMA200", - "SMA20 crossed SMA200 below", - "SMA20 crossed SMA200 above", - "SMA20 above SMA50", - "SMA20 below SMA50", - "SMA20 above SMA200", - "SMA20 below SMA200", - ], - "20-Day High/Low": [ - "Any", - "New High", - "New Low", - "5% or more below High", - "10% or more below High", - "15% or more below High", - "20% or more below High", - "30% or more below High", - "40% or more below High", - "50% or more below High", - "0-3% below High", - "0-5% below High", - "0-10% below High", - "5% or more above Low", - "10% or more above Low", - "15% or more above Low", - "20% or more above Low", - "30% or more above Low", - "40% or more above Low", - "50% or more above Low", - "0-3% above Low", - "0-5% above Low", - "0-10% above Low", - ], - "Beta": [ - "Any", - "Under 0", - "Under 0.5", - "Under 1", - "Under 1.5", - "Under 2", - "Over 0", - "Over 0.5", - "Over 1", - "Over 1.5", - "Over 2", - "Over 2.5", - "Over 3", - "Over 4", - "0 to 0.5", - "0 to 1", - "0.5 to 1", - "0.5 to 1.5", - "1 to 1.5", - "1 to 2", - ], - "Performance 2": [ - "Any", - "Today Up", - "Today Down", - "Today -15%", - "Today -10%", - "Today -5%", - "Today +5%", - "Today +10%", - "Today +15%", - "Week -30%", - "Week -20%", - "Week -10%", - "Week Down", - "Week Up", - "Week +10%", - "Week +20%", - "Week +30%", - "Month -50%", - "Month -30%", - "Month -20%", - "Month -10%", - "Month Down", - "Month Up", - "Month +10%", - "Month +20%", - "Month +30%", - "Month +50%", - "Quarter -50%", - "Quarter -30%", - "Quarter -20%", - "Quarter -10%", - "Quarter Down", - "Quarter Up", - "Quarter +10%", - "Quarter +20%", - "Quarter +30%", - "Quarter +50%", - "Half -75%", - "Half -50%", - "Half -30%", - "Half -20%", - "Half -10%", - "Half Down", - "Half Up", - "Half +10%", - "Half +20%", - "Half +30%", - "Half +50%", - "Half +100%", - "Year -75%", - "Year -50%", - "Year -30%", - "Year -20%", - "Year -10%", - "Year Down", - "Year Up", - "Year +10%", - "Year +20%", - "Year +30%", - "Year +50%", - "Year +100%", - "Year +200%", - "Year +300%", - "Year +500%", - "YTD -75%", - "YTD -50%", - "YTD -30%", - "YTD -20%", - "YTD -10%", - "YTD -5%", - "YTD Down", - "YTD Up", - "YTD +5%", - "YTD +10%", - "YTD +20%", - "YTD +30", - "YTD +50%", - "YTD +100%", - ], - "50-Day Simple Moving Average": [ - "Any", - "Price below SMA50", - "Price 10% below SMA50", - "Price 20% below SMA50", - "Price 30% below SMA50", - "Price 40% below SMA50", - "Price 50% below SMA50", - "Price above SMA50", - "Price 10% above SMA50", - "Price 20% above SMA50", - "Price 30% above SMA50", - "Price 40% above SMA50", - "Price 50% above SMA50", - "Price crossed SMA50", - "Price crossed SMA50 above", - "Price crossed SMA50 below", - "SMA50 crossed SMA20", - "SMA50 crossed SMA20 above", - "SMA50 crossed SMA20 below", - "SMA50 cross SMA200", - "SMA50 crossed SMA200 below", - "SMA50 crossed SMA200 above", - "SMA50 above SMA20", - "SMA50 below SMA20", - "SMA50 above SMA200", - "SMA50 below SMA200", - ], - "50-Day High/Low": [ - "Any", - "New High", - "New Low", - "5% or more below High", - "10% or more below High", - "15% or more below High", - "20% or more below High", - "30% or more below High", - "40% or more below High", - "50% or more below High", - "0-3% below High", - "0-5% below High", - "0-10% below High", - "5% or more above Low", - "10% or more above Low", - "15% or more above Low", - "20% or more above Low", - "30% or more above Low", - "40% or more above Low", - "50% or more above Low", - "0-3% above Low", - "0-5% above Low", - "0-10% above Low", - ], - "Average True Range": [ - "Any", - "Over 0.25", - "Over 0.5", - "Over 0.75", - "Over 1", - "Over 1.5", - "Over 2. Over 2.5", - "Over 3", - "Over 3.5", - "Over 4", - "Over 4.5", - "Over 5", - "Under 0.25", - "Under 0.5", - "Under 0.75", - "Under 1", - "Under 1.5", - "Under 2", - "Under 2.5", - "Under 3", - "Under 3.5", - "Under 4", - "Under 4.5", - "Under 5", - ], - "Volatility": [ - "Any", - "Week - Over 3%", - "Week - Over 4%", - "Week - Over 5%", - "Week - 6%", - "Week - 7%", - "Week - 8%", - "Week - 9%", - "Week - 10%", - "Week - 12%", - "Week - 15%", - "Month - 2%", - "Month - 3%", - "Month - 4%", - "Month 5%", - "Month 5%", - "Month 6%", - "Month 7%", - "Month 8%", - "Month 9%", - "Month 10%", - "Month 12%", - "Month 15%", - ], - "200-Day Simple Moving Average": [ - "Any", - "Price below SMA200", - "Price 10% below SMA200", - "Price 20% below SMA200", - "Price 30% below SMA200", - "Price 40% below SMA200", - "Price 50% below SMA200", - "Price above SMA200", - "Price 10% above SMA200", - "Price 20% above SMA200", - "Price 30% above SMA200", - "Price 40% above SMA200", - "Price 50% above SMA200", - "Price crossed SMA200", - "Price crossed SMA200 above", - "Price crossed SMA200 below", - "SMA200 crossed SMA20", - "SMA20 crossed SMA20 above", - "SMA20 crossed SMA20 below", - "SMA200 cross SMA50", - "SMA200 crossed SMA50 below", - "SMA200 crossed SMA50 above", - "SMA200 above SMA20", - "SMA200 below SMA20", - "SMA200 above SMA50", - "SMA200 below SMA50", - ], - "52-Week High/Low": [ - "Any", - "New High", - "New Low", - "5% or more below High", - "10% or more below High", - "15% or more below High", - "20% or more below High", - "30% or more below High", - "40% or more below High", - "50% or more below High", - "0-3% below High", - "0-5% below High", - "0-10% below High", - "5% or more above Low", - "10% or more above Low", - "15% or more above Low", - "20% or more above Low", - "30% or more above Low", - "40% or more above Low", - "50% or more above Low", - "0-3% above Low", - "0-5% above Low", - "0-10% above Low", - ], - "RSI (14)": [ - "Any", - "Overbought (90)", - "Overbought (80)", - "Overbought (70)", - "Overbought (6)", - "Oversold (40)", - "Oversold (30)", - "Oversold (20)", - "Oversold (10)", - "Not Overbought (<60)", - "Not Overbought (<50)", - "Not Oversold (>50)", - "Not Oversold (>40)", - ], - "Change": [ - "Any", - "Up", - "Up 1%", - "Up 2%", - "Up 3%", - "Up 4%", - "Up 5%", - "Up 6%", - "Up 7%", - "Up 8%", - "Up 9%", - "Up 10%", - "Up 15%", - "Up 20%", - "Down", - "Down 1%", - "Down 2%", - "Down 3%", - "Down 4%", - "Down 5%", - "Down 6%", - "Down 7%", - "Down 8%", - "Down 9%", - "Down 10%", - "Down 15%", - "Down 20%", - ], - "Pattern": [ - "Any", - "Horizontal S/R", - "Horizontal S/R (Strong)", - "TL Resistance", - "TL Resistance (Strong)", - "TL Support", - "TL Support (Strong)", - "Wedge Up", - "Wedge Up (Strong)", - "Wedge Down", - "Wedge Down (Strong)", - "Triangle Ascending", - "Triangle Ascending (Strong)", - "Triangle Descending", - "Triangle Descending (Strong)", - "Wedge", - "Wedge (Strong)", - "Channel Up", - "Channel Up (Strong)", - "Channel Down", - "Channel Down (Strong)", - "Channel", - "Channel (Strong)", - "Double Top", - "Double Bottom", - "Multiple Top", - "Multiple Bottom", - "Head & Shoulders", - "Head & Shoulders Inverse", - ], - "Gap": [ - "Any", - "Up", - "Up 1%", - "Up 2%", - "Up 3%", - "Up 4%", - "Up 5%", - "Up 6%", - "Up 7%", - "Up 8%", - "Up 9%", - "Up 10%", - "Up 15%", - "Up 20%", - "Down", - "Down 1%", - "Down 2%", - "Down 3%", - "Down 4%", - "Down 5%", - "Down 6%", - "Down 7%", - "Down 8%", - "Down 9%", - "Down 10%", - "Down 15%", - "Down 20%", - ], - "Change from Open": [ - "Any", - "Up", - "Up 1%", - "Up 2%", - "Up 3%", - "Up 4%", - "Up 5%", - "Up 6%", - "Up 7%", - "Up 8%", - "Up 9%", - "Up 10%", - "Up 15%", - "Up 20%", - "Down", - "Down 1%", - "Down 2%", - "Down 3%", - "Down 4%", - "Down 5%", - "Down 6%", - "Down 7%", - "Down 8%", - "Down 9%", - "Down 10%", - "Down 15%", - "Down 20%", - ], - "Candlestick": [ - "Any", - "Long Lower Shadow", - "Long Upper Shadow", - "Hammer", - "Inverted Hammer", - "Spinning Top White", - "Spinning Top Black", - "Doji", - "Dragonfly Doji", - "Gravestone Doji", - "Marubozu White", - "Marubozu Black", - ], -} - -SIGNALS = sorted(list(d_signals)) - -SIGNALS_DESC_STR = "" -for k, v in sorted(d_signals_desc.items()): - SIGNALS_DESC_STR += f"\n {k}: {v}" - - -SECTOR_MAP = { - "all": "Any", - "energy": "Energy", - "materials": "Basic Materials", - "industrials": "Industrials", - "consumer_cyclical": "Consumer Cyclical", - "consumer_defensive": "Consumer Defensive", - "financial": "Financial", - "healthcare": "Healthcare", - "technology": "Technology", - "communication_services": "Communication Services", - "utilities": "Utilities", - "real_estate": "Real Estate", -} - -Sectors = Literal[ - "all", - "energy", - "materials", - "industrials", - "consumer_cyclical", - "consumer_defensive", - "financial", - "healthcare", - "technology", - "communication_services", - "utilities", - "real_estate", -] - -EXCHANGE_MAP = { - "all": "Any", - "amex": "AMEX", - "nasdaq": "NASDAQ", - "nyse": "NYSE", -} - -INDEX_MAP = { - "all": "Any", - "dow": "DJIA", - "sp500": "S&P 500", - "nasdaq": "NASDAQ 100", - "russell": "RUSSELL 2000", -} - - -def get_preset_choices(user_data_path) -> dict: - """Get a combined map of default and user screener presets.""" - # pylint: disable=import-outside-toplevel - import shutil - from pathlib import Path - from warnings import warn - - PRESETS_PATH = Path(user_data_path) / "presets" / "finviz" - PRESETS_PATH_DEFAULT = Path(__file__).parent.resolve() / "presets" - preset_choices: dict = {} - - if PRESETS_PATH_DEFAULT.exists(): - preset_choices.update( - { - filepath.name.replace(".ini", ""): filepath - for filepath in PRESETS_PATH_DEFAULT.iterdir() - if filepath.suffix == ".ini" - } - ) - - try: - # Create the user presets directory if it doesn't exist. - if not PRESETS_PATH.exists(): - PRESETS_PATH.mkdir(parents=True, exist_ok=True) - - # Copy any missing default presets to the user presets directory. - for filepath in PRESETS_PATH_DEFAULT.iterdir(): - if filepath.suffix == ".ini": - target_path = PRESETS_PATH / filepath.name - if not target_path.exists(): - shutil.copy(filepath, target_path) - - # Override any default paths to the user path, if they exist. - if PRESETS_PATH.exists(): - preset_choices.update( - { - filepath.name.replace(".ini", ""): filepath - for filepath in PRESETS_PATH.iterdir() - if filepath.suffix == ".ini" - } - ) - except Exception as e: - warn(f"Error loading user presets: {e}") - - preset_choices = { - k: v for k, v in sorted(preset_choices.items()) if k != "screener_template" - } - - return preset_choices diff --git a/openbb_platform/providers/finviz/poetry.lock b/openbb_platform/providers/finviz/poetry.lock deleted file mode 100644 index 5080114e02d..00000000000 --- a/openbb_platform/providers/finviz/poetry.lock +++ /dev/null @@ -1,2162 +0,0 @@ -# This file is automatically @generated by Poetry 2.4.1 and should not be changed by hand. - -[[package]] -name = "aiohappyeyeballs" -version = "2.6.2" -description = "Happy Eyeballs for asyncio" -optional = false -python-versions = ">=3.10" -groups = ["main"] -files = [ - {file = "aiohappyeyeballs-2.6.2-py3-none-any.whl", hash = "sha256:4708045e2d7a6c6bdf8aafa8ed39649eaf926a4543b54560659129e3365953c4"}, - {file = "aiohappyeyeballs-2.6.2.tar.gz", hash = "sha256:e202810ee718bd01fc6ef49e8ea53d023d5cb6b581076d7925aa499fa55dbe64"}, -] - -[[package]] -name = "aiohttp" -version = "3.13.5" -description = "Async http client/server framework (asyncio)" -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "aiohttp-3.13.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:02222e7e233295f40e011c1b00e3b0bd451f22cf853a0304c3595633ee47da4b"}, - {file = "aiohttp-3.13.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bace460460ed20614fa6bc8cb09966c0b8517b8c58ad8046828c6078d25333b5"}, - {file = "aiohttp-3.13.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f546a4dc1e6a5edbb9fd1fd6ad18134550e096a5a43f4ad74acfbd834fc6670"}, - {file = "aiohttp-3.13.5-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c86969d012e51b8e415a8c6ce96f7857d6a87d6207303ab02d5d11ef0cad2274"}, - {file = "aiohttp-3.13.5-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b6f6cd1560c5fa427e3b6074bb24d2c64e225afbb7165008903bd42e4e33e28a"}, - {file = "aiohttp-3.13.5-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:636bc362f0c5bbc7372bc3ae49737f9e3030dbce469f0f422c8f38079780363d"}, - {file = "aiohttp-3.13.5-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6a7cbeb06d1070f1d14895eeeed4dac5913b22d7b456f2eb969f11f4b3993796"}, - {file = "aiohttp-3.13.5-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bca9ef7517fd7874a1a08970ae88f497bf5c984610caa0bf40bd7e8450852b95"}, - {file = "aiohttp-3.13.5-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:019a67772e034a0e6b9b17c13d0a8fe56ad9fb150fc724b7f3ffd3724288d9e5"}, - {file = "aiohttp-3.13.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f34ecee82858e41dd217734f0c41a532bd066bcaab636ad830f03a30b2a96f2a"}, - {file = "aiohttp-3.13.5-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:4eac02d9af4813ee289cd63a361576da36dba57f5a1ab36377bc2600db0cbb73"}, - {file = "aiohttp-3.13.5-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4beac52e9fe46d6abf98b0176a88154b742e878fdf209d2248e99fcdf73cd297"}, - {file = "aiohttp-3.13.5-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:c180f480207a9b2475f2b8d8bd7204e47aec952d084b2a2be58a782ffcf96074"}, - {file = "aiohttp-3.13.5-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2837fb92951564d6339cedae4a7231692aa9f73cbc4fb2e04263b96844e03b4e"}, - {file = "aiohttp-3.13.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d9010032a0b9710f58012a1e9c222528763d860ba2ee1422c03473eab47703e7"}, - {file = "aiohttp-3.13.5-cp310-cp310-win32.whl", hash = "sha256:7c4b6668b2b2b9027f209ddf647f2a4407784b5d88b8be4efcc72036f365baf9"}, - {file = "aiohttp-3.13.5-cp310-cp310-win_amd64.whl", hash = "sha256:cd3db5927bf9167d5a6157ddb2f036f6b6b0ad001ac82355d43e97a4bde76d76"}, - {file = "aiohttp-3.13.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7ab7229b6f9b5c1ba4910d6c41a9eb11f543eadb3f384df1b4c293f4e73d44d6"}, - {file = "aiohttp-3.13.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8f14c50708bb156b3a3ca7230b3d820199d56a48e3af76fa21c2d6087190fe3d"}, - {file = "aiohttp-3.13.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e7d2f8616f0ff60bd332022279011776c3ac0faa0f1b463f7bb12326fbc97a1c"}, - {file = "aiohttp-3.13.5-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a2567b72e1ffc3ab25510db43f355b29eeada56c0a622e58dcdb19530eb0a3cb"}, - {file = "aiohttp-3.13.5-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:fb0540c854ac9c0c5ad495908fdfd3e332d553ec731698c0e29b1877ba0d2ec6"}, - {file = "aiohttp-3.13.5-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c9883051c6972f58bfc4ebb2116345ee2aa151178e99c3f2b2bbe2af712abd13"}, - {file = "aiohttp-3.13.5-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2294172ce08a82fb7c7273485895de1fa1186cc8294cfeb6aef4af42ad261174"}, - {file = "aiohttp-3.13.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3a807cabd5115fb55af198b98178997a5e0e57dead43eb74a93d9c07d6d4a7dc"}, - {file = "aiohttp-3.13.5-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:aa6d0d932e0f39c02b80744273cd5c388a2d9bc07760a03164f229c8e02662f6"}, - {file = "aiohttp-3.13.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:60869c7ac4aaabe7110f26499f3e6e5696eae98144735b12a9c3d9eae2b51a49"}, - {file = "aiohttp-3.13.5-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:26d2f8546f1dfa75efa50c3488215a903c0168d253b75fba4210f57ab77a0fb8"}, - {file = "aiohttp-3.13.5-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f1162a1492032c82f14271e831c8f4b49f2b6078f4f5fc74de2c912fa225d51d"}, - {file = "aiohttp-3.13.5-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:8b14eb3262fad0dc2f89c1a43b13727e709504972186ff6a99a3ecaa77102b6c"}, - {file = "aiohttp-3.13.5-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:ca9ac61ac6db4eb6c2a0cd1d0f7e1357647b638ccc92f7e9d8d133e71ed3c6ac"}, - {file = "aiohttp-3.13.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7996023b2ed59489ae4762256c8516df9820f751cf2c5da8ed2fb20ee50abab3"}, - {file = "aiohttp-3.13.5-cp311-cp311-win32.whl", hash = "sha256:77dfa48c9f8013271011e51c00f8ada19851f013cde2c48fca1ba5e0caf5bb06"}, - {file = "aiohttp-3.13.5-cp311-cp311-win_amd64.whl", hash = "sha256:d3a4834f221061624b8887090637db9ad4f61752001eae37d56c52fddade2dc8"}, - {file = "aiohttp-3.13.5-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:023ecba036ddd840b0b19bf195bfae970083fd7024ce1ac22e9bba90464620e9"}, - {file = "aiohttp-3.13.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:15c933ad7920b7d9a20de151efcd05a6e38302cbf0e10c9b2acb9a42210a2416"}, - {file = "aiohttp-3.13.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ab2899f9fa2f9f741896ebb6fa07c4c883bfa5c7f2ddd8cf2aafa86fa981b2d2"}, - {file = "aiohttp-3.13.5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a60eaa2d440cd4707696b52e40ed3e2b0f73f65be07fd0ef23b6b539c9c0b0b4"}, - {file = "aiohttp-3.13.5-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:55b3bdd3292283295774ab585160c4004f4f2f203946997f49aac032c84649e9"}, - {file = "aiohttp-3.13.5-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c2b2355dc094e5f7d45a7bb262fe7207aa0460b37a0d87027dcf21b5d890e7d5"}, - {file = "aiohttp-3.13.5-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b38765950832f7d728297689ad78f5f2cf79ff82487131c4d26fe6ceecdc5f8e"}, - {file = "aiohttp-3.13.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b18f31b80d5a33661e08c89e202edabf1986e9b49c42b4504371daeaa11b47c1"}, - {file = "aiohttp-3.13.5-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:33add2463dde55c4f2d9635c6ab33ce154e5ecf322bd26d09af95c5f81cfa286"}, - {file = "aiohttp-3.13.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:327cc432fdf1356fb4fbc6fe833ad4e9f6aacb71a8acaa5f1855e4b25910e4a9"}, - {file = "aiohttp-3.13.5-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:7c35b0bf0b48a70b4cb4fc5d7bed9b932532728e124874355de1a0af8ec4bc88"}, - {file = "aiohttp-3.13.5-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:df23d57718f24badef8656c49743e11a89fd6f5358fa8a7b96e728fda2abf7d3"}, - {file = "aiohttp-3.13.5-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:02e048037a6501a5ec1f6fc9736135aec6eb8a004ce48838cb951c515f32c80b"}, - {file = "aiohttp-3.13.5-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:31cebae8b26f8a615d2b546fee45d5ffb76852ae6450e2a03f42c9102260d6fe"}, - {file = "aiohttp-3.13.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:888e78eb5ca55a615d285c3c09a7a91b42e9dd6fc699b166ebd5dee87c9ccf14"}, - {file = "aiohttp-3.13.5-cp312-cp312-win32.whl", hash = "sha256:8bd3ec6376e68a41f9f95f5ed170e2fcf22d4eb27a1f8cb361d0508f6e0557f3"}, - {file = "aiohttp-3.13.5-cp312-cp312-win_amd64.whl", hash = "sha256:110e448e02c729bcebb18c60b9214a87ba33bac4a9fa5e9a5f139938b56c6cb1"}, - {file = "aiohttp-3.13.5-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a5029cc80718bbd545123cd8fe5d15025eccaaaace5d0eeec6bd556ad6163d61"}, - {file = "aiohttp-3.13.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4bb6bf5811620003614076bdc807ef3b5e38244f9d25ca5fe888eaccea2a9832"}, - {file = "aiohttp-3.13.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a84792f8631bf5a94e52d9cc881c0b824ab42717165a5579c760b830d9392ac9"}, - {file = "aiohttp-3.13.5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:57653eac22c6a4c13eb22ecf4d673d64a12f266e72785ab1c8b8e5940d0e8090"}, - {file = "aiohttp-3.13.5-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e5e5f7debc7a57af53fdf5c5009f9391d9f4c12867049d509bf7bb164a6e295b"}, - {file = "aiohttp-3.13.5-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c719f65bebcdf6716f10e9eff80d27567f7892d8988c06de12bbbd39307c6e3a"}, - {file = "aiohttp-3.13.5-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d97f93fdae594d886c5a866636397e2bcab146fd7a132fd6bb9ce182224452f8"}, - {file = "aiohttp-3.13.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3df334e39d4c2f899a914f1dba283c1aadc311790733f705182998c6f7cae665"}, - {file = "aiohttp-3.13.5-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fe6970addfea9e5e081401bcbadf865d2b6da045472f58af08427e108d618540"}, - {file = "aiohttp-3.13.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7becdf835feff2f4f335d7477f121af787e3504b48b449ff737afb35869ba7bb"}, - {file = "aiohttp-3.13.5-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:676e5651705ad5d8a70aeb8eb6936c436d8ebbd56e63436cb7dd9bb36d2a9a46"}, - {file = "aiohttp-3.13.5-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:9b16c653d38eb1a611cc898c41e76859ca27f119d25b53c12875fd0474ae31a8"}, - {file = "aiohttp-3.13.5-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:999802d5fa0389f58decd24b537c54aa63c01c3219ce17d1214cbda3c2b22d2d"}, - {file = "aiohttp-3.13.5-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:ec707059ee75732b1ba130ed5f9580fe10ff75180c812bc267ded039db5128c6"}, - {file = "aiohttp-3.13.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2d6d44a5b48132053c2f6cd5c8cb14bc67e99a63594e336b0f2af81e94d5530c"}, - {file = "aiohttp-3.13.5-cp313-cp313-win32.whl", hash = "sha256:329f292ed14d38a6c4c435e465f48bebb47479fd676a0411936cc371643225cc"}, - {file = "aiohttp-3.13.5-cp313-cp313-win_amd64.whl", hash = "sha256:69f571de7500e0557801c0b51f4780482c0ec5fe2ac851af5a92cfce1af1cb83"}, - {file = "aiohttp-3.13.5-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:eb4639f32fd4a9904ab8fb45bf3383ba71137f3d9d4ba25b3b3f3109977c5b8c"}, - {file = "aiohttp-3.13.5-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:7e5dc4311bd5ac493886c63cbf76ab579dbe4641268e7c74e48e774c74b6f2be"}, - {file = "aiohttp-3.13.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:756c3c304d394977519824449600adaf2be0ccee76d206ee339c5e76b70ded25"}, - {file = "aiohttp-3.13.5-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecc26751323224cf8186efcf7fbcbc30f4e1d8c7970659daf25ad995e4032a56"}, - {file = "aiohttp-3.13.5-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:10a75acfcf794edf9d8db50e5a7ec5fc818b2a8d3f591ce93bc7b1210df016d2"}, - {file = "aiohttp-3.13.5-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0f7a18f258d124cd678c5fe072fe4432a4d5232b0657fca7c1847f599233c83a"}, - {file = "aiohttp-3.13.5-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:df6104c009713d3a89621096f3e3e88cc323fd269dbd7c20afe18535094320be"}, - {file = "aiohttp-3.13.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:241a94f7de7c0c3b616627aaad530fe2cb620084a8b144d3be7b6ecfe95bae3b"}, - {file = "aiohttp-3.13.5-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c974fb66180e58709b6fc402846f13791240d180b74de81d23913abe48e96d94"}, - {file = "aiohttp-3.13.5-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:6e27ea05d184afac78aabbac667450c75e54e35f62238d44463131bd3f96753d"}, - {file = "aiohttp-3.13.5-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:a79a6d399cef33a11b6f004c67bb07741d91f2be01b8d712d52c75711b1e07c7"}, - {file = "aiohttp-3.13.5-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:c632ce9c0b534fbe25b52c974515ed674937c5b99f549a92127c85f771a78772"}, - {file = "aiohttp-3.13.5-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:fceedde51fbd67ee2bcc8c0b33d0126cc8b51ef3bbde2f86662bd6d5a6f10ec5"}, - {file = "aiohttp-3.13.5-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:f92995dfec9420bb69ae629abf422e516923ba79ba4403bc750d94fb4a6c68c1"}, - {file = "aiohttp-3.13.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:20ae0ff08b1f2c8788d6fb85afcb798654ae6ba0b747575f8562de738078457b"}, - {file = "aiohttp-3.13.5-cp314-cp314-win32.whl", hash = "sha256:b20df693de16f42b2472a9c485e1c948ee55524786a0a34345511afdd22246f3"}, - {file = "aiohttp-3.13.5-cp314-cp314-win_amd64.whl", hash = "sha256:f85c6f327bf0b8c29da7d93b1cabb6363fb5e4e160a32fa241ed2dce21b73162"}, - {file = "aiohttp-3.13.5-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:1efb06900858bb618ff5cee184ae2de5828896c448403d51fb633f09e109be0a"}, - {file = "aiohttp-3.13.5-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:fee86b7c4bd29bdaf0d53d14739b08a106fdda809ca5fe032a15f52fae5fe254"}, - {file = "aiohttp-3.13.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:20058e23909b9e65f9da62b396b77dfa95965cbe840f8def6e572538b1d32e36"}, - {file = "aiohttp-3.13.5-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8cf20a8d6868cb15a73cab329ffc07291ba8c22b1b88176026106ae39aa6df0f"}, - {file = "aiohttp-3.13.5-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:330f5da04c987f1d5bdb8ae189137c77139f36bd1cb23779ca1a354a4b027800"}, - {file = "aiohttp-3.13.5-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6f1cbf0c7926d315c3c26c2da41fd2b5d2fe01ac0e157b78caefc51a782196cf"}, - {file = "aiohttp-3.13.5-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:53fc049ed6390d05423ba33103ded7281fe897cf97878f369a527070bd95795b"}, - {file = "aiohttp-3.13.5-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:898703aa2667e3c5ca4c54ca36cd73f58b7a38ef87a5606414799ebce4d3fd3a"}, - {file = "aiohttp-3.13.5-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0494a01ca9584eea1e5fbd6d748e61ecff218c51b576ee1999c23db7066417d8"}, - {file = "aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:6cf81fe010b8c17b09495cbd15c1d35afbc8fb405c0c9cf4738e5ae3af1d65be"}, - {file = "aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:c564dd5f09ddc9d8f2c2d0a301cd30a79a2cc1b46dd1a73bef8f0038863d016b"}, - {file = "aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:2994be9f6e51046c4f864598fd9abeb4fba6e88f0b2152422c9666dcd4aea9c6"}, - {file = "aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:157826e2fa245d2ef46c83ea8a5faf77ca19355d278d425c29fda0beb3318037"}, - {file = "aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:a8aca50daa9493e9e13c0f566201a9006f080e7c50e5e90d0b06f53146a54500"}, - {file = "aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3b13560160d07e047a93f23aaa30718606493036253d5430887514715b67c9d9"}, - {file = "aiohttp-3.13.5-cp314-cp314t-win32.whl", hash = "sha256:9a0f4474b6ea6818b41f82172d799e4b3d29e22c2c520ce4357856fced9af2f8"}, - {file = "aiohttp-3.13.5-cp314-cp314t-win_amd64.whl", hash = "sha256:18a2f6c1182c51baa1d28d68fea51513cb2a76612f038853c0ad3c145423d3d9"}, - {file = "aiohttp-3.13.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:347542f0ea3f95b2a955ee6656461fa1c776e401ac50ebce055a6c38454a0adf"}, - {file = "aiohttp-3.13.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:178c7b5e62b454c2bc790786e6058c3cc968613b4419251b478c153a4aec32b1"}, - {file = "aiohttp-3.13.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:af545c2cffdb0967a96b6249e6f5f7b0d92cdfd267f9d5238d5b9ca63e8edb10"}, - {file = "aiohttp-3.13.5-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:206b7b3ef96e4ce211754f0cd003feb28b7d81f0ad26b8d077a5d5161436067f"}, - {file = "aiohttp-3.13.5-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:ee5e86776273de1795947d17bddd6bb19e0365fd2af4289c0d2c5454b6b1d36b"}, - {file = "aiohttp-3.13.5-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:95d14ca7abefde230f7639ec136ade282655431fd5db03c343b19dda72dd1643"}, - {file = "aiohttp-3.13.5-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:912d4b6af530ddb1338a66229dac3a25ff11d4448be3ec3d6340583995f56031"}, - {file = "aiohttp-3.13.5-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e999f0c88a458c836d5fb521814e92ed2172c649200336a6df514987c1488258"}, - {file = "aiohttp-3.13.5-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:39380e12bd1f2fdab4285b6e055ad48efbaed5c836433b142ed4f5b9be71036a"}, - {file = "aiohttp-3.13.5-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:9efcc0f11d850cefcafdd9275b9576ad3bfb539bed96807663b32ad99c4d4b88"}, - {file = "aiohttp-3.13.5-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:147b4f501d0292077f29d5268c16bb7c864a1f054d7001c4c1812c0421ea1ed0"}, - {file = "aiohttp-3.13.5-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:d147004fede1b12f6013a6dbb2a26a986a671a03c6ea740ddc76500e5f1c399f"}, - {file = "aiohttp-3.13.5-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:9277145d36a01653863899c665243871434694bcc3431922c3b35c978061bdb8"}, - {file = "aiohttp-3.13.5-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:4e704c52438f66fdd89588346183d898bb42167cf88f8b7ff1c0f9fc957c348f"}, - {file = "aiohttp-3.13.5-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a8a4d3427e8de1312ddf309cc482186466c79895b3a139fed3259fc01dfa9a5b"}, - {file = "aiohttp-3.13.5-cp39-cp39-win32.whl", hash = "sha256:6f497a6876aa4b1a102b04996ce4c1170c7040d83faa9387dd921c16e30d5c83"}, - {file = "aiohttp-3.13.5-cp39-cp39-win_amd64.whl", hash = "sha256:cb979826071c0986a5f08333a36104153478ce6018c58cba7f9caddaf63d5d67"}, - {file = "aiohttp-3.13.5.tar.gz", hash = "sha256:9d98cc980ecc96be6eb4c1994ce35d28d8b1f5e5208a23b421187d1209dbb7d1"}, -] - -[package.dependencies] -aiohappyeyeballs = ">=2.5.0" -aiosignal = ">=1.4.0" -async-timeout = {version = ">=4.0,<6.0", markers = "python_version < \"3.11\""} -attrs = ">=17.3.0" -frozenlist = ">=1.1.1" -multidict = ">=4.5,<7.0" -propcache = ">=0.2.0" -yarl = ">=1.17.0,<2.0" - -[package.extras] -speedups = ["Brotli (>=1.2) ; platform_python_implementation == \"CPython\"", "aiodns (>=3.3.0)", "backports.zstd ; platform_python_implementation == \"CPython\" and python_version < \"3.14\"", "brotlicffi (>=1.2) ; platform_python_implementation != \"CPython\""] - -[[package]] -name = "aiosignal" -version = "1.4.0" -description = "aiosignal: a list of registered asynchronous callbacks" -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "aiosignal-1.4.0-py3-none-any.whl", hash = "sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e"}, - {file = "aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7"}, -] - -[package.dependencies] -frozenlist = ">=1.1.0" -typing-extensions = {version = ">=4.2", markers = "python_version < \"3.13\""} - -[[package]] -name = "annotated-doc" -version = "0.0.4" -description = "Document parameters, class attributes, return types, and variables inline, with Annotated." -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "annotated_doc-0.0.4-py3-none-any.whl", hash = "sha256:571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320"}, - {file = "annotated_doc-0.0.4.tar.gz", hash = "sha256:fbcda96e87e9c92ad167c2e53839e57503ecfda18804ea28102353485033faa4"}, -] - -[[package]] -name = "annotated-types" -version = "0.7.0" -description = "Reusable constraint types to use with typing.Annotated" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, - {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, -] - -[[package]] -name = "anyio" -version = "4.13.0" -description = "High-level concurrency and networking framework on top of asyncio or Trio" -optional = false -python-versions = ">=3.10" -groups = ["main"] -files = [ - {file = "anyio-4.13.0-py3-none-any.whl", hash = "sha256:08b310f9e24a9594186fd75b4f73f4a4152069e3853f1ed8bfbf58369f4ad708"}, - {file = "anyio-4.13.0.tar.gz", hash = "sha256:334b70e641fd2221c1505b3890c69882fe4a2df910cba14d97019b90b24439dc"}, -] - -[package.dependencies] -exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} -idna = ">=2.8" -typing_extensions = {version = ">=4.5", markers = "python_version < \"3.13\""} - -[package.extras] -trio = ["trio (>=0.32.0)"] - -[[package]] -name = "async-timeout" -version = "5.0.1" -description = "Timeout context manager for asyncio programs" -optional = false -python-versions = ">=3.8" -groups = ["main"] -markers = "python_version == \"3.10\"" -files = [ - {file = "async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c"}, - {file = "async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3"}, -] - -[[package]] -name = "attrs" -version = "26.1.0" -description = "Classes Without Boilerplate" -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309"}, - {file = "attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32"}, -] - -[[package]] -name = "beautifulsoup4" -version = "4.14.3" -description = "Screen-scraping library" -optional = false -python-versions = ">=3.7.0" -groups = ["main"] -files = [ - {file = "beautifulsoup4-4.14.3-py3-none-any.whl", hash = "sha256:0918bfe44902e6ad8d57732ba310582e98da931428d231a5ecb9e7c703a735bb"}, - {file = "beautifulsoup4-4.14.3.tar.gz", hash = "sha256:6292b1c5186d356bba669ef9f7f051757099565ad9ada5dd630bd9de5fa7fb86"}, -] - -[package.dependencies] -soupsieve = ">=1.6.1" -typing-extensions = ">=4.0.0" - -[package.extras] -cchardet = ["cchardet"] -chardet = ["chardet"] -charset-normalizer = ["charset-normalizer"] -html5lib = ["html5lib"] -lxml = ["lxml"] - -[[package]] -name = "certifi" -version = "2026.5.20" -description = "Python package for providing Mozilla's CA Bundle." -optional = false -python-versions = ">=3.7" -groups = ["main"] -files = [ - {file = "certifi-2026.5.20-py3-none-any.whl", hash = "sha256:3c52e209ba0a4ad7aebe60436a4ab349c39e1e602e8c134221e546902ad25897"}, - {file = "certifi-2026.5.20.tar.gz", hash = "sha256:69dea482ab64caa7b9f6aba1c6bf48bb6a5448d1c0f1b17ab42ad8c763a5344d"}, -] - -[[package]] -name = "charset-normalizer" -version = "3.4.7" -description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -optional = false -python-versions = ">=3.7" -groups = ["main"] -files = [ - {file = "charset_normalizer-3.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cdd68a1fb318e290a2077696b7eb7a21a49163c455979c639bf5a5dcdc46617d"}, - {file = "charset_normalizer-3.4.7-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e17b8d5d6a8c47c85e68ca8379def1303fd360c3e22093a807cd34a71cd082b8"}, - {file = "charset_normalizer-3.4.7-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:511ef87c8aec0783e08ac18565a16d435372bc1ac25a91e6ac7f5ef2b0bff790"}, - {file = "charset_normalizer-3.4.7-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:007d05ec7321d12a40227aae9e2bc6dca73f3cb21058999a1df9e193555a9dcc"}, - {file = "charset_normalizer-3.4.7-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cf29836da5119f3c8a8a70667b0ef5fdca3bb12f80fd06487cfa575b3909b393"}, - {file = "charset_normalizer-3.4.7-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:12d8baf840cc7889b37c7c770f478adea7adce3dcb3944d02ec87508e2dcf153"}, - {file = "charset_normalizer-3.4.7-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d560742f3c0d62afaccf9f41fe485ed69bd7661a241f86a3ef0f0fb8b1a397af"}, - {file = "charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b14b2d9dac08e28bb8046a1a0434b1750eb221c8f5b87a68f4fa11a6f97b5e34"}, - {file = "charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:bc17a677b21b3502a21f66a8cc64f5bfad4df8a0b8434d661666f8ce90ac3af1"}, - {file = "charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:750e02e074872a3fad7f233b47734166440af3cdea0add3e95163110816d6752"}, - {file = "charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:4e5163c14bffd570ef2affbfdd77bba66383890797df43dc8b4cc7d6f500bf53"}, - {file = "charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6ed74185b2db44f41ef35fd1617c5888e59792da9bbc9190d6c7300617182616"}, - {file = "charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:94e1885b270625a9a828c9793b4d52a64445299baa1fea5a173bf1d3dd9a1a5a"}, - {file = "charset_normalizer-3.4.7-cp310-cp310-win32.whl", hash = "sha256:6785f414ae0f3c733c437e0f3929197934f526d19dfaa75e18fdb4f94c6fb374"}, - {file = "charset_normalizer-3.4.7-cp310-cp310-win_amd64.whl", hash = "sha256:6696b7688f54f5af4462118f0bfa7c1621eeb87154f77fa04b9295ce7a8f2943"}, - {file = "charset_normalizer-3.4.7-cp310-cp310-win_arm64.whl", hash = "sha256:66671f93accb62ed07da56613636f3641f1a12c13046ce91ffc923721f23c008"}, - {file = "charset_normalizer-3.4.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7641bb8895e77f921102f72833904dcd9901df5d6d72a2ab8f31d04b7e51e4e7"}, - {file = "charset_normalizer-3.4.7-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:202389074300232baeb53ae2569a60901f7efadd4245cf3a3bf0617d60b439d7"}, - {file = "charset_normalizer-3.4.7-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:30b8d1d8c52a48c2c5690e152c169b673487a2a58de1ec7393196753063fcd5e"}, - {file = "charset_normalizer-3.4.7-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:532bc9bf33a68613fd7d65e4b1c71a6a38d7d42604ecf239c77392e9b4e8998c"}, - {file = "charset_normalizer-3.4.7-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2fe249cb4651fd12605b7288b24751d8bfd46d35f12a20b1ba33dea122e690df"}, - {file = "charset_normalizer-3.4.7-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:65bcd23054beab4d166035cabbc868a09c1a49d1efe458fe8e4361215df40265"}, - {file = "charset_normalizer-3.4.7-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:08e721811161356f97b4059a9ba7bafb23ea5ee2255402c42881c214e173c6b4"}, - {file = "charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e060d01aec0a910bdccb8be71faf34e7799ce36950f8294c8bf612cba65a2c9e"}, - {file = "charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:38c0109396c4cfc574d502df99742a45c72c08eff0a36158b6f04000043dbf38"}, - {file = "charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:1c2a768fdd44ee4a9339a9b0b130049139b8ce3c01d2ce09f67f5a68048d477c"}, - {file = "charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:1a87ca9d5df6fe460483d9a5bbf2b18f620cbed41b432e2bddb686228282d10b"}, - {file = "charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:d635aab80466bc95771bb78d5370e74d36d1fe31467b6b29b8b57b2a3cd7d22c"}, - {file = "charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ae196f021b5e7c78e918242d217db021ed2a6ace2bc6ae94c0fc596221c7f58d"}, - {file = "charset_normalizer-3.4.7-cp311-cp311-win32.whl", hash = "sha256:adb2597b428735679446b46c8badf467b4ca5f5056aae4d51a19f9570301b1ad"}, - {file = "charset_normalizer-3.4.7-cp311-cp311-win_amd64.whl", hash = "sha256:8e385e4267ab76874ae30db04c627faaaf0b509e1ccc11a95b3fc3e83f855c00"}, - {file = "charset_normalizer-3.4.7-cp311-cp311-win_arm64.whl", hash = "sha256:d4a48e5b3c2a489fae013b7589308a40146ee081f6f509e047e0e096084ceca1"}, - {file = "charset_normalizer-3.4.7-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:eca9705049ad3c7345d574e3510665cb2cf844c2f2dcfe675332677f081cbd46"}, - {file = "charset_normalizer-3.4.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6178f72c5508bfc5fd446a5905e698c6212932f25bcdd4b47a757a50605a90e2"}, - {file = "charset_normalizer-3.4.7-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e1421b502d83040e6d7fb2fb18dff63957f720da3d77b2fbd3187ceb63755d7b"}, - {file = "charset_normalizer-3.4.7-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:edac0f1ab77644605be2cbba52e6b7f630731fc42b34cb0f634be1a6eface56a"}, - {file = "charset_normalizer-3.4.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5649fd1c7bade02f320a462fdefd0b4bd3ce036065836d4f42e0de958038e116"}, - {file = "charset_normalizer-3.4.7-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:203104ed3e428044fd943bc4bf45fa73c0730391f9621e37fe39ecf477b128cb"}, - {file = "charset_normalizer-3.4.7-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:298930cec56029e05497a76988377cbd7457ba864beeea92ad7e844fe74cd1f1"}, - {file = "charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:708838739abf24b2ceb208d0e22403dd018faeef86ddac04319a62ae884c4f15"}, - {file = "charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:0f7eb884681e3938906ed0434f20c63046eacd0111c4ba96f27b76084cd679f5"}, - {file = "charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4dc1e73c36828f982bfe79fadf5919923f8a6f4df2860804db9a98c48824ce8d"}, - {file = "charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:aed52fea0513bac0ccde438c188c8a471c4e0f457c2dd20cdbf6ea7a450046c7"}, - {file = "charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:fea24543955a6a729c45a73fe90e08c743f0b3334bbf3201e6c4bc1b0c7fa464"}, - {file = "charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bb6d88045545b26da47aa879dd4a89a71d1dce0f0e549b1abcb31dfe4a8eac49"}, - {file = "charset_normalizer-3.4.7-cp312-cp312-win32.whl", hash = "sha256:2257141f39fe65a3fdf38aeccae4b953e5f3b3324f4ff0daf9f15b8518666a2c"}, - {file = "charset_normalizer-3.4.7-cp312-cp312-win_amd64.whl", hash = "sha256:5ed6ab538499c8644b8a3e18debabcd7ce684f3fa91cf867521a7a0279cab2d6"}, - {file = "charset_normalizer-3.4.7-cp312-cp312-win_arm64.whl", hash = "sha256:56be790f86bfb2c98fb742ce566dfb4816e5a83384616ab59c49e0604d49c51d"}, - {file = "charset_normalizer-3.4.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f496c9c3cc02230093d8330875c4c3cdfc3b73612a5fd921c65d39cbcef08063"}, - {file = "charset_normalizer-3.4.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ea948db76d31190bf08bd371623927ee1339d5f2a0b4b1b4a4439a65298703c"}, - {file = "charset_normalizer-3.4.7-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a277ab8928b9f299723bc1a2dabb1265911b1a76341f90a510368ca44ad9ab66"}, - {file = "charset_normalizer-3.4.7-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3bec022aec2c514d9cf199522a802bd007cd588ab17ab2525f20f9c34d067c18"}, - {file = "charset_normalizer-3.4.7-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e044c39e41b92c845bc815e5ae4230804e8e7bc29e399b0437d64222d92809dd"}, - {file = "charset_normalizer-3.4.7-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:f495a1652cf3fbab2eb0639776dad966c2fb874d79d87ca07f9d5f059b8bd215"}, - {file = "charset_normalizer-3.4.7-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e712b419df8ba5e42b226c510472b37bd57b38e897d3eca5e8cfd410a29fa859"}, - {file = "charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7804338df6fcc08105c7745f1502ba68d900f45fd770d5bdd5288ddccb8a42d8"}, - {file = "charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:481551899c856c704d58119b5025793fa6730adda3571971af568f66d2424bb5"}, - {file = "charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f59099f9b66f0d7145115e6f80dd8b1d847176df89b234a5a6b3f00437aa0832"}, - {file = "charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:f59ad4c0e8f6bba240a9bb85504faa1ab438237199d4cce5f622761507b8f6a6"}, - {file = "charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:3dedcc22d73ec993f42055eff4fcfed9318d1eeb9a6606c55892a26964964e48"}, - {file = "charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:64f02c6841d7d83f832cd97ccf8eb8a906d06eb95d5276069175c696b024b60a"}, - {file = "charset_normalizer-3.4.7-cp313-cp313-win32.whl", hash = "sha256:4042d5c8f957e15221d423ba781e85d553722fc4113f523f2feb7b188cc34c5e"}, - {file = "charset_normalizer-3.4.7-cp313-cp313-win_amd64.whl", hash = "sha256:3946fa46a0cf3e4c8cb1cc52f56bb536310d34f25f01ca9b6c16afa767dab110"}, - {file = "charset_normalizer-3.4.7-cp313-cp313-win_arm64.whl", hash = "sha256:80d04837f55fc81da168b98de4f4b797ef007fc8a79ab71c6ec9bc4dd662b15b"}, - {file = "charset_normalizer-3.4.7-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c36c333c39be2dbca264d7803333c896ab8fa7d4d6f0ab7edb7dfd7aea6e98c0"}, - {file = "charset_normalizer-3.4.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c2aed2e5e41f24ea8ef1590b8e848a79b56f3a5564a65ceec43c9d692dc7d8a"}, - {file = "charset_normalizer-3.4.7-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:54523e136b8948060c0fa0bc7b1b50c32c186f2fceee897a495406bb6e311d2b"}, - {file = "charset_normalizer-3.4.7-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:715479b9a2802ecac752a3b0efa2b0b60285cf962ee38414211abdfccc233b41"}, - {file = "charset_normalizer-3.4.7-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bd6c2a1c7573c64738d716488d2cdd3c00e340e4835707d8fdb8dc1a66ef164e"}, - {file = "charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:c45e9440fb78f8ddabcf714b68f936737a121355bf59f3907f4e17721b9d1aae"}, - {file = "charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3534e7dcbdcf757da6b85a0bbf5b6868786d5982dd959b065e65481644817a18"}, - {file = "charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e8ac484bf18ce6975760921bb6148041faa8fef0547200386ea0b52b5d27bf7b"}, - {file = "charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:a5fe03b42827c13cdccd08e6c0247b6a6d4b5e3cdc53fd1749f5896adcdc2356"}, - {file = "charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:2d6eb928e13016cea4f1f21d1e10c1cebd5a421bc57ddf5b1142ae3f86824fab"}, - {file = "charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:e74327fb75de8986940def6e8dee4f127cc9752bee7355bb323cc5b2659b6d46"}, - {file = "charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:d6038d37043bced98a66e68d3aa2b6a35505dc01328cd65217cefe82f25def44"}, - {file = "charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7579e913a5339fb8fa133f6bbcfd8e6749696206cf05acdbdca71a1b436d8e72"}, - {file = "charset_normalizer-3.4.7-cp314-cp314-win32.whl", hash = "sha256:5b77459df20e08151cd6f8b9ef8ef1f961ef73d85c21a555c7eed5b79410ec10"}, - {file = "charset_normalizer-3.4.7-cp314-cp314-win_amd64.whl", hash = "sha256:92a0a01ead5e668468e952e4238cccd7c537364eb7d851ab144ab6627dbbe12f"}, - {file = "charset_normalizer-3.4.7-cp314-cp314-win_arm64.whl", hash = "sha256:67f6279d125ca0046a7fd386d01b311c6363844deac3e5b069b514ba3e63c246"}, - {file = "charset_normalizer-3.4.7-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:effc3f449787117233702311a1b7d8f59cba9ced946ba727bdc329ec69028e24"}, - {file = "charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fbccdc05410c9ee21bbf16a35f4c1d16123dcdeb8a1d38f33654fa21d0234f79"}, - {file = "charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:733784b6d6def852c814bce5f318d25da2ee65dd4839a0718641c696e09a2960"}, - {file = "charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a89c23ef8d2c6b27fd200a42aa4ac72786e7c60d40efdc76e6011260b6e949c4"}, - {file = "charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6c114670c45346afedc0d947faf3c7f701051d2518b943679c8ff88befe14f8e"}, - {file = "charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:a180c5e59792af262bf263b21a3c49353f25945d8d9f70628e73de370d55e1e1"}, - {file = "charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3c9a494bc5ec77d43cea229c4f6db1e4d8fe7e1bbffa8b6f0f0032430ff8ab44"}, - {file = "charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8d828b6667a32a728a1ad1d93957cdf37489c57b97ae6c4de2860fa749b8fc1e"}, - {file = "charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:cf1493cd8607bec4d8a7b9b004e699fcf8f9103a9284cc94962cb73d20f9d4a3"}, - {file = "charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:0c96c3b819b5c3e9e165495db84d41914d6894d55181d2d108cc1a69bfc9cce0"}, - {file = "charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:752a45dc4a6934060b3b0dab47e04edc3326575f82be64bc4fc293914566503e"}, - {file = "charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:8778f0c7a52e56f75d12dae53ae320fae900a8b9b4164b981b9c5ce059cd1fcb"}, - {file = "charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ce3412fbe1e31eb81ea42f4169ed94861c56e643189e1e75f0041f3fe7020abe"}, - {file = "charset_normalizer-3.4.7-cp314-cp314t-win32.whl", hash = "sha256:c03a41a8784091e67a39648f70c5f97b5b6a37f216896d44d2cdcb82615339a0"}, - {file = "charset_normalizer-3.4.7-cp314-cp314t-win_amd64.whl", hash = "sha256:03853ed82eeebbce3c2abfdbc98c96dc205f32a79627688ac9a27370ea61a49c"}, - {file = "charset_normalizer-3.4.7-cp314-cp314t-win_arm64.whl", hash = "sha256:c35abb8bfff0185efac5878da64c45dafd2b37fb0383add1be155a763c1f083d"}, - {file = "charset_normalizer-3.4.7-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e5f4d355f0a2b1a31bc3edec6795b46324349c9cb25eed068049e4f472fb4259"}, - {file = "charset_normalizer-3.4.7-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:16d971e29578a5e97d7117866d15889a4a07befe0e87e703ed63cd90cb348c01"}, - {file = "charset_normalizer-3.4.7-cp38-cp38-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:dca4bbc466a95ba9c0234ef56d7dd9509f63da22274589ebd4ed7f1f4d4c54e3"}, - {file = "charset_normalizer-3.4.7-cp38-cp38-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e80c8378d8f3d83cd3164da1ad2df9e37a666cdde7b1cb2298ed0b558064be30"}, - {file = "charset_normalizer-3.4.7-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:36836d6ff945a00b88ba1e4572d721e60b5b8c98c155d465f56ad19d68f23734"}, - {file = "charset_normalizer-3.4.7-cp38-cp38-manylinux_2_31_armv7l.whl", hash = "sha256:bd9b23791fe793e4968dba0c447e12f78e425c59fc0e3b97f6450f4781f3ee60"}, - {file = "charset_normalizer-3.4.7-cp38-cp38-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:aef65cd602a6d0e0ff6f9930fcb1c8fec60dd2cfcb6facaf4bdb0e5873042db0"}, - {file = "charset_normalizer-3.4.7-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:82b271f5137d07749f7bf32f70b17ab6eaabedd297e75dce75081a24f76eb545"}, - {file = "charset_normalizer-3.4.7-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:1efde3cae86c8c273f1eb3b287be7d8499420cf2fe7585c41d370d3e790054a5"}, - {file = "charset_normalizer-3.4.7-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:c593052c465475e64bbfe5dbd81680f64a67fdc752c56d7a0ae205dc8aeefe0f"}, - {file = "charset_normalizer-3.4.7-cp38-cp38-musllinux_1_2_riscv64.whl", hash = "sha256:af21eb4409a119e365397b2adbaca4c9ccab56543a65d5dbd9f920d6ac29f686"}, - {file = "charset_normalizer-3.4.7-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:84c018e49c3bf790f9c2771c45e9313a08c2c2a6342b162cd650258b57817706"}, - {file = "charset_normalizer-3.4.7-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:dd915403e231e6b1809fe9b6d9fc55cf8fb5e02765ac625d9cd623342a7905d7"}, - {file = "charset_normalizer-3.4.7-cp38-cp38-win32.whl", hash = "sha256:320ade88cfb846b8cd6b4ddf5ee9e80ee0c1f52401f2456b84ae1ae6a1a5f207"}, - {file = "charset_normalizer-3.4.7-cp38-cp38-win_amd64.whl", hash = "sha256:1dc8b0ea451d6e69735094606991f32867807881400f808a106ee1d963c46a83"}, - {file = "charset_normalizer-3.4.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:177a0ba5f0211d488e295aaf82707237e331c24788d8d76c96c5a41594723217"}, - {file = "charset_normalizer-3.4.7-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e0d51f618228538a3e8f46bd246f87a6cd030565e015803691603f55e12afb5"}, - {file = "charset_normalizer-3.4.7-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:14265bfe1f09498b9d8ec91e9ec9fa52775edf90fcbde092b25f4a33d444fea9"}, - {file = "charset_normalizer-3.4.7-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:87fad7d9ba98c86bcb41b2dc8dbb326619be2562af1f8ff50776a39e55721c5a"}, - {file = "charset_normalizer-3.4.7-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f22dec1690b584cea26fade98b2435c132c1b5f68e39f5a0b7627cd7ae31f1dc"}, - {file = "charset_normalizer-3.4.7-cp39-cp39-manylinux_2_31_armv7l.whl", hash = "sha256:d61f00a0869d77422d9b2aba989e2d24afa6ffd552af442e0e58de4f35ea6d00"}, - {file = "charset_normalizer-3.4.7-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6370e8686f662e6a3941ee48ed4742317cafbe5707e36406e9df792cdb535776"}, - {file = "charset_normalizer-3.4.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:a6c5863edfbe888d9eff9c8b8087354e27618d9da76425c119293f11712a6319"}, - {file = "charset_normalizer-3.4.7-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:ed065083d0898c9d5b4bbec7b026fd755ff7454e6e8b73a67f8c744b13986e24"}, - {file = "charset_normalizer-3.4.7-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:2cd4a60d0e2fb04537162c62bbbb4182f53541fe0ede35cdf270a1c1e723cc42"}, - {file = "charset_normalizer-3.4.7-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:813c0e0132266c08eb87469a642cb30aaff57c5f426255419572aaeceeaa7bf4"}, - {file = "charset_normalizer-3.4.7-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:07d9e39b01743c3717745f4c530a6349eadbfa043c7577eef86c502c15df2c67"}, - {file = "charset_normalizer-3.4.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c0f081d69a6e58272819b70288d3221a6ee64b98df852631c80f293514d3b274"}, - {file = "charset_normalizer-3.4.7-cp39-cp39-win32.whl", hash = "sha256:8751d2787c9131302398b11e6c8068053dcb55d5a8964e114b6e196cf16cb366"}, - {file = "charset_normalizer-3.4.7-cp39-cp39-win_amd64.whl", hash = "sha256:12a6fff75f6bc66711b73a2f0addfc4c8c15a20e805146a02d147a318962c444"}, - {file = "charset_normalizer-3.4.7-cp39-cp39-win_arm64.whl", hash = "sha256:bb8cc7534f51d9a017b93e3e85b260924f909601c3df002bcdb58ddb4dc41a5c"}, - {file = "charset_normalizer-3.4.7-py3-none-any.whl", hash = "sha256:3dce51d0f5e7951f8bb4900c257dad282f49190fdbebecd4ba99bcc41fef404d"}, - {file = "charset_normalizer-3.4.7.tar.gz", hash = "sha256:ae89db9e5f98a11a4bf50407d4363e7b09b31e55bc117b4f7d80aab97ba009e5"}, -] - -[[package]] -name = "click" -version = "8.4.1" -description = "Composable command line interface toolkit" -optional = false -python-versions = ">=3.10" -groups = ["main"] -files = [ - {file = "click-8.4.1-py3-none-any.whl", hash = "sha256:482be17c6991b8c19c5429a1e995d9b0efdbb63172824c41f99965dc0ade8ec2"}, - {file = "click-8.4.1.tar.gz", hash = "sha256:918b5633eddf6b41c32d4f454bf0de810065c74e3f7dbf8ee5452f8be88d3e96"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[[package]] -name = "colorama" -version = "0.4.6" -description = "Cross-platform colored terminal text." -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -groups = ["main"] -markers = "platform_system == \"Windows\"" -files = [ - {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, - {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, -] - -[[package]] -name = "exceptiongroup" -version = "1.3.1" -description = "Backport of PEP 654 (exception groups)" -optional = false -python-versions = ">=3.7" -groups = ["main"] -markers = "python_version == \"3.10\"" -files = [ - {file = "exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598"}, - {file = "exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219"}, -] - -[package.dependencies] -typing-extensions = {version = ">=4.6.0", markers = "python_version < \"3.13\""} - -[package.extras] -test = ["pytest (>=6)"] - -[[package]] -name = "fastapi" -version = "0.128.8" -description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "fastapi-0.128.8-py3-none-any.whl", hash = "sha256:5618f492d0fe973a778f8fec97723f598aa9deee495040a8d51aaf3cf123ecf1"}, - {file = "fastapi-0.128.8.tar.gz", hash = "sha256:3171f9f328c4a218f0a8d2ba8310ac3a55d1ee12c28c949650288aee25966007"}, -] - -[package.dependencies] -annotated-doc = ">=0.0.2" -pydantic = ">=2.7.0" -starlette = ">=0.40.0,<1.0.0" -typing-extensions = ">=4.8.0" -typing-inspection = ">=0.4.2" - -[package.extras] -all = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.8)", "httpx (>=0.23.0,<1.0.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=3.1.5)", "orjson (>=3.9.3)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.18)", "pyyaml (>=5.3.1)", "ujson (>=5.8.0)", "uvicorn[standard] (>=0.12.0)"] -standard = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.8)", "httpx (>=0.23.0,<1.0.0)", "jinja2 (>=3.1.5)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.18)", "uvicorn[standard] (>=0.12.0)"] -standard-no-fastapi-cloud-cli = ["email-validator (>=2.0.0)", "fastapi-cli[standard-no-fastapi-cloud-cli] (>=0.0.8)", "httpx (>=0.23.0,<1.0.0)", "jinja2 (>=3.1.5)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.18)", "uvicorn[standard] (>=0.12.0)"] - -[[package]] -name = "finvizfinance" -version = "1.3.0" -description = "Finviz Finance. Information downloader." -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "finvizfinance-1.3.0-py3-none-any.whl", hash = "sha256:139e1d2022c3abda6905f10f0f274f3fb8ed193f357fd2664af461a3d24fb29d"}, - {file = "finvizfinance-1.3.0.tar.gz", hash = "sha256:906f3bfafcb8c995dd75304671f193bc2762a2c766320fcf7551716976de16b9"}, -] - -[package.dependencies] -beautifulsoup4 = "*" -lxml = "*" -pandas = "*" -requests = "*" - -[[package]] -name = "frozenlist" -version = "1.8.0" -description = "A list-like structure which implements collections.abc.MutableSequence" -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "frozenlist-1.8.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b37f6d31b3dcea7deb5e9696e529a6aa4a898adc33db82da12e4c60a7c4d2011"}, - {file = "frozenlist-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ef2b7b394f208233e471abc541cc6991f907ffd47dc72584acee3147899d6565"}, - {file = "frozenlist-1.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a88f062f072d1589b7b46e951698950e7da00442fc1cacbe17e19e025dc327ad"}, - {file = "frozenlist-1.8.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f57fb59d9f385710aa7060e89410aeb5058b99e62f4d16b08b91986b9a2140c2"}, - {file = "frozenlist-1.8.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:799345ab092bee59f01a915620b5d014698547afd011e691a208637312db9186"}, - {file = "frozenlist-1.8.0-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c23c3ff005322a6e16f71bf8692fcf4d5a304aaafe1e262c98c6d4adc7be863e"}, - {file = "frozenlist-1.8.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8a76ea0f0b9dfa06f254ee06053d93a600865b3274358ca48a352ce4f0798450"}, - {file = "frozenlist-1.8.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c7366fe1418a6133d5aa824ee53d406550110984de7637d65a178010f759c6ef"}, - {file = "frozenlist-1.8.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:13d23a45c4cebade99340c4165bd90eeb4a56c6d8a9d8aa49568cac19a6d0dc4"}, - {file = "frozenlist-1.8.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:e4a3408834f65da56c83528fb52ce7911484f0d1eaf7b761fc66001db1646eff"}, - {file = "frozenlist-1.8.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:42145cd2748ca39f32801dad54aeea10039da6f86e303659db90db1c4b614c8c"}, - {file = "frozenlist-1.8.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:e2de870d16a7a53901e41b64ffdf26f2fbb8917b3e6ebf398098d72c5b20bd7f"}, - {file = "frozenlist-1.8.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:20e63c9493d33ee48536600d1a5c95eefc870cd71e7ab037763d1fbb89cc51e7"}, - {file = "frozenlist-1.8.0-cp310-cp310-win32.whl", hash = "sha256:adbeebaebae3526afc3c96fad434367cafbfd1b25d72369a9e5858453b1bb71a"}, - {file = "frozenlist-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:667c3777ca571e5dbeb76f331562ff98b957431df140b54c85fd4d52eea8d8f6"}, - {file = "frozenlist-1.8.0-cp310-cp310-win_arm64.whl", hash = "sha256:80f85f0a7cc86e7a54c46d99c9e1318ff01f4687c172ede30fd52d19d1da1c8e"}, - {file = "frozenlist-1.8.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:09474e9831bc2b2199fad6da3c14c7b0fbdd377cce9d3d77131be28906cb7d84"}, - {file = "frozenlist-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:17c883ab0ab67200b5f964d2b9ed6b00971917d5d8a92df149dc2c9779208ee9"}, - {file = "frozenlist-1.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fa47e444b8ba08fffd1c18e8cdb9a75db1b6a27f17507522834ad13ed5922b93"}, - {file = "frozenlist-1.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2552f44204b744fba866e573be4c1f9048d6a324dfe14475103fd51613eb1d1f"}, - {file = "frozenlist-1.8.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:957e7c38f250991e48a9a73e6423db1bb9dd14e722a10f6b8bb8e16a0f55f695"}, - {file = "frozenlist-1.8.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:8585e3bb2cdea02fc88ffa245069c36555557ad3609e83be0ec71f54fd4abb52"}, - {file = "frozenlist-1.8.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:edee74874ce20a373d62dc28b0b18b93f645633c2943fd90ee9d898550770581"}, - {file = "frozenlist-1.8.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c9a63152fe95756b85f31186bddf42e4c02c6321207fd6601a1c89ebac4fe567"}, - {file = "frozenlist-1.8.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b6db2185db9be0a04fecf2f241c70b63b1a242e2805be291855078f2b404dd6b"}, - {file = "frozenlist-1.8.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:f4be2e3d8bc8aabd566f8d5b8ba7ecc09249d74ba3c9ed52e54dc23a293f0b92"}, - {file = "frozenlist-1.8.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:c8d1634419f39ea6f5c427ea2f90ca85126b54b50837f31497f3bf38266e853d"}, - {file = "frozenlist-1.8.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:1a7fa382a4a223773ed64242dbe1c9c326ec09457e6b8428efb4118c685c3dfd"}, - {file = "frozenlist-1.8.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:11847b53d722050808926e785df837353bd4d75f1d494377e59b23594d834967"}, - {file = "frozenlist-1.8.0-cp311-cp311-win32.whl", hash = "sha256:27c6e8077956cf73eadd514be8fb04d77fc946a7fe9f7fe167648b0b9085cc25"}, - {file = "frozenlist-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:ac913f8403b36a2c8610bbfd25b8013488533e71e62b4b4adce9c86c8cea905b"}, - {file = "frozenlist-1.8.0-cp311-cp311-win_arm64.whl", hash = "sha256:d4d3214a0f8394edfa3e303136d0575eece0745ff2b47bd2cb2e66dd92d4351a"}, - {file = "frozenlist-1.8.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:78f7b9e5d6f2fdb88cdde9440dc147259b62b9d3b019924def9f6478be254ac1"}, - {file = "frozenlist-1.8.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:229bf37d2e4acdaf808fd3f06e854a4a7a3661e871b10dc1f8f1896a3b05f18b"}, - {file = "frozenlist-1.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f833670942247a14eafbb675458b4e61c82e002a148f49e68257b79296e865c4"}, - {file = "frozenlist-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:494a5952b1c597ba44e0e78113a7266e656b9794eec897b19ead706bd7074383"}, - {file = "frozenlist-1.8.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96f423a119f4777a4a056b66ce11527366a8bb92f54e541ade21f2374433f6d4"}, - {file = "frozenlist-1.8.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3462dd9475af2025c31cc61be6652dfa25cbfb56cbbf52f4ccfe029f38decaf8"}, - {file = "frozenlist-1.8.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c4c800524c9cd9bac5166cd6f55285957fcfc907db323e193f2afcd4d9abd69b"}, - {file = "frozenlist-1.8.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d6a5df73acd3399d893dafc71663ad22534b5aa4f94e8a2fabfe856c3c1b6a52"}, - {file = "frozenlist-1.8.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:405e8fe955c2280ce66428b3ca55e12b3c4e9c336fb2103a4937e891c69a4a29"}, - {file = "frozenlist-1.8.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:908bd3f6439f2fef9e85031b59fd4f1297af54415fb60e4254a95f75b3cab3f3"}, - {file = "frozenlist-1.8.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:294e487f9ec720bd8ffcebc99d575f7eff3568a08a253d1ee1a0378754b74143"}, - {file = "frozenlist-1.8.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:74c51543498289c0c43656701be6b077f4b265868fa7f8a8859c197006efb608"}, - {file = "frozenlist-1.8.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:776f352e8329135506a1d6bf16ac3f87bc25b28e765949282dcc627af36123aa"}, - {file = "frozenlist-1.8.0-cp312-cp312-win32.whl", hash = "sha256:433403ae80709741ce34038da08511d4a77062aa924baf411ef73d1146e74faf"}, - {file = "frozenlist-1.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:34187385b08f866104f0c0617404c8eb08165ab1272e884abc89c112e9c00746"}, - {file = "frozenlist-1.8.0-cp312-cp312-win_arm64.whl", hash = "sha256:fe3c58d2f5db5fbd18c2987cba06d51b0529f52bc3a6cdc33d3f4eab725104bd"}, - {file = "frozenlist-1.8.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8d92f1a84bb12d9e56f818b3a746f3efba93c1b63c8387a73dde655e1e42282a"}, - {file = "frozenlist-1.8.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:96153e77a591c8adc2ee805756c61f59fef4cf4073a9275ee86fe8cba41241f7"}, - {file = "frozenlist-1.8.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f21f00a91358803399890ab167098c131ec2ddd5f8f5fd5fe9c9f2c6fcd91e40"}, - {file = "frozenlist-1.8.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:fb30f9626572a76dfe4293c7194a09fb1fe93ba94c7d4f720dfae3b646b45027"}, - {file = "frozenlist-1.8.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eaa352d7047a31d87dafcacbabe89df0aa506abb5b1b85a2fb91bc3faa02d822"}, - {file = "frozenlist-1.8.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:03ae967b4e297f58f8c774c7eabcce57fe3c2434817d4385c50661845a058121"}, - {file = "frozenlist-1.8.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f6292f1de555ffcc675941d65fffffb0a5bcd992905015f85d0592201793e0e5"}, - {file = "frozenlist-1.8.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:29548f9b5b5e3460ce7378144c3010363d8035cea44bc0bf02d57f5a685e084e"}, - {file = "frozenlist-1.8.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ec3cc8c5d4084591b4237c0a272cc4f50a5b03396a47d9caaf76f5d7b38a4f11"}, - {file = "frozenlist-1.8.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:517279f58009d0b1f2e7c1b130b377a349405da3f7621ed6bfae50b10adf20c1"}, - {file = "frozenlist-1.8.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:db1e72ede2d0d7ccb213f218df6a078a9c09a7de257c2fe8fcef16d5925230b1"}, - {file = "frozenlist-1.8.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:b4dec9482a65c54a5044486847b8a66bf10c9cb4926d42927ec4e8fd5db7fed8"}, - {file = "frozenlist-1.8.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:21900c48ae04d13d416f0e1e0c4d81f7931f73a9dfa0b7a8746fb2fe7dd970ed"}, - {file = "frozenlist-1.8.0-cp313-cp313-win32.whl", hash = "sha256:8b7b94a067d1c504ee0b16def57ad5738701e4ba10cec90529f13fa03c833496"}, - {file = "frozenlist-1.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:878be833caa6a3821caf85eb39c5ba92d28e85df26d57afb06b35b2efd937231"}, - {file = "frozenlist-1.8.0-cp313-cp313-win_arm64.whl", hash = "sha256:44389d135b3ff43ba8cc89ff7f51f5a0bb6b63d829c8300f79a2fe4fe61bcc62"}, - {file = "frozenlist-1.8.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:e25ac20a2ef37e91c1b39938b591457666a0fa835c7783c3a8f33ea42870db94"}, - {file = "frozenlist-1.8.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:07cdca25a91a4386d2e76ad992916a85038a9b97561bf7a3fd12d5d9ce31870c"}, - {file = "frozenlist-1.8.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4e0c11f2cc6717e0a741f84a527c52616140741cd812a50422f83dc31749fb52"}, - {file = "frozenlist-1.8.0-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b3210649ee28062ea6099cfda39e147fa1bc039583c8ee4481cb7811e2448c51"}, - {file = "frozenlist-1.8.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:581ef5194c48035a7de2aefc72ac6539823bb71508189e5de01d60c9dcd5fa65"}, - {file = "frozenlist-1.8.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3ef2d026f16a2b1866e1d86fc4e1291e1ed8a387b2c333809419a2f8b3a77b82"}, - {file = "frozenlist-1.8.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5500ef82073f599ac84d888e3a8c1f77ac831183244bfd7f11eaa0289fb30714"}, - {file = "frozenlist-1.8.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:50066c3997d0091c411a66e710f4e11752251e6d2d73d70d8d5d4c76442a199d"}, - {file = "frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:5c1c8e78426e59b3f8005e9b19f6ff46e5845895adbde20ece9218319eca6506"}, - {file = "frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:eefdba20de0d938cec6a89bd4d70f346a03108a19b9df4248d3cf0d88f1b0f51"}, - {file = "frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:cf253e0e1c3ceb4aaff6df637ce033ff6535fb8c70a764a8f46aafd3d6ab798e"}, - {file = "frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:032efa2674356903cd0261c4317a561a6850f3ac864a63fc1583147fb05a79b0"}, - {file = "frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6da155091429aeba16851ecb10a9104a108bcd32f6c1642867eadaee401c1c41"}, - {file = "frozenlist-1.8.0-cp313-cp313t-win32.whl", hash = "sha256:0f96534f8bfebc1a394209427d0f8a63d343c9779cda6fc25e8e121b5fd8555b"}, - {file = "frozenlist-1.8.0-cp313-cp313t-win_amd64.whl", hash = "sha256:5d63a068f978fc69421fb0e6eb91a9603187527c86b7cd3f534a5b77a592b888"}, - {file = "frozenlist-1.8.0-cp313-cp313t-win_arm64.whl", hash = "sha256:bf0a7e10b077bf5fb9380ad3ae8ce20ef919a6ad93b4552896419ac7e1d8e042"}, - {file = "frozenlist-1.8.0-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:cee686f1f4cadeb2136007ddedd0aaf928ab95216e7691c63e50a8ec066336d0"}, - {file = "frozenlist-1.8.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:119fb2a1bd47307e899c2fac7f28e85b9a543864df47aa7ec9d3c1b4545f096f"}, - {file = "frozenlist-1.8.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4970ece02dbc8c3a92fcc5228e36a3e933a01a999f7094ff7c23fbd2beeaa67c"}, - {file = "frozenlist-1.8.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:cba69cb73723c3f329622e34bdbf5ce1f80c21c290ff04256cff1cd3c2036ed2"}, - {file = "frozenlist-1.8.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:778a11b15673f6f1df23d9586f83c4846c471a8af693a22e066508b77d201ec8"}, - {file = "frozenlist-1.8.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0325024fe97f94c41c08872db482cf8ac4800d80e79222c6b0b7b162d5b13686"}, - {file = "frozenlist-1.8.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:97260ff46b207a82a7567b581ab4190bd4dfa09f4db8a8b49d1a958f6aa4940e"}, - {file = "frozenlist-1.8.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:54b2077180eb7f83dd52c40b2750d0a9f175e06a42e3213ce047219de902717a"}, - {file = "frozenlist-1.8.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:2f05983daecab868a31e1da44462873306d3cbfd76d1f0b5b69c473d21dbb128"}, - {file = "frozenlist-1.8.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:33f48f51a446114bc5d251fb2954ab0164d5be02ad3382abcbfe07e2531d650f"}, - {file = "frozenlist-1.8.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:154e55ec0655291b5dd1b8731c637ecdb50975a2ae70c606d100750a540082f7"}, - {file = "frozenlist-1.8.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:4314debad13beb564b708b4a496020e5306c7333fa9a3ab90374169a20ffab30"}, - {file = "frozenlist-1.8.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:073f8bf8becba60aa931eb3bc420b217bb7d5b8f4750e6f8b3be7f3da85d38b7"}, - {file = "frozenlist-1.8.0-cp314-cp314-win32.whl", hash = "sha256:bac9c42ba2ac65ddc115d930c78d24ab8d4f465fd3fc473cdedfccadb9429806"}, - {file = "frozenlist-1.8.0-cp314-cp314-win_amd64.whl", hash = "sha256:3e0761f4d1a44f1d1a47996511752cf3dcec5bbdd9cc2b4fe595caf97754b7a0"}, - {file = "frozenlist-1.8.0-cp314-cp314-win_arm64.whl", hash = "sha256:d1eaff1d00c7751b7c6662e9c5ba6eb2c17a2306ba5e2a37f24ddf3cc953402b"}, - {file = "frozenlist-1.8.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:d3bb933317c52d7ea5004a1c442eef86f426886fba134ef8cf4226ea6ee1821d"}, - {file = "frozenlist-1.8.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:8009897cdef112072f93a0efdce29cd819e717fd2f649ee3016efd3cd885a7ed"}, - {file = "frozenlist-1.8.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2c5dcbbc55383e5883246d11fd179782a9d07a986c40f49abe89ddf865913930"}, - {file = "frozenlist-1.8.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:39ecbc32f1390387d2aa4f5a995e465e9e2f79ba3adcac92d68e3e0afae6657c"}, - {file = "frozenlist-1.8.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:92db2bf818d5cc8d9c1f1fc56b897662e24ea5adb36ad1f1d82875bd64e03c24"}, - {file = "frozenlist-1.8.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2dc43a022e555de94c3b68a4ef0b11c4f747d12c024a520c7101709a2144fb37"}, - {file = "frozenlist-1.8.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cb89a7f2de3602cfed448095bab3f178399646ab7c61454315089787df07733a"}, - {file = "frozenlist-1.8.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:33139dc858c580ea50e7e60a1b0ea003efa1fd42e6ec7fdbad78fff65fad2fd2"}, - {file = "frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:168c0969a329b416119507ba30b9ea13688fafffac1b7822802537569a1cb0ef"}, - {file = "frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:28bd570e8e189d7f7b001966435f9dac6718324b5be2990ac496cf1ea9ddb7fe"}, - {file = "frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:b2a095d45c5d46e5e79ba1e5b9cb787f541a8dee0433836cea4b96a2c439dcd8"}, - {file = "frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:eab8145831a0d56ec9c4139b6c3e594c7a83c2c8be25d5bcf2d86136a532287a"}, - {file = "frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:974b28cf63cc99dfb2188d8d222bc6843656188164848c4f679e63dae4b0708e"}, - {file = "frozenlist-1.8.0-cp314-cp314t-win32.whl", hash = "sha256:342c97bf697ac5480c0a7ec73cd700ecfa5a8a40ac923bd035484616efecc2df"}, - {file = "frozenlist-1.8.0-cp314-cp314t-win_amd64.whl", hash = "sha256:06be8f67f39c8b1dc671f5d83aaefd3358ae5cdcf8314552c57e7ed3e6475bdd"}, - {file = "frozenlist-1.8.0-cp314-cp314t-win_arm64.whl", hash = "sha256:102e6314ca4da683dca92e3b1355490fed5f313b768500084fbe6371fddfdb79"}, - {file = "frozenlist-1.8.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d8b7138e5cd0647e4523d6685b0eac5d4be9a184ae9634492f25c6eb38c12a47"}, - {file = "frozenlist-1.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a6483e309ca809f1efd154b4d37dc6d9f61037d6c6a81c2dc7a15cb22c8c5dca"}, - {file = "frozenlist-1.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1b9290cf81e95e93fdf90548ce9d3c1211cf574b8e3f4b3b7cb0537cf2227068"}, - {file = "frozenlist-1.8.0-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:59a6a5876ca59d1b63af8cd5e7ffffb024c3dc1e9cf9301b21a2e76286505c95"}, - {file = "frozenlist-1.8.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6dc4126390929823e2d2d9dc79ab4046ed74680360fc5f38b585c12c66cdf459"}, - {file = "frozenlist-1.8.0-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:332db6b2563333c5671fecacd085141b5800cb866be16d5e3eb15a2086476675"}, - {file = "frozenlist-1.8.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9ff15928d62a0b80bb875655c39bf517938c7d589554cbd2669be42d97c2cb61"}, - {file = "frozenlist-1.8.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7bf6cdf8e07c8151fba6fe85735441240ec7f619f935a5205953d58009aef8c6"}, - {file = "frozenlist-1.8.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:48e6d3f4ec5c7273dfe83ff27c91083c6c9065af655dc2684d2c200c94308bb5"}, - {file = "frozenlist-1.8.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:1a7607e17ad33361677adcd1443edf6f5da0ce5e5377b798fba20fae194825f3"}, - {file = "frozenlist-1.8.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:5a3a935c3a4e89c733303a2d5a7c257ea44af3a56c8202df486b7f5de40f37e1"}, - {file = "frozenlist-1.8.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:940d4a017dbfed9daf46a3b086e1d2167e7012ee297fef9e1c545c4d022f5178"}, - {file = "frozenlist-1.8.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b9be22a69a014bc47e78072d0ecae716f5eb56c15238acca0f43d6eb8e4a5bda"}, - {file = "frozenlist-1.8.0-cp39-cp39-win32.whl", hash = "sha256:1aa77cb5697069af47472e39612976ed05343ff2e84a3dcf15437b232cbfd087"}, - {file = "frozenlist-1.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:7398c222d1d405e796970320036b1b563892b65809d9e5261487bb2c7f7b5c6a"}, - {file = "frozenlist-1.8.0-cp39-cp39-win_arm64.whl", hash = "sha256:b4f3b365f31c6cd4af24545ca0a244a53688cad8834e32f56831c4923b50a103"}, - {file = "frozenlist-1.8.0-py3-none-any.whl", hash = "sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d"}, - {file = "frozenlist-1.8.0.tar.gz", hash = "sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad"}, -] - -[[package]] -name = "h11" -version = "0.16.0" -description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86"}, - {file = "h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1"}, -] - -[[package]] -name = "html5lib" -version = "1.1" -description = "HTML parser based on the WHATWG HTML specification" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -groups = ["main"] -files = [ - {file = "html5lib-1.1-py2.py3-none-any.whl", hash = "sha256:0d78f8fde1c230e99fe37986a60526d7049ed4bf8a9fadbad5f00e22e58e041d"}, - {file = "html5lib-1.1.tar.gz", hash = "sha256:b2e5b40261e20f354d198eae92afc10d750afb487ed5e50f9c4eaf07c184146f"}, -] - -[package.dependencies] -six = ">=1.9" -webencodings = "*" - -[package.extras] -all = ["chardet (>=2.2)", "genshi", "lxml ; platform_python_implementation == \"CPython\""] -chardet = ["chardet (>=2.2)"] -genshi = ["genshi"] -lxml = ["lxml ; platform_python_implementation == \"CPython\""] - -[[package]] -name = "idna" -version = "3.17" -description = "Internationalized Domain Names in Applications (IDNA)" -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "idna-3.17-py3-none-any.whl", hash = "sha256:466e48829084efe2548012b855df21540b96f2e20e51bd124c851536556a592c"}, - {file = "idna-3.17.tar.gz", hash = "sha256:5eb0cb53bc467c12eadcf6de83163ad8527cec9416f44b9b61b19caedad2b87f"}, -] - -[package.extras] -all = ["mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] - -[[package]] -name = "importlib-metadata" -version = "9.0.0" -description = "Read metadata from Python packages" -optional = false -python-versions = ">=3.10" -groups = ["main"] -files = [ - {file = "importlib_metadata-9.0.0-py3-none-any.whl", hash = "sha256:2d21d1cc5a017bd0559e36150c21c830ab1dc304dedd1b7ea85d20f45ef3edd7"}, - {file = "importlib_metadata-9.0.0.tar.gz", hash = "sha256:a4f57ab599e6a2e3016d7595cfd72eb4661a5106e787a95bcc90c7105b831efc"}, -] - -[package.dependencies] -zipp = ">=3.20" - -[package.extras] -check = ["pytest-checkdocs (>=2.14)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] -cover = ["pytest-cov"] -doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -enabler = ["pytest-enabler (>=3.4)"] -perf = ["ipython"] -test = ["packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"] -type = ["pytest-mypy (>=1.0.1) ; platform_python_implementation != \"PyPy\""] - -[[package]] -name = "lxml" -version = "6.1.1" -description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "lxml-6.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:09dd5b7075dc2f7709654a46543ba1ea3c2e217b2ed8fbd413a8a945a0f40f60"}, - {file = "lxml-6.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f6ac4ef4d82dff54670227a69c67782ae0b811b5cf6b17954f1e8f7502fc0d1d"}, - {file = "lxml-6.1.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:556e94a63c9b04716f8e4de2abb65775061f846e89331b6c5be79183a24f98ea"}, - {file = "lxml-6.1.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5c6bf403fbb3b3e348a561a5f4f0b9961835657981c802a1df03653eef8a9074"}, - {file = "lxml-6.1.1-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1dde6131244bba38a17c745836ba190bc753fd73c9291666287fd0a3fa3dcf30"}, - {file = "lxml-6.1.1-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:98fc784c2c1440667aeedf8465bdfe10208acf0ead656a2c68627299f546b315"}, - {file = "lxml-6.1.1-cp310-cp310-manylinux_2_28_i686.whl", hash = "sha256:add8cf6ddf9a65116119a28ece0f7886e30af27ba724a7594305f1d1b58a92a1"}, - {file = "lxml-6.1.1-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:cf9d57306d848218f3601fee7601fab1a327c942d56e2e97610583cb4dd74206"}, - {file = "lxml-6.1.1-cp310-cp310-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:88136950da4d13c318bde414ce10219931937851327f44328f2df4d2c4614067"}, - {file = "lxml-6.1.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cecdd5dfdc87b1fd87dbf81d4b037a544f47f4c744200a67013771682d67686a"}, - {file = "lxml-6.1.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:cd312b9692e831d2ffcad61eab31d91d4b4655a962e61de8fb410472cbcd37aa"}, - {file = "lxml-6.1.1-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:5b7328b46d49fc9477d91ae8f6d55340347d827b7734ba3ea33faae0efef1383"}, - {file = "lxml-6.1.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:37a58976370f36d9329d118ad0b953c5aeb9119ac9c6a4e258942a225d0573a1"}, - {file = "lxml-6.1.1-cp310-cp310-win32.whl", hash = "sha256:cea3f4c1af79af13cdb2da0c028111d8f8522d4f22a000c82385535f24e5cf3a"}, - {file = "lxml-6.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:3abf332af33a74288675d936fe861fd4344da0dd6622193fbc4f2bfbb35536b5"}, - {file = "lxml-6.1.1-cp310-cp310-win_arm64.whl", hash = "sha256:8dadbe5b217ff35b6a8d16610dd710219b59b76d13f0e3f0d9f36786206e4485"}, - {file = "lxml-6.1.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:53b7d2b7a10b1c35c0a5e21e9224accf60c1bbfba523990732e521b2b73adef2"}, - {file = "lxml-6.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ff3f333630ab480244a1bff72043e511a91eb22e7595dead8653ee5612dd8f3d"}, - {file = "lxml-6.1.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:a4bbea04c97f6d78a48e3fbc1cb9116d2780b1b39e03a23f6eb9b603fd61f510"}, - {file = "lxml-6.1.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:db1d75f6617a49c1c01bc7023713e0ff59ab32c9579ae62a7674c0e34f3b0b0a"}, - {file = "lxml-6.1.1-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a12689be69a28ddaa0ab99a5a1137da2afd5f8f16df7b5680b66f616d3eda1d"}, - {file = "lxml-6.1.1-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:18b73c339ae29b90fd2d06e58ebd555a751bde9cd6bbd36cc0281b9a2c94e9d8"}, - {file = "lxml-6.1.1-cp311-cp311-manylinux_2_28_i686.whl", hash = "sha256:752d3bbfe874715ccd0aec7f88d7fc623c0f1fd7aa7b3238a084e017bad2a009"}, - {file = "lxml-6.1.1-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:6b1761fbf9ec984e2e9d9c589ef5f5fd684b7c19f92aadd567a26c5224958db6"}, - {file = "lxml-6.1.1-cp311-cp311-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d680fbcb768404c601ecb43519ecd8461f6954cb11c06a78962f666832ccfca8"}, - {file = "lxml-6.1.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:162af1091cd785f2f27e62d3547ae9bc58ec5c86dd314d67021fd02463708d83"}, - {file = "lxml-6.1.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:e9308ff8241c532df3f3e570f9a5aeed6c853f888512ba4b75638d7c11c95ef6"}, - {file = "lxml-6.1.1-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:5f6994074ebae6ffb04447268e37dc16edc304f9859cf91acb86e0af6c1b395c"}, - {file = "lxml-6.1.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:80c2dfadb855da477cf73373ad29a333535dedb9b12bad02c9814c8e2b43bf08"}, - {file = "lxml-6.1.1-cp311-cp311-win32.whl", hash = "sha256:30a89d3ac8faec007453fb541f3f46807eeec88edd5826f6e3fe001752a2c621"}, - {file = "lxml-6.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:abbefa31eee84842140f67acef1c828e28bba8bbf0c3bc6e5492a9af88152c28"}, - {file = "lxml-6.1.1-cp311-cp311-win_arm64.whl", hash = "sha256:dcb292aa7fe485ceff7af4f92e46c5af397daec5dff64871a528f0fc47a3cc5b"}, - {file = "lxml-6.1.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:104c09bda8d2a562824c0e319d0768ce26a779b7601e0931d33b09b53c392ef7"}, - {file = "lxml-6.1.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:25c6997a9a534e016695a0ba06b2f07945de682731ff01065b6d5a4474179da1"}, - {file = "lxml-6.1.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c921ba5c51e4e9f63b8b00267d06566e1f63407408a0496da2d1d0bfc819c7fc"}, - {file = "lxml-6.1.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:54a7f95e4de5fb94e2f9f4b9055c6ba33bf3d628fd77a1d647c5923caa2cdcdc"}, - {file = "lxml-6.1.1-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96f2ec43df44b1f76249ee0a615334f9b5b060e1c8bd90e706dad2d14d02f383"}, - {file = "lxml-6.1.1-cp312-cp312-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:70ef8a7e102a1508f8121aae5b0867abd663f72c14f0a9c937e6554cb4587b7b"}, - {file = "lxml-6.1.1-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ebe6af670449830d6d9b752c256a983291c766a1365ba5d5460048f9e33a7818"}, - {file = "lxml-6.1.1-cp312-cp312-manylinux_2_28_i686.whl", hash = "sha256:27acc820660aaffa4f7c087f29120e12980f7779d56d8492d263170111284740"}, - {file = "lxml-6.1.1-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:1db753c9115ec7100d073b744d17e25e88a8f90f5c39b2f5dd878149af59671f"}, - {file = "lxml-6.1.1-cp312-cp312-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c4f469aebd783bb741c2ecb2a681008fd26bfe5c16a9a72ed5467f834e810df2"}, - {file = "lxml-6.1.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:766b010012d59470072c1816b5b6c69f1d243e5db36ea5968e94accf430a4635"}, - {file = "lxml-6.1.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:b8d812c6011c08b8111a15e54dd990b8923692d80adf35488bee34026c35accf"}, - {file = "lxml-6.1.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:fe0306bd29505a9177aac19f1877174b0e7422c222a59f70b2cd41633448c3dc"}, - {file = "lxml-6.1.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:5ba186ad207446c65d3bb3d3e0412b032b1d9f595e59861e2354798c5703d955"}, - {file = "lxml-6.1.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:aa366a1e55b8ebfe8ca8ddc3cfe75c8ebade181aeb0f661d0cb05986b647f72a"}, - {file = "lxml-6.1.1-cp312-cp312-win32.whl", hash = "sha256:126c93f7f56f0eda92f6d8c619edc463a4f23d9252f1c9d0405a76f25fa9f11a"}, - {file = "lxml-6.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:26e6eda8d38c1fcab1090dd196ee87cbd13788e531937610e2589085de074e77"}, - {file = "lxml-6.1.1-cp312-cp312-win_arm64.whl", hash = "sha256:6540377fbd53fe1b629172288c464fb18db11ce1fa7dc15891da10aa9dcc3e7f"}, - {file = "lxml-6.1.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:68a9198d0fc122d14bb76837de9aa80cf84caed990b5b237f532ed87d3706736"}, - {file = "lxml-6.1.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7d47866cb32fb503450b6edc9df355d10dc49836af2e89901bd6ac6b0896d9d9"}, - {file = "lxml-6.1.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:eb7c9811bfaa8b1ed5ed319f5d370dfbcaa59d52ea64be2a5a85e18195930354"}, - {file = "lxml-6.1.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:762ff394d5bd56da0cf034a23dcce4e13923f15321a2adfa2ac00201dc6d3fca"}, - {file = "lxml-6.1.1-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a088f287f7d8275a33c07f2cac6c50b9319309a0200a39e7e75d80c707723099"}, - {file = "lxml-6.1.1-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e902da4b04e6b52e5893900d4b8ab46068f75f3561f01bf1080957f9fd932ed6"}, - {file = "lxml-6.1.1-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1d4962d4c66bf830a7e59ed6cfc17d148149898a3aefa8ec6e59763e6e3ed085"}, - {file = "lxml-6.1.1-cp313-cp313-manylinux_2_28_i686.whl", hash = "sha256:581d4c8ae690a6609e64862dd6b7c2489635c2d13907fc2b20f2bc200ff1d21e"}, - {file = "lxml-6.1.1-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:876e1ff5930ed8bf295ec5ef9a8155e9b6b1876bbf1deed8b3a8069311875a8f"}, - {file = "lxml-6.1.1-cp313-cp313-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9eb9b5a968f6e0f6d640092a567e14529ff8cea2e29d00da6f78a79fa49f013c"}, - {file = "lxml-6.1.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:aa49e06d94aba782c6a02eecb7e507969e7e7a41b267f1b359bb35585f295d5b"}, - {file = "lxml-6.1.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:70cdfd80589d59e43e18005dd7244e8895e93db8ab6a620b7e23df5445a4e3d2"}, - {file = "lxml-6.1.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:aad9aa39483ed8ec44d6d2e59e5b98a0d80676ef0d92f44bfc374836111f62f5"}, - {file = "lxml-6.1.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:d49514be2f28d895c38cf9d2b72d7b9a07d00314519f456c0b50b53cfcf4c785"}, - {file = "lxml-6.1.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:47402e62c52ff5988c1e8c6c63177f5708bccf48e366dea4e3dcf1e645e04947"}, - {file = "lxml-6.1.1-cp313-cp313-win32.whl", hash = "sha256:3483644525531e1d5762b0c44a8e18b6efba321b6dcf8a8952de10b037618bca"}, - {file = "lxml-6.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:a10bd2fd62e8ce916ececb342f348f190724a098c1faa056fdfb2a22ad5e8660"}, - {file = "lxml-6.1.1-cp313-cp313-win_arm64.whl", hash = "sha256:424aa57aca0897eb922aef34395bd1289b3b6f04e6bae20ea123c0c7e333cffc"}, - {file = "lxml-6.1.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:19b7ab10b210b0b3ad7985d9ac4eb66ab09a90b20fe6e2f7ba55d01a234345d0"}, - {file = "lxml-6.1.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:c08e5c694306507275f2290073350c4f32e383db15213b2c69e7ff39c1193840"}, - {file = "lxml-6.1.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:74a9717fd0d82effef5c2854f0d917231d5324b5a3eb7275c43ac9fa32f97a14"}, - {file = "lxml-6.1.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:efe0374196335f93b53269acd811b944f2e6bdc88e8894f214bd636455484909"}, - {file = "lxml-6.1.1-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ac931cdc9442c1763b8a8f6cd62c0c938737eafc5be75eff88df55fc73bc0d00"}, - {file = "lxml-6.1.1-cp314-cp314-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:aee395f5d0927f947758b4ec119fd5fc8ec71f07a1c5c52077b30b04c0fa6955"}, - {file = "lxml-6.1.1-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9395002973c827b3ed67db77e6ec09f092919a587022174554096a269378fb13"}, - {file = "lxml-6.1.1-cp314-cp314-manylinux_2_28_i686.whl", hash = "sha256:73bc2086f141224ebddb7fc5c6a36ca58b31b94b561e1dfe8e073e3270fad1e7"}, - {file = "lxml-6.1.1-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:3779def59032b81e44a5f70096ef6bf2082f8d901937dca354474ba09782e245"}, - {file = "lxml-6.1.1-cp314-cp314-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:86c89b9d55ebf820ad7c90bc533410f0d098054f293351f10603c0c46ff598f5"}, - {file = "lxml-6.1.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:19607c6bbff2a44cf3fe8250abccd20942d3462473e0a721d01d379ed017e462"}, - {file = "lxml-6.1.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:c6ed5141a5c7507cf3ee76bd363b0d6f801e3321adc35b5d825a23115faa5465"}, - {file = "lxml-6.1.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:62aeb7e85b5d60320b9d77eef2e773994e2c0ce10121b277e0a19804e1654a5a"}, - {file = "lxml-6.1.1-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:b1b963fd8f5caa68e99dfae060d54de1fe9cba899b8718b44a00cdca53c3e590"}, - {file = "lxml-6.1.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:63876be28efefa04a1df615b46770e82042cce445cfdce55160522f57b231ccb"}, - {file = "lxml-6.1.1-cp314-cp314-win32.whl", hash = "sha256:7f7a92e8583f06b1fd49d01158143b8461cfcd135dcb10ec807270a3051bd603"}, - {file = "lxml-6.1.1-cp314-cp314-win_amd64.whl", hash = "sha256:b2d444f2e66624d68e9c6b211e28a76e22fff5fcabcfff4deac18b529b7d4137"}, - {file = "lxml-6.1.1-cp314-cp314-win_arm64.whl", hash = "sha256:3fd9728a2735fda14f4e8235830c86b539e9661e849665bf926d3f867943b4bf"}, - {file = "lxml-6.1.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:787b2496d0dbe8cd180984e8d29e3a6f76e7ea34db781cb3bd55e4ba1ef8b4ee"}, - {file = "lxml-6.1.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:2c8daa471358dc2d6fcf02165e80ec68f77871a286df95bc5cc3816153b0fd2c"}, - {file = "lxml-6.1.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:acd7d70b64c0aae0c7922cca83d288a16f5f6da523637697872253415269baef"}, - {file = "lxml-6.1.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4f0dd2f01f9f8a89f565d000e03abcf0a13d692a346c8d22f628d49af098777a"}, - {file = "lxml-6.1.1-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0b7e8a14c8634bf6f7a568634cb395305a6d964aeb5b7ee32248094bed3a7e2c"}, - {file = "lxml-6.1.1-cp314-cp314t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:86281fbdd6a8162756f8d603f37e3435bfa38043adb79c6dc6a2dfee065e7525"}, - {file = "lxml-6.1.1-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c5d7152ec39ca7c402d8fb9bad86140a15b9503bd0c54484e3f1bbe3dd37ceca"}, - {file = "lxml-6.1.1-cp314-cp314t-manylinux_2_28_i686.whl", hash = "sha256:88d8cb75b9d82858497a5393e3c63cfbf03035225e4b35a49ed7ccb151e4dc0e"}, - {file = "lxml-6.1.1-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:f64ec5397ea6a41fc1b4af0380d79b44a755b5531dcaccd9940fb260dca93038"}, - {file = "lxml-6.1.1-cp314-cp314t-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d34bbf07dbc7ca5970671b1512e928991fb5e9d95365636c9b2d8b4f53af405e"}, - {file = "lxml-6.1.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:17e0e18d4ad8adbd0399291bc44845b69d9dd68439a3cdebdf35ff902ec05072"}, - {file = "lxml-6.1.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:3ab541146f1f6968c462d6c2ac495148e8cdba2f8347700b2141b6ec5a75bf52"}, - {file = "lxml-6.1.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:2a0217714657e023ef4293500f65aa20fce6164c8fd6b08fa5bd4a859fb14b9b"}, - {file = "lxml-6.1.1-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:05a82eb6e1530a64f26225b55cbd178113bd0b5af1c2b625f25e5296742c26d2"}, - {file = "lxml-6.1.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9e36f163528fc50cbef305f02a5fd66d404edf7049cdaff211dbc2cba5a7013e"}, - {file = "lxml-6.1.1-cp314-cp314t-win32.whl", hash = "sha256:649dda677cf3bd6ac9ae14007ba0c824ded8ce5808b53fc7431d9140399118c1"}, - {file = "lxml-6.1.1-cp314-cp314t-win_amd64.whl", hash = "sha256:793033d6c5cdf33a573f910d9bea14ef8f5771820411d118da8e1182edb53d5e"}, - {file = "lxml-6.1.1-cp314-cp314t-win_arm64.whl", hash = "sha256:58bb955caba94e467d2a96da17660d2d704e0675894cba21ab8a775b8621fd1c"}, - {file = "lxml-6.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6689e828a94eee4f139408c337bb198e014724bb8a8c26d3cfac49d119ed69a6"}, - {file = "lxml-6.1.1-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bdebcc8a75d38c7598dfb2c9ed852d7a9eb4a10d6e2d0764b919b802bf32ac88"}, - {file = "lxml-6.1.1-cp38-cp38-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8be8ad51249698103d24b0571df35a10990fbe93dd043b6c024172189485f5e3"}, - {file = "lxml-6.1.1-cp38-cp38-manylinux_2_28_i686.whl", hash = "sha256:76447f65250ed2501ead1a1552f5ce8edff159a86f308348e6a9c4acb5e1f1b4"}, - {file = "lxml-6.1.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:ffecec8eb889b58ba9be5b95fb1cc78e22ea8eedea38e8736a1568fe1979250e"}, - {file = "lxml-6.1.1-cp38-cp38-win32.whl", hash = "sha256:c674693f055fa2495de12292cb45e9944199d8eaef5a2dec45175c7c61cb73e3"}, - {file = "lxml-6.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:55b03549819867ea141c0202242c4816c82e52ec36e7e648db9d8da5a3dc3ed6"}, - {file = "lxml-6.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c9f79d5325907f13e1be0b3e4dacc1049d1dffc4aeee3c995284bea5fe0fab7d"}, - {file = "lxml-6.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:83b6b30eb131da7a75b601f28c5d6971e6ed3e887919bf6b6a1ad3c2df289080"}, - {file = "lxml-6.1.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:441dd227fa0690eb9fc81edabc63cdcefc212bba99b906dcf6e32cc1a9d3e533"}, - {file = "lxml-6.1.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e07c65f443c887bbcf31cc1771d932ecc192a5273943589b3c7572b749f1ffb2"}, - {file = "lxml-6.1.1-cp39-cp39-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5bec7d03d78d853597d6107854c2310ce3f761fd218fe9fe91d5101fcf6c2efe"}, - {file = "lxml-6.1.1-cp39-cp39-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9f76acfb5f68ba982635a53fd985a8044be98a35b43232c2a1ee235ffab3e1dd"}, - {file = "lxml-6.1.1-cp39-cp39-manylinux_2_28_i686.whl", hash = "sha256:8d43ca737b20e106e4aebc42b2f3ae19f00ba63d7eb731698ee083d72d15646f"}, - {file = "lxml-6.1.1-cp39-cp39-manylinux_2_31_armv7l.whl", hash = "sha256:32ab449a5486f6c758e849bb86710d0e45edc24a04e250c01555f8f5653958f8"}, - {file = "lxml-6.1.1-cp39-cp39-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:53c909b62a0532183542fed00c5a7218258c56292d409bc789886fe1cb04c438"}, - {file = "lxml-6.1.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:640f97d43d867bcb9c75b3af013b64850756b746cb6bce8ace83b70da3abba9d"}, - {file = "lxml-6.1.1-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:469e3618338bd7ab5beb412d2439825479fcf0dab99e394ca563dbc4eaf6c834"}, - {file = "lxml-6.1.1-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:aae97dfdb60715c164419ac2532a76d013c3918a665eb6cb7288098b5f349aaf"}, - {file = "lxml-6.1.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c9a4b821dc7055bf9e05ff5719e18ec501f75c0f0bbfabd573b277559780833d"}, - {file = "lxml-6.1.1-cp39-cp39-win32.whl", hash = "sha256:639f6c857d91d9be29bd7502348d6736dab168b54b5158cd899abf11684dc186"}, - {file = "lxml-6.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:34c2d737beabfe35baada43941ed519251e9a12e779031496bcd5d539fcfd730"}, - {file = "lxml-6.1.1-cp39-cp39-win_arm64.whl", hash = "sha256:07a4a68e286ee7a1ed7dfb8af83e615757c0ccfe9f18c6b4ea6771388d9ba8c9"}, - {file = "lxml-6.1.1-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:31033dc34636ea6b7d5cc11b1ddbda78a14de858ba9d3e1ed4b69a3085bc521e"}, - {file = "lxml-6.1.1-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3893c14c4b6ac5b2d54ba8cf03e99fe5104e592de491f19bd6b82756c09f8004"}, - {file = "lxml-6.1.1-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c07da4cebf6889f03ebac8d238f62318e29f495de0aa18a51ea14e61ae907e2e"}, - {file = "lxml-6.1.1-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f6f0ce10945fab9c4c06ce14e22af9059d1a87493a9af4501a5b0b9187e21cf2"}, - {file = "lxml-6.1.1-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f8844cd288697c6425c9beba919302241e3278871dc6519515e72b04e987abcf"}, - {file = "lxml-6.1.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:ed21202aec73cda4d55d1ce57b389aadb90ffb044e6cd1080b8347efe1b1ec84"}, - {file = "lxml-6.1.1.tar.gz", hash = "sha256:ba96ae44888e0185281e937633a743ea90d5a196c6000f82565ebb0580012d40"}, -] - -[package.extras] -cssselect = ["cssselect (>=0.7)"] -html-clean = ["lxml_html_clean"] -html5 = ["html5lib"] -htmlsoup = ["BeautifulSoup4"] - -[[package]] -name = "multidict" -version = "6.7.1" -description = "multidict implementation" -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "multidict-6.7.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c93c3db7ea657dd4637d57e74ab73de31bccefe144d3d4ce370052035bc85fb5"}, - {file = "multidict-6.7.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:974e72a2474600827abaeda71af0c53d9ebbc3c2eb7da37b37d7829ae31232d8"}, - {file = "multidict-6.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cdea2e7b2456cfb6694fb113066fd0ec7ea4d67e3a35e1f4cbeea0b448bf5872"}, - {file = "multidict-6.7.1-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:17207077e29342fdc2c9a82e4b306f1127bf1ea91f8b71e02d4798a70bb99991"}, - {file = "multidict-6.7.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4f49cb5661344764e4c7c7973e92a47a59b8fc19b6523649ec9dc4960e58a03"}, - {file = "multidict-6.7.1-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a9fc4caa29e2e6ae408d1c450ac8bf19892c5fca83ee634ecd88a53332c59981"}, - {file = "multidict-6.7.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c5f0c21549ab432b57dcc82130f388d84ad8179824cc3f223d5e7cfbfd4143f6"}, - {file = "multidict-6.7.1-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7dfb78d966b2c906ae1d28ccf6e6712a3cd04407ee5088cd276fe8cb42186190"}, - {file = "multidict-6.7.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9b0d9b91d1aa44db9c1f1ecd0d9d2ae610b2f4f856448664e01a3b35899f3f92"}, - {file = "multidict-6.7.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:dd96c01a9dcd4889dcfcf9eb5544ca0c77603f239e3ffab0524ec17aea9a93ee"}, - {file = "multidict-6.7.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:067343c68cd6612d375710f895337b3a98a033c94f14b9a99eff902f205424e2"}, - {file = "multidict-6.7.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:5884a04f4ff56c6120f6ccf703bdeb8b5079d808ba604d4d53aec0d55dc33568"}, - {file = "multidict-6.7.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8affcf1c98b82bc901702eb73b6947a1bfa170823c153fe8a47b5f5f02e48e40"}, - {file = "multidict-6.7.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:0d17522c37d03e85c8098ec8431636309b2682cf12e58f4dbc76121fb50e4962"}, - {file = "multidict-6.7.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:24c0cf81544ca5e17cfcb6e482e7a82cd475925242b308b890c9452a074d4505"}, - {file = "multidict-6.7.1-cp310-cp310-win32.whl", hash = "sha256:d82dd730a95e6643802f4454b8fdecdf08667881a9c5670db85bc5a56693f122"}, - {file = "multidict-6.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:cf37cbe5ced48d417ba045aca1b21bafca67489452debcde94778a576666a1df"}, - {file = "multidict-6.7.1-cp310-cp310-win_arm64.whl", hash = "sha256:59bc83d3f66b41dac1e7460aac1d196edc70c9ba3094965c467715a70ecb46db"}, - {file = "multidict-6.7.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7ff981b266af91d7b4b3793ca3382e53229088d193a85dfad6f5f4c27fc73e5d"}, - {file = "multidict-6.7.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:844c5bca0b5444adb44a623fb0a1310c2f4cd41f402126bb269cd44c9b3f3e1e"}, - {file = "multidict-6.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f2a0a924d4c2e9afcd7ec64f9de35fcd96915149b2216e1cb2c10a56df483855"}, - {file = "multidict-6.7.1-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:8be1802715a8e892c784c0197c2ace276ea52702a0ede98b6310c8f255a5afb3"}, - {file = "multidict-6.7.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2e2d2ed645ea29f31c4c7ea1552fcfd7cb7ba656e1eafd4134a6620c9f5fdd9e"}, - {file = "multidict-6.7.1-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:95922cee9a778659e91db6497596435777bd25ed116701a4c034f8e46544955a"}, - {file = "multidict-6.7.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6b83cabdc375ffaaa15edd97eb7c0c672ad788e2687004990074d7d6c9b140c8"}, - {file = "multidict-6.7.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:38fb49540705369bab8484db0689d86c0a33a0a9f2c1b197f506b71b4b6c19b0"}, - {file = "multidict-6.7.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:439cbebd499f92e9aa6793016a8acaa161dfa749ae86d20960189f5398a19144"}, - {file = "multidict-6.7.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6d3bc717b6fe763b8be3f2bee2701d3c8eb1b2a8ae9f60910f1b2860c82b6c49"}, - {file = "multidict-6.7.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:619e5a1ac57986dbfec9f0b301d865dddf763696435e2962f6d9cf2fdff2bb71"}, - {file = "multidict-6.7.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:0b38ebffd9be37c1170d33bc0f36f4f262e0a09bc1aac1c34c7aa51a7293f0b3"}, - {file = "multidict-6.7.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:10ae39c9cfe6adedcdb764f5e8411d4a92b055e35573a2eaa88d3323289ef93c"}, - {file = "multidict-6.7.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:25167cc263257660290fba06b9318d2026e3c910be240a146e1f66dd114af2b0"}, - {file = "multidict-6.7.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:128441d052254f42989ef98b7b6a6ecb1e6f708aa962c7984235316db59f50fa"}, - {file = "multidict-6.7.1-cp311-cp311-win32.whl", hash = "sha256:d62b7f64ffde3b99d06b707a280db04fb3855b55f5a06df387236051d0668f4a"}, - {file = "multidict-6.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:bdbf9f3b332abd0cdb306e7c2113818ab1e922dc84b8f8fd06ec89ed2a19ab8b"}, - {file = "multidict-6.7.1-cp311-cp311-win_arm64.whl", hash = "sha256:b8c990b037d2fff2f4e33d3f21b9b531c5745b33a49a7d6dbe7a177266af44f6"}, - {file = "multidict-6.7.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:a90f75c956e32891a4eda3639ce6dd86e87105271f43d43442a3aedf3cddf172"}, - {file = "multidict-6.7.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3fccb473e87eaa1382689053e4a4618e7ba7b9b9b8d6adf2027ee474597128cd"}, - {file = "multidict-6.7.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b0fa96985700739c4c7853a43c0b3e169360d6855780021bfc6d0f1ce7c123e7"}, - {file = "multidict-6.7.1-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:cb2a55f408c3043e42b40cc8eecd575afa27b7e0b956dfb190de0f8499a57a53"}, - {file = "multidict-6.7.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eb0ce7b2a32d09892b3dd6cc44877a0d02a33241fafca5f25c8b6b62374f8b75"}, - {file = "multidict-6.7.1-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c3a32d23520ee37bf327d1e1a656fec76a2edd5c038bf43eddfa0572ec49c60b"}, - {file = "multidict-6.7.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9c90fed18bffc0189ba814749fdcc102b536e83a9f738a9003e569acd540a733"}, - {file = "multidict-6.7.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:da62917e6076f512daccfbbde27f46fed1c98fee202f0559adec8ee0de67f71a"}, - {file = "multidict-6.7.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bfde23ef6ed9db7eaee6c37dcec08524cb43903c60b285b172b6c094711b3961"}, - {file = "multidict-6.7.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3758692429e4e32f1ba0df23219cd0b4fc0a52f476726fff9337d1a57676a582"}, - {file = "multidict-6.7.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:398c1478926eca669f2fd6a5856b6de9c0acf23a2cb59a14c0ba5844fa38077e"}, - {file = "multidict-6.7.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:c102791b1c4f3ab36ce4101154549105a53dc828f016356b3e3bcae2e3a039d3"}, - {file = "multidict-6.7.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:a088b62bd733e2ad12c50dad01b7d0166c30287c166e137433d3b410add807a6"}, - {file = "multidict-6.7.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:3d51ff4785d58d3f6c91bdbffcb5e1f7ddfda557727043aa20d20ec4f65e324a"}, - {file = "multidict-6.7.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fc5907494fccf3e7d3f94f95c91d6336b092b5fc83811720fae5e2765890dfba"}, - {file = "multidict-6.7.1-cp312-cp312-win32.whl", hash = "sha256:28ca5ce2fd9716631133d0e9a9b9a745ad7f60bac2bccafb56aa380fc0b6c511"}, - {file = "multidict-6.7.1-cp312-cp312-win_amd64.whl", hash = "sha256:fcee94dfbd638784645b066074b338bc9cc155d4b4bffa4adce1615c5a426c19"}, - {file = "multidict-6.7.1-cp312-cp312-win_arm64.whl", hash = "sha256:ba0a9fb644d0c1a2194cf7ffb043bd852cea63a57f66fbd33959f7dae18517bf"}, - {file = "multidict-6.7.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2b41f5fed0ed563624f1c17630cb9941cf2309d4df00e494b551b5f3e3d67a23"}, - {file = "multidict-6.7.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:84e61e3af5463c19b67ced91f6c634effb89ef8bfc5ca0267f954451ed4bb6a2"}, - {file = "multidict-6.7.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:935434b9853c7c112eee7ac891bc4cb86455aa631269ae35442cb316790c1445"}, - {file = "multidict-6.7.1-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:432feb25a1cb67fe82a9680b4d65fb542e4635cb3166cd9c01560651ad60f177"}, - {file = "multidict-6.7.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e82d14e3c948952a1a85503817e038cba5905a3352de76b9a465075d072fba23"}, - {file = "multidict-6.7.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4cfb48c6ea66c83bcaaf7e4dfa7ec1b6bbcf751b7db85a328902796dfde4c060"}, - {file = "multidict-6.7.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1d540e51b7e8e170174555edecddbd5538105443754539193e3e1061864d444d"}, - {file = "multidict-6.7.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:273d23f4b40f3dce4d6c8a821c741a86dec62cded82e1175ba3d99be128147ed"}, - {file = "multidict-6.7.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d624335fd4fa1c08a53f8b4be7676ebde19cd092b3895c421045ca87895b429"}, - {file = "multidict-6.7.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:12fad252f8b267cc75b66e8fc51b3079604e8d43a75428ffe193cd9e2195dfd6"}, - {file = "multidict-6.7.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:03ede2a6ffbe8ef936b92cb4529f27f42be7f56afcdab5ab739cd5f27fb1cbf9"}, - {file = "multidict-6.7.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:90efbcf47dbe33dcf643a1e400d67d59abeac5db07dc3f27d6bdeae497a2198c"}, - {file = "multidict-6.7.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:5c4b9bfc148f5a91be9244d6264c53035c8a0dcd2f51f1c3c6e30e30ebaa1c84"}, - {file = "multidict-6.7.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:401c5a650f3add2472d1d288c26deebc540f99e2fb83e9525007a74cd2116f1d"}, - {file = "multidict-6.7.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:97891f3b1b3ffbded884e2916cacf3c6fc87b66bb0dde46f7357404750559f33"}, - {file = "multidict-6.7.1-cp313-cp313-win32.whl", hash = "sha256:e1c5988359516095535c4301af38d8a8838534158f649c05dd1050222321bcb3"}, - {file = "multidict-6.7.1-cp313-cp313-win_amd64.whl", hash = "sha256:960c83bf01a95b12b08fd54324a4eb1d5b52c88932b5cba5d6e712bb3ed12eb5"}, - {file = "multidict-6.7.1-cp313-cp313-win_arm64.whl", hash = "sha256:563fe25c678aaba333d5399408f5ec3c383ca5b663e7f774dd179a520b8144df"}, - {file = "multidict-6.7.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:c76c4bec1538375dad9d452d246ca5368ad6e1c9039dadcf007ae59c70619ea1"}, - {file = "multidict-6.7.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:57b46b24b5d5ebcc978da4ec23a819a9402b4228b8a90d9c656422b4bdd8a963"}, - {file = "multidict-6.7.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e954b24433c768ce78ab7929e84ccf3422e46deb45a4dc9f93438f8217fa2d34"}, - {file = "multidict-6.7.1-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3bd231490fa7217cc832528e1cd8752a96f0125ddd2b5749390f7c3ec8721b65"}, - {file = "multidict-6.7.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:253282d70d67885a15c8a7716f3a73edf2d635793ceda8173b9ecc21f2fb8292"}, - {file = "multidict-6.7.1-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0b4c48648d7649c9335cf1927a8b87fa692de3dcb15faa676c6a6f1f1aabda43"}, - {file = "multidict-6.7.1-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:98bc624954ec4d2c7cb074b8eefc2b5d0ce7d482e410df446414355d158fe4ca"}, - {file = "multidict-6.7.1-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:1b99af4d9eec0b49927b4402bcbb58dea89d3e0db8806a4086117019939ad3dd"}, - {file = "multidict-6.7.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6aac4f16b472d5b7dc6f66a0d49dd57b0e0902090be16594dc9ebfd3d17c47e7"}, - {file = "multidict-6.7.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:21f830fe223215dffd51f538e78c172ed7c7f60c9b96a2bf05c4848ad49921c3"}, - {file = "multidict-6.7.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:f5dd81c45b05518b9aa4da4aa74e1c93d715efa234fd3e8a179df611cc85e5f4"}, - {file = "multidict-6.7.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:eb304767bca2bb92fb9c5bd33cedc95baee5bb5f6c88e63706533a1c06ad08c8"}, - {file = "multidict-6.7.1-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:c9035dde0f916702850ef66460bc4239d89d08df4d02023a5926e7446724212c"}, - {file = "multidict-6.7.1-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:af959b9beeb66c822380f222f0e0a1889331597e81f1ded7f374f3ecb0fd6c52"}, - {file = "multidict-6.7.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:41f2952231456154ee479651491e94118229844dd7226541788be783be2b5108"}, - {file = "multidict-6.7.1-cp313-cp313t-win32.whl", hash = "sha256:df9f19c28adcb40b6aae30bbaa1478c389efd50c28d541d76760199fc1037c32"}, - {file = "multidict-6.7.1-cp313-cp313t-win_amd64.whl", hash = "sha256:d54ecf9f301853f2c5e802da559604b3e95bb7a3b01a9c295c6ee591b9882de8"}, - {file = "multidict-6.7.1-cp313-cp313t-win_arm64.whl", hash = "sha256:5a37ca18e360377cfda1d62f5f382ff41f2b8c4ccb329ed974cc2e1643440118"}, - {file = "multidict-6.7.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:8f333ec9c5eb1b7105e3b84b53141e66ca05a19a605368c55450b6ba208cb9ee"}, - {file = "multidict-6.7.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:a407f13c188f804c759fc6a9f88286a565c242a76b27626594c133b82883b5c2"}, - {file = "multidict-6.7.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0e161ddf326db5577c3a4cc2d8648f81456e8a20d40415541587a71620d7a7d1"}, - {file = "multidict-6.7.1-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:1e3a8bb24342a8201d178c3b4984c26ba81a577c80d4d525727427460a50c22d"}, - {file = "multidict-6.7.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97231140a50f5d447d3164f994b86a0bed7cd016e2682f8650d6a9158e14fd31"}, - {file = "multidict-6.7.1-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6b10359683bd8806a200fd2909e7c8ca3a7b24ec1d8132e483d58e791d881048"}, - {file = "multidict-6.7.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:283ddac99f7ac25a4acadbf004cb5ae34480bbeb063520f70ce397b281859362"}, - {file = "multidict-6.7.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:538cec1e18c067d0e6103aa9a74f9e832904c957adc260e61cd9d8cf0c3b3d37"}, - {file = "multidict-6.7.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7eee46ccb30ff48a1e35bb818cc90846c6be2b68240e42a78599166722cea709"}, - {file = "multidict-6.7.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fa263a02f4f2dd2d11a7b1bb4362aa7cb1049f84a9235d31adf63f30143469a0"}, - {file = "multidict-6.7.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:2e1425e2f99ec5bd36c15a01b690a1a2456209c5deed58f95469ffb46039ccbb"}, - {file = "multidict-6.7.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:497394b3239fc6f0e13a78a3e1b61296e72bf1c5f94b4c4eb80b265c37a131cd"}, - {file = "multidict-6.7.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:233b398c29d3f1b9676b4b6f75c518a06fcb2ea0b925119fb2c1bc35c05e1601"}, - {file = "multidict-6.7.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:93b1818e4a6e0930454f0f2af7dfce69307ca03cdcfb3739bf4d91241967b6c1"}, - {file = "multidict-6.7.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:f33dc2a3abe9249ea5d8360f969ec7f4142e7ac45ee7014d8f8d5acddf178b7b"}, - {file = "multidict-6.7.1-cp314-cp314-win32.whl", hash = "sha256:3ab8b9d8b75aef9df299595d5388b14530839f6422333357af1339443cff777d"}, - {file = "multidict-6.7.1-cp314-cp314-win_amd64.whl", hash = "sha256:5e01429a929600e7dab7b166062d9bb54a5eed752384c7384c968c2afab8f50f"}, - {file = "multidict-6.7.1-cp314-cp314-win_arm64.whl", hash = "sha256:4885cb0e817aef5d00a2e8451d4665c1808378dc27c2705f1bf4ef8505c0d2e5"}, - {file = "multidict-6.7.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:0458c978acd8e6ea53c81eefaddbbee9c6c5e591f41b3f5e8e194780fe026581"}, - {file = "multidict-6.7.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:c0abd12629b0af3cf590982c0b413b1e7395cd4ec026f30986818ab95bfaa94a"}, - {file = "multidict-6.7.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:14525a5f61d7d0c94b368a42cff4c9a4e7ba2d52e2672a7b23d84dc86fb02b0c"}, - {file = "multidict-6.7.1-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:17307b22c217b4cf05033dabefe68255a534d637c6c9b0cc8382718f87be4262"}, - {file = "multidict-6.7.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7a7e590ff876a3eaf1c02a4dfe0724b6e69a9e9de6d8f556816f29c496046e59"}, - {file = "multidict-6.7.1-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:5fa6a95dfee63893d80a34758cd0e0c118a30b8dcb46372bf75106c591b77889"}, - {file = "multidict-6.7.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a0543217a6a017692aa6ae5cc39adb75e587af0f3a82288b1492eb73dd6cc2a4"}, - {file = "multidict-6.7.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f99fe611c312b3c1c0ace793f92464d8cd263cc3b26b5721950d977b006b6c4d"}, - {file = "multidict-6.7.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9004d8386d133b7e6135679424c91b0b854d2d164af6ea3f289f8f2761064609"}, - {file = "multidict-6.7.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e628ef0e6859ffd8273c69412a2465c4be4a9517d07261b33334b5ec6f3c7489"}, - {file = "multidict-6.7.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:841189848ba629c3552035a6a7f5bf3b02eb304e9fea7492ca220a8eda6b0e5c"}, - {file = "multidict-6.7.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:ce1bbd7d780bb5a0da032e095c951f7014d6b0a205f8318308140f1a6aba159e"}, - {file = "multidict-6.7.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:b26684587228afed0d50cf804cc71062cc9c1cdf55051c4c6345d372947b268c"}, - {file = "multidict-6.7.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:9f9af11306994335398293f9958071019e3ab95e9a707dc1383a35613f6abcb9"}, - {file = "multidict-6.7.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:b4938326284c4f1224178a560987b6cf8b4d38458b113d9b8c1db1a836e640a2"}, - {file = "multidict-6.7.1-cp314-cp314t-win32.whl", hash = "sha256:98655c737850c064a65e006a3df7c997cd3b220be4ec8fe26215760b9697d4d7"}, - {file = "multidict-6.7.1-cp314-cp314t-win_amd64.whl", hash = "sha256:497bde6223c212ba11d462853cfa4f0ae6ef97465033e7dc9940cdb3ab5b48e5"}, - {file = "multidict-6.7.1-cp314-cp314t-win_arm64.whl", hash = "sha256:2bbd113e0d4af5db41d5ebfe9ccaff89de2120578164f86a5d17d5a576d1e5b2"}, - {file = "multidict-6.7.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:65573858d27cdeaca41893185677dc82395159aa28875a8867af66532d413a8f"}, - {file = "multidict-6.7.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c524c6fb8fc342793708ab111c4dbc90ff9abd568de220432500e47e990c0358"}, - {file = "multidict-6.7.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:aa23b001d968faef416ff70dc0f1ab045517b9b42a90edd3e9bcdb06479e31d5"}, - {file = "multidict-6.7.1-cp39-cp39-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:6704fa2b7453b2fb121740555fa1ee20cd98c4d011120caf4d2b8d4e7c76eec0"}, - {file = "multidict-6.7.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:121a34e5bfa410cdf2c8c49716de160de3b1dbcd86b49656f5681e4543bcd1a8"}, - {file = "multidict-6.7.1-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:026d264228bcd637d4e060844e39cdc60f86c479e463d49075dedc21b18fbbe0"}, - {file = "multidict-6.7.1-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0e697826df7eb63418ee190fd06ce9f1803593bb4b9517d08c60d9b9a7f69d8f"}, - {file = "multidict-6.7.1-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:bb08271280173720e9fea9ede98e5231defcbad90f1624bea26f32ec8a956e2f"}, - {file = "multidict-6.7.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c6b3228e1d80af737b72925ce5fb4daf5a335e49cd7ab77ed7b9fdfbf58c526e"}, - {file = "multidict-6.7.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:3943debf0fbb57bdde5901695c11094a9a36723e5c03875f87718ee15ca2f4d2"}, - {file = "multidict-6.7.1-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:98c5787b0a0d9a41d9311eae44c3b76e6753def8d8870ab501320efe75a6a5f8"}, - {file = "multidict-6.7.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:08ccb2a6dc72009093ebe7f3f073e5ec5964cba9a706fa94b1a1484039b87941"}, - {file = "multidict-6.7.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:eb351f72c26dc9abe338ca7294661aa22969ad8ffe7ef7d5541d19f368dc854a"}, - {file = "multidict-6.7.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:ac1c665bad8b5d762f5f85ebe4d94130c26965f11de70c708c75671297c776de"}, - {file = "multidict-6.7.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1fa6609d0364f4f6f58351b4659a1f3e0e898ba2a8c5cac04cb2c7bc556b0bc5"}, - {file = "multidict-6.7.1-cp39-cp39-win32.whl", hash = "sha256:6f77ce314a29263e67adadc7e7c1bc699fcb3a305059ab973d038f87caa42ed0"}, - {file = "multidict-6.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:f537b55778cd3cbee430abe3131255d3a78202e0f9ea7ffc6ada893a4bcaeea4"}, - {file = "multidict-6.7.1-cp39-cp39-win_arm64.whl", hash = "sha256:749aa54f578f2e5f439538706a475aa844bfa8ef75854b1401e6e528e4937cf9"}, - {file = "multidict-6.7.1-py3-none-any.whl", hash = "sha256:55d97cc6dae627efa6a6e548885712d4864b81110ac76fa4e534c03819fa4a56"}, - {file = "multidict-6.7.1.tar.gz", hash = "sha256:ec6652a1bee61c53a3e5776b6049172c53b6aaba34f18c9ad04f82712bac623d"}, -] - -[package.dependencies] -typing-extensions = {version = ">=4.1.0", markers = "python_version < \"3.11\""} - -[[package]] -name = "numpy" -version = "2.2.6" -description = "Fundamental package for array computing in Python" -optional = false -python-versions = ">=3.10" -groups = ["main"] -markers = "python_version == \"3.10\"" -files = [ - {file = "numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb"}, - {file = "numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e41fd67c52b86603a91c1a505ebaef50b3314de0213461c7a6e99c9a3beff90"}, - {file = "numpy-2.2.6-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:37e990a01ae6ec7fe7fa1c26c55ecb672dd98b19c3d0e1d1f326fa13cb38d163"}, - {file = "numpy-2.2.6-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:5a6429d4be8ca66d889b7cf70f536a397dc45ba6faeb5f8c5427935d9592e9cf"}, - {file = "numpy-2.2.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efd28d4e9cd7d7a8d39074a4d44c63eda73401580c5c76acda2ce969e0a38e83"}, - {file = "numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc7b73d02efb0e18c000e9ad8b83480dfcd5dfd11065997ed4c6747470ae8915"}, - {file = "numpy-2.2.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74d4531beb257d2c3f4b261bfb0fc09e0f9ebb8842d82a7b4209415896adc680"}, - {file = "numpy-2.2.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8fc377d995680230e83241d8a96def29f204b5782f371c532579b4f20607a289"}, - {file = "numpy-2.2.6-cp310-cp310-win32.whl", hash = "sha256:b093dd74e50a8cba3e873868d9e93a85b78e0daf2e98c6797566ad8044e8363d"}, - {file = "numpy-2.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:f0fd6321b839904e15c46e0d257fdd101dd7f530fe03fd6359c1ea63738703f3"}, - {file = "numpy-2.2.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f9f1adb22318e121c5c69a09142811a201ef17ab257a1e66ca3025065b7f53ae"}, - {file = "numpy-2.2.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c820a93b0255bc360f53eca31a0e676fd1101f673dda8da93454a12e23fc5f7a"}, - {file = "numpy-2.2.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3d70692235e759f260c3d837193090014aebdf026dfd167834bcba43e30c2a42"}, - {file = "numpy-2.2.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:481b49095335f8eed42e39e8041327c05b0f6f4780488f61286ed3c01368d491"}, - {file = "numpy-2.2.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b64d8d4d17135e00c8e346e0a738deb17e754230d7e0810ac5012750bbd85a5a"}, - {file = "numpy-2.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba10f8411898fc418a521833e014a77d3ca01c15b0c6cdcce6a0d2897e6dbbdf"}, - {file = "numpy-2.2.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bd48227a919f1bafbdda0583705e547892342c26fb127219d60a5c36882609d1"}, - {file = "numpy-2.2.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9551a499bf125c1d4f9e250377c1ee2eddd02e01eac6644c080162c0c51778ab"}, - {file = "numpy-2.2.6-cp311-cp311-win32.whl", hash = "sha256:0678000bb9ac1475cd454c6b8c799206af8107e310843532b04d49649c717a47"}, - {file = "numpy-2.2.6-cp311-cp311-win_amd64.whl", hash = "sha256:e8213002e427c69c45a52bbd94163084025f533a55a59d6f9c5b820774ef3303"}, - {file = "numpy-2.2.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:41c5a21f4a04fa86436124d388f6ed60a9343a6f767fced1a8a71c3fbca038ff"}, - {file = "numpy-2.2.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:de749064336d37e340f640b05f24e9e3dd678c57318c7289d222a8a2f543e90c"}, - {file = "numpy-2.2.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:894b3a42502226a1cac872f840030665f33326fc3dac8e57c607905773cdcde3"}, - {file = "numpy-2.2.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:71594f7c51a18e728451bb50cc60a3ce4e6538822731b2933209a1f3614e9282"}, - {file = "numpy-2.2.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2618db89be1b4e05f7a1a847a9c1c0abd63e63a1607d892dd54668dd92faf87"}, - {file = "numpy-2.2.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd83c01228a688733f1ded5201c678f0c53ecc1006ffbc404db9f7a899ac6249"}, - {file = "numpy-2.2.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:37c0ca431f82cd5fa716eca9506aefcabc247fb27ba69c5062a6d3ade8cf8f49"}, - {file = "numpy-2.2.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fe27749d33bb772c80dcd84ae7e8df2adc920ae8297400dabec45f0dedb3f6de"}, - {file = "numpy-2.2.6-cp312-cp312-win32.whl", hash = "sha256:4eeaae00d789f66c7a25ac5f34b71a7035bb474e679f410e5e1a94deb24cf2d4"}, - {file = "numpy-2.2.6-cp312-cp312-win_amd64.whl", hash = "sha256:c1f9540be57940698ed329904db803cf7a402f3fc200bfe599334c9bd84a40b2"}, - {file = "numpy-2.2.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0811bb762109d9708cca4d0b13c4f67146e3c3b7cf8d34018c722adb2d957c84"}, - {file = "numpy-2.2.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:287cc3162b6f01463ccd86be154f284d0893d2b3ed7292439ea97eafa8170e0b"}, - {file = "numpy-2.2.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f1372f041402e37e5e633e586f62aa53de2eac8d98cbfb822806ce4bbefcb74d"}, - {file = "numpy-2.2.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:55a4d33fa519660d69614a9fad433be87e5252f4b03850642f88993f7b2ca566"}, - {file = "numpy-2.2.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f92729c95468a2f4f15e9bb94c432a9229d0d50de67304399627a943201baa2f"}, - {file = "numpy-2.2.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bc23a79bfabc5d056d106f9befb8d50c31ced2fbc70eedb8155aec74a45798f"}, - {file = "numpy-2.2.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e3143e4451880bed956e706a3220b4e5cf6172ef05fcc397f6f36a550b1dd868"}, - {file = "numpy-2.2.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b4f13750ce79751586ae2eb824ba7e1e8dba64784086c98cdbbcc6a42112ce0d"}, - {file = "numpy-2.2.6-cp313-cp313-win32.whl", hash = "sha256:5beb72339d9d4fa36522fc63802f469b13cdbe4fdab4a288f0c441b74272ebfd"}, - {file = "numpy-2.2.6-cp313-cp313-win_amd64.whl", hash = "sha256:b0544343a702fa80c95ad5d3d608ea3599dd54d4632df855e4c8d24eb6ecfa1c"}, - {file = "numpy-2.2.6-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0bca768cd85ae743b2affdc762d617eddf3bcf8724435498a1e80132d04879e6"}, - {file = "numpy-2.2.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fc0c5673685c508a142ca65209b4e79ed6740a4ed6b2267dbba90f34b0b3cfda"}, - {file = "numpy-2.2.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:5bd4fc3ac8926b3819797a7c0e2631eb889b4118a9898c84f585a54d475b7e40"}, - {file = "numpy-2.2.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:fee4236c876c4e8369388054d02d0e9bb84821feb1a64dd59e137e6511a551f8"}, - {file = "numpy-2.2.6-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1dda9c7e08dc141e0247a5b8f49cf05984955246a327d4c48bda16821947b2f"}, - {file = "numpy-2.2.6-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f447e6acb680fd307f40d3da4852208af94afdfab89cf850986c3ca00562f4fa"}, - {file = "numpy-2.2.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:389d771b1623ec92636b0786bc4ae56abafad4a4c513d36a55dce14bd9ce8571"}, - {file = "numpy-2.2.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8e9ace4a37db23421249ed236fdcdd457d671e25146786dfc96835cd951aa7c1"}, - {file = "numpy-2.2.6-cp313-cp313t-win32.whl", hash = "sha256:038613e9fb8c72b0a41f025a7e4c3f0b7a1b5d768ece4796b674c8f3fe13efff"}, - {file = "numpy-2.2.6-cp313-cp313t-win_amd64.whl", hash = "sha256:6031dd6dfecc0cf9f668681a37648373bddd6421fff6c66ec1624eed0180ee06"}, - {file = "numpy-2.2.6-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0b605b275d7bd0c640cad4e5d30fa701a8d59302e127e5f79138ad62762c3e3d"}, - {file = "numpy-2.2.6-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:7befc596a7dc9da8a337f79802ee8adb30a552a94f792b9c9d18c840055907db"}, - {file = "numpy-2.2.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce47521a4754c8f4593837384bd3424880629f718d87c5d44f8ed763edd63543"}, - {file = "numpy-2.2.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d042d24c90c41b54fd506da306759e06e568864df8ec17ccc17e9e884634fd00"}, - {file = "numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd"}, -] - -[[package]] -name = "numpy" -version = "2.4.6" -description = "Fundamental package for array computing in Python" -optional = false -python-versions = ">=3.11" -groups = ["main"] -markers = "python_version >= \"3.11\"" -files = [ - {file = "numpy-2.4.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0280e0356c0829a18d9de1cb7eee50ec22ca639878d7240307ca0943d73cd2c4"}, - {file = "numpy-2.4.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:110f8b71aacb688ec69062bb7f6938a0f8acb01b7c1c4beb453c65b6d234584d"}, - {file = "numpy-2.4.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:4cfe66903cc32a9921a6733d96b19bb6abf310397581bbad89c228f5abaf0ee8"}, - {file = "numpy-2.4.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8155154c7c691289fe18f510b5d4657c68c67989f293f0535a91360392ff6538"}, - {file = "numpy-2.4.6-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ab0a9c4ffb1a6d95ef519fe4247dba8eb6b18ad93999f76b7f657039acabd47"}, - {file = "numpy-2.4.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:89cd468399cfd2504718f0ba50e410dca55a170b61a02ad92bb18c8a65186e93"}, - {file = "numpy-2.4.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c2d37ab77531417474168eb79d6d80b14f821a966818505d03013d0833edb7a8"}, - {file = "numpy-2.4.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f407cb6b8e9d6d8c626bc73c945db1706035af8fd632295547bf1c9e46d092d6"}, - {file = "numpy-2.4.6-cp311-cp311-win32.whl", hash = "sha256:ddea102b48f9e339f3948bf22040944184627a30fdf7f858667673b9c5f033c8"}, - {file = "numpy-2.4.6-cp311-cp311-win_amd64.whl", hash = "sha256:1e254a00cdf42b1e4d5b3d68d33af63268d41340d8885df2ab6470f2e1500147"}, - {file = "numpy-2.4.6-cp311-cp311-win_arm64.whl", hash = "sha256:ed9749eef4cbd126da3dc1d6bcb3a57f5eb7ac6a6484146bdbf743f552dfc577"}, - {file = "numpy-2.4.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:001fbb8e08d942dd57599e781f2472269ee7f2755fae407b4f67b2f0b17da3f1"}, - {file = "numpy-2.4.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ebfb099f8dcf083deef3ac1ca4c1503f387cf76296fcb3816b66f5ecb5f54fdb"}, - {file = "numpy-2.4.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:3213d622a0283a39a93d188f3cf72b26862df52fbb4ca3697f51705016523d41"}, - {file = "numpy-2.4.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:357cc07a6d7b0b182ff02249616a03742827ebb1277546b5c7cd7f7620a45698"}, - {file = "numpy-2.4.6-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f9fb9157b4ce2971008323afe46053787b526ef624fea915b261468a8421a0f"}, - {file = "numpy-2.4.6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:90f9849678c75fe7afa2d348ac842c168b0a4d3d61919687216dfc547976d853"}, - {file = "numpy-2.4.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c1a2af6c6ef86344a6b0db6b97834208bf598db514f2b155042439b62605601a"}, - {file = "numpy-2.4.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e5805d5a22fd19c8ccff10a9561f9df94436b0545619ea579db2d3c35294bce2"}, - {file = "numpy-2.4.6-cp312-cp312-win32.whl", hash = "sha256:e3eeb0aabd6bd5ce64faae67e9935203a6991b4bc2a485a767fbafb2c5125f45"}, - {file = "numpy-2.4.6-cp312-cp312-win_amd64.whl", hash = "sha256:d8e8286dd7cea7895157318d1b91cdacac64c479f3cbc8dce548331728484751"}, - {file = "numpy-2.4.6-cp312-cp312-win_arm64.whl", hash = "sha256:4081eb135ac24158bd51cdfbef16f1c64df7063b1143f24731387137c092bec8"}, - {file = "numpy-2.4.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:511dbaf848decaaaf4b4ca48032619fb3138710c4bf7da7617765edad1ef96b0"}, - {file = "numpy-2.4.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bf162abab1c1a736333192707cef898e735a5ca00f38f27eeedf44b39d9e85eb"}, - {file = "numpy-2.4.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:043191bfa8eab18c776647b62723ac9dddece59743b13f49b2016094129c2b3f"}, - {file = "numpy-2.4.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:6180d8b35af935aed8ece3a85e0a43f87393ae0ac87c8d2c8bd2c993f7270ef3"}, - {file = "numpy-2.4.6-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72fbe16c6fac95aedf5937fa873445cec2110be35d8a4e9433d7501fd98dae6b"}, - {file = "numpy-2.4.6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a7830bab239b79cda9c08c2da014761cafb48da6150e1da17ac06283f43b6089"}, - {file = "numpy-2.4.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ef4aea96ce4d3b074422cb4f2f64e216bf9e213004bb58ecfdf50ea02ea8eb9a"}, - {file = "numpy-2.4.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dfa20cc6ca228e6b155b11da03825975ce66aea520985dbbddf0f2a5a495c605"}, - {file = "numpy-2.4.6-cp313-cp313-win32.whl", hash = "sha256:56b39e5e0622a09a25bf5baf62f4bcf0cb8a41ae6e2819cf49bbc5a74c083f91"}, - {file = "numpy-2.4.6-cp313-cp313-win_amd64.whl", hash = "sha256:c4fc99836233ea196540b17ab0983aff60ed07941751930f5f4d05bc3b3b7359"}, - {file = "numpy-2.4.6-cp313-cp313-win_arm64.whl", hash = "sha256:a7c711e21628b52034bb5ab8d1bce291f752fcc5e92accc615778acee1ff4778"}, - {file = "numpy-2.4.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:112b06a867b235ef466ed3508ddf0238050df9c727cafb5301ac385b899189a1"}, - {file = "numpy-2.4.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:eaf7fa2de5c0be8ae6ff8e9bea2ccd725e980541244521d8d4b5f3354a27babe"}, - {file = "numpy-2.4.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:7265a2f3d436e54ef9f2b52b5c937e6be778781bd97a590319d7348f1c1ca997"}, - {file = "numpy-2.4.6-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f74a575920ab21fe304421a3fc28793d82e299cae9eccb37084e9fc7f3617c20"}, - {file = "numpy-2.4.6-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ede83e07a75dd06bc501566c1eca2afc0d61677c1472ac9ad93fdee6e638a48d"}, - {file = "numpy-2.4.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:68bb27509ac1b9a3443094260f6326150663b06abe40b73a2f81160623da5b67"}, - {file = "numpy-2.4.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a0df0043bdb289bde1f62da130d20df23d58b45429f752bc7a8fc5325a225ecd"}, - {file = "numpy-2.4.6-cp313-cp313t-win32.whl", hash = "sha256:29a287e0cf63ff528da061de6b9f64a4618da591ca1046aafc54062e40ca7eab"}, - {file = "numpy-2.4.6-cp313-cp313t-win_amd64.whl", hash = "sha256:25c692919ac5a01f170a3bfcd62d745b24fd095c353d50812637d6fcab442e75"}, - {file = "numpy-2.4.6-cp313-cp313t-win_arm64.whl", hash = "sha256:1e978ec1e8bd0e0e4de6bb75de9d30cbb74db6b6a2bb727618613703ca0167dd"}, - {file = "numpy-2.4.6-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:06ca2f61ec4385a07a6977c55ba998a4466c123642b4a32694d3128fce18c079"}, - {file = "numpy-2.4.6-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:38efbc8de75c7a0fc1ac190162d892787f3f47b57cc291231aafee36b80982b7"}, - {file = "numpy-2.4.6-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:d581b735e177fdcdce6fed8e7e8880a3fb6ee4e3653a3ac6af01c6f4c03effc5"}, - {file = "numpy-2.4.6-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:0a041d3d761dc3c35cc56ce0351506a02bcbc25f7b169f652435141a17db9096"}, - {file = "numpy-2.4.6-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:40fdc1ae7125e518ea98e53e69a4ebc27e1fd50510c47b7ea130cf21e5e1d42b"}, - {file = "numpy-2.4.6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a2c306dea656c12c68f51f4cea133cbe78ca7435eb28c735eac1d3ebe73be6e8"}, - {file = "numpy-2.4.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:33111801a01c12a8a1e3721f0a9232f8cfc8ae2c6b7098167e6f623c6073f402"}, - {file = "numpy-2.4.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ae506e6902902557576a26ff33eda8695e7ecb3cb36c3b573a0765dee114ebdb"}, - {file = "numpy-2.4.6-cp314-cp314-win32.whl", hash = "sha256:aaf159caa35993cb1f56fb9b8e4610d35758e7ca005412eb1daa856a78c9c4b1"}, - {file = "numpy-2.4.6-cp314-cp314-win_amd64.whl", hash = "sha256:b507f5c4c1d508876d1819b6bf9a49d365b96320b5d4993426b33a23ca4b8261"}, - {file = "numpy-2.4.6-cp314-cp314-win_arm64.whl", hash = "sha256:6f41ae150c4e32db4f3310cdaf64b1593a03dbabe29eec77fc9b50fe64061df6"}, - {file = "numpy-2.4.6-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ece3d2cfe132e7d51f44a832b303895e6f2d499c5e74dfbdb06ee246147a304a"}, - {file = "numpy-2.4.6-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:e3e5193ef5a3dc73bceee50f7fdc2c90dbb76c42df8d8fae3d1067a583df579e"}, - {file = "numpy-2.4.6-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:17f9ade344e7d9b464a084d69bcf18fc691cb1db67c62ed80820bf4926d78f0e"}, - {file = "numpy-2.4.6-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9cd5ffd25db4e7ba6a375693b3fc0fc1791ec636c17db3720da19bde7180ec43"}, - {file = "numpy-2.4.6-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7d92c3819208a60205a12a245c91ad70cb0a85336659b19b834205573ac8456e"}, - {file = "numpy-2.4.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e85b752a1e912b70eaad4fafbd4d1238007ab221de2009b9a2f5ae7461239895"}, - {file = "numpy-2.4.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:29cb7f67d10b479ff07c17d33e39f78c07f71c40ef30d63c153d340e96cd3fb4"}, - {file = "numpy-2.4.6-cp314-cp314t-win32.whl", hash = "sha256:260a5d70215b61ab4fadf5c7baacd64821842975eea312125ed3c39a6391b063"}, - {file = "numpy-2.4.6-cp314-cp314t-win_amd64.whl", hash = "sha256:81a1cca95ed5bb92aa8b10dd2cdc9a0d3853a50fad926c28b5d7e8ea54389627"}, - {file = "numpy-2.4.6-cp314-cp314t-win_arm64.whl", hash = "sha256:0c9136e14ed34a9e343a31c533d78a9813a69a3148332bce5e9821cb2f996e66"}, - {file = "numpy-2.4.6-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:55cced7c52e981362f708ad635198e97a752dfba412cc03c23bbf3bd8d5cd662"}, - {file = "numpy-2.4.6-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d6da64deb6b8ed903e7560180a92f2d804ee1ba5eeb849ac2748b8c1aba1f6d7"}, - {file = "numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:68a5124b13fa6cc2086764a20005d30bc0548146f7f5322f02fce212ca14317f"}, - {file = "numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:948424b06129ce883307e8cff868c31396d8dc7630a59c61d70d98dbe70f222c"}, - {file = "numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5dbbdb29840ca3d91ee0fece42fc29278886d908280bfec0a5846c6f901a3eb0"}, - {file = "numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8ad03c0965fb3c692200e74d458ca28c1dbb4ce96f9a479a8aa041ad5fabca02"}, - {file = "numpy-2.4.6-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:2803abfebfc990042cd494d8ce2d5f82e9d847af6d35ec486923aa19dbad5e73"}, - {file = "numpy-2.4.6.tar.gz", hash = "sha256:f3a3570c4a2a16746ac2c31a7c7c7b0c186b95ce902e33db6f28094ed7387dda"}, -] - -[[package]] -name = "openbb-core" -version = "1.6.10" -description = "OpenBB package with core functionality." -optional = false -python-versions = "<4,>=3.10" -groups = ["main"] -files = [ - {file = "openbb_core-1.6.10-py3-none-any.whl", hash = "sha256:45b036ee816f2d5b1f25124f0a76f437c8a6304aa3b7d09b4c954339c6f0c447"}, - {file = "openbb_core-1.6.10.tar.gz", hash = "sha256:37e5aabc0a03fdac4f05f460127bfcb81c249afc6d6033997c246a97be70d0fe"}, -] - -[package.dependencies] -aiohttp = ">=3.13.3" -fastapi = ">=0.128.0,<0.129.0" -html5lib = ">=1.1,<2.0" -importlib-metadata = ">=6.8.0" -pandas = ">=1.5.3" -pydantic = ">=2.12.3,<3.0.0" -pyjwt = ">=2.12.0,<3.0.0" -python-dotenv = ">=1.0.0,<2.0.0" -python-multipart = ">=0.0.27,<0.0.28" -requests = ">=2.33.0,<3.0.0" -ruff = ">=0.15,<0.16" -uuid7 = ">=0.1.0,<0.2.0" -uvicorn = ">=0.40.0,<0.41.0" -websockets = ">=15.0" - -[[package]] -name = "pandas" -version = "2.3.3" -description = "Powerful data structures for data analysis, time series, and statistics" -optional = false -python-versions = ">=3.9" -groups = ["main"] -markers = "python_version == \"3.10\"" -files = [ - {file = "pandas-2.3.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:376c6446ae31770764215a6c937f72d917f214b43560603cd60da6408f183b6c"}, - {file = "pandas-2.3.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e19d192383eab2f4ceb30b412b22ea30690c9e618f78870357ae1d682912015a"}, - {file = "pandas-2.3.3-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5caf26f64126b6c7aec964f74266f435afef1c1b13da3b0636c7518a1fa3e2b1"}, - {file = "pandas-2.3.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dd7478f1463441ae4ca7308a70e90b33470fa593429f9d4c578dd00d1fa78838"}, - {file = "pandas-2.3.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4793891684806ae50d1288c9bae9330293ab4e083ccd1c5e383c34549c6e4250"}, - {file = "pandas-2.3.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:28083c648d9a99a5dd035ec125d42439c6c1c525098c58af0fc38dd1a7a1b3d4"}, - {file = "pandas-2.3.3-cp310-cp310-win_amd64.whl", hash = "sha256:503cf027cf9940d2ceaa1a93cfb5f8c8c7e6e90720a2850378f0b3f3b1e06826"}, - {file = "pandas-2.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:602b8615ebcc4a0c1751e71840428ddebeb142ec02c786e8ad6b1ce3c8dec523"}, - {file = "pandas-2.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8fe25fc7b623b0ef6b5009149627e34d2a4657e880948ec3c840e9402e5c1b45"}, - {file = "pandas-2.3.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b468d3dad6ff947df92dcb32ede5b7bd41a9b3cceef0a30ed925f6d01fb8fa66"}, - {file = "pandas-2.3.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b98560e98cb334799c0b07ca7967ac361a47326e9b4e5a7dfb5ab2b1c9d35a1b"}, - {file = "pandas-2.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37b5848ba49824e5c30bedb9c830ab9b7751fd049bc7914533e01c65f79791"}, - {file = "pandas-2.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:db4301b2d1f926ae677a751eb2bd0e8c5f5319c9cb3f88b0becbbb0b07b34151"}, - {file = "pandas-2.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:f086f6fe114e19d92014a1966f43a3e62285109afe874f067f5abbdcbb10e59c"}, - {file = "pandas-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d21f6d74eb1725c2efaa71a2bfc661a0689579b58e9c0ca58a739ff0b002b53"}, - {file = "pandas-2.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3fd2f887589c7aa868e02632612ba39acb0b8948faf5cc58f0850e165bd46f35"}, - {file = "pandas-2.3.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecaf1e12bdc03c86ad4a7ea848d66c685cb6851d807a26aa245ca3d2017a1908"}, - {file = "pandas-2.3.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b3d11d2fda7eb164ef27ffc14b4fcab16a80e1ce67e9f57e19ec0afaf715ba89"}, - {file = "pandas-2.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a68e15f780eddf2b07d242e17a04aa187a7ee12b40b930bfdd78070556550e98"}, - {file = "pandas-2.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:371a4ab48e950033bcf52b6527eccb564f52dc826c02afd9a1bc0ab731bba084"}, - {file = "pandas-2.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:a16dcec078a01eeef8ee61bf64074b4e524a2a3f4b3be9326420cabe59c4778b"}, - {file = "pandas-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:56851a737e3470de7fa88e6131f41281ed440d29a9268dcbf0002da5ac366713"}, - {file = "pandas-2.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bdcd9d1167f4885211e401b3036c0c8d9e274eee67ea8d0758a256d60704cfe8"}, - {file = "pandas-2.3.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e32e7cc9af0f1cc15548288a51a3b681cc2a219faa838e995f7dc53dbab1062d"}, - {file = "pandas-2.3.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:318d77e0e42a628c04dc56bcef4b40de67918f7041c2b061af1da41dcff670ac"}, - {file = "pandas-2.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e0a175408804d566144e170d0476b15d78458795bb18f1304fb94160cabf40c"}, - {file = "pandas-2.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:93c2d9ab0fc11822b5eece72ec9587e172f63cff87c00b062f6e37448ced4493"}, - {file = "pandas-2.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:f8bfc0e12dc78f777f323f55c58649591b2cd0c43534e8355c51d3fede5f4dee"}, - {file = "pandas-2.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:75ea25f9529fdec2d2e93a42c523962261e567d250b0013b16210e1d40d7c2e5"}, - {file = "pandas-2.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:74ecdf1d301e812db96a465a525952f4dde225fdb6d8e5a521d47e1f42041e21"}, - {file = "pandas-2.3.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6435cb949cb34ec11cc9860246ccb2fdc9ecd742c12d3304989017d53f039a78"}, - {file = "pandas-2.3.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:900f47d8f20860de523a1ac881c4c36d65efcb2eb850e6948140fa781736e110"}, - {file = "pandas-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a45c765238e2ed7d7c608fc5bc4a6f88b642f2f01e70c0c23d2224dd21829d86"}, - {file = "pandas-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c4fc4c21971a1a9f4bdb4c73978c7f7256caa3e62b323f70d6cb80db583350bc"}, - {file = "pandas-2.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:ee15f284898e7b246df8087fc82b87b01686f98ee67d85a17b7ab44143a3a9a0"}, - {file = "pandas-2.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1611aedd912e1ff81ff41c745822980c49ce4a7907537be8692c8dbc31924593"}, - {file = "pandas-2.3.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d2cefc361461662ac48810cb14365a365ce864afe85ef1f447ff5a1e99ea81c"}, - {file = "pandas-2.3.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ee67acbbf05014ea6c763beb097e03cd629961c8a632075eeb34247120abcb4b"}, - {file = "pandas-2.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c46467899aaa4da076d5abc11084634e2d197e9460643dd455ac3db5856b24d6"}, - {file = "pandas-2.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6253c72c6a1d990a410bc7de641d34053364ef8bcd3126f7e7450125887dffe3"}, - {file = "pandas-2.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:1b07204a219b3b7350abaae088f451860223a52cfb8a6c53358e7948735158e5"}, - {file = "pandas-2.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2462b1a365b6109d275250baaae7b760fd25c726aaca0054649286bcfbb3e8ec"}, - {file = "pandas-2.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0242fe9a49aa8b4d78a4fa03acb397a58833ef6199e9aa40a95f027bb3a1b6e7"}, - {file = "pandas-2.3.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a21d830e78df0a515db2b3d2f5570610f5e6bd2e27749770e8bb7b524b89b450"}, - {file = "pandas-2.3.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e3ebdb170b5ef78f19bfb71b0dc5dc58775032361fa188e814959b74d726dd5"}, - {file = "pandas-2.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d051c0e065b94b7a3cea50eb1ec32e912cd96dba41647eb24104b6c6c14c5788"}, - {file = "pandas-2.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3869faf4bd07b3b66a9f462417d0ca3a9df29a9f6abd5d0d0dbab15dac7abe87"}, - {file = "pandas-2.3.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c503ba5216814e295f40711470446bc3fd00f0faea8a086cbc688808e26f92a2"}, - {file = "pandas-2.3.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a637c5cdfa04b6d6e2ecedcb81fc52ffb0fd78ce2ebccc9ea964df9f658de8c8"}, - {file = "pandas-2.3.3-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:854d00d556406bffe66a4c0802f334c9ad5a96b4f1f868adf036a21b11ef13ff"}, - {file = "pandas-2.3.3-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bf1f8a81d04ca90e32a0aceb819d34dbd378a98bf923b6398b9a3ec0bf44de29"}, - {file = "pandas-2.3.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:23ebd657a4d38268c7dfbdf089fbc31ea709d82e4923c5ffd4fbd5747133ce73"}, - {file = "pandas-2.3.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5554c929ccc317d41a5e3d1234f3be588248e61f08a74dd17c9eabb535777dc9"}, - {file = "pandas-2.3.3-cp39-cp39-win_amd64.whl", hash = "sha256:d3e28b3e83862ccf4d85ff19cf8c20b2ae7e503881711ff2d534dc8f761131aa"}, - {file = "pandas-2.3.3.tar.gz", hash = "sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b"}, -] - -[package.dependencies] -numpy = {version = ">=1.22.4", markers = "python_version < \"3.11\""} -python-dateutil = ">=2.8.2" -pytz = ">=2020.1" -tzdata = ">=2022.7" - -[package.extras] -all = ["PyQt5 (>=5.15.9)", "SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)", "beautifulsoup4 (>=4.11.2)", "bottleneck (>=1.3.6)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=2022.12.0)", "fsspec (>=2022.11.0)", "gcsfs (>=2022.11.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.9.2)", "matplotlib (>=3.6.3)", "numba (>=0.56.4)", "numexpr (>=2.8.4)", "odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "pandas-gbq (>=0.19.0)", "psycopg2 (>=2.9.6)", "pyarrow (>=10.0.1)", "pymysql (>=1.0.2)", "pyreadstat (>=1.2.0)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "qtpy (>=2.3.0)", "s3fs (>=2022.11.0)", "scipy (>=1.10.0)", "tables (>=3.8.0)", "tabulate (>=0.9.0)", "xarray (>=2022.12.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)", "zstandard (>=0.19.0)"] -aws = ["s3fs (>=2022.11.0)"] -clipboard = ["PyQt5 (>=5.15.9)", "qtpy (>=2.3.0)"] -compression = ["zstandard (>=0.19.0)"] -computation = ["scipy (>=1.10.0)", "xarray (>=2022.12.0)"] -consortium-standard = ["dataframe-api-compat (>=0.1.7)"] -excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)"] -feather = ["pyarrow (>=10.0.1)"] -fss = ["fsspec (>=2022.11.0)"] -gcp = ["gcsfs (>=2022.11.0)", "pandas-gbq (>=0.19.0)"] -hdf5 = ["tables (>=3.8.0)"] -html = ["beautifulsoup4 (>=4.11.2)", "html5lib (>=1.1)", "lxml (>=4.9.2)"] -mysql = ["SQLAlchemy (>=2.0.0)", "pymysql (>=1.0.2)"] -output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.9.0)"] -parquet = ["pyarrow (>=10.0.1)"] -performance = ["bottleneck (>=1.3.6)", "numba (>=0.56.4)", "numexpr (>=2.8.4)"] -plot = ["matplotlib (>=3.6.3)"] -postgresql = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "psycopg2 (>=2.9.6)"] -pyarrow = ["pyarrow (>=10.0.1)"] -spss = ["pyreadstat (>=1.2.0)"] -sql-other = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)"] -test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"] -xml = ["lxml (>=4.9.2)"] - -[[package]] -name = "pandas" -version = "3.0.3" -description = "Powerful data structures for data analysis, time series, and statistics" -optional = false -python-versions = ">=3.11" -groups = ["main"] -markers = "python_version >= \"3.11\"" -files = [ - {file = "pandas-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:455f6f8139d4282188f526868dbc3c828470e88a3d9d59a891bd46a455f21b98"}, - {file = "pandas-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4e15135e2ee5df1063313e2425ceef8ac0f4ae775893815b0923651b806a5639"}, - {file = "pandas-3.0.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:05f1f1752b8533ea03f7f39a9c15b1a058d067bb48f4748948e7a8691e0510f2"}, - {file = "pandas-3.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8a1e45c80cceb3b4a21bc5939d52e8cbd8d9b7305309219d59e9754d9ce09e27"}, - {file = "pandas-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:14da8316da4d0c5a77618425996bfb1248ca87fc2c1486e6fde4652bd18b5824"}, - {file = "pandas-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a55066a0505dae0ba2b50a46637db34b46f9094c65c5d4800794ef6335010938"}, - {file = "pandas-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:6674ab18ad8c57802867264b00e15e7bb904700cdd9046e3b2fa1fce237439ea"}, - {file = "pandas-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:5cc09a68b3120e0f54870dede8287a7bb1fa463907e4fcec1ea77cab6179bf7a"}, - {file = "pandas-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fed2ff7fd9779120e388e285fc029bd5cf9490cdd2e4166a9ee22c0e49a9ab09"}, - {file = "pandas-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b168fc218fd80a6cbdbdbc1a97ddc7889ed057d7eb45f50d866ceab5f39904c4"}, - {file = "pandas-3.0.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0383c72c75cdcca61a9e116e611143902dbfd08bff356829c2f6d1cf40a9ca8c"}, - {file = "pandas-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6dc0b3fd2169c9157deed50b4d519553a3655c8c6a96027136d654592be973a9"}, - {file = "pandas-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7e65d5407dc0b394f509699650e4a2ec01c0514f21850f453fa60f3be79a5dbf"}, - {file = "pandas-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f8894dc474d648fe7b6ff0ca9b0bd73950d19952bc1a6534540762c5d79d305c"}, - {file = "pandas-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:c7be265b62cef88e253a941e4698604973736dcfe242fdb5198f0f7bc473cdcc"}, - {file = "pandas-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:557409bc4178e70ee8d9ddb494798e51ebf6ea59330f6be22c51bab2a7db6c49"}, - {file = "pandas-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:67b3b64c11910cfa29f4e94a14d3bff9ee693b6fc76055e7cad549cee0aec5fa"}, - {file = "pandas-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:39436b377d56d2a2e52d0395bdbee171f01068e99af5250509aceeb929f765c7"}, - {file = "pandas-3.0.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4be06d68f9ddcfc645b87534911da79a8fbffc7573c80e0edcf42a5020624d8"}, - {file = "pandas-3.0.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a4eeb6830daf35a71cc09649bd823e2b542dac246cdee9614c6e4bd65028cd6a"}, - {file = "pandas-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1928e07221f82db493cd4af1e23c1bfca524a19a4699887975bff68f49a72bfb"}, - {file = "pandas-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51b1fe551acb77dac643c6fda86084d8d446c10fe64b06a9cc29c4cc8540e7f2"}, - {file = "pandas-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:a82d532a3351d435432cd913edbccaf8b8e01d4dd0e5ced5a8d2e8ecd94c7e44"}, - {file = "pandas-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:275c14e0fce14a2ec20eee474aecd305478ea3c1e6f6a9d8fe219a165542717e"}, - {file = "pandas-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:46997386d528eb40376ecd6b033cf4a8a1e5282580f68f43de875b78cba2199d"}, - {file = "pandas-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:261e308dfb22448384b7580cf719d2f998fe2966c92893c3e77d14008af1f066"}, - {file = "pandas-3.0.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dd1a5d1def6a46002e964510bdc67c368aa0951df5d1d9f8365336f5a1f490cd"}, - {file = "pandas-3.0.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d72828c20c6d6e83e1e22a6a3b47b326b71664112fa9705dcbccfd7a39b62085"}, - {file = "pandas-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d26cbe1fcfc12e8fd900e2454163e466b2d3af84f7c75481df7683ffc073d870"}, - {file = "pandas-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3e91cec1879ada0624fc3dc9953c5cbd60208e59c0db28f540c5d6d47502422f"}, - {file = "pandas-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:08d789b41f87e0905880e293cedf6197ce71fe67cc081358b1e148a491b9bd13"}, - {file = "pandas-3.0.3-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:3650109c0f22879df8bd6179ab9ee3d7f1d1d4e7e0094a3f0032d9f51e2e64ac"}, - {file = "pandas-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:bab900348131a7db1f69a7309ef141fd5680f1487094193bcbbb61791573bf8f"}, - {file = "pandas-3.0.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba7e08b9ac1d54569cd1e256e3668975ed624d6826f7b68df0342b012007bddb"}, - {file = "pandas-3.0.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d71c63ae4ebdbf70209742096f1fc46a83a0613c99d4b23766cced9ff8cd62a"}, - {file = "pandas-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e3a2ec42c98ffa2565a67e08e218d06d72576d758d90facb7c00805194d8f360"}, - {file = "pandas-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:335f62418ed562cfc3c49e9e196375c28b729dcef8543abf4f9438e381bf3c76"}, - {file = "pandas-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:3c20a521bbb85902f79f7270c80a59e1b5452d96d170c034f207181870f97ac5"}, - {file = "pandas-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:a2d2dff8a04f3917b55ab3910c32990f8ddf7eceba114947838cefa976a68977"}, - {file = "pandas-3.0.3-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:0d589105b3c14645af1738ff279b2995102d8f7a03b0a66dc8d95550eb513e04"}, - {file = "pandas-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:13fc1e853d9e04743d11ba75a985ccbc2a317fe07d8af61e445a6fd24dacd6a6"}, - {file = "pandas-3.0.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:819959dab7bbd0049c15623fbac4e29a191b9528160a61fb1032242d8ced2d9c"}, - {file = "pandas-3.0.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:60ae316d3fd75d1858d450d0db0103ea2be3e7d4a95ec2f064f7e2ae63f7b028"}, - {file = "pandas-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:bd3a518890b400d32f9023722dc9a9a5c969f00b415419a3c06c043f09bb5d7d"}, - {file = "pandas-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9c39be2d709d01fa972a0cabc522389fceca4f3969332ba25a7d6c5802cf976a"}, - {file = "pandas-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4db8c527972a821cf5286b40ccc57642a39bc62e62022b42f99f8a67fca8c3a1"}, - {file = "pandas-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:b2c95f8bfc1ee412bf482605d7bfd30c12d1d26bd59fdd91efeef1d4718decb1"}, - {file = "pandas-3.0.3.tar.gz", hash = "sha256:696a4a00a2a2a35d4e5deb3fc946641b96c944f02230e4f76137fe35d806c4fc"}, -] - -[package.dependencies] -numpy = [ - {version = ">=1.26.0", markers = "python_version < \"3.14\""}, - {version = ">=2.3.3", markers = "python_version >= \"3.14\""}, -] -python-dateutil = ">=2.8.2" -tzdata = {version = "*", markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\""} - -[package.extras] -all = ["PyQt5 (>=5.15.9)", "SQLAlchemy (>=2.0.36)", "adbc-driver-postgresql (>=1.2.0)", "adbc-driver-sqlite (>=1.2.0)", "beautifulsoup4 (>=4.12.3)", "bottleneck (>=1.4.2)", "fastparquet (>=2024.11.0)", "fsspec (>=2024.10.0)", "gcsfs (>=2024.10.0)", "html5lib (>=1.1)", "hypothesis (>=6.116.0)", "jinja2 (>=3.1.5)", "lxml (>=5.3.0)", "matplotlib (>=3.9.3)", "numba (>=0.60.0)", "numexpr (>=2.10.2)", "odfpy (>=1.4.1)", "openpyxl (>=3.1.5)", "psycopg2 (>=2.9.10)", "pyarrow (>=13.0.0)", "pyiceberg (>=0.8.1)", "pymysql (>=1.1.1)", "pyreadstat (>=1.2.8)", "pytest (>=8.3.4)", "pytest-xdist (>=3.6.1)", "python-calamine (>=0.3.0)", "pytz (>=2020.1)", "pyxlsb (>=1.0.10)", "qtpy (>=2.4.2)", "s3fs (>=2024.10.0)", "scipy (>=1.14.1)", "tables (>=3.10.1)", "tabulate (>=0.9.0)", "xarray (>=2024.10.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.2.0)", "zstandard (>=0.23.0)"] -aws = ["s3fs (>=2024.10.0)"] -clipboard = ["PyQt5 (>=5.15.9)", "qtpy (>=2.4.2)"] -compression = ["zstandard (>=0.23.0)"] -computation = ["scipy (>=1.14.1)", "xarray (>=2024.10.0)"] -excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.1.5)", "python-calamine (>=0.3.0)", "pyxlsb (>=1.0.10)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.2.0)"] -feather = ["pyarrow (>=13.0.0)"] -fss = ["fsspec (>=2024.10.0)"] -gcp = ["gcsfs (>=2024.10.0)"] -hdf5 = ["tables (>=3.10.1)"] -html = ["beautifulsoup4 (>=4.12.3)", "html5lib (>=1.1)", "lxml (>=5.3.0)"] -iceberg = ["pyiceberg (>=0.8.1)"] -mysql = ["SQLAlchemy (>=2.0.36)", "pymysql (>=1.1.1)"] -output-formatting = ["jinja2 (>=3.1.5)", "tabulate (>=0.9.0)"] -parquet = ["pyarrow (>=13.0.0)"] -performance = ["bottleneck (>=1.4.2)", "numba (>=0.60.0)", "numexpr (>=2.10.2)"] -plot = ["matplotlib (>=3.9.3)"] -postgresql = ["SQLAlchemy (>=2.0.36)", "adbc-driver-postgresql (>=1.2.0)", "psycopg2 (>=2.9.10)"] -pyarrow = ["pyarrow (>=13.0.0)"] -spss = ["pyreadstat (>=1.2.8)"] -sql-other = ["SQLAlchemy (>=2.0.36)", "adbc-driver-postgresql (>=1.2.0)", "adbc-driver-sqlite (>=1.2.0)"] -test = ["hypothesis (>=6.116.0)", "pytest (>=8.3.4)", "pytest-xdist (>=3.6.1)"] -timezone = ["pytz (>=2020.1)"] -xml = ["lxml (>=5.3.0)"] - -[[package]] -name = "propcache" -version = "0.5.2" -description = "Accelerated property cache" -optional = false -python-versions = ">=3.10" -groups = ["main"] -files = [ - {file = "propcache-0.5.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d5a81be28596d6559f6131ef33e10200de6e17643b3c74ce03f9eb103be6ae8b"}, - {file = "propcache-0.5.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:29cbaac5ea0212663e6845e04b5e188d5a6ae6dd919810ac835bf1d3b42c3f4c"}, - {file = "propcache-0.5.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6bf3be92233808fcd338eba0fb4d0b59ec5772af4f4ecfcec450d1bfc0f8b5eb"}, - {file = "propcache-0.5.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2f8ea531c794b9d6274acd4e8d2c2ebcac590a4361d27482edd3010b79f1325e"}, - {file = "propcache-0.5.2-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:decfca4c79dd53ebab484b00cc4b6717d8c369f86e74aa4ca395a64ac651495e"}, - {file = "propcache-0.5.2-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4621064bbf28fa77ff64dd5d94367c04684c67d3a5bf1dff25f0cd0d98a38f3b"}, - {file = "propcache-0.5.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b96db7141a592cbc968daf1feea83a118e6ab378af4abbc72b248c895414c22d"}, - {file = "propcache-0.5.2-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1ca071adabaab6e9219924bbe00af821f1ee7de113a9eca1cdc292de3d120f4d"}, - {file = "propcache-0.5.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e4294d04a94dcab1b3bccd8b66d962dcad411a1d19414b2a41d1445f1de32ad0"}, - {file = "propcache-0.5.2-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:a0e399a2eccb91ed18721f86aa85757727400b6865c89e88934781deb9c8498b"}, - {file = "propcache-0.5.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:823581fd5cb08b12a48bfa11fe962a7916766b6170c17b028fbdf762b85eb9bf"}, - {file = "propcache-0.5.2-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:949c91d1a990cf3b2e8188dfcfb25005e0b834a06c63fa4ef9f360878ce21ecf"}, - {file = "propcache-0.5.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:cc1177027eda740fdb152706bd215a3f124e3eea15afc39f2cb9fe351b50619e"}, - {file = "propcache-0.5.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b05d643f944a8c3c4bd86d65ffd87bf3264b617f87791940302bc474d2ff5274"}, - {file = "propcache-0.5.2-cp310-cp310-win32.whl", hash = "sha256:8114f28879e0904748e831c3a7774261bd9e75f49be089f389a76f959dcd13fe"}, - {file = "propcache-0.5.2-cp310-cp310-win_amd64.whl", hash = "sha256:5fcb98e7598b1ee0addab320d90f65b530297a867dbfe9de52ea838077e16e3d"}, - {file = "propcache-0.5.2-cp310-cp310-win_arm64.whl", hash = "sha256:04dc2390d9edbbaef7461f33322555976ffddf0b650a038649d026358714e6c5"}, - {file = "propcache-0.5.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:74b70780220e2dd89175ca24b81b68b67c83db499ae611e7f2313cb329801c78"}, - {file = "propcache-0.5.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a4840ab0ae0216d952f4b53dc6d0b992bfc2bedbfe360bdd9b548bc184c08959"}, - {file = "propcache-0.5.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c6844ba6364fb12f403928a82cfd295ab103a2b315c77c747b2dbe4a41894ea7"}, - {file = "propcache-0.5.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2293949b855ce597f2826452d17c2d545fb5622379c4ea6fdf525e9b8e8a2511"}, - {file = "propcache-0.5.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0fd59b5af35f74da48d905dcbad55449ba13be91823cb05a9bd590bbf5b61660"}, - {file = "propcache-0.5.2-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:29f9309a2e42b0d273be006fdb4be2d6c39a47f6f57d8fb1cf9f81481df81b66"}, - {file = "propcache-0.5.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5aaa2b923c1944ac8febd6609cb373540a5563e7cbcb0fd770f75dace2eb817b"}, - {file = "propcache-0.5.2-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:66ea454f095ddf5b6b14f56c064c0941c4788be11e18d2464cf643bf7203ff67"}, - {file = "propcache-0.5.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:95f1e3f4760d404b13c9976c0229b2b49a3c8e2c62a9ce92efdd2b11ada75e3f"}, - {file = "propcache-0.5.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:85341b12b9d55bad0bded24cac341bb34289469e03a11f3f583ea1cc1db0326c"}, - {file = "propcache-0.5.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:26a4dca084132874e639895c3135dfad5eb20bae209f62d1aeb31b03e601c3c0"}, - {file = "propcache-0.5.2-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:3b199b9b2b3d6a7edf3183ba8a9a137a22b97f7df525feb5ae1eccf026d2a9c6"}, - {file = "propcache-0.5.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:e59bc9e66329185b93dab73f210f1a37f81cb40f321501db8017c9aea15dba27"}, - {file = "propcache-0.5.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:552ffadf6ad409844bc5919c42a0a83d88314cedddaea0e41e80a8b8fffe881f"}, - {file = "propcache-0.5.2-cp311-cp311-win32.whl", hash = "sha256:cd416c1de191973c52ff1a12a57446bfc7642797b282d7caf2162d7d1b8aa9a0"}, - {file = "propcache-0.5.2-cp311-cp311-win_amd64.whl", hash = "sha256:44e488ef40dbb452700b2b1f8188934121f6648f52c295055662d2191959ff82"}, - {file = "propcache-0.5.2-cp311-cp311-win_arm64.whl", hash = "sha256:54adaa85a22078d1e306304a40984dc5be99d599bf3dc0a24dc98f7daeab89ab"}, - {file = "propcache-0.5.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:806719138ecd720339a12410fb9614ac9b2b2d3a5fdf8235d56981c36f4039ba"}, - {file = "propcache-0.5.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:db2b80ea58eab4f86b2beec3cc8b39e8ff9276ac20e96b7cce43c8ae84cd6b5a"}, - {file = "propcache-0.5.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e5cbfac9f61484f7e9f3597775500cd3ebe8274e9b050c38f9525c77c97520bf"}, - {file = "propcache-0.5.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5dbc581d2814337da56222fab8dc5f161cd798a434e49bac27930aaef798e144"}, - {file = "propcache-0.5.2-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:857187f381f88c8e2fa2fe56ab94879d011b883d5a2ee5a1b60a8cd2a06846d9"}, - {file = "propcache-0.5.2-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:178b4a2cdaac1818e2bf1c5a99b94383fa73ea5382e032a48dec07dc5668dc42"}, - {file = "propcache-0.5.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6f328175a2cde1f0ff2c4ed8ce968b9dcfb55f3a7153f39e2957ed994da13476"}, - {file = "propcache-0.5.2-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:5671d09a36b06d0fd4a3da0fccbcae360e9b1570924171a15e9e0997f0249fba"}, - {file = "propcache-0.5.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:80168e2ebe4d3ec6599d10ad8f520304ae1cad9b6c5a95372aef1b66b7bfb53a"}, - {file = "propcache-0.5.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:45f11346f884bc47444f6e6647131055844134c3175b629f84952e2b5cd62b64"}, - {file = "propcache-0.5.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:8e778ebd44ef4f66ed60a0416b06b489687db264a9c0b3620362f26489492913"}, - {file = "propcache-0.5.2-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:c0cb9ed24c8964e172768d455a38254c2dd8a552905729ce006cad3d3dda59b1"}, - {file = "propcache-0.5.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:1d1ad32d9d4355e2be65574fd0bfd3677e7066b009cd5b9b2dee8aa6a6393b33"}, - {file = "propcache-0.5.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c80f4ba3e8f00189165999a742ee526ebeccedf6c3f7beb0c7df821e9772435a"}, - {file = "propcache-0.5.2-cp312-cp312-win32.whl", hash = "sha256:8c7972d8f193740d9175f0998ab38717e6cd322d5935c5b0fef8c0d323fd9031"}, - {file = "propcache-0.5.2-cp312-cp312-win_amd64.whl", hash = "sha256:d9ee8826a7d47863a08ac44e1a5f611a462eefc3a194b492da242128bec75b42"}, - {file = "propcache-0.5.2-cp312-cp312-win_arm64.whl", hash = "sha256:2800a4a8ead6b28cccd1ec54b59346f0def7922ee1c7598e8499c733cfbb7c84"}, - {file = "propcache-0.5.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:099aaf4b4d1a02265b92a977edf00b5c4f63b3b17ac6de39b0d637c9cac0188a"}, - {file = "propcache-0.5.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:68ce1c44c7a813a7f71ea04315a8c7b330b63db99d059a797a4651bb6f69f117"}, - {file = "propcache-0.5.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:fc299c129490f55f254cd90be0deca4764e36e9a7c08b4aa588479a3bbed3098"}, - {file = "propcache-0.5.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a6ae2198be502c10f09b2516e7b5d019816924bc3183a43ce792a7bd6625e6f4"}, - {file = "propcache-0.5.2-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6041d31504dc1779d700e1edcfb08eea334b357620b06681a4eabb57a74e574e"}, - {file = "propcache-0.5.2-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f7eabc04151c78a9f4d5bbb5f1faf571e4defeb4b585e0fe95b60ff2dbe4d3d7"}, - {file = "propcache-0.5.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4db0ba63d693afd40d249bd93f842b5f144f8fcbb83de05660373bcf30517b1d"}, - {file = "propcache-0.5.2-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1dbcf7675229b35d31abb6547d8ebc8c27a830ac3f9a794edff6254873ec7c0a"}, - {file = "propcache-0.5.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d310c013aad2c72f1c3f2f8dd3279d460a858c551f97aeb8c63e4693cca7b4d2"}, - {file = "propcache-0.5.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:06187263ddad280d05b4d8a8b3bb7d164cbebd469236544a42e6d9b28ac6a4fa"}, - {file = "propcache-0.5.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3115559b8effafd63b142ea5ed53d63a16ea6469cbc63dce4ee194b42db5d853"}, - {file = "propcache-0.5.2-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:c60462af8e6dc30c35407c7237ea908d777b22862bbee27bc4699c0d8bcdc45a"}, - {file = "propcache-0.5.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:40314bca9ac559716fe374094fc81c11dcc34b64fd6c585360f5775690505704"}, - {file = "propcache-0.5.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:cfa21e036ce1e1db2be04ba3b85d2df1bb1702fa01932d984c5464c665228ff4"}, - {file = "propcache-0.5.2-cp313-cp313-win32.whl", hash = "sha256:f156a3529f38063b6dbaf356e15602a7f95f8055b1295a438433a6386f10463d"}, - {file = "propcache-0.5.2-cp313-cp313-win_amd64.whl", hash = "sha256:dfed59d0a5aeb01e242e66ff0300bc4a265a7c05f612d30016f0b60b1017d757"}, - {file = "propcache-0.5.2-cp313-cp313-win_arm64.whl", hash = "sha256:ba338430e87ceb9c8f0cf754de38a9860560261e56c00376debd628698a7364f"}, - {file = "propcache-0.5.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:a592f5f3da71c8691c788c13cb6734b6d17663d2e1cb8caddf0673d01ef8847d"}, - {file = "propcache-0.5.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:6a997d0489e9668a384fcfd5061b857aa5361de73191cac204d04b889cfbbafa"}, - {file = "propcache-0.5.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:10734b5484ea113152ee25a91dccedf81631791805d2c9ccb054958e51842c94"}, - {file = "propcache-0.5.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cafca7e56c12bb02ae16d283742bef25a61122e9dab2b5b3f2ccbe589ce32164"}, - {file = "propcache-0.5.2-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f064f8d2b59177878b7615df1735cd8fe3462ed6be8c7b217d17a276489c2b7f"}, - {file = "propcache-0.5.2-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f78abfa8dfc32376fd1aacf597b2f2fbbe0ea751419aee718af5d4f82537ef8c"}, - {file = "propcache-0.5.2-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f7467da8a9822bf1a55336f877340c5bcbd3c482afc43a99771169f74a26dedc"}, - {file = "propcache-0.5.2-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a6ddc6ac9e25de626c1f129c1b467d7ecd33ce2237d3fd0c4e429feef0a7ee1f"}, - {file = "propcache-0.5.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2f22cbbac9e26a8e864c0985ff1268d5d939d53d9d9411a9824279097e03a2cb"}, - {file = "propcache-0.5.2-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:fc76378c62a0f04d0cd82fbb1a2cd2d7e28fcb40d5873f28a6c44e388aaa2751"}, - {file = "propcache-0.5.2-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:acd2c8edba48e31e58a363b8cf4e5c7db3b04b3f9e371f601df30d9b0d244836"}, - {file = "propcache-0.5.2-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:452b5065457eb9991ec5eb38ff41d6cd4c991c9ac7c531c4d5849ae473a9a13f"}, - {file = "propcache-0.5.2-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:3430bb2bfe1331885c427745a751e774ee679fd4344f80b97bf879815fe8fa55"}, - {file = "propcache-0.5.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:cef6cea3922890dd6c9654971001fa797b526c16ab5e1e46c05fd6f877be7568"}, - {file = "propcache-0.5.2-cp313-cp313t-win32.whl", hash = "sha256:72d61e16dd78228b58c5d47be830ff3da7e5f139abdf0aef9d86cde1c5cf2191"}, - {file = "propcache-0.5.2-cp313-cp313t-win_amd64.whl", hash = "sha256:0958834041a0166d343b8d2cedcd8bcbaeb4fdbe0cf08320c5379f143c3be6e7"}, - {file = "propcache-0.5.2-cp313-cp313t-win_arm64.whl", hash = "sha256:6de8bd93ddde9b992cf2b2e0d796d501a19026b5b9fd87356d7d0779531a8d96"}, - {file = "propcache-0.5.2-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:46088abff4cba581dea21ae0467a480526cb25aa5f3c269e909f800328bc3999"}, - {file = "propcache-0.5.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fc88b26f08d634f7bc819a7852e5214f5802641ab8d9fd5326892292eee1993e"}, - {file = "propcache-0.5.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:97797ebb098e670a2f92dd66f32897e30d7615b14e7f59711de23e30a9072539"}, - {file = "propcache-0.5.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba57fffe4ac99c5d30076161b5866336d97600769bad35cc68f7774b15298a4e"}, - {file = "propcache-0.5.2-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:583c19759d9eec1e5b69e2fbef36a7d9c326041be9746cb822d335c8cedc2979"}, - {file = "propcache-0.5.2-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d0326e2e5e1f3163fa306c834e48e8d490e5fae607a097a40c0648109b47ba80"}, - {file = "propcache-0.5.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e00820e192c8dbebcafb383ebbf99030895f09905e7a0eb2e0340a0bcc2bc825"}, - {file = "propcache-0.5.2-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c66afea89b1e43725731d2004732a046fe6fe955d51f952c3e95a7314a284a39"}, - {file = "propcache-0.5.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:d4dc37dec6c6cdad0b57881a5658fd14fbf53e333b1a86cf86559f190e1d9ec4"}, - {file = "propcache-0.5.2-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:5570dbcc97571c15f68068e529c92715a12f8d54030e272d264b377e22bd17a5"}, - {file = "propcache-0.5.2-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:f814362777a9f841adddb200ecdf8f5cb1e5a3c4b7a86378edbd6ccb26edd702"}, - {file = "propcache-0.5.2-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:196913dea116aeb5a2ba95af4ddcb7ea85559ae07d8eee8751688310d09168c3"}, - {file = "propcache-0.5.2-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:6e7b8719005dd1175be4ab1cd25e9b98659a5e0347331506ec6760d2773a7fb5"}, - {file = "propcache-0.5.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:51f96d685ab16e88cab128cd37a52c5da540809c8b879fa047731bfcb4ad35a4"}, - {file = "propcache-0.5.2-cp314-cp314-win32.whl", hash = "sha256:cc6fc3cc62e8501d3ed62894425040d2728ecddb1ed072737a5c70bd537aa9f0"}, - {file = "propcache-0.5.2-cp314-cp314-win_amd64.whl", hash = "sha256:81e3a30b0bb60caa22033dd0f8a3618d1d67356212514f62c57db75cb0ef410c"}, - {file = "propcache-0.5.2-cp314-cp314-win_arm64.whl", hash = "sha256:0d2c9bf8528f135dbb805ce027567e09164f7efa51a2be07458a2c0420f292d0"}, - {file = "propcache-0.5.2-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:4bc8ff1feffc6a61c7002ffe84634c41b822e104990ae009f44a0834430070bb"}, - {file = "propcache-0.5.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:79aa3ff0a9b566633b642fa9caf7e21ed1c13d6feca718187873f199e1514078"}, - {file = "propcache-0.5.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1b31822f4474c4036bae62de9402710051d431a606d6a0f907fec79935a071aa"}, - {file = "propcache-0.5.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:13fef48778b5a2a756523fdb781326b028ca75e32858b04f2cdd19f394564917"}, - {file = "propcache-0.5.2-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8b73ab70f1a3351fbc71f663b3e645af6dd0329100c353081cf69c37433fc6fe"}, - {file = "propcache-0.5.2-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5538d2c13d93e4698af7e092b57bc7298fd35d1d58e656ae18f23ee0d0378e03"}, - {file = "propcache-0.5.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cd645f03898405cabe694fb8bc35241e3a9c332ec85627584fe3de201452b335"}, - {file = "propcache-0.5.2-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a473b3440261e0c60706e732b2ed2f517857344fc21bf48fdfe211e2d98eb285"}, - {file = "propcache-0.5.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7afa37062e6650640e932e4cc9297d81f9f42d9944029cc386b8247dea4da837"}, - {file = "propcache-0.5.2-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:8a90efd5777e996e42d568db9ac740b944d691e565cbfd31b2f7832f9184b2b8"}, - {file = "propcache-0.5.2-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:f19bb891234d72535764d703bfed1153cc34f4214d5bd7150aee1eec9e8f4366"}, - {file = "propcache-0.5.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:32775082acd2d807ee3db715c7770d38767b817870acfa08c29e057f3c4d5b56"}, - {file = "propcache-0.5.2-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:9282fb1a3bccd038da9f768b927b24a0c753e466c086b7c4f3c6982851eefb2d"}, - {file = "propcache-0.5.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cc49723e2f60d6b32a0f0b08a3fd6d13203c07f1cd9566cfce0f12a917c967a2"}, - {file = "propcache-0.5.2-cp314-cp314t-win32.whl", hash = "sha256:2d7aa89ebca5acc98cba9d1472d976e394782f587bad6661003602a619fd1821"}, - {file = "propcache-0.5.2-cp314-cp314t-win_amd64.whl", hash = "sha256:d447bb0b3054be5818458fbb171208b1d9ff11eba14e18ca18b90cbb45767370"}, - {file = "propcache-0.5.2-cp314-cp314t-win_arm64.whl", hash = "sha256:fe67a3d11cd9b4efabfa45c3d00ffba2b26811442a73a581a94b67c2b5faccf6"}, - {file = "propcache-0.5.2-py3-none-any.whl", hash = "sha256:be1ddfcbb376e3de5d2e2db1d58d6d67463e6b4f9f040c000de8e300295465fe"}, - {file = "propcache-0.5.2.tar.gz", hash = "sha256:01c4fc7480cd0598bb4b57022df55b9ca296da7fc5a8760bd8451a7e63a7d427"}, -] - -[[package]] -name = "pydantic" -version = "2.13.4" -description = "Data validation using Python type hints" -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "pydantic-2.13.4-py3-none-any.whl", hash = "sha256:45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba"}, - {file = "pydantic-2.13.4.tar.gz", hash = "sha256:c40756b57adaa8b1efeeced5c196f3f3b7c435f90e84ea7f443901bec8099ef6"}, -] - -[package.dependencies] -annotated-types = ">=0.6.0" -pydantic-core = "2.46.4" -typing-extensions = ">=4.14.1" -typing-inspection = ">=0.4.2" - -[package.extras] -email = ["email-validator (>=2.0.0)"] -timezone = ["tzdata ; python_version >= \"3.9\" and platform_system == \"Windows\""] - -[[package]] -name = "pydantic-core" -version = "2.46.4" -description = "Core functionality for Pydantic validation and serialization" -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "pydantic_core-2.46.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a396dcc17e5a0b164dbe026896245a4fa9ff402edca1dff0be3d53a517f74de4"}, - {file = "pydantic_core-2.46.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:da4b951fe36dc7c3a1ccb4e3cd1747c3542b8c9ceede8fc86cae054e764485f5"}, - {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb63e0198ca18aad131c089b9204c23079c3afa95487e561f4c522d519e55aba"}, - {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f47286a97f0bc9b8859519809077b91b2cefe4ae47fcbf5e466a009c1c5d742b"}, - {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:905a0ed8ea6f2d61c1738835f99b699348d7857379083e5fc497fa0c967a407c"}, - {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea793e075b70290d89d8142074262885d3f7da19634845135751bd6344f73b50"}, - {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:395aebd9183f9d112f569aeb5b2214d1a10a33bec8456447f7fbdfa51d38d4cd"}, - {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:b078afbc25f3a1436c7a1d2cd3e322497ee99615ba97c563566fdf46aff1ee01"}, - {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f747929cf940cddb5b3668a390056ddd5ba2e5010615ea2dcf4f9c4f3ab8791d"}, - {file = "pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:daa27d92c36f24388fe3ad306b174781c747627f134452e4f128ea00ce1fe8c4"}, - {file = "pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:19e51f073cd3df251856a8a4189fbdf1de4012c3ebacfb1884f94f1eb406079f"}, - {file = "pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c1747f85cee84c26985853c6f3d9bd3e75da5212912443fa111c113b9c246f39"}, - {file = "pydantic_core-2.46.4-cp310-cp310-win32.whl", hash = "sha256:2f84c03c8607173d16b5a854ec68a2f9079ae03237a54fb506d13af47e1d018d"}, - {file = "pydantic_core-2.46.4-cp310-cp310-win_amd64.whl", hash = "sha256:8358a950c8909158e3df31538a7e4edc2d7265a7c54b47f0864d9e5bae9dcebf"}, - {file = "pydantic_core-2.46.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:0e96592440881c74a213e5ad528e2b24d3d4f940de2766bed9010ab1d9e51594"}, - {file = "pydantic_core-2.46.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e0d65b8c354be7fb5f720c3caa8bc940bc2d20ce749c8e06135f07f8ed95dd7c"}, - {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bfb192b3f4b9e8a89b6277b6ce787564f62cfd272055f6e685726b111dc7826"}, - {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9037063db01f09b09e237c282b6792bd4da634b5402c4e7f0c61effed7701a04"}, - {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc010ab034c8c7452522748bf937df58020d256ccae0874463d1f4d01758af8e"}, - {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c5dac79fa1614d1e06ca695109c6105923bd9c7d1d6c918d4e637b7e6b32fd3"}, - {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9fa868638bf362d3d138ea55829cefb3d5f4b0d7f142234382a15e2485dbec4"}, - {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:17299feefe090f2caa5b8e37222bb5f663e4935a8bfa6931d4102e5df1a9f398"}, - {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4c63ebc82684aa89d9a3bcbd13d515b3be44250dc68dd3bd81526c1cb31286c3"}, - {file = "pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:aaa2a54443eff1950ba5ddc6b6ccda0d9c84a364276a62f969bdf2a390650848"}, - {file = "pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:18e5ceec2ab67e6d5f1a9085e5a24c9c4e2ac4545730bfe668680bca05e555f3"}, - {file = "pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a0f62d0a58f4e7da165457e995725421e0064f2255d8eccebc49f41bbc23b109"}, - {file = "pydantic_core-2.46.4-cp311-cp311-win32.whl", hash = "sha256:041bde0a48fd37cf71cab1c9d56d3e8625a3793fef1f7dd232b3ff37e978ecda"}, - {file = "pydantic_core-2.46.4-cp311-cp311-win_amd64.whl", hash = "sha256:6f2eeda33a839975441c86a4119e1383c50b47faf0cbb5176985565c6bb02c33"}, - {file = "pydantic_core-2.46.4-cp311-cp311-win_arm64.whl", hash = "sha256:14f4c5d6db102bd796a627bbb3a17b4cf4574b9ae861d8b7c9a9661c6dd3362d"}, - {file = "pydantic_core-2.46.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3245406455a5d98187ec35530fd772b1d799b26667980872c8d4614991e2c4a2"}, - {file = "pydantic_core-2.46.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:962ccbab7b642487b1d8b7df90ef677e03134cf1fd8880bf698649b22a69371f"}, - {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8233f2947cf85404441fd7e0085f53b10c93e0ee78611099b5c7237e36aacbf7"}, - {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a233125ac121aa3ffba9a2b59edfc4a985a76092dc8279586ab4b71390875e7"}, - {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b712b53160b79a5850310b912a5ef8e57e56947c8ad690c227f5c9d7e561712"}, - {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9401557acd873c3a7f3eb9383edef8ac4968f9510e340f4808d427e75667e7b4"}, - {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:926c9541b14b12b1681dca8a0b75feb510b06c6341b70a8e500c2fdcff837cce"}, - {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:56cb4851bcaf3d117eddcef4fe66afd750a50274b0da8e22be256d10e5611987"}, - {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c68fcd102d71ea85c5b2dfac3f4f8476eff42a9e078fd5faefff6d145063536b"}, - {file = "pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b2f69dec1725e79a012d920df1707de5caf7ed5e08f3be4435e25803efc47458"}, - {file = "pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:8d0820e8192167f80d88d64038e609c31452eeca865b4e1d9950a27a4609b00b"}, - {file = "pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fbdb89b3e1c94a30cc5edfce477c6e6a5dc4d8f84665b455c27582f211a1c72c"}, - {file = "pydantic_core-2.46.4-cp312-cp312-win32.whl", hash = "sha256:9aa768456404a8bf48a4406685ac2bec8e72b62c69313734fa3b73cf33b3a894"}, - {file = "pydantic_core-2.46.4-cp312-cp312-win_amd64.whl", hash = "sha256:e9c26f834c65f5752f3f06cb08cb86a913ceb7274d0db6e267808a708b46bc89"}, - {file = "pydantic_core-2.46.4-cp312-cp312-win_arm64.whl", hash = "sha256:4fc73cb559bdb54b1134a706a2802a4cddd27a0633f5abb7e53056268751ac6a"}, - {file = "pydantic_core-2.46.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:5d5902252db0d3cedf8d4a1bc68f70eeb430f7e4c7104c8c476753519b423008"}, - {file = "pydantic_core-2.46.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c94f0688e7b8d0a67abf40e57a7eaaecd17cc9586706a31b76c031f63df052b4"}, - {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f027324c56cd5406ca49c124b0db10e56c69064fec039acc571c29020cc87c76"}, - {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e739fee756ba1010f8bcccb534252e85a35fe45ae92c295a06059ce58b74ccd3"}, - {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d56801be94b86a9da183e5f3766e6310752b99ff647e38b09a9500d88e46e76"}, - {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2412e734dcb48da14d4e4006b82b46b74f2518b8a26ee7e58c6844a6cd6d03c4"}, - {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9551187363ffc0de2a00b2e47c25aeaeb1020b69b668762966df15fc5659dd5a"}, - {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:0186750b482eefa11d7f435892b09c5c606193ef3375bcf94aa00ae6bfb66262"}, - {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5855698a4856556d86e8e6cd8434bc3ac0314ee8e12089ae0e143f64c6256e4e"}, - {file = "pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:cbaf13819775b7f769bf4a1f066cb6df7a28d4480081a589828ef190226881cd"}, - {file = "pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:633147d34cf4550417f12e2b1a0383973bdf5cdfde212cb09e9a581cf10820be"}, - {file = "pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:82cf5301172168103724d49a1444d3378cb20cdee30b116a1bd6031236298a5d"}, - {file = "pydantic_core-2.46.4-cp313-cp313-win32.whl", hash = "sha256:9fa8ae11da9e2b3126c6426f147e0fba88d96d65921799bb30c6abd1cb2c97fb"}, - {file = "pydantic_core-2.46.4-cp313-cp313-win_amd64.whl", hash = "sha256:6b3ace8194b0e5204818c92802dcdca7fc6d88aabbb799d7c795540d9cd6d292"}, - {file = "pydantic_core-2.46.4-cp313-cp313-win_arm64.whl", hash = "sha256:184c081504d17f1c1066e430e117142b2c77d9448a97f7b65c6ac9fd9aee238d"}, - {file = "pydantic_core-2.46.4-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:428e04521a40150c85216fc8b85e8d39fece235a9cf5e383761238c7fa9b96fb"}, - {file = "pydantic_core-2.46.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:23ace664830ee0bfe014a0c7bc248b1f7f25ed7ad103852c317624a1083af462"}, - {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce5c1d2a8b27468f433ca974829c44060b8097eedc39933e3c206a90ee49c4a9"}, - {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7283d57845ecf5a163403eb0702dfc220cc4fbdd18919cb5ccea4f95ee1cdab4"}, - {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8daafc69c93ee8a0204506a3b6b30f586ef54028f52aeeeb5c4cfc5184fd5914"}, - {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd2213145bcc2ba85884d0ac63d222fece9209678f77b9b4d76f054c561adb28"}, - {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a5f930472650a82629163023e630d160863fce524c616f4e5186e5de9d9a49b"}, - {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:c1b3f518abeca3aa13c712fd202306e145abf59a18b094a6bafb2d2bbf59192c"}, - {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a7dd0b3ee80d90150e3495a3a13ac34dbcbfd4f012996a6a1d8900e91b5c0fb"}, - {file = "pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:3fb702cd90b0446a3a1c5e470bfa0dd23c0233b676a9099ddcc964fa6ca13898"}, - {file = "pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:b8458003118a712e66286df6a707db01c52c0f52f7db8e4a38f0da1d3b94fc4e"}, - {file = "pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:372429a130e469c9cd698925ce5fc50940b7a1336b0d82038e63d5bbc4edc519"}, - {file = "pydantic_core-2.46.4-cp314-cp314-win32.whl", hash = "sha256:85bb3611ff1802f3ee7fdd7dbff26b56f343fb432d57a4728fdd49b6ef35e2f4"}, - {file = "pydantic_core-2.46.4-cp314-cp314-win_amd64.whl", hash = "sha256:811ff8e9c313ab425368bcbb36e5c4ebd7108c2bbf4e4089cfbb0b01eff63fac"}, - {file = "pydantic_core-2.46.4-cp314-cp314-win_arm64.whl", hash = "sha256:bfec22eab3c8cc2ceec0248aec886624116dc079afa027ecc8ad4a7e62010f8a"}, - {file = "pydantic_core-2.46.4-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:af8244b2bef6aaad6d92cda81372de7f8c8d36c9f0c3ea36e827c60e7d9467a0"}, - {file = "pydantic_core-2.46.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5a4330cdbc57162e4b3aa303f588ba752257694c9c9be3e7ebb11b4aca659b5d"}, - {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29c61fc04a3d840155ff08e475a04809278972fe6aef51e2720554e96367e34b"}, - {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c50f2528cf200c5eed56faf3f4e22fcd5f38c157a8b78576e6ba3168ec35f000"}, - {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0cbe8b01f948de4286c74cdd6c667aceb38f5c1e26f0693b3983d9d74887c65e"}, - {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:617d7e2ca7dcb8c5cf6bcb8c59b8832c94b36196bbf1cbd1bfb56ed341905edd"}, - {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7027560ee92211647d0d34e3f7cd6f50da56399d26a9c8ad0da286d3869a53f3"}, - {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:f99626688942fb746e545232e7726926f3be91b5975f8b55327665fafda991c7"}, - {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fc3e9034a63de20e15e8ade85358bc6efc614008cab72898b4b4952bea0509ff"}, - {file = "pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:97e7cf2be5c77b7d1a9713a05605d49460d02c6078d38d8bef3cbe323c548424"}, - {file = "pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:3bf92c5d0e00fefaab325a4d27828fe6b6e2a21848686b5b60d2d9eeb09d76c6"}, - {file = "pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:3ecbc122d18468d06ca279dc26a8c2e2d5acb10943bb35e36ae92096dc3b5565"}, - {file = "pydantic_core-2.46.4-cp314-cp314t-win32.whl", hash = "sha256:e846ae7835bf0703ae43f534ab79a867146dadd59dc9ca5c8b53d5c8f7c9ef02"}, - {file = "pydantic_core-2.46.4-cp314-cp314t-win_amd64.whl", hash = "sha256:2108ba5c1c1eca18030634489dc544844144ee36357f2f9f780b93e7ddbb44b5"}, - {file = "pydantic_core-2.46.4-cp314-cp314t-win_arm64.whl", hash = "sha256:4fcbe087dbc2068af7eda3aa87634eba216dbda64d1ae73c8684b621d33f6596"}, - {file = "pydantic_core-2.46.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:fd8b3d9fd264be37976686c7f65cd52a83f5e84f4bfd2adf9c1d469676bbb6ae"}, - {file = "pydantic_core-2.46.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9f444c499b3eefd3a92e348059471ea0c3a6e303d9c1cec09fa748fd9f895201"}, - {file = "pydantic_core-2.46.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3447661d99f75a3683a4cf5c87da72f2161964611864dbbeac7fbb118bb4bfc0"}, - {file = "pydantic_core-2.46.4-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8b9bab013d1c7a79d3501ff86d0bc9c31bf587db4551677b96bec07df78c6b15"}, - {file = "pydantic_core-2.46.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d995260fdf4e1db774581b4900e0f832abe3c7c84996726bbc161b19c8f29e76"}, - {file = "pydantic_core-2.46.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f13a646d65d09fbf1bc6b3a9635d30095c8e7e5cc419ff35ecc563c5fd04cd49"}, - {file = "pydantic_core-2.46.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432c179df7874eeb73307aad2df0755e1ae0efa61ff0ea89b93e194411ae3928"}, - {file = "pydantic_core-2.46.4-cp39-cp39-manylinux_2_31_riscv64.whl", hash = "sha256:e68b7a074f65a2fd746c52a7ce6142ab7006074ac269ace0c25cd8ba171f8066"}, - {file = "pydantic_core-2.46.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4a05d69cba51d852c5c3e92758653245a50c0b646ced0cf05bd793ed592839d6"}, - {file = "pydantic_core-2.46.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:228ee9bae8bef5b1e97ec58302f80357c37199e0d0a99174e138d28e6957b9d9"}, - {file = "pydantic_core-2.46.4-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:10e17cbb10a330363733efc4d7c4d0dd827ac0909b8f6a6542298fed1ea62f29"}, - {file = "pydantic_core-2.46.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:91a06d2e259ecfbd8c901d70c3c507900458498142b3026a296b7de4d1322cc9"}, - {file = "pydantic_core-2.46.4-cp39-cp39-win32.whl", hash = "sha256:d80ee3d731373b24cebbc10d689ca4ee1875caf0d5703a245db18efd4dd37fc1"}, - {file = "pydantic_core-2.46.4-cp39-cp39-win_amd64.whl", hash = "sha256:3be77f45df024d789a672ae34f8b06fb346c4f9f46ea714956660ea4862e89ac"}, - {file = "pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:14d4edf427bdcf950a8a02d7cb44a08614388dd6e1bdcbf4f67504fa7887da9c"}, - {file = "pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:0ce40cd7b21210e99342afafbd4d0f76d784eb5b1d60f3bdc566be4983c6c73b"}, - {file = "pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90884113d8b48f760e9587002789ddd741e76ab9f89518cd1e43b1f1a52ec44b"}, - {file = "pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66ce7632c22d837c95301830e111ad0128a32b8207533b60896a96c4915192ea"}, - {file = "pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:1d8ba486450b14f3b1d63bc521d410ec7565e52f887b9fb671791886436a42f7"}, - {file = "pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:3009f12e4e90b7f88b4f9adb1b0c4a3d58fe7820f3238c190047209d148026df"}, - {file = "pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad785e92e6dc634c21555edc8bd6b64957ab844541bcb96a1366c202951ae526"}, - {file = "pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00c603d540afdd6b80eb39f078f33ebd46211f02f33e34a32d9f053bba711de0"}, - {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:0c563b08bca408dc7f65f700633d8442fffb2421fc47b8101377e9fd65051ff0"}, - {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:db06ffe51636ffe9ca531fe9023dd64bdd794be8754cb5df57c5498ae5b518a7"}, - {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:133878133d271ade3d41d1bfb2a45ec38dbdbda40bc065921c6b04e4630127e2"}, - {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9bc519fbf2b7578398853d815009ae5e4d4603d12f4e3f91da8c06852d3da3e9"}, - {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c7a7bd4e39e8e4c12c39cd480356842b6a8a06e41b23a55a5e3e191718838ddf"}, - {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:d396ec2b979760aaf3218e76c24e65bd0aca24983298653b3a9d7a45f9e47b30"}, - {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:86e1a4418c6cd97d60c95c71164158eaf7324fae7b0923264016baa993eba6fc"}, - {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:d51026d73fcfd93610abc7b27789c26b313920fcfb20e27462d74a7f8b06e983"}, - {file = "pydantic_core-2.46.4.tar.gz", hash = "sha256:62f875393d7f270851f20523dd2e29f082bcc82292d66db2b64ea71f64b6e1c1"}, -] - -[package.dependencies] -typing-extensions = ">=4.14.1" - -[[package]] -name = "pyjwt" -version = "2.13.0" -description = "JSON Web Token implementation in Python" -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "pyjwt-2.13.0-py3-none-any.whl", hash = "sha256:66adcc2aff09b3f1bbd95fc1e1577df8ac8723c978552fd43304c8a290ac5728"}, - {file = "pyjwt-2.13.0.tar.gz", hash = "sha256:41571c89ca91598c79e8ef18a2d07367d4810fbbd6f637794879baf1b7703423"}, -] - -[package.dependencies] -typing_extensions = {version = ">=4.0", markers = "python_version < \"3.11\""} - -[package.extras] -crypto = ["cryptography (>=3.4.0)"] - -[[package]] -name = "python-dateutil" -version = "2.9.0.post0" -description = "Extensions to the standard Python datetime module" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -groups = ["main"] -files = [ - {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, - {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, -] - -[package.dependencies] -six = ">=1.5" - -[[package]] -name = "python-dotenv" -version = "1.2.2" -description = "Read key-value pairs from a .env file and set them as environment variables" -optional = false -python-versions = ">=3.10" -groups = ["main"] -files = [ - {file = "python_dotenv-1.2.2-py3-none-any.whl", hash = "sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a"}, - {file = "python_dotenv-1.2.2.tar.gz", hash = "sha256:2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3"}, -] - -[package.extras] -cli = ["click (>=5.0)"] - -[[package]] -name = "python-multipart" -version = "0.0.27" -description = "A streaming multipart parser for Python" -optional = false -python-versions = ">=3.10" -groups = ["main"] -files = [ - {file = "python_multipart-0.0.27-py3-none-any.whl", hash = "sha256:6fccfad17a27334bd0193681b369f476eda3409f17381a2d65aa7df3f7275645"}, - {file = "python_multipart-0.0.27.tar.gz", hash = "sha256:9870a6a8c5a20a5bf4f07c017bd1489006ff8836cff097b6933355ee2b49b602"}, -] - -[[package]] -name = "pytz" -version = "2026.2" -description = "World timezone definitions, modern and historical" -optional = false -python-versions = "*" -groups = ["main"] -markers = "python_version == \"3.10\"" -files = [ - {file = "pytz-2026.2-py2.py3-none-any.whl", hash = "sha256:04156e608bee23d3792fd45c94ae47fae1036688e75032eea2e3bf0323d1f126"}, - {file = "pytz-2026.2.tar.gz", hash = "sha256:0e60b47b29f21574376f218fe21abc009894a2321ea16c6754f3cad6eb7cdd6a"}, -] - -[[package]] -name = "requests" -version = "2.34.2" -description = "Python HTTP for Humans." -optional = false -python-versions = ">=3.10" -groups = ["main"] -files = [ - {file = "requests-2.34.2-py3-none-any.whl", hash = "sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0"}, - {file = "requests-2.34.2.tar.gz", hash = "sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed"}, -] - -[package.dependencies] -certifi = ">=2023.5.7" -charset_normalizer = ">=2,<4" -idna = ">=2.5,<4" -urllib3 = ">=1.26,<3" - -[package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use-chardet-on-py3 = ["chardet (>=3.0.2,<8)"] - -[[package]] -name = "ruff" -version = "0.15.15" -description = "An extremely fast Python linter and code formatter, written in Rust." -optional = false -python-versions = ">=3.7" -groups = ["main"] -files = [ - {file = "ruff-0.15.15-py3-none-linux_armv6l.whl", hash = "sha256:cf93e5388f412e1b108b1f8b34a6e036b70fe8aff89393befad96fe48670311b"}, - {file = "ruff-0.15.15-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:ac5a646d1f6a7dadd5d50842dae2c1f9862ac887ef5d1b1375e02def791fde6e"}, - {file = "ruff-0.15.15-py3-none-macosx_11_0_arm64.whl", hash = "sha256:77d955a431430c66f72dd94e379ad38a16daea3d25094872ac4edf9e797be530"}, - {file = "ruff-0.15.15-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7614ee79c69788cf6cedd568069ade9cecc22a1ad20494efe8d0c9ebb4b622d4"}, - {file = "ruff-0.15.15-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3cdb1679e06a1f6b47bc384714ae96f6e2fb65ca441eb78c43d2ca554176ce1f"}, - {file = "ruff-0.15.15-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2728b93d7b23a603ea2c0ac6eb73d760bd38ec9de35f35fb41e18f7a3fee7622"}, - {file = "ruff-0.15.15-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:be582fcc0db438902c7792b08d6ddf6c9b9e21addaa10092c2c741cfb09e5a45"}, - {file = "ruff-0.15.15-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7aa77465b8ecaf1a27bea098d696f7fed5e1eccbd10b321b682d6de586ae5627"}, - {file = "ruff-0.15.15-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48decfa11d740de4889de623be1463308346312f2409a56e24aa280c86162dc4"}, - {file = "ruff-0.15.15-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:a5015088452ca0081387063649ec67f06d3d1d6b8b936a1f836b5e9657ecd48c"}, - {file = "ruff-0.15.15-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:f5294aab6356c81600fcdea3a62bb1b924dfd5e91767c12318d3f68f86af57cd"}, - {file = "ruff-0.15.15-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:db5bd4d802415cca656dc1616070b725952d6ae95eb5d4831e49fbd94a38f75f"}, - {file = "ruff-0.15.15-py3-none-musllinux_1_2_i686.whl", hash = "sha256:587a6278ed42059191c1a466e490bd7930fb50bd2e255398bc29616c895a61cb"}, - {file = "ruff-0.15.15-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:df0c1c084f5f4be9812f61518a45c440d3c30d69ce4bf6c5270e66d38338f02a"}, - {file = "ruff-0.15.15-py3-none-win32.whl", hash = "sha256:29428ea79694afbe756d45fd59b36f22b6b020dc0443cf7de0173046236964b9"}, - {file = "ruff-0.15.15-py3-none-win_amd64.whl", hash = "sha256:8df0323902e15e24bc4bf246da830573d3cf3352bd0b9a164eab335d111ff4a4"}, - {file = "ruff-0.15.15-py3-none-win_arm64.whl", hash = "sha256:3c8ceca6792f38196b8f589bc92eccd03eef286602da92e5dc05cc42ef6441b7"}, - {file = "ruff-0.15.15.tar.gz", hash = "sha256:b8dff018130b46d8e5bf0f926ef6b60cf871d6d5ae45fc9334e09632daa741d6"}, -] - -[[package]] -name = "six" -version = "1.17.0" -description = "Python 2 and 3 compatibility utilities" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -groups = ["main"] -files = [ - {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, - {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, -] - -[[package]] -name = "soupsieve" -version = "2.8.4" -description = "A modern CSS selector implementation for Beautiful Soup." -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "soupsieve-2.8.4-py3-none-any.whl", hash = "sha256:e7e6b0769c8f51ed59acab6e994b00621096cfb1c640a7509295987388fbaf65"}, - {file = "soupsieve-2.8.4.tar.gz", hash = "sha256:e121fd02e975c695e4e9e8774a5ee35d74714b59307868dcc5319ad2d9e3328e"}, -] - -[[package]] -name = "starlette" -version = "0.52.1" -description = "The little ASGI library that shines." -optional = false -python-versions = ">=3.10" -groups = ["main"] -files = [ - {file = "starlette-0.52.1-py3-none-any.whl", hash = "sha256:0029d43eb3d273bc4f83a08720b4912ea4b071087a3b48db01b7c839f7954d74"}, - {file = "starlette-0.52.1.tar.gz", hash = "sha256:834edd1b0a23167694292e94f597773bc3f89f362be6effee198165a35d62933"}, -] - -[package.dependencies] -anyio = ">=3.6.2,<5" -typing-extensions = {version = ">=4.10.0", markers = "python_version < \"3.13\""} - -[package.extras] -full = ["httpx (>=0.27.0,<0.29.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.18)", "pyyaml"] - -[[package]] -name = "typing-extensions" -version = "4.15.0" -description = "Backported and Experimental Type Hints for Python 3.9+" -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548"}, - {file = "typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466"}, -] - -[[package]] -name = "typing-inspection" -version = "0.4.2" -description = "Runtime typing introspection tools" -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7"}, - {file = "typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464"}, -] - -[package.dependencies] -typing-extensions = ">=4.12.0" - -[[package]] -name = "tzdata" -version = "2026.2" -description = "Provider of IANA time zone data" -optional = false -python-versions = ">=2" -groups = ["main"] -markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or python_version == \"3.10\"" -files = [ - {file = "tzdata-2026.2-py2.py3-none-any.whl", hash = "sha256:bbe9af844f658da81a5f95019480da3a89415801f6cc966806612cc7169bffe7"}, - {file = "tzdata-2026.2.tar.gz", hash = "sha256:9173fde7d80d9018e02a662e168e5a2d04f87c41ea174b139fbef642eda62d10"}, -] - -[[package]] -name = "urllib3" -version = "2.7.0" -description = "HTTP library with thread-safe connection pooling, file post, and more." -optional = false -python-versions = ">=3.10" -groups = ["main"] -files = [ - {file = "urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897"}, - {file = "urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c"}, -] - -[package.extras] -brotli = ["brotli (>=1.2.0) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=1.2.0.0) ; platform_python_implementation != \"CPython\""] -h2 = ["h2 (>=4,<5)"] -socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] -zstd = ["backports-zstd (>=1.0.0) ; python_version < \"3.14\""] - -[[package]] -name = "uuid7" -version = "0.1.0" -description = "UUID version 7, generating time-sorted UUIDs with 200ns time resolution and 48 bits of randomness" -optional = false -python-versions = ">=3.7" -groups = ["main"] -files = [ - {file = "uuid7-0.1.0-py2.py3-none-any.whl", hash = "sha256:5e259bb63c8cb4aded5927ff41b444a80d0c7124e8a0ced7cf44efa1f5cccf61"}, - {file = "uuid7-0.1.0.tar.gz", hash = "sha256:8c57aa32ee7456d3cc68c95c4530bc571646defac01895cfc73545449894a63c"}, -] - -[[package]] -name = "uvicorn" -version = "0.40.0" -description = "The lightning-fast ASGI server." -optional = false -python-versions = ">=3.10" -groups = ["main"] -files = [ - {file = "uvicorn-0.40.0-py3-none-any.whl", hash = "sha256:c6c8f55bc8bf13eb6fa9ff87ad62308bbbc33d0b67f84293151efe87e0d5f2ee"}, - {file = "uvicorn-0.40.0.tar.gz", hash = "sha256:839676675e87e73694518b5574fd0f24c9d97b46bea16df7b8c05ea1a51071ea"}, -] - -[package.dependencies] -click = ">=7.0" -h11 = ">=0.8" -typing-extensions = {version = ">=4.0", markers = "python_version < \"3.11\""} - -[package.extras] -standard = ["colorama (>=0.4) ; sys_platform == \"win32\"", "httptools (>=0.6.3)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.15.1) ; sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"PyPy\"", "watchfiles (>=0.13)", "websockets (>=10.4)"] - -[[package]] -name = "webencodings" -version = "0.5.1" -description = "Character encoding aliases for legacy web content" -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, - {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, -] - -[[package]] -name = "websockets" -version = "16.0" -description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" -optional = false -python-versions = ">=3.10" -groups = ["main"] -files = [ - {file = "websockets-16.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:04cdd5d2d1dacbad0a7bf36ccbcd3ccd5a30ee188f2560b7a62a30d14107b31a"}, - {file = "websockets-16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8ff32bb86522a9e5e31439a58addbb0166f0204d64066fb955265c4e214160f0"}, - {file = "websockets-16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:583b7c42688636f930688d712885cf1531326ee05effd982028212ccc13e5957"}, - {file = "websockets-16.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7d837379b647c0c4c2355c2499723f82f1635fd2c26510e1f587d89bc2199e72"}, - {file = "websockets-16.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df57afc692e517a85e65b72e165356ed1df12386ecb879ad5693be08fac65dde"}, - {file = "websockets-16.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2b9f1e0d69bc60a4a87349d50c09a037a2607918746f07de04df9e43252c77a3"}, - {file = "websockets-16.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:335c23addf3d5e6a8633f9f8eda77efad001671e80b95c491dd0924587ece0b3"}, - {file = "websockets-16.0-cp310-cp310-win32.whl", hash = "sha256:37b31c1623c6605e4c00d466c9d633f9b812ea430c11c8a278774a1fde1acfa9"}, - {file = "websockets-16.0-cp310-cp310-win_amd64.whl", hash = "sha256:8e1dab317b6e77424356e11e99a432b7cb2f3ec8c5ab4dabbcee6add48f72b35"}, - {file = "websockets-16.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:31a52addea25187bde0797a97d6fc3d2f92b6f72a9370792d65a6e84615ac8a8"}, - {file = "websockets-16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:417b28978cdccab24f46400586d128366313e8a96312e4b9362a4af504f3bbad"}, - {file = "websockets-16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:af80d74d4edfa3cb9ed973a0a5ba2b2a549371f8a741e0800cb07becdd20f23d"}, - {file = "websockets-16.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:08d7af67b64d29823fed316505a89b86705f2b7981c07848fb5e3ea3020c1abe"}, - {file = "websockets-16.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7be95cfb0a4dae143eaed2bcba8ac23f4892d8971311f1b06f3c6b78952ee70b"}, - {file = "websockets-16.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d6297ce39ce5c2e6feb13c1a996a2ded3b6832155fcfc920265c76f24c7cceb5"}, - {file = "websockets-16.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1c1b30e4f497b0b354057f3467f56244c603a79c0d1dafce1d16c283c25f6e64"}, - {file = "websockets-16.0-cp311-cp311-win32.whl", hash = "sha256:5f451484aeb5cafee1ccf789b1b66f535409d038c56966d6101740c1614b86c6"}, - {file = "websockets-16.0-cp311-cp311-win_amd64.whl", hash = "sha256:8d7f0659570eefb578dacde98e24fb60af35350193e4f56e11190787bee77dac"}, - {file = "websockets-16.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:71c989cbf3254fbd5e84d3bff31e4da39c43f884e64f2551d14bb3c186230f00"}, - {file = "websockets-16.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:8b6e209ffee39ff1b6d0fa7bfef6de950c60dfb91b8fcead17da4ee539121a79"}, - {file = "websockets-16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:86890e837d61574c92a97496d590968b23c2ef0aeb8a9bc9421d174cd378ae39"}, - {file = "websockets-16.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:9b5aca38b67492ef518a8ab76851862488a478602229112c4b0d58d63a7a4d5c"}, - {file = "websockets-16.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e0334872c0a37b606418ac52f6ab9cfd17317ac26365f7f65e203e2d0d0d359f"}, - {file = "websockets-16.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a0b31e0b424cc6b5a04b8838bbaec1688834b2383256688cf47eb97412531da1"}, - {file = "websockets-16.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:485c49116d0af10ac698623c513c1cc01c9446c058a4e61e3bf6c19dff7335a2"}, - {file = "websockets-16.0-cp312-cp312-win32.whl", hash = "sha256:eaded469f5e5b7294e2bdca0ab06becb6756ea86894a47806456089298813c89"}, - {file = "websockets-16.0-cp312-cp312-win_amd64.whl", hash = "sha256:5569417dc80977fc8c2d43a86f78e0a5a22fee17565d78621b6bb264a115d4ea"}, - {file = "websockets-16.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:878b336ac47938b474c8f982ac2f7266a540adc3fa4ad74ae96fea9823a02cc9"}, - {file = "websockets-16.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:52a0fec0e6c8d9a784c2c78276a48a2bdf099e4ccc2a4cad53b27718dbfd0230"}, - {file = "websockets-16.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e6578ed5b6981005df1860a56e3617f14a6c307e6a71b4fff8c48fdc50f3ed2c"}, - {file = "websockets-16.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:95724e638f0f9c350bb1c2b0a7ad0e83d9cc0c9259f3ea94e40d7b02a2179ae5"}, - {file = "websockets-16.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c0204dc62a89dc9d50d682412c10b3542d748260d743500a85c13cd1ee4bde82"}, - {file = "websockets-16.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:52ac480f44d32970d66763115edea932f1c5b1312de36df06d6b219f6741eed8"}, - {file = "websockets-16.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6e5a82b677f8f6f59e8dfc34ec06ca6b5b48bc4fcda346acd093694cc2c24d8f"}, - {file = "websockets-16.0-cp313-cp313-win32.whl", hash = "sha256:abf050a199613f64c886ea10f38b47770a65154dc37181bfaff70c160f45315a"}, - {file = "websockets-16.0-cp313-cp313-win_amd64.whl", hash = "sha256:3425ac5cf448801335d6fdc7ae1eb22072055417a96cc6b31b3861f455fbc156"}, - {file = "websockets-16.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:8cc451a50f2aee53042ac52d2d053d08bf89bcb31ae799cb4487587661c038a0"}, - {file = "websockets-16.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:daa3b6ff70a9241cf6c7fc9e949d41232d9d7d26fd3522b1ad2b4d62487e9904"}, - {file = "websockets-16.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:fd3cb4adb94a2a6e2b7c0d8d05cb94e6f1c81a0cf9dc2694fb65c7e8d94c42e4"}, - {file = "websockets-16.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:781caf5e8eee67f663126490c2f96f40906594cb86b408a703630f95550a8c3e"}, - {file = "websockets-16.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:caab51a72c51973ca21fa8a18bd8165e1a0183f1ac7066a182ff27107b71e1a4"}, - {file = "websockets-16.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:19c4dc84098e523fd63711e563077d39e90ec6702aff4b5d9e344a60cb3c0cb1"}, - {file = "websockets-16.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:a5e18a238a2b2249c9a9235466b90e96ae4795672598a58772dd806edc7ac6d3"}, - {file = "websockets-16.0-cp314-cp314-win32.whl", hash = "sha256:a069d734c4a043182729edd3e9f247c3b2a4035415a9172fd0f1b71658a320a8"}, - {file = "websockets-16.0-cp314-cp314-win_amd64.whl", hash = "sha256:c0ee0e63f23914732c6d7e0cce24915c48f3f1512ec1d079ed01fc629dab269d"}, - {file = "websockets-16.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:a35539cacc3febb22b8f4d4a99cc79b104226a756aa7400adc722e83b0d03244"}, - {file = "websockets-16.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:b784ca5de850f4ce93ec85d3269d24d4c82f22b7212023c974c401d4980ebc5e"}, - {file = "websockets-16.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:569d01a4e7fba956c5ae4fc988f0d4e187900f5497ce46339c996dbf24f17641"}, - {file = "websockets-16.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:50f23cdd8343b984957e4077839841146f67a3d31ab0d00e6b824e74c5b2f6e8"}, - {file = "websockets-16.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:152284a83a00c59b759697b7f9e9cddf4e3c7861dd0d964b472b70f78f89e80e"}, - {file = "websockets-16.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:bc59589ab64b0022385f429b94697348a6a234e8ce22544e3681b2e9331b5944"}, - {file = "websockets-16.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:32da954ffa2814258030e5a57bc73a3635463238e797c7375dc8091327434206"}, - {file = "websockets-16.0-cp314-cp314t-win32.whl", hash = "sha256:5a4b4cc550cb665dd8a47f868c8d04c8230f857363ad3c9caf7a0c3bf8c61ca6"}, - {file = "websockets-16.0-cp314-cp314t-win_amd64.whl", hash = "sha256:b14dc141ed6d2dde437cddb216004bcac6a1df0935d79656387bd41632ba0bbd"}, - {file = "websockets-16.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:349f83cd6c9a415428ee1005cadb5c2c56f4389bc06a9af16103c3bc3dcc8b7d"}, - {file = "websockets-16.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:4a1aba3340a8dca8db6eb5a7986157f52eb9e436b74813764241981ca4888f03"}, - {file = "websockets-16.0-pp311-pypy311_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f4a32d1bd841d4bcbffdcb3d2ce50c09c3909fbead375ab28d0181af89fd04da"}, - {file = "websockets-16.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0298d07ee155e2e9fda5be8a9042200dd2e3bb0b8a38482156576f863a9d457c"}, - {file = "websockets-16.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:a653aea902e0324b52f1613332ddf50b00c06fdaf7e92624fbf8c77c78fa5767"}, - {file = "websockets-16.0-py3-none-any.whl", hash = "sha256:1637db62fad1dc833276dded54215f2c7fa46912301a24bd94d45d46a011ceec"}, - {file = "websockets-16.0.tar.gz", hash = "sha256:5f6261a5e56e8d5c42a4497b364ea24d94d9563e8fbd44e78ac40879c60179b5"}, -] - -[[package]] -name = "yarl" -version = "1.24.2" -description = "Yet another URL library" -optional = false -python-versions = ">=3.10" -groups = ["main"] -files = [ - {file = "yarl-1.24.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5249a113065c2b7a958bc699759e359cd61cfc81e3069662208f48f191b7ed12"}, - {file = "yarl-1.24.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7f4425fa244fbf530b006d0c5f79ce920114cfff5b4f5f6056e669f8e160fdc0"}, - {file = "yarl-1.24.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:15c0b5e49d3c44e2a0b93e6a49476c5edad0a7686b92c395765a7ea775572a75"}, - {file = "yarl-1.24.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:246d32a53a947c8f0189f5d699cbd4c7036de45d9359e13ba238d1239678c727"}, - {file = "yarl-1.24.2-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:64480fb3e4d4ed9ed71c48a91a477384fc342a50ca30071d2f8a88d51d9c9413"}, - {file = "yarl-1.24.2-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:349de4701dc3760b6e876628423a8f147ef4f5599d10aba1e10702075d424ed9"}, - {file = "yarl-1.24.2-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d162677af8d5d3d6ebab8394b021f4d041ac107a4b705873148a77a49dc9e1b2"}, - {file = "yarl-1.24.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f5f5c6ec23a9043f2d139cc072f53dd23168d202a334b9b2fda8de4c3e890d90"}, - {file = "yarl-1.24.2-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:60de6742447fbbf697f16f070b8a443f1b5fe6ca3826fbef9fe70ecd5328e643"}, - {file = "yarl-1.24.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:acf93187c3710e422368eb768aee98db551ec7c85adc250207a95c16548ab7ac"}, - {file = "yarl-1.24.2-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:f4b0352fd41fd34b6651934606268816afd6914d09626f9bcbbf018edb0afb3f"}, - {file = "yarl-1.24.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:6b208bb939099b4b297438da4e9b25357f0b1c791888669b963e45b203ea9f36"}, - {file = "yarl-1.24.2-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:4b85b8825e631295ff4bc8943f7471d54c533a9360bbe15ebb38e018b555bb8a"}, - {file = "yarl-1.24.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:e26acf20c26cb4fefc631fdb75aca2a6b8fa8b7b5d7f204fb6a8f1e63c706f53"}, - {file = "yarl-1.24.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:819ca24f8eafcfb683c1bd5f44f2f488cea1274eb8944731ffd2e1f10f619342"}, - {file = "yarl-1.24.2-cp310-cp310-win_amd64.whl", hash = "sha256:5cb0f995a901c36be096ccbf4c673591c2faabbe96279598ffaec8c030f85bf4"}, - {file = "yarl-1.24.2-cp310-cp310-win_arm64.whl", hash = "sha256:f408eace7e22a68b467a0562e0d27d322f91fe3eaaa6f466b962c6cfaea9fa39"}, - {file = "yarl-1.24.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:36348bebb147b83818b9d7e673ea4debc75970afc6ffdc7e3975ad05ce5a58c1"}, - {file = "yarl-1.24.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1a97e42c8a2233f2f279ecadd9e4a037bcb5d813b78435e8eedd4db5a9e9708c"}, - {file = "yarl-1.24.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8d027d56f1035e339d1001ac33eceab5b2ec8e42e449787bb75e289fb9a5cd1d"}, - {file = "yarl-1.24.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a6377060e7927187a42b7eb202090cbe2b34933a4eeaf90e3bd9e33432e5cae"}, - {file = "yarl-1.24.2-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:17076578bce0049a5ce57d14ad1bded391b68a3b213e9b81b0097b090244999a"}, - {file = "yarl-1.24.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:50713f1d4d6be6375bb178bb43d140ee1acb8abe589cd723320b7925a275be1e"}, - {file = "yarl-1.24.2-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:34263e2fa8fb5bb63a0d97706cda38edbad62fddb58c7f12d6acbc092812aa50"}, - {file = "yarl-1.24.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:49016d82f032b1bd1e10b01078a7d29ae71bf468eeae0ea22df8bab691e60003"}, - {file = "yarl-1.24.2-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3f6d2c216318f8f32038ca3f72501ba08536f0fd18a36e858836b121b2deed9f"}, - {file = "yarl-1.24.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:08d3a33218e0c64393e7610284e770409a9c31c429b078bcb24096ed0a783b8f"}, - {file = "yarl-1.24.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:5d699376c4ca3cba49bbfae3a05b5b70ded572937171ce1e0b8d87118e2ba294"}, - {file = "yarl-1.24.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a1cab588b4fa14bea2e55ebea27478adfb05372f47573738e1acc4a36c0b05d2"}, - {file = "yarl-1.24.2-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:ec87ccc31bd21db7ad009d8572c127c1000f268517618a4cc09adba3c2a7f21c"}, - {file = "yarl-1.24.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:d1dd47a22843b212baa8d74f37796815d43bd046b42a0f41e9da433386c3136b"}, - {file = "yarl-1.24.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7b54b9c67c2b06bd7b9a77253d242124b9c95d2c02def5a1144001ee547dd9d5"}, - {file = "yarl-1.24.2-cp311-cp311-win_amd64.whl", hash = "sha256:f8fdbcff8b2c7c9284e60c196f693588598ddcee31e11c18e14949ce44519d45"}, - {file = "yarl-1.24.2-cp311-cp311-win_arm64.whl", hash = "sha256:b32c37a7a337e90822c45797bf3d79d60875cfcccd3ecc80e9f453d87026c122"}, - {file = "yarl-1.24.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:b975866c184564c827e0877380f0dae57dcca7e52782128381b72feff6dfceb8"}, - {file = "yarl-1.24.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3b075301a2836a0e297b1b658cb6d6135df535d62efefdd60366bd589c2c82f2"}, - {file = "yarl-1.24.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8ae44649b00947634ab0dab2a374a638f52923a6e67083f2c156cd5cbd1a881d"}, - {file = "yarl-1.24.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:507cc19f0b45454e2d6dcd62ff7d062b9f77a2812404e62dbdaec05b50faa035"}, - {file = "yarl-1.24.2-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c4c17bad5a530912d2111825d3f05e89bab2dd376aaa8cbc77e449e6db63e576"}, - {file = "yarl-1.24.2-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f5f0cbb112838a4a293985b6ed73948a547dadcc1ba6d2089938e7abdedceef8"}, - {file = "yarl-1.24.2-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5ec8356b8a6afcf81fc7aeeef13b1ff7a49dec00f313394bbb9e83830d32ccd7"}, - {file = "yarl-1.24.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7e7ebcdef69dec6c6451e616f32b622a6d4a2e92b445c992f7c8e5274a6bbc4c"}, - {file = "yarl-1.24.2-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:47a55d6cf6db2f401017a9e96e5288844e5051911fb4e0c8311a3980f5e59a7d"}, - {file = "yarl-1.24.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3065657c80a2321225e804048597ad55658a7e76b32d6f5ee4074d04c50401db"}, - {file = "yarl-1.24.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:cb84b80d88e19ede158619b80813968713d8d008b0e2497a576e6a0557d50712"}, - {file = "yarl-1.24.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:990de4f680b1c217e77ff0d6aa0029f9eb79889c11fb3e9a3942c7eba29c1996"}, - {file = "yarl-1.24.2-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:abb8ec0323b80161e3802da3150ef660b41d0e9be2048b76a363d93eee992c2b"}, - {file = "yarl-1.24.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:e7977781f83638a4c73e0f88425563d70173e0dfd90ac006a45c65036293ee3c"}, - {file = "yarl-1.24.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e30dd55825dc554ec5b66a94953b8eda8745926514c5089dfcacecb9c99b5bd1"}, - {file = "yarl-1.24.2-cp312-cp312-win_amd64.whl", hash = "sha256:7dafe10c12ddd4d120d528c4b5599c953bd7b12845347d507b95451195bb6cad"}, - {file = "yarl-1.24.2-cp312-cp312-win_arm64.whl", hash = "sha256:044a09d8401fcf8681977faef6d286b8ade1e2d2e9dceda175d1cfa5ca496f30"}, - {file = "yarl-1.24.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:491ac9141decf49ee8030199e1ee251cdff0e131f25678817ff6aa5f837a3536"}, - {file = "yarl-1.24.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e89418f65eda18f99030386305bd44d7d504e328a7945db1ead514fbe03a0607"}, - {file = "yarl-1.24.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cdfcce633b4a4bb8281913c57fcafd4b5933fbc19111a5e3930bbd299d6102f1"}, - {file = "yarl-1.24.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:863297ddede92ee49024e9a9b11ecb59f310ca85b60d8537f56bed9bbb5b1986"}, - {file = "yarl-1.24.2-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:374423f70754a2c96942ede36a29d37dc6b0cb8f92f8d009ddf3ed78d3da5488"}, - {file = "yarl-1.24.2-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:33a29b5d00ccbf3219bb3e351d7875739c19481e030779f48cc46a7a71681a9b"}, - {file = "yarl-1.24.2-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a9532c57211730c515341af11fef6e9b61d157487272a096d0c04da445642592"}, - {file = "yarl-1.24.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:91e72cf093fd833483a97ee648e0c053c7c629f51ff4a0e7edd84f806b0c5617"}, - {file = "yarl-1.24.2-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b3177bc0a768ef3bacceb4f272632990b7bea352f1b2f1eee9d6d6ff16516f92"}, - {file = "yarl-1.24.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e196952aacaf3b232e265ff02980b64d483dc0972bd49bcb061171ff22ac203a"}, - {file = "yarl-1.24.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:204e7a61ce99919c0de1bf904ab5d7aa188a129ea8f690a8f76cfb6e2844dc44"}, - {file = "yarl-1.24.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4b156914620f0b9d78dc1adb3751141daee561cfec796088abb89ed49d220f1a"}, - {file = "yarl-1.24.2-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:8372a2b976cf70654b2be6619ab6068acabb35f724c0fda7b277fbf53d66a5cf"}, - {file = "yarl-1.24.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:f9a1e9b622ca284143aab5d885848686dcd85453bb1ca9abcdb7503e64dc0056"}, - {file = "yarl-1.24.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:810e19b685c8c3c5862f6a38160a1f4e4c0916c9390024ec347b6157a45a0992"}, - {file = "yarl-1.24.2-cp313-cp313-win_amd64.whl", hash = "sha256:7d37fb7c38f2b6edab0f845c4f85148d4c44204f52bc127021bd2bc9fdbf1656"}, - {file = "yarl-1.24.2-cp313-cp313-win_arm64.whl", hash = "sha256:1e831894be7c2954240e49791fa4b50c05a0dc881de2552cfe3ffd8631c7f461"}, - {file = "yarl-1.24.2-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:f9312b3c02d9b3d23840f67952913c9c8721d7f1b7db305289faefa878f364c2"}, - {file = "yarl-1.24.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:a4f4d6cd615823bfc7fb7e9b5987c3f41666371d870d51058f77e2680fbe9630"}, - {file = "yarl-1.24.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0c3063e5c0a8e8e62fae6c2596fa01da1561e4cd1da6fec5789f5cf99a8aefd8"}, - {file = "yarl-1.24.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fecd17873a096036c1c87ab3486f1aef7f269ada7f23f7f856f93b1cc7744f14"}, - {file = "yarl-1.24.2-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a46d1ab4ba4d32e6dc80daf8a28ce0bd83d08df52fbc32f3e288663427734535"}, - {file = "yarl-1.24.2-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:73e68edf6dfd5f73f9ca127d84e2a6f9213c65bdffb736bda19524c0564fcd14"}, - {file = "yarl-1.24.2-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a296ca617f2d25fbceafb962b88750d627e5984e75732c712154d058ae8d79a3"}, - {file = "yarl-1.24.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e51b2cf5ec89a8b8470177641ed62a3ba22d74e1e898e06ad53aa77972487208"}, - {file = "yarl-1.24.2-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:310fc687f7b2044ec54e372c8cbe923bb88f5c37bded0d3079e5791c2fc3cf50"}, - {file = "yarl-1.24.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:297a2fe352ecf858b30a98f87948746ec16f001d279f84aebdbd3bd965e2f1bd"}, - {file = "yarl-1.24.2-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:2a263e76b97bc42bdcd7c5f4953dec1f7cd62a1112fa7f869e57255229390d67"}, - {file = "yarl-1.24.2-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:822519b64cf0b474f1a0aaef1dc621438ea46bb77c94df97a5b4d213a7d8a8b1"}, - {file = "yarl-1.24.2-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:b6067060d9dc594899ba83e6db6c48c68d1e494a6dab158156ed86977ca7bcb1"}, - {file = "yarl-1.24.2-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:0063adad533e57171b79db3943b229d40dfafeeee579767f96541f106bac5f1b"}, - {file = "yarl-1.24.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ee8e3fb34513e8dc082b586ef4910c98335d43a6fab688cd44d4851bacfce3e8"}, - {file = "yarl-1.24.2-cp314-cp314-win_amd64.whl", hash = "sha256:afb00d7fd8e0f285ca29a44cc50df2d622ff2f7a6d933fa641577b5f9d5f3db0"}, - {file = "yarl-1.24.2-cp314-cp314-win_arm64.whl", hash = "sha256:68cf6eacd6028ef1142bc4b48376b81566385ca6f9e7dde3b0fa91be08ffcb57"}, - {file = "yarl-1.24.2-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:221ce1dd921ac4f603957f17d7c18c5cc0797fbb52f156941f92e04605d1d67b"}, - {file = "yarl-1.24.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:5f3224db28173a00d7afacdee07045cc4673dfab2b15492c7ae10deddbece761"}, - {file = "yarl-1.24.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c557165320d6244ebe3a02431b2a201a20080e02f41f0cfa0ccc47a183765da8"}, - {file = "yarl-1.24.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:904065e6e85b1fa54d0d87438bd58c14c0bad97aad654ad1077fd9d87e8478ed"}, - {file = "yarl-1.24.2-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:8cec2a38d70edc10e0e856ceda886af5327a017ccbde8e1de1bd44d300357543"}, - {file = "yarl-1.24.2-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e7484b9361ed222ee1ca5b4337aa4cbdcc4618ce5aff57d9ef1582fd95893fc0"}, - {file = "yarl-1.24.2-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:84f9670b89f34db07f81e53aee83e0b938a3412329d51c8f922488be7fcc4024"}, - {file = "yarl-1.24.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:abb2759733d63a28b4956500a5dd57140f26486c92b2caedfb964ab7d9b79dbf"}, - {file = "yarl-1.24.2-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:081c2bf54efe03774d0311172bc04fedf9ca01e644d4cd8c805688e527209bdc"}, - {file = "yarl-1.24.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:86746bef442aa479107fe28132e1277237f9c24c2f00b0b0cf22b3ee0904f2bb"}, - {file = "yarl-1.24.2-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:2d07d21d0bc4b17558e8de0b02fbfdf1e347d3bb3699edd00bb92e7c57925420"}, - {file = "yarl-1.24.2-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:4fb1ac3fc5fecd8ae7453ea237e4d22b49befa70266dfe1629924245c21a0c7f"}, - {file = "yarl-1.24.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:4da31a5512ed1729ca8d8aacde3f7faeb8843cde3165d6bcf7f88f74f17bb8aa"}, - {file = "yarl-1.24.2-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:533ded4dceb5f1f3da7906244f4e82cf46cfd40d84c69a1faf5ac506aa65ecbe"}, - {file = "yarl-1.24.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:7b3a85525f6e7eeabcfdd372862b21ee1915db1b498a04e8bf0e389b607ff0bd"}, - {file = "yarl-1.24.2-cp314-cp314t-win_amd64.whl", hash = "sha256:a7624b1ca46ca5d7b864ef0d2f8efe3091454085ee1855b4e992314529972215"}, - {file = "yarl-1.24.2-cp314-cp314t-win_arm64.whl", hash = "sha256:e434a45ce2e7a947f951fc5a8944c8cc080b7e59f9c50ae80fd39107cf88126d"}, - {file = "yarl-1.24.2-py3-none-any.whl", hash = "sha256:2783d9226db8797636cd6896e4de81feed252d1db72265686c9558d97a4d94b9"}, - {file = "yarl-1.24.2.tar.gz", hash = "sha256:9ac374123c6fd7abf64d1fec93962b0bd4ee2c19751755a762a72dd96c0378f8"}, -] - -[package.dependencies] -idna = ">=2.0" -multidict = ">=4.0" -propcache = ">=0.2.1" - -[[package]] -name = "zipp" -version = "4.1.0" -description = "Backport of pathlib-compatible object wrapper for zip files" -optional = false -python-versions = ">=3.10" -groups = ["main"] -files = [ - {file = "zipp-4.1.0-py3-none-any.whl", hash = "sha256:25ad4e16390cd314347dd8f1de67a2ac538ae658ed4ab9db16029c07c188e97f"}, - {file = "zipp-4.1.0.tar.gz", hash = "sha256:4cb57381f544315db7688e976e922a2b18cdb513d21cc194eb42232ba2a3e602"}, -] - -[package.extras] -check = ["pytest-checkdocs (>=2.14)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] -cover = ["pytest-cov"] -doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -enabler = ["pytest-enabler (>=3.4)"] -test = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more_itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] -type = ["pytest-mypy (>=1.0.1) ; platform_python_implementation != \"PyPy\""] - -[metadata] -lock-version = "2.1" -python-versions = ">=3.10,<4" -content-hash = "756014a0f316c894739239fcb9ff3f34565a003ebd614a97297c642ded128137" diff --git a/openbb_platform/providers/finviz/pyproject.toml b/openbb_platform/providers/finviz/pyproject.toml deleted file mode 100644 index 2359018e26a..00000000000 --- a/openbb_platform/providers/finviz/pyproject.toml +++ /dev/null @@ -1,21 +0,0 @@ -[tool.poetry] -name = "openbb-finviz" -version = "1.5.1" -description = "Finviz extension for OpenBB" -authors = ["OpenBB Team "] -license = "AGPL-3.0-only" -readme = "README.md" -packages = [{ include = "openbb_finviz" }] - -[tool.poetry.dependencies] -python = ">=3.10,<4" -openbb-core = "^1.6.10" -finvizfinance = "^1.1.0" - - -[build-system] -requires = ["poetry-core"] -build-backend = "poetry.core.masonry.api" - -[tool.poetry.plugins."openbb_provider_extension"] -finviz = "openbb_finviz:finviz_provider" diff --git a/openbb_platform/providers/finviz/tests/__init__.py b/openbb_platform/providers/finviz/tests/__init__.py deleted file mode 100644 index 05531f1aa14..00000000000 --- a/openbb_platform/providers/finviz/tests/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""Finviz provider tests.""" diff --git a/openbb_platform/providers/finviz/tests/record/http/test_finviz_fetchers/test_finviz_compare_groups_fetcher_urllib3_v2.yaml b/openbb_platform/providers/finviz/tests/record/http/test_finviz_fetchers/test_finviz_compare_groups_fetcher_urllib3_v2.yaml deleted file mode 100644 index a2a224351a2..00000000000 --- a/openbb_platform/providers/finviz/tests/record/http/test_finviz_fetchers/test_finviz_compare_groups_fetcher_urllib3_v2.yaml +++ /dev/null @@ -1,1071 +0,0 @@ -interactions: -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - Cookie: - - MOCK_COOKIE - method: GET - uri: https://finviz.com/groups.ashx?g=country&o=perf1w&v=140 - response: - body: - string: "\n\n\nGroup - Screener - Performance country perf1w\n\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \n\n\n\n \n\n\r\n \r\n
\r\n
\r\n - \
\r\n
\r\n
\r\n
\r\n
\r\n\r\n - \

\r\n Subscribe - to our newsletter to receive the latest product updates and special offers\r\n - \

\r\n
\r\n - \
\r\n \r\n - \
\r\n \r\n
\r\n\r\n \r\n - \
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n - \ \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n - \
\r\n \r\n - \ \r\n \r\n - \ \r\n \r\n - \ \r\n - \ \r\n
\r\n \r\n \r\n \r\n\r\n
\r\n - \
\r\n - \ \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n - \
\r\n
\r\n
\r\n - \
\r\n
\r\n
\r\n
\r\n - \
\r\n
\r\n
\r\n \"\"\r\n
\r\n \r\n \r\n - \ \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n - \ \r\n - \ \r\n - \ \r\n \r\n
HomeNewsScreenerMapsGroupsPortfolioInsiderFuturesForexCryptoBacktestsElite
\r\n - \ \r\n
\r\n
\r\n \r\n \r\n\r\n - \
\r\n
\r\n Theme\r\n
\r\n - \
\r\n Help\r\n LoginRegister
\r\n - \
\r\n - \ \r\n
\n\n\n\n
\n
Select group - stocks organized - by sector, industry, country or market capitalization.
] - delay=[500]\">Group\n\n\n\n\nSelect - the criteria by which the output information will be sorted. Use the ascending - and descending option to invert the current order.

TIP: In - table views you can click on top of a column to sort the table by the underlying - values.] delay=[500]\">Order By
\n\n\n\n\n\n\n\n\"\"\n\n\"\"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
OverviewValuationPerformanceCustomBar ChartSpectrumCharts
\n\n\n\"\"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
No.Name\r\n \r\nPerf WeekPerf - MonthPerf - QuartPerf - HalfPerf - YearPerf - YTDRecomAvg - VolumeRel - VolumeChangeVolume
1Malaysia-11.80%-21.78%-37.95%-69.72%-96.57%-72.61%1.701.19M0.46-0.65%548.24K
2Argentina-6.36%-3.75%6.79%22.56%40.34%25.35%2.589.75M0.72-2.84%6.99M
3Colombia-4.25%-6.13%0.70%-3.53%10.37%-3.75%3.163.55M1.601.39%5.69M
4Taiwan-4.12%6.97%21.96%60.06%63.96%58.22%1.4934.87M0.73-0.32%25.36M
5Netherlands-2.16%2.02%1.48%19.34%33.38%18.76%1.7523.08M0.77-0.42%17.69M
6Mexico-1.46%-12.88%-11.76%-11.13%-12.02%-10.43%1.9113.06M1.30-1.15%17.04M
7Spain-1.40%-8.62%-8.12%8.88%30.18%8.76%2.096.80M0.75-0.57%5.12M
8China-1.34%-8.26%1.24%-5.22%0.36%-8.55%1.41307.55M0.720.22%220.25M
9Switzerland-1.01%0.57%4.84%8.22%24.80%6.80%2.3544.86M0.95-0.74%42.81M
10Turkey-0.82%4.52%42.31%49.38%64.25%48.07%1.081.00M0.72-1.07%723.04K
11Singapore-0.80%0.69%23.52%42.08%8.54%37.76%1.5659.24M0.571.02%34.01M
12Hong - Kong-0.73%-3.17%9.89%2.71%-3.10%-0.55%1.2135.90M0.62-0.73%22.19M
13United Arab Emirates-0.69%-41.58%-57.01%-63.02%-70.09%-64.29%1.941.52M0.190.59%295.20K
14Ireland-0.56%-3.72%-6.08%1.14%11.26%1.01%2.1158.40M1.05-1.43%61.08M
15United Kingdom-0.33%0.89%4.26%10.86%13.16%10.14%1.86221.58M0.68-0.50%151.40M
16South Korea-0.32%-2.67%-7.63%-1.67%8.59%-2.38%1.582.74M0.92-0.52%2.51M
17Israel-0.18%-1.41%-4.47%-2.63%-0.92%-2.49%1.7879.30M0.631.24%49.74M
18Chile0.02%-7.93%-1.52%-9.67%-11.17%-9.75%2.302.10M0.881.30%1.86M
19USA0.11%2.62%4.74%13.75%25.53%13.54%1.847.08B1.080.14%7.62B
20Bermuda0.30%-2.76%3.23%9.96%16.78%9.82%1.8429.90M0.86-0.72%25.68M
21Italy0.58%-2.18%-7.66%5.00%16.57%3.94%2.251.84M0.47-1.76%866.05K
22France0.59%-5.51%-3.46%-3.24%1.34%-3.13%1.786.70M1.27-2.60%8.52M
23Belgium0.60%-8.27%-1.25%-7.96%4.88%-8.14%1.672.27M1.00-1.12%2.27M
24Canada0.71%-3.04%-2.77%-1.76%5.10%-2.16%2.10483.78M0.66-0.24%319.40M
25Sweden0.72%-1.43%2.87%-3.52%16.82%-4.25%2.6326.53M1.24-0.60%32.90M
26Luxembourg0.73%-3.18%0.89%13.21%34.78%13.91%1.8311.44M1.00-0.89%11.46M
27Brazil1.21%-6.72%-12.24%-19.30%-8.95%-19.80%1.83147.63M0.81-0.52%120.09M
28Australia1.63%-2.70%0.87%-14.02%-5.97%-14.44%2.2419.93M0.840.58%16.76M
29Peru1.91%-2.18%-4.17%7.90%21.92%7.98%2.022.20M0.62-0.32%1.36M
30Denmark2.04%5.02%9.47%36.01%72.37%34.98%1.874.89M1.11-2.15%5.43M
31Greece2.13%-4.83%12.58%15.00%20.82%17.11%1.476.96M0.51-0.21%3.56M
32Germany3.55%-1.24%0.03%19.91%34.35%18.86%2.0416.22M1.010.93%16.32M
33Japan3.84%-1.52%-9.64%11.66%23.43%9.56%1.8511.67M0.62-0.47%7.19M
34Cayman Islands3.94%4.84%3.17%24.92%40.64%23.58%1.8739.38M1.260.27%49.58M
35Monaco4.09%4.74%24.02%42.76%96.56%49.03%1.592.10M0.88-0.31%1.85M
36South Africa4.52%-4.62%2.33%-4.31%-2.78%1.22%3.0716.59M0.670.12%11.12M
37India4.53%8.18%11.72%4.18%10.64%4.32%1.6529.08M0.85-0.10%24.60M
38Cyprus6.03%-6.23%15.58%22.38%90.75%31.08%1.291.60M0.702.11%1.12M
\n\n\n\n\n\n\n
export
\n\n\n
\r\n - \
\r\n
\r\n affiliate\r\n \u2022 \r\n advertise\r\n - \u2022 careers\r\n - \ \u2022 toggle light mode\r\n - \ \u2022 \r\n contact\r\n \u2022 \r\n privacy\r\n - \u2022 \r\n help\r\n - \
\r\n do not sell - my data\r\n \u2022 \r\n - \ privacy settings\r\n - \
\r\n Quotes delayed 15 minutes for NASDAQ, NYSE and - AMEX.\r\n
\r\n Copyright \xA9 2007-2024 FINVIZ.com. All Rights Reserved.\r\n - \ \r\n
\r\n \r\n - \ \r\n \r\n
\r\n
\r\n\t\t\t \r\n\r\n \r\n\r\n
\r\n\t\t\t

Upgrade - your FINVIZ experience

\r\n

\r\n - \ Join thousands of traders who make - more informed decisions with our premium features.\r\n Real-time - quotes, advanced visualizations, backtesting, and much more.\r\n

\r\n - \ Learn - more about FINVIZ*Elite\r\n
\r\n - \
\r\n
\n\n\n" - headers: - CF-Cache-Status: - - DYNAMIC - CF-RAY: - - 89a4b847dc380a57-AMS - Cache-Control: - - no-cache - Connection: - - keep-alive - Content-Encoding: - - gzip - Content-Type: - - text/html; charset=utf-8 - Date: - - Thu, 27 Jun 2024 10:23:07 GMT - Request-Context: - - appId=cid-v1:bdd405ef-7a83-4f9a-9228-0107d7f4bc90 - Server: - - cloudflare - Transfer-Encoding: - - chunked - Vary: - - Accept-Encoding - X-Frame-Options: - - SAMEORIGIN - X-Powered-By: - - ASP.NET - - ARR/3.0 - - ASP.NET - status: - code: 200 - message: OK -version: 1 diff --git a/openbb_platform/providers/finviz/tests/record/http/test_finviz_fetchers/test_finviz_equity_profile_fetcher_urllib3_v2.yaml b/openbb_platform/providers/finviz/tests/record/http/test_finviz_fetchers/test_finviz_equity_profile_fetcher_urllib3_v2.yaml deleted file mode 100644 index d35d549e944..00000000000 --- a/openbb_platform/providers/finviz/tests/record/http/test_finviz_fetchers/test_finviz_equity_profile_fetcher_urllib3_v2.yaml +++ /dev/null @@ -1,2251 +0,0 @@ -interactions: -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - Cookie: - - MOCK_COOKIE - method: GET - uri: https://finviz.com/quote.ashx?t=AAPL - response: - body: - string: "\n\n\nAAPL - - Apple Inc Stock Price and Quote\n\n\r\n - \ \r\n \r\n \r\n \r\n \r\n \r\n \n\n\n\n\n \n\n\r\n \r\n \r\n \r\n
\r\n
\r\n - \
\r\n
\r\n
\r\n
\r\n
\r\n\r\n - \

\r\n Subscribe - to our newsletter to receive the latest product updates and special offers\r\n - \

\r\n
\r\n - \
\r\n \r\n - \
\r\n \r\n
\r\n\r\n \r\n - \
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n - \ \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n - \
\r\n \r\n - \ \r\n \r\n - \ \r\n \r\n - \ \r\n - \ \r\n
\r\n \r\n \r\n \r\n\r\n
\r\n - \
\r\n - \ \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n - \
\r\n
\r\n
\r\n - \
\r\n
\r\n
\r\n
\r\n - \
\r\n
\r\n
\r\n \"\"\r\n
\r\n \r\n \r\n - \ \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n - \ \r\n - \ \r\n - \ \r\n \r\n
HomeNewsScreenerMapsGroupsPortfolioInsiderFuturesForexCryptoBacktestsElite
\r\n - \ \r\n
\r\n
\r\n \r\n \r\n\r\n - \
\r\n
\r\n Theme\r\n
\r\n - \
\r\n Help\r\n LoginRegister
\r\n - \
\r\n - \ \r\n
\r\n
\r\n \r\n \r\n\r\n - \
\r\n

\r\n - \ \r\n Upgrade to FINVIZ*Elite\r\n to get real-time quotes, intraday - charts, and advanced charting tools.\r\n

\r\n
\r\n - \ \r\n \r\n \r\n\r\n - \ \r\n
\r\n
\r\n
\r\n \r\n \r\n\r\n - \ \r\n
\r\n
\n
- \
\r\n
\r\n - \
\r\n \r\n
\r\n

AAPL

\r\n

\r\n \r\n Apple Inc\r\n \r\n - \

\r\n
\r\n
\r\n - \
\r\n - \
\r\n
Last - Close
\r\n Jun 26 \u2022 - 04:00PM ET\r\n
\r\n 213.25\r\n \r\n \r\n - \ \r\n - \ \r\n - \ \r\n \r\n \r\n \r\n \r\n
\r\n
Dollar - change
\r\n +4.18\r\n
\r\n \r\n
\r\n - \
Percentage change
\r\n - \ 2.00\r\n
%
\r\n - \
\r\n
\r\n \r\n
\r\n
\r\n - \
\r\n
\r\n
\r\n - \ Technology\r\n - \ \u2022\r\n Consumer - Electronics\r\n \u2022\r\n - \ USA\r\n - \ \u2022\r\n NASD\r\n
\r\n - \
\r\n \r\n - \ Stock Detail\r\n \r\n \u2022\r\n \r\n - \ Compare Perf.\r\n - \ \r\n \u2022\r\n - \ \r\n Financials\r\n - \ \r\n \u2022\r\n - \ \r\n Options Chain\r\n - \ \r\n \u2022\r\n - \ Save - to Portfolio\r\n \u2022\r\n - \ Create Alert\r\n
\r\n
\r\n - \
\n
\r\n
\r\n
\r\n
\r\n - \
\r\n
\r\n - \
\n\n\n
\n
\n\n\n
\n
\n\n\n\n
\n - \ Scroll to - Statements\r\n \r\n
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
IndexDJIA, NDX, S&P 500P/E33.16EPS (ttm)6.43Insider Own0.09%Shs Outstand15.55BPerf Week-0.49%
Market Cap3270.00BForward P/E29.39EPS - next Y7.26Insider Trans-4.15%Shs Float15.32BPerf Month12.25%
Income100.39BPEG3.16EPS - next Q1.33Inst Own61.96%Short - Float1.00%Perf Quarter25.66%
Sales381.62BP/S8.57EPS this Y7.68%Inst Trans-0.48%Short Ratio2.25Perf - Half Y10.15%
Book/sh4.84P/B44.08EPS next - Y9.92%ROA29.99%Short Interest153.41MPerf Year15.10%
Cash/sh4.38P/C48.70EPS next 5Y10.50%ROE147.25%52W Range164.07 - - 220.20Perf - YTD10.76%
Dividend Est.0.99 (0.46%)P/FCF32.08EPS - past 5Y15.55%ROI60.47%52W High-3.16%Beta1.25
Dividend - TTM0.97 - (0.45%)Quick Ratio0.99Sales past 5Y8.34%Gross Margin45.59%52W Low29.97%ATR (14)4.86
Dividend Ex-DateMay 10, 2024Current - Ratio1.04EPS Y/Y TTM9.23%Oper. - Margin30.98%RSI (14)67.36Volatility2.24% 2.33%
Employees161000Debt/Eq1.41Sales Y/Y TTM-0.90%Profit Margin26.31%Recom1.98Target Price211.68
Option/ShortYes / YesLT Debt/Eq1.24EPS Q/Q0.25%Payout15.32%Rel Volume0.95Prev Close209.07
Sales - Surprise0.43%EPS Surprise1.65%Sales Q/Q-4.31%
BMO = Before Market - Open
AMC = After Market Close] offsetx=[10] offsety=[20] delay=[300]\">Earnings
May 02 AMCAvg Volume68.26MPrice213.25
SMA205.44%SMA5013.36%SMA20016.42%Trades\r\n \r\nVolume66,213,184Change2.00%
\n
\n\n\n\n\n\n\n\r\n \r\n\n\n\n\n\n\n\n\n\n\n\n\n
\n\n\r\n \r\n \r\n \r\n \r\n - \ \r\n - \ \r\n - \ \r\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
DateActionAnalystRating ChangePrice Target Change
Jun-26-24UpgradeRosenblattNeutral - → Buy$196 → $260
Jun-25-24ReiteratedMaxim GroupHold$178 → $195
Jun-25-24ReiteratedEvercore ISIOutperform$220 → $250
Jun-18-24ReiteratedJP MorganOverweight$225 → $245
Jun-11-24UpgradeDA - DavidsonNeutral → Buy$200 → $230
May-03-24UpgradeItau - BBAUnderperform - → Market Perform$162 → $188
May-03-24ReiteratedMonness Crespi & HardtBuy$200 → $205
Apr-29-24UpgradeBernsteinMkt - Perform → Outperform$195
Apr-17-24InitiatedMaxim GroupHold$178
Apr-11-24ReiteratedJP MorganOverweight$215 → $210
Mar-28-24DowngradeDZ - BankBuy - → Hold$180
Feb-02-24ReiteratedPiper SandlerNeutral$205 → $190
Feb-02-24ReiteratedMonness Crespi & HardtBuy$189 → $200
Feb-02-24ReiteratedJP MorganOverweight$225 → $215
Feb-02-24ReiteratedGoldmanBuy$223 → $232
Feb-02-24ReiteratedBarclaysUnderweight$160 → $158
Jan-29-24ReiteratedRobert W. BairdOutperform$186 → $200
Jan-18-24UpgradeBofA - SecuritiesNeutral → Buy$208 → $225
Jan-10-24DowngradeRedburn - AtlanticBuy → Neutral$200
Jan-04-24DowngradePiper - SandlerOverweight → Neutral$220 → $205
\n
\r\n - \ \r\n \r\n \r\n\r\n - \ Show Previous Ratings\r\n \r\n
\n
\n - \ \r\n - \ \r\n \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n \n \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n
\r\n Today 05:50AM\r\n - \ \r\n
\r\n 05:30AM\r\n \r\n
\r\n 04:15AM\r\n \r\n
\r\n 04:15AM\r\n \r\n
\r\n 02:39AM\r\n \r\n
\r\n 02:00AM\r\n \r\n
\r\n 01:05AM\r\n \r\n
\r\n Jun-26-24 11:54PM\r\n - \ \r\n
\r\n 09:58PM\r\n \r\n
\r\n 04:45PM\r\n \r\n
\r\n 04:10PM\r\n \r\n
\r\n 04:01PM\r\n \r\n
\r\n 03:44PM\r\n \r\n
\r\n 03:32PM\r\n \r\n
\r\n 02:18PM\r\n \r\n
\r\n 02:04PM\r\n \r\n
\r\n 01:44PM\r\n \r\n
\r\n 01:11PM\r\n \r\n
\r\n 12:39PM\r\n \r\n
\r\n 11:02AM\r\n \r\n
\r\n 10:36AM\r\n \r\n
\r\n 10:15AM\r\n \r\n
\r\n 10:05AM\r\n \r\n
\r\n 09:48AM\r\n \r\n
\r\n 09:45AM\r\n \r\n
\r\n 09:30AM\r\n \r\n
\r\n 09:17AM\r\n \r\n
\r\n 09:00AM\r\n \r\n
\r\n 08:26AM\r\n \r\n
\r\n 08:00AM\r\n \r\n
\r\n 07:58AM\r\n \r\n
\r\n 07:05AM\r\n \r\n
\r\n 07:00AM\r\n \r\n
\r\n 06:50AM\r\n \r\n
\r\n 06:45AM\r\n \r\n
\r\n 06:02AM\r\n \r\n
\r\n 06:00AM\r\n \r\n
\r\n 05:30AM\r\n \r\n
\r\n 05:07AM\r\n \r\n
\r\n 01:00AM\r\n \r\n
\r\n 12:13AM\r\n \r\n
\r\n Jun-25-24 06:13PM\r\n - \ \r\n
\r\n 05:55PM\r\n \r\n
\r\n 05:07PM\r\n \r\n
\r\n 04:37PM\r\n \r\n
\r\n 03:05PM\r\n \r\n
\r\n 02:41PM\r\n \r\n
\r\n 12:59PM\r\n \r\n
\r\n 12:21PM\r\n \r\n
\r\n 11:09AM\r\n \r\n
\r\n 11:09AM\r\n \r\n
\r\n 11:09AM\r\n \r\n
\r\n 11:06AM\r\n \r\n
\r\n 11:04AM\r\n \r\n
\r\n 10:41AM\r\n \r\n
\r\n 10:37AM\r\n \r\n
\r\n 10:35AM\r\n \r\n
\r\n 10:19AM\r\n \r\n
\r\n 10:12AM\r\n \r\n
\r\n 09:58AM\r\n \r\n
\r\n 09:10AM\r\n \r\n
\r\n 09:00AM\r\n \r\n
\r\n 09:00AM\r\n \r\n
\r\n 08:54AM\r\n \r\n
\r\n 08:17AM\r\n \r\n
\r\n 08:16AM\r\n \r\n
\r\n 08:03AM\r\n \r\n
\r\n 08:01AM\r\n \r\n
\r\n 07:58AM\r\n \r\n
\r\n 07:32AM\r\n \r\n
\r\n 07:29AM\r\n \r\n
\r\n 07:14AM\r\n \r\n
\r\n 07:11AM\r\n \r\n
\r\n 06:36AM\r\n \r\n
\r\n 06:15AM\r\n \r\n
\r\n 06:00AM\r\n \r\n
\r\n 06:00AM\r\n \r\n
\r\n 05:20AM\r\n \r\n
\r\n 05:00AM\r\n \r\n
\r\n 04:27AM\r\n \r\n
\r\n 04:24AM\r\n \r\n
\r\n 03:55AM\r\n \r\n
\r\n 03:52AM\r\n \r\n
\r\n 02:20AM\r\n \r\n
\r\n Jun-24-24 09:51PM\r\n - \ \r\n
\r\n 08:15PM\r\n \r\n
\r\n 06:47PM\r\n \r\n
\r\n 06:02PM\r\n \r\n
\r\n 06:00PM\r\n \r\n
\r\n 05:45PM\r\n \r\n
\r\n 05:06PM\r\n \r\n
\r\n 04:59PM\r\n \r\n
\r\n 04:42PM\r\n \r\n
\r\n 04:29PM\r\n \r\n
\r\n 04:20PM\r\n \r\n
\r\n 04:17PM\r\n \r\n
\r\n 04:10PM\r\n \r\n
\r\n 04:07PM\r\n \r\n
\r\n 04:02PM\r\n \r\n
\r\n 03:26PM\r\n \r\n
\n
\n
\r\n - \
\r\n
\r\n
\r\n
Apple, Inc. engages in the - design, manufacture, and sale of smartphones, personal computers, tablets, - wearables and accessories, and other varieties of related services. It operates - through the following geographical segments: Americas, Europe, Greater China, - Japan, and Rest of Asia Pacific. The Americas segment includes North and South - America. The Europe segment consists of European countries, as well as India, - the Middle East, and Africa. The Greater China segment comprises China, Hong - Kong, and Taiwan. The Rest of Asia Pacific segment includes Australia and - Asian countries. Its products and services include iPhone, Mac, iPad, AirPods, - Apple TV, Apple Watch, Beats products, AppleCare, iCloud, digital content - stores, streaming, and licensing services. The company was founded by Steven - Paul Jobs, Ronald Gerald Wayne, and Stephen G. Wozniak in April 1976 and is - headquartered in Cupertino, CA.
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Insider - TradingRelationshipDateTransactionCost#SharesValue ($)#Shares - TotalSEC Form 4
LEVINSON ARTHUR DDirectorMay - 30 '24Sale191.5875,00014,368,5004,359,576Jun 03 06:31 PM
KONDO CHRISPrincipal - Accounting OfficerMay 15 '24Sale190.404,999951,78529,278May 17 06:30 PM
WILLIAMS JEFFREY ECOOApr - 11 '24Sale172.2259,16210,188,880489,944Apr 15 06:31 PM
Maestri LucaSenior - Vice President, CFOApr 11 '24Sale174.1253,1949,261,933107,788Apr 15 06:30 PM
COOK TIMOTHY DChief - Executive OfficerApr 02 '24Sale168.6297,22716,394,5293,280,180Apr 03 06:31 PM
O'BRIEN DEIRDRESenior - Vice PresidentApr 02 '24Sale168.9154,7329,244,782136,572Apr 03 06:33 PM
Adams Katherine L.SVP, - GC and SecretaryApr 02 '24Sale168.9054,7329,244,235293,393Apr 03 06:30 PM
COOK TIMOTHY DChief - Executive OfficerApr 01 '24Sale170.0399,18316,864,0853,377,407Apr 03 06:31 PM
LEVINSON ARTHUR DDirectorFeb - 29 '24Sale180.94100,00018,094,0004,434,576Mar 01 06:34 PM
KONDO CHRISPrincipal - Accounting OfficerNov 29 '23Sale192.005,5131,058,49629,174Dec 01 06:32 PM
Adams Katherine L.SVP, - GC and SecretaryNov 17 '23Sale188.79123,44823,305,7480Nov 20 06:31 PM
KONDO CHRISPrincipal - Accounting OfficerNov 10 '23Sale184.044,806884,49634,687Nov 14 06:31 PM
Maestri LucaSenior - Vice President, CFOOct 09 '23Sale178.6931,6855,661,923107,661Oct 10 06:30 PM
WILLIAMS JEFFREY ECOOOct - 06 '23Sale177.0069,78512,351,945489,817Oct 10 06:31 PM
Maestri LucaSenior - Vice President, CFOOct 06 '23Sale177.8932,0105,694,259139,346Oct 10 06:30 PM
COOK TIMOTHY DChief - Executive OfficerOct 03 '23Sale172.50240,56941,498,2843,280,053Oct 03 09:04 PM
O'BRIEN DEIRDRESenior - Vice PresidentOct 03 '23Sale172.1165,53611,279,673136,445Oct 03 09:08 PM
Adams Katherine L.SVP, - GC and SecretaryOct 03 '23Sale172.0965,53611,278,365416,714Oct 03 09:02 PM
O'BRIEN DEIRDRESenior - Vice PresidentAug 07 '23Sale178.5615,4192,753,217136,445Aug 08 06:30 PM
\n
\n\n\n\n
\n
\r\n - \
\r\n
\r\n affiliate\r\n \u2022 \r\n advertise\r\n - \u2022 careers\r\n - \ \u2022 toggle light mode\r\n - \ \u2022 \r\n contact\r\n \u2022 \r\n privacy\r\n - \u2022 \r\n help\r\n - \
\r\n do not sell - my data\r\n \u2022 \r\n - \ privacy settings\r\n - \
\r\n Quotes delayed 15 minutes for NASDAQ, NYSE and - AMEX.\r\n
\r\n Copyright \xA9 2007-2024 FINVIZ.com. All Rights Reserved.\r\n - \ \r\n
\r\n - \
\r\n - \ \r\n - \ \r\n \r\n
\r\n
\r\n\t\t\t \r\n\r\n \r\n\r\n
\r\n\t\t\t

Upgrade - your FINVIZ experience

\r\n

\r\n - \ Join thousands of traders who make - more informed decisions with our premium features.\r\n Real-time - quotes, advanced visualizations, backtesting, and much more.\r\n

\r\n - \ Learn - more about FINVIZ*Elite\r\n
\r\n - \
\r\n
\n\n\n" - headers: - CF-Cache-Status: - - DYNAMIC - CF-RAY: - - 89a4b841cd162868-AMS - Cache-Control: - - no-cache - Connection: - - keep-alive - Content-Encoding: - - gzip - Content-Type: - - text/html; charset=utf-8 - Date: - - Thu, 27 Jun 2024 10:23:06 GMT - Request-Context: - - appId=cid-v1:bdd405ef-7a83-4f9a-9228-0107d7f4bc90 - Server: - - cloudflare - Transfer-Encoding: - - chunked - Vary: - - Accept-Encoding - X-Frame-Options: - - SAMEORIGIN - X-Powered-By: - - ASP.NET - - ARR/3.0 - - ASP.NET - status: - code: 200 - message: OK -version: 1 diff --git a/openbb_platform/providers/finviz/tests/record/http/test_finviz_fetchers/test_finviz_equity_screener_fetcher_urllib3_v2.yaml b/openbb_platform/providers/finviz/tests/record/http/test_finviz_fetchers/test_finviz_equity_screener_fetcher_urllib3_v2.yaml deleted file mode 100644 index 75afc6d3ecd..00000000000 --- a/openbb_platform/providers/finviz/tests/record/http/test_finviz_fetchers/test_finviz_equity_screener_fetcher_urllib3_v2.yaml +++ /dev/null @@ -1,1957 +0,0 @@ -interactions: -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - Cookie: - - MOCK_COOKIE - method: GET - uri: https://finviz.com/screener.ashx?o=-relativevolume&s=ta_mostactive&v=111 - response: - body: - string: "\n\n\nMost - Active - Stock Screener - Overview relativevolume\n\n\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \n\n\n\n \n\n\n\n\r\n - \ \r\n \r\n \r\n
\r\n
\r\n - \
\r\n
\r\n
\r\n
\r\n
\r\n\r\n - \

\r\n Subscribe - to our newsletter to receive the latest product updates and special offers\r\n - \

\r\n
\r\n - \
\r\n \r\n - \
\r\n \r\n
\r\n\r\n \r\n - \
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n - \ \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n - \
\r\n \r\n - \ \r\n \r\n - \ \r\n \r\n - \ \r\n - \ \r\n
\r\n \r\n \r\n \r\n\r\n
\r\n - \
\r\n - \ \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n - \
\r\n
\r\n
\r\n - \
\r\n
\r\n
\r\n
\r\n - \
\r\n
\r\n
\r\n \"\"\r\n
\r\n \r\n \r\n - \ \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n - \ \r\n - \ \r\n - \ \r\n \r\n
HomeNewsScreenerMapsGroupsPortfolioInsiderFuturesForexCryptoBacktestsElite
\r\n - \ \r\n
\r\n
\r\n \r\n \r\n\r\n - \
\r\n
\r\n Theme\r\n
\r\n - \
\r\n Help\r\n LoginRegister
\r\n - \
\r\n - \ \r\n
\n\n\n\n
\n
\n\n\n\n\n
\"\"\n\n\n
Select the criteria - by which the output information will be sorted. The order settings apply to - all views. Use the ascending and descending option to invert - the current order.

TIP: In table views you can click on top of a column - to sort the table by the underlying values.
] delay=[500]\">Order - by
\n\n\n\n\n
You can - screen the stocks by signal - an event, by which traders usually enter or - exit positions.

Most Active: Stocks with highest trading volume - today.
] delay=[500]\">Signal\n\n\n\n\nTo screen through a selected - set of stocks, you can enter one or more tickers directly, such as 'MSFT,GOOG,AAPL'. - The screening process will run only on the specified stocks. No input ticker(s) - equals all stocks. The open in screener option in the Search, - will copy the listed tickers to the screener's ticker box automatically.] - offsetx=[-100] delay=[500]\">Tickers\n\n\n\n\n\n
\n\n
\n\n\n\nTo optimize the screening - by various stock-related criteria, you can use one or more Filters.] - offsetx=[-305] delay=[500]\">Filters \r\n \r\n\n\n\n\n\n\n
\r\n
\r\n - \ \r\n \r\n
\r\n - \
\r\n
Descriptive
\n
Fundamental
\n
Technical
\n
News
\n
ETF
\n
All
\n - \
\r\n
\r\n
\n\n\n\n
\n
\n\n\n
\n
Stock - Exchange at which a stock is listed.
] delay=[500]\">Exchange\n\n\r\n
\r\n \r\n \r\n - \ \r\n - \ \r\n - \ \r\n
\r\n \r\n \r\n \r\n \r\n\r\n - \ \r\n \r\n \r\n \r\n \r\n\r\n - \ \r\n
\r\n
\n\n\nA major - index membership of a stock.] delay=[500]\">Index\n\n\r\n
\r\n \r\n \r\n - \ \r\n - \ \r\n - \ \r\n
\r\n \r\n \r\n \r\n \r\n\r\n - \ \r\n \r\n \r\n \r\n \r\n\r\n - \ \r\n
\r\n
\n\n\nThe sector - which a stock belongs to.] delay=[500]\">Sector\n\n\r\n
\r\n \r\n \r\n - \ \r\n - \ \r\n - \ \r\n
\r\n \r\n \r\n \r\n \r\n\r\n - \ \r\n \r\n \r\n \r\n \r\n\r\n - \ \r\n
\r\n
\n\n\nThe industry - which a stock belongs to.] delay=[500]\">Industry\n\n\r\n
\r\n \r\n \r\n - \ \r\n - \ \r\n - \ \r\n
\r\n \r\n \r\n \r\n \r\n\r\n - \ \r\n \r\n \r\n \r\n \r\n\r\n - \ \r\n
\r\n
\n\n\nThe country - where company of selected stock is based.] offsetx=[-305] - delay=[500]\">Country\n\n\r\n
\r\n \r\n - \ \r\n \r\n - \ \r\n - \ \r\n
\r\n \r\n \r\n \r\n \r\n\r\n - \ \r\n \r\n \r\n \r\n \r\n\r\n - \ \r\n
\r\n
\n\n\n\nEquals - The total dollar market value of all of a company's outstanding shares.] - delay=[500]\">Market Cap.\n\n\n\n\nThe dividend yield equals the annual dividend per share - divided by the stock\u2019s price. This measurement tells what percentage - return a company pays out to shareholders in the form of dividends.

If - there is no forward dividend estimate available, trailing twelve month (TTM) - value is used.
] delay=[500]\">Dividend Yield
\n\n\n\n\nThe - amount of short-selling transactions of given stock.] delay=[500]\">Float - Short\n\n\n\n\nAn - outlook of a stock-market analyst on a stock.] delay=[500]\">Analyst - Recom.\n\n\r\n - \
\r\n \r\n - \ \r\n \r\n \r\n \r\n
\r\n \r\n \r\n - \ \r\n \r\n\r\n \r\n - \ \r\n - \ \r\n - \ \r\n \r\n\r\n \r\n - \
\r\n - \
\n\n\nStocks - with options and/or available to sell short.] delay=[500]\">Option/Short\n\n\r\n
\r\n \r\n \r\n - \ \r\n - \ \r\n - \ \r\n
\r\n \r\n \r\n \r\n \r\n\r\n - \ \r\n \r\n \r\n \r\n \r\n\r\n - \ \r\n
\r\n
\n\n\n\nDate - when company reports earnings.] delay=[500]\">Earnings Date\n\n\r\n
\r\n - \ \r\n - \ \r\n \r\n \r\n \r\n
\r\n \r\n \r\n - \ \r\n \r\n\r\n \r\n - \ \r\n - \ \r\n - \ \r\n \r\n\r\n \r\n - \
\r\n - \
\n\n\nThe average number - of shares traded in a security per day.] offsetx=[-305] - delay=[500]\">Average Volume\n\n\n\n\nRatio - between current volume and 3-month average, intraday adjusted.] - offsetx=[-305] delay=[500]\">Relative Volume\n\n\n\n\nNumber of shares - traded today.] offsetx=[-305] delay=[500]\">Current Volume\n\n\r\n
\r\n - \ \r\n - \ \r\n \r\n \r\n \r\n
\r\n \r\n \r\n - \ \r\n \r\n\r\n \r\n - \ \r\n - \ \r\n - \ \r\n \r\n\r\n \r\n - \
\r\n - \
\n\n\nNumber - of trades today.] delay=[500]\">Trades\n\n
\n\n\n\nThe current - stock price.] delay=[500]\">Price\n\n\n\n\nAnalysts' mean target - price.] delay=[500]\">Target Price\n\n\n\n\nDate - when company had an IPO.] delay=[500]\">IPO Date\n\n\n\n\nShares outstanding - represent the total number of shares issued by a corporation and held by its - shareholders.] delay=[500]\">Shares Outstanding\n\n\n\n\nFloat is - the number of stock shares that are available for trading to the public. This - doesn't include shares held by insiders.] delay=[500]\">Float\n\n\n\n\n\n
\n
\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
OverviewValuationFinancialOwnershipPerformanceTechnicalETFETF - PerfCustomChartsTickersBasicTANewsSnapshotMapsStats
\n
\"\"
\n
\n
#1 / 200 Total
\n
\r\n - \ \r\n\n\r\n \r\n
\n
\n
\"\"
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
No.TickerCompanySectorIndustryCountryMarket - CapP/EPriceChangeVolume
1
Lipella Pharmaceuticals IncBiotechnology \u2022 - USA \u2022 7.27M
] offsetx=[100] offsety=[0] delay=[0]\">LIPO
Lipella - Pharmaceuticals IncHealthcareBiotechnologyUSA7.27M-
Lipella Pharmaceuticals IncBiotechnology \u2022 - USA \u2022 7.27M
] offsetx=[-324] offsety=[20] delay=[0]\">0.96
136.54%149,626,879
2
Planet Image International LtdComputer Hardware - \u2022 China \u2022 273.17M
] offsetx=[100] - offsety=[0] delay=[0]\">YIBO
Planet - Image International LtdTechnologyComputer HardwareChina273.17M35.14
Planet Image International LtdComputer Hardware - \u2022 China \u2022 273.17M
] offsetx=[-324] - offsety=[20] delay=[0]\">5.07
73.93%24,431,680
3
2U IncEducation & Training Services \u2022 - USA \u2022 7.11M
] offsetx=[100] offsety=[0] delay=[0]\">TWOU
2U - IncConsumer DefensiveEducation & Training ServicesUSA7.11M-
2U IncEducation & Training Services \u2022 - USA \u2022 7.11M
] offsetx=[-324] offsety=[20] delay=[0]\">2.53
102.40%51,306,348
4
Cognition Therapeutics IncBiotechnology \u2022 - USA \u2022 63.69M
] offsetx=[100] offsety=[0] delay=[0]\">CGTX
Cognition - Therapeutics IncHealthcareBiotechnologyUSA63.69M-
Cognition Therapeutics IncBiotechnology \u2022 - USA \u2022 63.69M
] offsetx=[-324] offsety=[20] delay=[0]\">1.59
-32.92%18,698,869
5
Tivic Health Systems IncMedical Devices \u2022 - USA \u2022 3.87M
] offsetx=[100] offsety=[0] delay=[0]\">TIVC
Tivic - Health Systems IncHealthcareMedical DevicesUSA3.87M-
Tivic Health Systems IncMedical Devices \u2022 - USA \u2022 3.87M
] offsetx=[-324] offsety=[20] delay=[0]\">0.63
38.53%60,226,282
6
NLS Pharmaceutics LtdBiotechnology \u2022 - Switzerland \u2022 12.34M
] offsetx=[100] offsety=[0] delay=[0]\">NLSP
NLS - Pharmaceutics LtdHealthcareBiotechnologySwitzerland12.34M-
NLS Pharmaceutics LtdBiotechnology \u2022 - Switzerland \u2022 12.34M
] offsetx=[-324] offsety=[20] - delay=[0]\">0.26
39.21%95,707,493
7
Loop Media IncBroadcasting \u2022 - USA \u2022 10.51M
] offsetx=[100] offsety=[0] delay=[0]\">LPTV
Loop - Media IncCommunication ServicesBroadcastingUSA10.51M-
Loop Media IncBroadcasting \u2022 - USA \u2022 10.51M
] offsetx=[-324] offsety=[20] delay=[0]\">0.13
12.82%36,700,003
8
Beamr Imaging LtdSoftware - Application \u2022 - Israel \u2022 73.94M
] offsetx=[100] offsety=[0] delay=[0]\">BMR
Beamr - Imaging LtdTechnologySoftware - ApplicationIsrael73.94M-
Beamr Imaging LtdSoftware - Application \u2022 - Israel \u2022 73.94M
] offsetx=[-324] offsety=[20] delay=[0]\">4.90
1.03%6,788,567
9
BurgerFi International IncRestaurants \u2022 - USA \u2022 12.82M
] offsetx=[100] offsety=[0] delay=[0]\">BFI
BurgerFi - International IncConsumer CyclicalRestaurantsUSA12.82M-
BurgerFi International IncRestaurants \u2022 - USA \u2022 12.82M
] offsetx=[-324] offsety=[20] delay=[0]\">0.47
11.29%27,843,015
10
TransCode Therapeutics IncBiotechnology \u2022 - USA \u2022 2.12M
] offsetx=[100] offsety=[0] delay=[0]\">RNAZ
TransCode - Therapeutics IncHealthcareBiotechnologyUSA2.12M-
TransCode Therapeutics IncBiotechnology \u2022 - USA \u2022 2.12M
] offsetx=[-324] offsety=[20] delay=[0]\">0.29
-1.22%6,760,969
11
Sangamo Therapeutics IncBiotechnology \u2022 - USA \u2022 196.10M
] offsetx=[100] offsety=[-220] delay=[0]\">SGMO
Sangamo - Therapeutics IncHealthcareBiotechnologyUSA196.10M-
Sangamo Therapeutics IncBiotechnology \u2022 - USA \u2022 196.10M
] offsetx=[-324] offsety=[-264] delay=[0]\">0.94
9.26%32,774,017
12
Nasdaq IncFinancial Data & Stock Exchanges \u2022 - USA \u2022 38.94B
] offsetx=[100] offsety=[-220] delay=[0]\">NDAQ
Nasdaq - IncFinancialFinancial Data & Stock ExchangesUSA38.94B38.81
Nasdaq IncFinancial Data & Stock Exchanges \u2022 - USA \u2022 38.94B
] offsetx=[-324] offsety=[-264] delay=[0]\">67.54
0.87%6,803,927
13
Vintage Wine Estates IncBeverages - Wineries & - Distilleries \u2022 USA \u2022 4.37M
] offsetx=[100] - offsety=[-220] delay=[0]\">VWE
Vintage - Wine Estates IncConsumer DefensiveBeverages - Wineries & DistilleriesUSA4.37M-
Vintage Wine Estates IncBeverages - Wineries & - Distilleries \u2022 USA \u2022 4.37M
] offsetx=[-324] - offsety=[-264] delay=[0]\">0.07
4.50%8,299,280
14
Serve Robotics IncSpecialty Industrial Machinery - \u2022 USA \u2022 555.02M
] offsetx=[100] - offsety=[-220] delay=[0]\">SERV
Serve - Robotics IncIndustrialsSpecialty Industrial MachineryUSA555.02M-
Serve Robotics IncSpecialty Industrial Machinery - \u2022 USA \u2022 555.02M
] offsetx=[-324] - offsety=[-264] delay=[0]\">14.96
13.16%29,509,417
15
Hyzon Motors IncAuto Parts \u2022 - USA \u2022 40.35M
] offsetx=[100] offsety=[-220] delay=[0]\">HYZN
Hyzon - Motors IncConsumer CyclicalAuto PartsUSA40.35M-
Hyzon Motors IncAuto Parts \u2022 - USA \u2022 40.35M
] offsetx=[-324] offsety=[-264] delay=[0]\">0.15
-6.80%3,246,602
16
Dexcom IncMedical Devices \u2022 USA - \u2022 27.27B
] offsetx=[100] offsety=[-220] delay=[0]\">DXCM
Dexcom - IncHealthcareMedical DevicesUSA27.27B41.93
Dexcom IncMedical Devices \u2022 USA - \u2022 27.27B
] offsetx=[-324] offsety=[-264] delay=[0]\">68.05
6.32%7,409,184
17
Agape ATP CorpPackaged Foods \u2022 - Malaysia \u2022 7.37M
] offsetx=[100] offsety=[-220] delay=[0]\">ATPC
Agape - ATP CorpConsumer DefensivePackaged FoodsMalaysia7.37M-
Agape ATP CorpPackaged Foods \u2022 - Malaysia \u2022 7.37M
] offsetx=[-324] offsety=[-264] delay=[0]\">0.10
-11.30%4,853,902
18
Salarius Pharmaceuticals IncBiotechnology \u2022 - USA \u2022 2.21M
] offsetx=[100] offsety=[-220] delay=[0]\">SLRX
Salarius - Pharmaceuticals IncHealthcareBiotechnologyUSA2.21M-
Salarius Pharmaceuticals IncBiotechnology \u2022 - USA \u2022 2.21M
] offsetx=[-324] offsety=[-264] delay=[0]\">3.69
15.67%3,927,786
19
Longeveron IncBiotechnology \u2022 - USA \u2022 25.27M
] offsetx=[100] offsety=[-220] delay=[0]\">LGVN
Longeveron - IncHealthcareBiotechnologyUSA25.27M-
Longeveron IncBiotechnology \u2022 - USA \u2022 25.27M
] offsetx=[-324] offsety=[-264] delay=[0]\">3.98
15.69%18,922,060
20
Integra Lifesciences Holdings CorpMedical Devices - \u2022 USA \u2022 2.11B
] offsetx=[100] offsety=[-220] - delay=[0]\">IART
Integra - Lifesciences Holdings CorpHealthcareMedical DevicesUSA2.11B52.86
Integra Lifesciences Holdings CorpMedical Devices - \u2022 USA \u2022 2.11B
] offsetx=[-324] offsety=[-264] - delay=[0]\">26.80
-14.75%2,681,416
\n
\n\n\n\n
Signal: ta_mostactiveexport
\n
\"\"
\n12345678910\r\n \r\n\n
\"\"
\n
\n\n\r\n \r\n
\r\n
\r\n
\r\n affiliate\r\n - \ \u2022 \r\n advertise\r\n \r\n - \ \u2022 toggle light mode\r\n - \ \u2022 \r\n contact\r\n \u2022 \r\n help\r\n - \u2022 \r\n privacy - \
\r\n Quotes delayed 15 minutes for NASDAQ, NYSE and AMEX.\r\n - \
\r\n Copyright \xA9 2007-2024 FINVIZ.com. All Rights Reserved.\r\n - \ \r\n
\r\n \r\n - \ \r\n \r\n
\r\n
\r\n\t\t\t \r\n\r\n \r\n\r\n
\r\n\t\t\t

Upgrade - your FINVIZ experience

\r\n

\r\n - \ Join thousands of traders who make - more informed decisions with our premium features.\r\n Real-time - quotes, advanced visualizations, backtesting, and much more.\r\n

\r\n - \ Learn - more about FINVIZ*Elite\r\n
\r\n - \
\r\n
\n\n\n" - headers: - CF-Cache-Status: - - DYNAMIC - CF-RAY: - - 8aae05b6c8d58450-YVR - Cache-Control: - - no-cache - Connection: - - keep-alive - Content-Encoding: - - gzip - Content-Type: - - text/html; charset=utf-8 - Date: - - Mon, 29 Jul 2024 15:08:05 GMT - Request-Context: - - appId=cid-v1:bdd405ef-7a83-4f9a-9228-0107d7f4bc90 - Server: - - cloudflare - Set-Cookie: - - notice-newsletter=show; expires=Tue, 30 Jul 2024 15:08:05 GMT; domain=.finviz.com; - path=/; samesite=lax - - screenerUrl=v%3D111%26s%3Dta_mostactive%26o%3D-relativevolume; expires=Tue, - 29 Jul 2025 15:08:05 GMT; domain=.finviz.com; path=/; samesite=lax - Transfer-Encoding: - - chunked - Vary: - - Accept-Encoding - X-Frame-Options: - - SAMEORIGIN - X-Powered-By: - - ASP.NET - - ARR/3.0 - - ASP.NET - status: - code: 200 - message: OK -version: 1 diff --git a/openbb_platform/providers/finviz/tests/record/http/test_finviz_fetchers/test_finviz_key_metrics_fetcher_urllib3_v2.yaml b/openbb_platform/providers/finviz/tests/record/http/test_finviz_fetchers/test_finviz_key_metrics_fetcher_urllib3_v2.yaml deleted file mode 100644 index d2c92e17071..00000000000 --- a/openbb_platform/providers/finviz/tests/record/http/test_finviz_fetchers/test_finviz_key_metrics_fetcher_urllib3_v2.yaml +++ /dev/null @@ -1,2251 +0,0 @@ -interactions: -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - Cookie: - - MOCK_COOKIE - method: GET - uri: https://finviz.com/quote.ashx?t=AAPL - response: - body: - string: "\n\n\nAAPL - - Apple Inc Stock Price and Quote\n\n\r\n - \ \r\n \r\n \r\n \r\n \r\n \r\n \n\n\n\n\n \n\n\r\n \r\n \r\n \r\n
\r\n
\r\n - \
\r\n
\r\n
\r\n
\r\n
\r\n\r\n - \

\r\n Subscribe - to our newsletter to receive the latest product updates and special offers\r\n - \

\r\n
\r\n - \
\r\n \r\n - \
\r\n \r\n
\r\n\r\n \r\n - \
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n - \ \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n - \
\r\n \r\n - \ \r\n \r\n - \ \r\n \r\n - \ \r\n - \ \r\n
\r\n \r\n \r\n \r\n\r\n
\r\n - \
\r\n - \ \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n - \
\r\n
\r\n
\r\n - \
\r\n
\r\n
\r\n
\r\n - \
\r\n
\r\n
\r\n \"\"\r\n
\r\n \r\n \r\n - \ \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n - \ \r\n - \ \r\n - \ \r\n \r\n
HomeNewsScreenerMapsGroupsPortfolioInsiderFuturesForexCryptoBacktestsElite
\r\n - \ \r\n
\r\n
\r\n \r\n \r\n\r\n - \
\r\n
\r\n Theme\r\n
\r\n - \
\r\n Help\r\n LoginRegister
\r\n - \
\r\n - \ \r\n
\r\n
\r\n \r\n \r\n\r\n - \
\r\n

\r\n - \ \r\n Upgrade to FINVIZ*Elite\r\n to get real-time quotes, intraday - charts, and advanced charting tools.\r\n

\r\n
\r\n - \ \r\n \r\n \r\n\r\n - \ \r\n
\r\n
\r\n
\r\n \r\n \r\n\r\n - \ \r\n
\r\n
\n
- \
\r\n
\r\n - \
\r\n \r\n
\r\n

AAPL

\r\n

\r\n \r\n Apple Inc\r\n \r\n - \

\r\n
\r\n
\r\n - \
\r\n - \
\r\n
Last - Close
\r\n Jun 26 \u2022 - 04:00PM ET\r\n
\r\n 213.25\r\n \r\n \r\n - \ \r\n - \ \r\n - \ \r\n \r\n \r\n \r\n \r\n
\r\n
Dollar - change
\r\n +4.18\r\n
\r\n \r\n
\r\n - \
Percentage change
\r\n - \ 2.00\r\n
%
\r\n - \
\r\n
\r\n \r\n
\r\n
\r\n - \
\r\n
\r\n
\r\n - \ Technology\r\n - \ \u2022\r\n Consumer - Electronics\r\n \u2022\r\n - \ USA\r\n - \ \u2022\r\n NASD\r\n
\r\n - \
\r\n \r\n - \ Stock Detail\r\n \r\n \u2022\r\n \r\n - \ Compare Perf.\r\n - \ \r\n \u2022\r\n - \ \r\n Financials\r\n - \ \r\n \u2022\r\n - \ \r\n Options Chain\r\n - \ \r\n \u2022\r\n - \ Save - to Portfolio\r\n \u2022\r\n - \ Create Alert\r\n
\r\n
\r\n - \
\n
\r\n
\r\n
\r\n
\r\n - \
\r\n
\r\n - \
\n\n\n
\n
\n\n\n
\n
\n\n\n\n
\n - \ Scroll to - Statements\r\n \r\n
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
IndexDJIA, NDX, S&P 500P/E33.16EPS (ttm)6.43Insider Own0.09%Shs Outstand15.55BPerf Week-0.49%
Market Cap3270.00BForward P/E29.39EPS - next Y7.26Insider Trans-4.15%Shs Float15.32BPerf Month12.25%
Income100.39BPEG3.16EPS - next Q1.33Inst Own61.96%Short - Float1.00%Perf Quarter25.66%
Sales381.62BP/S8.57EPS this Y7.68%Inst Trans-0.48%Short Ratio2.25Perf - Half Y10.15%
Book/sh4.84P/B44.08EPS next - Y9.92%ROA29.99%Short Interest153.41MPerf Year15.10%
Cash/sh4.38P/C48.70EPS next 5Y10.50%ROE147.25%52W Range164.07 - - 220.20Perf - YTD10.76%
Dividend Est.0.99 (0.46%)P/FCF32.08EPS - past 5Y15.55%ROI60.47%52W High-3.16%Beta1.25
Dividend - TTM0.97 - (0.45%)Quick Ratio0.99Sales past 5Y8.34%Gross Margin45.59%52W Low29.97%ATR (14)4.86
Dividend Ex-DateMay 10, 2024Current - Ratio1.04EPS Y/Y TTM9.23%Oper. - Margin30.98%RSI (14)67.36Volatility2.24% 2.33%
Employees161000Debt/Eq1.41Sales Y/Y TTM-0.90%Profit Margin26.31%Recom1.98Target Price211.68
Option/ShortYes / YesLT Debt/Eq1.24EPS Q/Q0.25%Payout15.32%Rel Volume0.95Prev Close209.07
Sales - Surprise0.43%EPS Surprise1.65%Sales Q/Q-4.31%
BMO = Before Market - Open
AMC = After Market Close] offsetx=[10] offsety=[20] delay=[300]\">Earnings
May 02 AMCAvg Volume68.26MPrice213.25
SMA205.44%SMA5013.36%SMA20016.42%Trades\r\n \r\nVolume66,213,184Change2.00%
\n
\n\n\n\n\n\n\n\r\n \r\n\n\n\n\n\n\n\n\n\n\n\n\n
\n\n\r\n \r\n \r\n \r\n \r\n - \ \r\n - \ \r\n - \ \r\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
DateActionAnalystRating ChangePrice Target Change
Jun-26-24UpgradeRosenblattNeutral - → Buy$196 → $260
Jun-25-24ReiteratedMaxim GroupHold$178 → $195
Jun-25-24ReiteratedEvercore ISIOutperform$220 → $250
Jun-18-24ReiteratedJP MorganOverweight$225 → $245
Jun-11-24UpgradeDA - DavidsonNeutral → Buy$200 → $230
May-03-24UpgradeItau - BBAUnderperform - → Market Perform$162 → $188
May-03-24ReiteratedMonness Crespi & HardtBuy$200 → $205
Apr-29-24UpgradeBernsteinMkt - Perform → Outperform$195
Apr-17-24InitiatedMaxim GroupHold$178
Apr-11-24ReiteratedJP MorganOverweight$215 → $210
Mar-28-24DowngradeDZ - BankBuy - → Hold$180
Feb-02-24ReiteratedPiper SandlerNeutral$205 → $190
Feb-02-24ReiteratedMonness Crespi & HardtBuy$189 → $200
Feb-02-24ReiteratedJP MorganOverweight$225 → $215
Feb-02-24ReiteratedGoldmanBuy$223 → $232
Feb-02-24ReiteratedBarclaysUnderweight$160 → $158
Jan-29-24ReiteratedRobert W. BairdOutperform$186 → $200
Jan-18-24UpgradeBofA - SecuritiesNeutral → Buy$208 → $225
Jan-10-24DowngradeRedburn - AtlanticBuy → Neutral$200
Jan-04-24DowngradePiper - SandlerOverweight → Neutral$220 → $205
\n
\r\n - \ \r\n \r\n \r\n\r\n - \ Show Previous Ratings\r\n \r\n
\n
\n - \ \r\n - \ \r\n \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n \n \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n
\r\n Today 05:50AM\r\n - \ \r\n
\r\n 05:30AM\r\n \r\n
\r\n 04:15AM\r\n \r\n
\r\n 04:15AM\r\n \r\n
\r\n 02:39AM\r\n \r\n
\r\n 02:00AM\r\n \r\n
\r\n 01:05AM\r\n \r\n
\r\n Jun-26-24 11:54PM\r\n - \ \r\n
\r\n 09:58PM\r\n \r\n
\r\n 04:45PM\r\n \r\n
\r\n 04:10PM\r\n \r\n
\r\n 04:01PM\r\n \r\n
\r\n 03:44PM\r\n \r\n
\r\n 03:32PM\r\n \r\n
\r\n 02:18PM\r\n \r\n
\r\n 02:04PM\r\n \r\n
\r\n 01:44PM\r\n \r\n
\r\n 01:11PM\r\n \r\n
\r\n 12:39PM\r\n \r\n
\r\n 11:02AM\r\n \r\n
\r\n 10:36AM\r\n \r\n
\r\n 10:15AM\r\n \r\n
\r\n 10:05AM\r\n \r\n
\r\n 09:48AM\r\n \r\n
\r\n 09:45AM\r\n \r\n
\r\n 09:30AM\r\n \r\n
\r\n 09:17AM\r\n \r\n
\r\n 09:00AM\r\n \r\n
\r\n 08:26AM\r\n \r\n
\r\n 08:00AM\r\n \r\n
\r\n 07:58AM\r\n \r\n
\r\n 07:05AM\r\n \r\n
\r\n 07:00AM\r\n \r\n
\r\n 06:50AM\r\n \r\n
\r\n 06:45AM\r\n \r\n
\r\n 06:02AM\r\n \r\n
\r\n 06:00AM\r\n \r\n
\r\n 05:30AM\r\n \r\n
\r\n 05:07AM\r\n \r\n
\r\n 01:00AM\r\n \r\n
\r\n 12:13AM\r\n \r\n
\r\n Jun-25-24 06:13PM\r\n - \ \r\n
\r\n 05:55PM\r\n \r\n
\r\n 05:07PM\r\n \r\n
\r\n 04:37PM\r\n \r\n
\r\n 03:05PM\r\n \r\n
\r\n 02:41PM\r\n \r\n
\r\n 12:59PM\r\n \r\n
\r\n 12:21PM\r\n \r\n
\r\n 11:09AM\r\n \r\n
\r\n 11:09AM\r\n \r\n
\r\n 11:09AM\r\n \r\n
\r\n 11:06AM\r\n \r\n
\r\n 11:04AM\r\n \r\n
\r\n 10:41AM\r\n \r\n
\r\n 10:37AM\r\n \r\n
\r\n 10:35AM\r\n \r\n
\r\n 10:19AM\r\n \r\n
\r\n 10:12AM\r\n \r\n
\r\n 09:58AM\r\n \r\n
\r\n 09:10AM\r\n \r\n
\r\n 09:00AM\r\n \r\n
\r\n 09:00AM\r\n \r\n
\r\n 08:54AM\r\n \r\n
\r\n 08:17AM\r\n \r\n
\r\n 08:16AM\r\n \r\n
\r\n 08:03AM\r\n \r\n
\r\n 08:01AM\r\n \r\n
\r\n 07:58AM\r\n \r\n
\r\n 07:32AM\r\n \r\n
\r\n 07:29AM\r\n \r\n
\r\n 07:14AM\r\n \r\n
\r\n 07:11AM\r\n \r\n
\r\n 06:36AM\r\n \r\n
\r\n 06:15AM\r\n \r\n
\r\n 06:00AM\r\n \r\n
\r\n 06:00AM\r\n \r\n
\r\n 05:20AM\r\n \r\n
\r\n 05:00AM\r\n \r\n
\r\n 04:27AM\r\n \r\n
\r\n 04:24AM\r\n \r\n
\r\n 03:55AM\r\n \r\n
\r\n 03:52AM\r\n \r\n
\r\n 02:20AM\r\n \r\n
\r\n Jun-24-24 09:51PM\r\n - \ \r\n
\r\n 08:15PM\r\n \r\n
\r\n 06:47PM\r\n \r\n
\r\n 06:02PM\r\n \r\n
\r\n 06:00PM\r\n \r\n
\r\n 05:45PM\r\n \r\n
\r\n 05:06PM\r\n \r\n
\r\n 04:59PM\r\n \r\n
\r\n 04:42PM\r\n \r\n
\r\n 04:29PM\r\n \r\n
\r\n 04:20PM\r\n \r\n
\r\n 04:17PM\r\n \r\n
\r\n 04:10PM\r\n \r\n
\r\n 04:07PM\r\n \r\n
\r\n 04:02PM\r\n \r\n
\r\n 03:26PM\r\n \r\n
\n
\n
\r\n - \
\r\n
\r\n
\r\n
Apple, Inc. engages in the - design, manufacture, and sale of smartphones, personal computers, tablets, - wearables and accessories, and other varieties of related services. It operates - through the following geographical segments: Americas, Europe, Greater China, - Japan, and Rest of Asia Pacific. The Americas segment includes North and South - America. The Europe segment consists of European countries, as well as India, - the Middle East, and Africa. The Greater China segment comprises China, Hong - Kong, and Taiwan. The Rest of Asia Pacific segment includes Australia and - Asian countries. Its products and services include iPhone, Mac, iPad, AirPods, - Apple TV, Apple Watch, Beats products, AppleCare, iCloud, digital content - stores, streaming, and licensing services. The company was founded by Steven - Paul Jobs, Ronald Gerald Wayne, and Stephen G. Wozniak in April 1976 and is - headquartered in Cupertino, CA.
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Insider - TradingRelationshipDateTransactionCost#SharesValue ($)#Shares - TotalSEC Form 4
LEVINSON ARTHUR DDirectorMay - 30 '24Sale191.5875,00014,368,5004,359,576Jun 03 06:31 PM
KONDO CHRISPrincipal - Accounting OfficerMay 15 '24Sale190.404,999951,78529,278May 17 06:30 PM
WILLIAMS JEFFREY ECOOApr - 11 '24Sale172.2259,16210,188,880489,944Apr 15 06:31 PM
Maestri LucaSenior - Vice President, CFOApr 11 '24Sale174.1253,1949,261,933107,788Apr 15 06:30 PM
COOK TIMOTHY DChief - Executive OfficerApr 02 '24Sale168.6297,22716,394,5293,280,180Apr 03 06:31 PM
O'BRIEN DEIRDRESenior - Vice PresidentApr 02 '24Sale168.9154,7329,244,782136,572Apr 03 06:33 PM
Adams Katherine L.SVP, - GC and SecretaryApr 02 '24Sale168.9054,7329,244,235293,393Apr 03 06:30 PM
COOK TIMOTHY DChief - Executive OfficerApr 01 '24Sale170.0399,18316,864,0853,377,407Apr 03 06:31 PM
LEVINSON ARTHUR DDirectorFeb - 29 '24Sale180.94100,00018,094,0004,434,576Mar 01 06:34 PM
KONDO CHRISPrincipal - Accounting OfficerNov 29 '23Sale192.005,5131,058,49629,174Dec 01 06:32 PM
Adams Katherine L.SVP, - GC and SecretaryNov 17 '23Sale188.79123,44823,305,7480Nov 20 06:31 PM
KONDO CHRISPrincipal - Accounting OfficerNov 10 '23Sale184.044,806884,49634,687Nov 14 06:31 PM
Maestri LucaSenior - Vice President, CFOOct 09 '23Sale178.6931,6855,661,923107,661Oct 10 06:30 PM
WILLIAMS JEFFREY ECOOOct - 06 '23Sale177.0069,78512,351,945489,817Oct 10 06:31 PM
Maestri LucaSenior - Vice President, CFOOct 06 '23Sale177.8932,0105,694,259139,346Oct 10 06:30 PM
COOK TIMOTHY DChief - Executive OfficerOct 03 '23Sale172.50240,56941,498,2843,280,053Oct 03 09:04 PM
O'BRIEN DEIRDRESenior - Vice PresidentOct 03 '23Sale172.1165,53611,279,673136,445Oct 03 09:08 PM
Adams Katherine L.SVP, - GC and SecretaryOct 03 '23Sale172.0965,53611,278,365416,714Oct 03 09:02 PM
O'BRIEN DEIRDRESenior - Vice PresidentAug 07 '23Sale178.5615,4192,753,217136,445Aug 08 06:30 PM
\n
\n\n\n\n
\n
\r\n - \
\r\n
\r\n affiliate\r\n \u2022 \r\n advertise\r\n - \u2022 careers\r\n - \ \u2022 toggle light mode\r\n - \ \u2022 \r\n contact\r\n \u2022 \r\n privacy\r\n - \u2022 \r\n help\r\n - \
\r\n do not sell - my data\r\n \u2022 \r\n - \ privacy settings\r\n - \
\r\n Quotes delayed 15 minutes for NASDAQ, NYSE and - AMEX.\r\n
\r\n Copyright \xA9 2007-2024 FINVIZ.com. All Rights Reserved.\r\n - \ \r\n
\r\n - \
\r\n - \ \r\n - \ \r\n \r\n
\r\n
\r\n\t\t\t \r\n\r\n \r\n\r\n
\r\n\t\t\t

Upgrade - your FINVIZ experience

\r\n

\r\n - \ Join thousands of traders who make - more informed decisions with our premium features.\r\n Real-time - quotes, advanced visualizations, backtesting, and much more.\r\n

\r\n - \ Learn - more about FINVIZ*Elite\r\n
\r\n - \
\r\n
\n\n\n" - headers: - CF-Cache-Status: - - DYNAMIC - CF-RAY: - - 89a4b83d8d1506bc-AMS - Cache-Control: - - no-cache - Connection: - - keep-alive - Content-Encoding: - - gzip - Content-Type: - - text/html; charset=utf-8 - Date: - - Thu, 27 Jun 2024 10:23:05 GMT - Request-Context: - - appId=cid-v1:bdd405ef-7a83-4f9a-9228-0107d7f4bc90 - Server: - - cloudflare - Transfer-Encoding: - - chunked - Vary: - - Accept-Encoding - X-Frame-Options: - - SAMEORIGIN - X-Powered-By: - - ASP.NET - - ARR/3.0 - - ASP.NET - status: - code: 200 - message: OK -version: 1 diff --git a/openbb_platform/providers/finviz/tests/record/http/test_finviz_fetchers/test_finviz_price_performance_fetcher_urllib3_v2.yaml b/openbb_platform/providers/finviz/tests/record/http/test_finviz_fetchers/test_finviz_price_performance_fetcher_urllib3_v2.yaml deleted file mode 100644 index a64b3bb0cd6..00000000000 --- a/openbb_platform/providers/finviz/tests/record/http/test_finviz_fetchers/test_finviz_price_performance_fetcher_urllib3_v2.yaml +++ /dev/null @@ -1,1420 +0,0 @@ -interactions: -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - Cookie: - - MOCK_COOKIE - method: GET - uri: https://finviz.com/screener.ashx?o=ticker&t=AAPL&v=141 - response: - body: - string: "\n\n\nStock - Screener - Performance AAPL ticker\n\n\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \n\n\n\n \n\n\n\n\r\n - \ \r\n \r\n \r\n
\r\n
\r\n - \
\r\n
\r\n
\r\n
\r\n
\r\n\r\n - \

\r\n Subscribe - to our newsletter to receive the latest product updates and special offers\r\n - \

\r\n
\r\n - \
\r\n \r\n - \
\r\n \r\n
\r\n\r\n \r\n - \
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n - \ \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n - \
\r\n \r\n - \ \r\n \r\n - \ \r\n \r\n - \ \r\n - \ \r\n
\r\n \r\n \r\n \r\n\r\n
\r\n - \
\r\n - \ \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n - \
\r\n
\r\n
\r\n - \
\r\n
\r\n
\r\n
\r\n - \
\r\n
\r\n
\r\n \"\"\r\n
\r\n \r\n \r\n - \ \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n - \ \r\n - \ \r\n - \ \r\n \r\n
HomeNewsScreenerMapsGroupsPortfolioInsiderFuturesForexCryptoBacktestsElite
\r\n - \ \r\n
\r\n
\r\n \r\n \r\n\r\n - \
\r\n
\r\n Theme\r\n
\r\n - \
\r\n Help\r\n LoginRegister
\r\n - \
\r\n - \ \r\n
\n\n\n\n
\n
\n\n\n\n\n
\"\"\n\n\n
Select the criteria - by which the output information will be sorted. The order settings apply to - all views. Use the ascending and descending option to invert - the current order.

TIP: In table views you can click on top of a column - to sort the table by the underlying values.
] delay=[500]\">Order - by
\n\n\n\n\n
You can - screen the stocks by signal - an event, by which traders usually enter or - exit positions.
] delay=[500]\">Signal\n\n\n\n\nTo screen through a selected - set of stocks, you can enter one or more tickers directly, such as 'MSFT,GOOG,AAPL'. - The screening process will run only on the specified stocks. No input ticker(s) - equals all stocks. The open in screener option in the Search, - will copy the listed tickers to the screener's ticker box automatically.] - offsetx=[-100] delay=[500]\">Tickers\n\n\n\n\n\n
\n\n
\n\n\n\nTo optimize the screening - by various stock-related criteria, you can use one or more Filters.] - offsetx=[-305] delay=[500]\">Filters \r\n \r\n\n\n\n\n\n\n
\r\n
\r\n - \ \r\n \r\n
\r\n - \
\r\n
Descriptive
\n
Fundamental
\n
Technical
\n
ETF
\n
All
\n - \
\r\n
\r\n
\n\n\n\n
\n
\n\n\n
\n
Stock - Exchange at which a stock is listed.
] delay=[500]\">Exchange\n\n\r\n
\r\n \r\n \r\n - \ \r\n - \ \r\n - \ \r\n
\r\n \r\n \r\n \r\n \r\n\r\n - \ \r\n \r\n \r\n \r\n \r\n\r\n - \ \r\n
\r\n
\n\n\nA major - index membership of a stock.] delay=[500]\">Index\n\n\r\n
\r\n \r\n \r\n - \ \r\n - \ \r\n - \ \r\n
\r\n \r\n \r\n \r\n \r\n\r\n - \ \r\n \r\n \r\n \r\n \r\n\r\n - \ \r\n
\r\n
\n\n\nThe sector - which a stock belongs to.] delay=[500]\">Sector\n\n\r\n
\r\n \r\n \r\n - \ \r\n - \ \r\n - \ \r\n
\r\n \r\n \r\n \r\n \r\n\r\n - \ \r\n \r\n \r\n \r\n \r\n\r\n - \ \r\n
\r\n
\n\n\nThe industry which a stock - belongs to.] delay=[500]\">Industry\n\n\r\n
\r\n \r\n \r\n - \ \r\n - \ \r\n - \ \r\n
\r\n \r\n \r\n \r\n \r\n\r\n - \ \r\n \r\n \r\n \r\n \r\n\r\n - \ \r\n
\r\n
\n\n\nThe country - where company of selected stock is based.] offsetx=[-305] - delay=[500]\">Country\n\n\r\n
\r\n \r\n - \ \r\n \r\n - \ \r\n - \ \r\n
\r\n \r\n \r\n \r\n \r\n\r\n - \ \r\n \r\n \r\n \r\n \r\n\r\n - \ \r\n
\r\n
\n\n\n\nEquals - The total dollar market value of all of a company's outstanding shares.] - delay=[500]\">Market Cap.\n\n\n\n\nThe dividend yield equals the annual dividend per share - divided by the stock\u2019s price. This measurement tells what percentage - return a company pays out to shareholders in the form of dividends.

If - there is no forward dividend estimate available, trailing twelve month (TTM) - value is used.
] delay=[500]\">Dividend Yield
\n\n\n\n\nThe - amount of short-selling transactions of given stock.] delay=[500]\">Float - Short\n\n\n\n\nAn - outlook of a stock-market analyst on a stock.] delay=[500]\">Analyst - Recom.\n\n\r\n - \
\r\n \r\n - \ \r\n \r\n \r\n \r\n
\r\n \r\n \r\n - \ \r\n \r\n\r\n \r\n - \ \r\n - \ \r\n - \ \r\n \r\n\r\n \r\n - \
\r\n - \
\n\n\nStocks - with options and/or available to sell short.] delay=[500]\">Option/Short\n\n\r\n
\r\n \r\n \r\n - \ \r\n - \ \r\n - \ \r\n
\r\n \r\n \r\n \r\n \r\n\r\n - \ \r\n \r\n \r\n \r\n \r\n\r\n - \ \r\n
\r\n
\n\n\n\nDate - when company reports earnings] delay=[500]\">Earnings Date\n\n\r\n
\r\n - \ \r\n - \ \r\n \r\n \r\n \r\n
\r\n \r\n \r\n - \ \r\n \r\n\r\n \r\n - \ \r\n - \ \r\n - \ \r\n \r\n\r\n \r\n - \
\r\n - \
\n\n\nThe average number - of shares traded in a security per day.] offsetx=[-305] - delay=[500]\">Average Volume\n\n\n\n\nRatio - between current volume and 3-month average, intraday adjusted.] - offsetx=[-305] delay=[500]\">Relative Volume\n\n\n\n\nNumber of shares - traded today.] offsetx=[-305] delay=[500]\">Current Volume\n\n\r\n
\r\n - \ \r\n - \ \r\n \r\n \r\n \r\n
\r\n \r\n \r\n - \ \r\n \r\n\r\n \r\n - \ \r\n - \ \r\n - \ \r\n \r\n\r\n \r\n - \
\r\n - \
\n\n\nNumber - of trades today.] delay=[500]\">Trades\n\n
\n\n\n\nThe current - stock price.] delay=[500]\">Price\n\n\n\n\nAnalysts' mean target - price.] delay=[500]\">Target Price\n\n\n\n\nDate - when company had an IPO.] delay=[500]\">IPO Date\n\n\n\n\nShares outstanding - represent the total number of shares issued by a corporation and held by its - shareholders.] delay=[500]\">Shares Outstanding\n\n\n\n\nFloat is - the number of stock shares that are available for trading to the public. This - doesn't include shares held by insiders.] delay=[500]\">Float\n\n\n\n\n\n
\n
\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
OverviewValuationFinancialOwnershipPerformanceTechnicalETFETF - PerfCustomChartsTickersBasicTANewsSnapshotMapsStats
\n
\"\"
\n
\n
#1 / 1 Total
\n
\r\n - \ \r\n\n\r\n - \ \r\n
\n
\n
\"\"
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
No.Ticker\r\n \r\nPerf - WeekPerf - MonthPerf - QuartPerf - HalfPerf - YearPerf - YTDVolatility - WVolatility - MRecomAvg - VolumeRel - VolumePriceChangeVolume
1
Apple IncConsumer Electronics \u2022 - USA \u2022 3270.00B
] offsetx=[100] offsety=[0] delay=[0]\">AAPL
-0.49%12.25%25.66%10.15%15.10%10.76%2.24%2.33%1.9868.26M0.95
Apple IncConsumer Electronics \u2022 - USA \u2022 3270.00B
] offsetx=[-324] offsety=[20] delay=[0]\">213.25
2.00%66,213,184
\n
\n\n\n\n
Tickers: AAPLexport
\n
\"\"
\n1\n
\"\"
\n
\n\n\r\n \r\n
\r\n - \
\r\n
\r\n affiliate\r\n \u2022 \r\n advertise\r\n - \u2022 careers\r\n - \ \u2022 toggle light mode\r\n - \ \u2022 \r\n contact\r\n \u2022 \r\n privacy\r\n - \u2022 \r\n help\r\n - \
\r\n do not sell - my data\r\n \u2022 \r\n - \ privacy settings\r\n - \
\r\n Quotes delayed 15 minutes for NASDAQ, NYSE and - AMEX.\r\n
\r\n Copyright \xA9 2007-2024 FINVIZ.com. All Rights Reserved.\r\n - \ \r\n
\r\n \r\n - \ \r\n \r\n
\r\n
\r\n\t\t\t \r\n\r\n \r\n\r\n
\r\n\t\t\t

Upgrade - your FINVIZ experience

\r\n

\r\n - \ Join thousands of traders who make - more informed decisions with our premium features.\r\n Real-time - quotes, advanced visualizations, backtesting, and much more.\r\n

\r\n - \ Learn - more about FINVIZ*Elite\r\n
\r\n - \
\r\n
\n\n\n" - headers: - CF-Cache-Status: - - DYNAMIC - CF-RAY: - - 89a4b83b4d409fae-AMS - Cache-Control: - - no-cache - Connection: - - keep-alive - Content-Encoding: - - gzip - Content-Type: - - text/html; charset=utf-8 - Date: - - Thu, 27 Jun 2024 10:23:05 GMT - Request-Context: - - appId=cid-v1:bdd405ef-7a83-4f9a-9228-0107d7f4bc90 - Server: - - cloudflare - Set-Cookie: - - screenerUrl=v%3D141%26t%3DAAPL%26o%3Dticker; expires=Fri, 27 Jun 2025 10:23:05 - GMT; domain=.finviz.com; path=/; samesite=lax - Transfer-Encoding: - - chunked - Vary: - - Accept-Encoding - X-Frame-Options: - - SAMEORIGIN - X-Powered-By: - - ASP.NET - - ARR/3.0 - - ASP.NET - status: - code: 200 - message: OK -version: 1 diff --git a/openbb_platform/providers/finviz/tests/record/http/test_finviz_fetchers/test_finviz_price_target_fetcher_urllib3_v2.yaml b/openbb_platform/providers/finviz/tests/record/http/test_finviz_fetchers/test_finviz_price_target_fetcher_urllib3_v2.yaml deleted file mode 100644 index 81101a66142..00000000000 --- a/openbb_platform/providers/finviz/tests/record/http/test_finviz_fetchers/test_finviz_price_target_fetcher_urllib3_v2.yaml +++ /dev/null @@ -1,2254 +0,0 @@ -interactions: -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - method: GET - uri: https://finviz.com/quote.ashx?t=AAPL - response: - body: - string: "\n\n\nAAPL - - Apple Inc Stock Price and Quote\n\n\r\n - \ \r\n \r\n \r\n \r\n \r\n \r\n \n\n\n\n\n \n\n\r\n \r\n \r\n \r\n
\r\n
\r\n - \
\r\n
\r\n
\r\n
\r\n
\r\n\r\n - \

\r\n Subscribe - to our newsletter to receive the latest product updates and special offers\r\n - \

\r\n
\r\n - \
\r\n \r\n - \
\r\n \r\n
\r\n\r\n \r\n - \
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n - \ \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n - \
\r\n \r\n - \ \r\n \r\n - \ \r\n \r\n - \ \r\n - \ \r\n
\r\n \r\n \r\n \r\n\r\n
\r\n - \
\r\n - \ \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n - \
\r\n
\r\n
\r\n - \
\r\n
\r\n
\r\n
\r\n - \
\r\n
\r\n
\r\n \"\"\r\n
\r\n \r\n \r\n - \ \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n - \ \r\n - \ \r\n - \ \r\n \r\n
HomeNewsScreenerMapsGroupsPortfolioInsiderFuturesForexCryptoBacktestsElite
\r\n - \ \r\n
\r\n
\r\n \r\n \r\n\r\n - \
\r\n
\r\n Theme\r\n
\r\n - \
\r\n Help\r\n LoginRegister
\r\n - \
\r\n - \ \r\n
\r\n
\r\n \r\n \r\n\r\n - \
\r\n

\r\n - \ \r\n Upgrade to FINVIZ*Elite\r\n to get real-time quotes, intraday - charts, and advanced charting tools.\r\n

\r\n
\r\n - \ \r\n \r\n \r\n\r\n - \ \r\n
\r\n
\r\n
\r\n \r\n \r\n\r\n - \ \r\n
\r\n
\n
- \
\r\n
\r\n - \
\r\n \r\n
\r\n

AAPL

\r\n

\r\n \r\n Apple Inc\r\n \r\n - \

\r\n
\r\n
\r\n - \
\r\n - \
\r\n
Last - Close
\r\n Jun 26 \u2022 - 04:00PM ET\r\n
\r\n 213.25\r\n \r\n \r\n - \ \r\n - \ \r\n - \ \r\n \r\n \r\n \r\n \r\n
\r\n
Dollar - change
\r\n +4.18\r\n
\r\n \r\n
\r\n - \
Percentage change
\r\n - \ 2.00\r\n
%
\r\n - \
\r\n
\r\n \r\n
\r\n
\r\n - \
\r\n
\r\n
\r\n - \ Technology\r\n - \ \u2022\r\n Consumer - Electronics\r\n \u2022\r\n - \ USA\r\n - \ \u2022\r\n NASD\r\n
\r\n - \
\r\n \r\n - \ Stock Detail\r\n \r\n \u2022\r\n \r\n - \ Compare Perf.\r\n - \ \r\n \u2022\r\n - \ \r\n Financials\r\n - \ \r\n \u2022\r\n - \ \r\n Options Chain\r\n - \ \r\n \u2022\r\n - \ Save - to Portfolio\r\n \u2022\r\n - \ Create Alert\r\n
\r\n
\r\n - \
\n
\r\n
\r\n
\r\n
\r\n - \
\r\n
\r\n - \
\n\n\n
\n
\n\n\n
\n
\n\n\n\n
\n - \ Scroll to - Statements\r\n \r\n
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
IndexDJIA, NDX, S&P 500P/E33.16EPS (ttm)6.43Insider Own0.09%Shs Outstand15.55BPerf Week-0.49%
Market Cap3270.00BForward P/E29.39EPS - next Y7.26Insider Trans-4.15%Shs Float15.32BPerf Month12.25%
Income100.39BPEG3.16EPS - next Q1.33Inst Own61.96%Short - Float1.00%Perf Quarter25.66%
Sales381.62BP/S8.57EPS this Y7.68%Inst Trans-0.48%Short Ratio2.25Perf - Half Y10.15%
Book/sh4.84P/B44.08EPS next - Y9.92%ROA29.99%Short Interest153.41MPerf Year15.10%
Cash/sh4.38P/C48.70EPS next 5Y10.50%ROE147.25%52W Range164.07 - - 220.20Perf - YTD10.76%
Dividend Est.0.99 (0.46%)P/FCF32.08EPS - past 5Y15.55%ROI60.47%52W High-3.16%Beta1.25
Dividend - TTM0.97 - (0.45%)Quick Ratio0.99Sales past 5Y8.34%Gross Margin45.59%52W Low29.97%ATR (14)4.86
Dividend Ex-DateMay 10, 2024Current - Ratio1.04EPS Y/Y TTM9.23%Oper. - Margin30.98%RSI (14)67.36Volatility2.24% 2.33%
Employees161000Debt/Eq1.41Sales Y/Y TTM-0.90%Profit Margin26.31%Recom1.98Target Price211.68
Option/ShortYes / YesLT Debt/Eq1.24EPS Q/Q0.25%Payout15.32%Rel Volume0.95Prev Close209.07
Sales - Surprise0.43%EPS Surprise1.65%Sales Q/Q-4.31%
BMO = Before Market - Open
AMC = After Market Close] offsetx=[10] offsety=[20] delay=[300]\">Earnings
May 02 AMCAvg Volume68.26MPrice213.25
SMA205.44%SMA5013.36%SMA20016.42%Trades\r\n \r\nVolume66,213,184Change2.00%
\n
\n\n\n\n\n\n\n\r\n \r\n\n\n\n\n\n\n\n\n\n\n\n\n
\n\n\r\n \r\n \r\n \r\n \r\n - \ \r\n - \ \r\n - \ \r\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
DateActionAnalystRating ChangePrice Target Change
Jun-26-24UpgradeRosenblattNeutral - → Buy$196 → $260
Jun-25-24ReiteratedMaxim GroupHold$178 → $195
Jun-25-24ReiteratedEvercore ISIOutperform$220 → $250
Jun-18-24ReiteratedJP MorganOverweight$225 → $245
Jun-11-24UpgradeDA - DavidsonNeutral → Buy$200 → $230
May-03-24UpgradeItau - BBAUnderperform - → Market Perform$162 → $188
May-03-24ReiteratedMonness Crespi & HardtBuy$200 → $205
Apr-29-24UpgradeBernsteinMkt - Perform → Outperform$195
Apr-17-24InitiatedMaxim GroupHold$178
Apr-11-24ReiteratedJP MorganOverweight$215 → $210
Mar-28-24DowngradeDZ - BankBuy - → Hold$180
Feb-02-24ReiteratedPiper SandlerNeutral$205 → $190
Feb-02-24ReiteratedMonness Crespi & HardtBuy$189 → $200
Feb-02-24ReiteratedJP MorganOverweight$225 → $215
Feb-02-24ReiteratedGoldmanBuy$223 → $232
Feb-02-24ReiteratedBarclaysUnderweight$160 → $158
Jan-29-24ReiteratedRobert W. BairdOutperform$186 → $200
Jan-18-24UpgradeBofA - SecuritiesNeutral → Buy$208 → $225
Jan-10-24DowngradeRedburn - AtlanticBuy → Neutral$200
Jan-04-24DowngradePiper - SandlerOverweight → Neutral$220 → $205
\n
\r\n - \ \r\n \r\n \r\n\r\n - \ Show Previous Ratings\r\n \r\n
\n
\n - \ \r\n - \ \r\n \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n \n \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n - \ \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n \r\n - \ \r\n - \ \n
\r\n Today 05:50AM\r\n - \ \r\n
\r\n 05:30AM\r\n \r\n
\r\n 04:15AM\r\n \r\n
\r\n 04:15AM\r\n \r\n
\r\n 02:39AM\r\n \r\n
\r\n 02:00AM\r\n \r\n
\r\n 01:05AM\r\n \r\n
\r\n Jun-26-24 11:54PM\r\n - \ \r\n
\r\n 09:58PM\r\n \r\n
\r\n 04:45PM\r\n \r\n
\r\n 04:10PM\r\n \r\n
\r\n 04:01PM\r\n \r\n
\r\n 03:44PM\r\n \r\n
\r\n 03:32PM\r\n \r\n
\r\n 02:18PM\r\n \r\n
\r\n 02:04PM\r\n \r\n
\r\n 01:44PM\r\n \r\n
\r\n 01:11PM\r\n \r\n
\r\n 12:39PM\r\n \r\n
\r\n 11:02AM\r\n \r\n
\r\n 10:36AM\r\n \r\n
\r\n 10:15AM\r\n \r\n
\r\n 10:05AM\r\n \r\n
\r\n 09:48AM\r\n \r\n
\r\n 09:45AM\r\n \r\n
\r\n 09:30AM\r\n \r\n
\r\n 09:17AM\r\n \r\n
\r\n 09:00AM\r\n \r\n
\r\n 08:26AM\r\n \r\n
\r\n 08:00AM\r\n \r\n
\r\n 07:58AM\r\n \r\n
\r\n 07:05AM\r\n \r\n
\r\n 07:00AM\r\n \r\n
\r\n 06:50AM\r\n \r\n
\r\n 06:45AM\r\n \r\n
\r\n 06:02AM\r\n \r\n
\r\n 06:00AM\r\n \r\n
\r\n 05:30AM\r\n \r\n
\r\n 05:07AM\r\n \r\n
\r\n 01:00AM\r\n \r\n
\r\n 12:13AM\r\n \r\n
\r\n Jun-25-24 06:13PM\r\n - \ \r\n
\r\n 05:55PM\r\n \r\n
\r\n 05:07PM\r\n \r\n
\r\n 04:37PM\r\n \r\n
\r\n 03:05PM\r\n \r\n
\r\n 02:41PM\r\n \r\n
\r\n 12:59PM\r\n \r\n
\r\n 12:21PM\r\n \r\n
\r\n 11:09AM\r\n \r\n
\r\n 11:09AM\r\n \r\n
\r\n 11:09AM\r\n \r\n
\r\n 11:06AM\r\n \r\n
\r\n 11:04AM\r\n \r\n
\r\n 10:41AM\r\n \r\n
\r\n 10:37AM\r\n \r\n
\r\n 10:35AM\r\n \r\n
\r\n 10:19AM\r\n \r\n
\r\n 10:12AM\r\n \r\n
\r\n 09:58AM\r\n \r\n
\r\n 09:10AM\r\n \r\n
\r\n 09:00AM\r\n \r\n
\r\n 09:00AM\r\n \r\n
\r\n 08:54AM\r\n \r\n
\r\n 08:17AM\r\n \r\n
\r\n 08:16AM\r\n \r\n
\r\n 08:03AM\r\n \r\n
\r\n 08:01AM\r\n \r\n
\r\n 07:58AM\r\n \r\n
\r\n 07:32AM\r\n \r\n
\r\n 07:29AM\r\n \r\n
\r\n 07:14AM\r\n \r\n
\r\n 07:11AM\r\n \r\n
\r\n 06:36AM\r\n \r\n
\r\n 06:15AM\r\n \r\n
\r\n 06:00AM\r\n \r\n
\r\n 06:00AM\r\n \r\n
\r\n 05:20AM\r\n \r\n
\r\n 05:00AM\r\n \r\n
\r\n 04:27AM\r\n \r\n
\r\n 04:24AM\r\n \r\n
\r\n 03:55AM\r\n \r\n
\r\n 03:52AM\r\n \r\n
\r\n 02:20AM\r\n \r\n
\r\n Jun-24-24 09:51PM\r\n - \ \r\n
\r\n 08:15PM\r\n \r\n
\r\n 06:47PM\r\n \r\n
\r\n 06:02PM\r\n \r\n
\r\n 06:00PM\r\n \r\n
\r\n 05:45PM\r\n \r\n
\r\n 05:06PM\r\n \r\n
\r\n 04:59PM\r\n \r\n
\r\n 04:42PM\r\n \r\n
\r\n 04:29PM\r\n \r\n
\r\n 04:20PM\r\n \r\n
\r\n 04:17PM\r\n \r\n
\r\n 04:10PM\r\n \r\n
\r\n 04:07PM\r\n \r\n
\r\n 04:02PM\r\n \r\n
\r\n 03:26PM\r\n \r\n
\n
\n
\r\n - \
\r\n
\r\n
\r\n
Apple, Inc. engages in the - design, manufacture, and sale of smartphones, personal computers, tablets, - wearables and accessories, and other varieties of related services. It operates - through the following geographical segments: Americas, Europe, Greater China, - Japan, and Rest of Asia Pacific. The Americas segment includes North and South - America. The Europe segment consists of European countries, as well as India, - the Middle East, and Africa. The Greater China segment comprises China, Hong - Kong, and Taiwan. The Rest of Asia Pacific segment includes Australia and - Asian countries. Its products and services include iPhone, Mac, iPad, AirPods, - Apple TV, Apple Watch, Beats products, AppleCare, iCloud, digital content - stores, streaming, and licensing services. The company was founded by Steven - Paul Jobs, Ronald Gerald Wayne, and Stephen G. Wozniak in April 1976 and is - headquartered in Cupertino, CA.
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Insider - TradingRelationshipDateTransactionCost#SharesValue ($)#Shares - TotalSEC Form 4
LEVINSON ARTHUR DDirectorMay - 30 '24Sale191.5875,00014,368,5004,359,576Jun 03 06:31 PM
KONDO CHRISPrincipal - Accounting OfficerMay 15 '24Sale190.404,999951,78529,278May 17 06:30 PM
WILLIAMS JEFFREY ECOOApr - 11 '24Sale172.2259,16210,188,880489,944Apr 15 06:31 PM
Maestri LucaSenior - Vice President, CFOApr 11 '24Sale174.1253,1949,261,933107,788Apr 15 06:30 PM
COOK TIMOTHY DChief - Executive OfficerApr 02 '24Sale168.6297,22716,394,5293,280,180Apr 03 06:31 PM
O'BRIEN DEIRDRESenior - Vice PresidentApr 02 '24Sale168.9154,7329,244,782136,572Apr 03 06:33 PM
Adams Katherine L.SVP, - GC and SecretaryApr 02 '24Sale168.9054,7329,244,235293,393Apr 03 06:30 PM
COOK TIMOTHY DChief - Executive OfficerApr 01 '24Sale170.0399,18316,864,0853,377,407Apr 03 06:31 PM
LEVINSON ARTHUR DDirectorFeb - 29 '24Sale180.94100,00018,094,0004,434,576Mar 01 06:34 PM
KONDO CHRISPrincipal - Accounting OfficerNov 29 '23Sale192.005,5131,058,49629,174Dec 01 06:32 PM
Adams Katherine L.SVP, - GC and SecretaryNov 17 '23Sale188.79123,44823,305,7480Nov 20 06:31 PM
KONDO CHRISPrincipal - Accounting OfficerNov 10 '23Sale184.044,806884,49634,687Nov 14 06:31 PM
Maestri LucaSenior - Vice President, CFOOct 09 '23Sale178.6931,6855,661,923107,661Oct 10 06:30 PM
WILLIAMS JEFFREY ECOOOct - 06 '23Sale177.0069,78512,351,945489,817Oct 10 06:31 PM
Maestri LucaSenior - Vice President, CFOOct 06 '23Sale177.8932,0105,694,259139,346Oct 10 06:30 PM
COOK TIMOTHY DChief - Executive OfficerOct 03 '23Sale172.50240,56941,498,2843,280,053Oct 03 09:04 PM
O'BRIEN DEIRDRESenior - Vice PresidentOct 03 '23Sale172.1165,53611,279,673136,445Oct 03 09:08 PM
Adams Katherine L.SVP, - GC and SecretaryOct 03 '23Sale172.0965,53611,278,365416,714Oct 03 09:02 PM
O'BRIEN DEIRDRESenior - Vice PresidentAug 07 '23Sale178.5615,4192,753,217136,445Aug 08 06:30 PM
\n
\n\n\n\n
\n
\r\n - \
\r\n
\r\n affiliate\r\n \u2022 \r\n advertise\r\n - \u2022 careers\r\n - \ \u2022 toggle light mode\r\n - \ \u2022 \r\n contact\r\n \u2022 \r\n privacy\r\n - \u2022 \r\n help\r\n - \
\r\n do not sell - my data\r\n \u2022 \r\n - \ privacy settings\r\n - \
\r\n Quotes delayed 15 minutes for NASDAQ, NYSE and - AMEX.\r\n
\r\n Copyright \xA9 2007-2024 FINVIZ.com. All Rights Reserved.\r\n - \ \r\n
\r\n - \
\r\n - \ \r\n - \ \r\n \r\n
\r\n
\r\n\t\t\t \r\n\r\n \r\n\r\n
\r\n\t\t\t

Upgrade - your FINVIZ experience

\r\n

\r\n - \ Join thousands of traders who make - more informed decisions with our premium features.\r\n Real-time - quotes, advanced visualizations, backtesting, and much more.\r\n

\r\n - \ Learn - more about FINVIZ*Elite\r\n
\r\n - \
\r\n
\n\n\n" - headers: - CF-Cache-Status: - - DYNAMIC - CF-RAY: - - 89a4b8378f7f96eb-AMS - Cache-Control: - - no-cache - Connection: - - keep-alive - Content-Encoding: - - gzip - Content-Type: - - text/html; charset=utf-8 - Date: - - Thu, 27 Jun 2024 10:23:05 GMT - Request-Context: - - appId=cid-v1:bdd405ef-7a83-4f9a-9228-0107d7f4bc90 - Server: - - cloudflare - Set-Cookie: - - chartsTheme=dark; expires=Fri, 27 Jun 2025 10:23:04 GMT; domain=.finviz.com; - path=/; samesite=lax - - notice-newsletter=show; expires=Fri, 28 Jun 2024 10:23:04 GMT; domain=.finviz.com; - path=/; samesite=lax - Transfer-Encoding: - - chunked - Vary: - - Accept-Encoding - X-Frame-Options: - - SAMEORIGIN - X-Powered-By: - - ASP.NET - - ARR/3.0 - - ASP.NET - status: - code: 200 - message: OK -version: 1 diff --git a/openbb_platform/providers/finviz/tests/test_finviz_fetchers.py b/openbb_platform/providers/finviz/tests/test_finviz_fetchers.py deleted file mode 100644 index 4e05252aed9..00000000000 --- a/openbb_platform/providers/finviz/tests/test_finviz_fetchers.py +++ /dev/null @@ -1,90 +0,0 @@ -"""Finviz Fetcher Tests.""" - -import pytest -from openbb_core.app.service.user_service import UserService -from openbb_finviz.models.compare_groups import FinvizCompareGroupsFetcher -from openbb_finviz.models.equity_profile import FinvizEquityProfileFetcher -from openbb_finviz.models.equity_screener import FinvizEquityScreenerFetcher -from openbb_finviz.models.key_metrics import FinvizKeyMetricsFetcher -from openbb_finviz.models.price_performance import FinvizPricePerformanceFetcher -from openbb_finviz.models.price_target import FinvizPriceTargetFetcher - -test_credentials = UserService().default_user_settings.credentials.model_dump( - mode="json" -) - - -@pytest.fixture(scope="module") -def vcr_config(): - """VCR configuration.""" - return { - "filter_headers": [ - ("User-Agent", None), - ("Cookie", "MOCK_COOKIE"), - ("Set-Cookie", "MOCK_COOKIE"), - ], - "filter_query_parameters": [ - ("Cookie", "MOCK_COOKIE"), - ("Set-Cookie", "MOCK_COOKIE"), - ], - } - - -@pytest.mark.record_http -def test_finviz_price_target_fetcher(credentials=test_credentials): - """Test Finviz Price Target Fetcher.""" - params = {"symbol": "AAPL"} - - fetcher = FinvizPriceTargetFetcher() - result = fetcher.test(params, credentials) - assert result is None - - -@pytest.mark.record_http -def test_finviz_price_performance_fetcher(credentials=test_credentials): - """Test Finviz Price Performance Fetcher.""" - params = {"symbol": "AAPL"} - - fetcher = FinvizPricePerformanceFetcher() - result = fetcher.test(params, credentials) - assert result is None - - -@pytest.mark.record_http -def test_finviz_key_metrics_fetcher(credentials=test_credentials): - """Test Finviz Key Metrics Fetcher.""" - params = {"symbol": "AAPL"} - - fetcher = FinvizKeyMetricsFetcher() - result = fetcher.test(params, credentials) - assert result is None - - -@pytest.mark.record_http -def test_finviz_equity_profile_fetcher(credentials=test_credentials): - """Test Finviz Equity Profile Fetcher.""" - params = {"symbol": "AAPL"} - - fetcher = FinvizEquityProfileFetcher() - result = fetcher.test(params, credentials) - assert result is None - - -@pytest.mark.record_http -def test_finviz_compare_groups_fetcher(credentials=test_credentials): - """Test Finviz Compare Groups Fetcher.""" - params = {"group": "country", "metric": "performance"} - - fetcher = FinvizCompareGroupsFetcher() - result = fetcher.test(params, credentials) - assert result is None - - -@pytest.mark.record_http -def test_finviz_equity_screener_fetcher(credentials=test_credentials): - """Test Finviz Equity Screener Fetcher.""" - params = {"signal": "most_active", "limit": 20} - - fetcher = FinvizEquityScreenerFetcher() - result = fetcher.test(params, credentials) - assert result is None