From 4d6074de2df9b7dd29fd9a7bb415de73d6b0200a Mon Sep 17 00:00:00 2001 From: Danglewood <85772166+deeleeramone@users.noreply.github.com> Date: Thu, 9 May 2024 02:38:59 -0700 Subject: [PATCH 1/2] [BugFix] Fix Currency Search (#6380) * fix currency search * test artifact * static files --- .../standard_models/currency_pairs.py | 10 +- .../currency/integration/test_currency_api.py | 10 +- .../integration/test_currency_python.py | 10 +- .../openbb_currency/currency_router.py | 12 +- openbb_platform/openbb/assets/reference.json | 135 +-- openbb_platform/openbb/package/currency.py | 60 +- .../fmp/openbb_fmp/models/currency_pairs.py | 23 +- .../openbb_intrinio/models/currency_pairs.py | 25 +- .../openbb_polygon/models/currency_pairs.py | 130 ++- .../test_polygon_currency_pairs_fetcher.yaml | 778 +++++++++--------- .../polygon/tests/test_polygon_fetchers.py | 2 +- 11 files changed, 563 insertions(+), 632 deletions(-) diff --git a/openbb_platform/core/openbb_core/provider/standard_models/currency_pairs.py b/openbb_platform/core/openbb_core/provider/standard_models/currency_pairs.py index 23326ebbc94..c910236c0d6 100644 --- a/openbb_platform/core/openbb_core/provider/standard_models/currency_pairs.py +++ b/openbb_platform/core/openbb_core/provider/standard_models/currency_pairs.py @@ -1,16 +1,24 @@ """Currency Available Pairs Standard Model.""" +from typing import Optional + from pydantic import Field from openbb_core.provider.abstract.data import Data from openbb_core.provider.abstract.query_params import QueryParams +from openbb_core.provider.utils.descriptions import DATA_DESCRIPTIONS class CurrencyPairsQueryParams(QueryParams): """Currency Available Pairs Query.""" + query: Optional[str] = Field( + default=None, description="Query to search for currency pairs." + ) + class CurrencyPairsData(Data): """Currency Available Pairs Data.""" - name: str = Field(description="Name of the currency pair.") + symbol: str = Field(description=DATA_DESCRIPTIONS.get("symbol", "")) + name: Optional[str] = Field(default=None, description="Name of the currency pair.") diff --git a/openbb_platform/extensions/currency/integration/test_currency_api.py b/openbb_platform/extensions/currency/integration/test_currency_api.py index e85f2e931e9..58c47d3af72 100644 --- a/openbb_platform/extensions/currency/integration/test_currency_api.py +++ b/openbb_platform/extensions/currency/integration/test_currency_api.py @@ -27,23 +27,19 @@ def headers(): ( { "provider": "polygon", - "symbol": "USDJPY", - "date": "2023-10-12", - "search": "", - "active": True, - "order": "asc", - "sort": "currency_name", - "limit": 100, + "query": "eur", } ), ( { "provider": "fmp", + "query": "eur", } ), ( { "provider": "intrinio", + "query": "eur", } ), ], diff --git a/openbb_platform/extensions/currency/integration/test_currency_python.py b/openbb_platform/extensions/currency/integration/test_currency_python.py index 2c81518ab41..62069b8796c 100644 --- a/openbb_platform/extensions/currency/integration/test_currency_python.py +++ b/openbb_platform/extensions/currency/integration/test_currency_python.py @@ -24,23 +24,19 @@ def obb(pytestconfig): ( { "provider": "polygon", - "symbol": "USDJPY", - "date": "2023-10-12", - "search": "", - "active": True, - "order": "asc", - "sort": "currency_name", - "limit": 100, + "query": "eur", } ), ( { "provider": "fmp", + "query": "eur", } ), ( { "provider": "intrinio", + "query": "eur", } ), ], diff --git a/openbb_platform/extensions/currency/openbb_currency/currency_router.py b/openbb_platform/extensions/currency/openbb_currency/currency_router.py index 111acd3b5e2..8999e507f42 100644 --- a/openbb_platform/extensions/currency/openbb_currency/currency_router.py +++ b/openbb_platform/extensions/currency/openbb_currency/currency_router.py @@ -21,18 +21,14 @@ router.include_router(price_router) @router.command( model="CurrencyPairs", examples=[ - APIEx(parameters={"provider": "intrinio"}), + APIEx(parameters={"provider": "fmp"}), APIEx( - description="Search for 'EURUSD' currency pair using 'intrinio' as provider.", - parameters={"provider": "intrinio", "symbol": "EURUSD"}, - ), - APIEx( - description="Search for actively traded currency pairs on the queried date using 'polygon' as provider.", - parameters={"provider": "polygon", "date": "2024-01-02", "active": True}, + description="Search for 'EUR' currency pair using 'intrinio' as provider.", + parameters={"provider": "intrinio", "query": "EUR"}, ), APIEx( description="Search for terms using 'polygon' as provider.", - parameters={"provider": "polygon", "search": "Euro zone"}, + parameters={"provider": "polygon", "query": "Euro zone"}, ), ], ) diff --git a/openbb_platform/openbb/assets/reference.json b/openbb_platform/openbb/assets/reference.json index 004e047344c..495c4e0b5ca 100644 --- a/openbb_platform/openbb/assets/reference.json +++ b/openbb_platform/openbb/assets/reference.json @@ -576,9 +576,16 @@ "message": null }, "description": "Currency Search.\n\nSearch available currency pairs.\nCurrency pairs are the national currencies from two countries coupled for trading on\nthe foreign exchange (FX) marketplace.\nBoth currencies will have exchange rates on which the trade will have its position basis.\nAll trading within the forex market, whether selling, buying, or trading, will take place through currency pairs.\n(ref: Investopedia)\nMajor currency pairs include pairs such as EUR/USD, USD/JPY, GBP/USD, etc.", - "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.currency.search(provider='intrinio')\n# Search for 'EURUSD' currency pair using 'intrinio' as provider.\nobb.currency.search(provider='intrinio', symbol=EURUSD)\n# Search for actively traded currency pairs on the queried date using 'polygon' as provider.\nobb.currency.search(provider='polygon', date=2024-01-02, active=True)\n# Search for terms using 'polygon' as provider.\nobb.currency.search(provider='polygon', search=Euro zone)\n```\n\n", + "examples": "\nExamples\n--------\n\n```python\nfrom openbb import obb\nobb.currency.search(provider='fmp')\n# Search for 'EUR' currency pair using 'intrinio' as provider.\nobb.currency.search(provider='intrinio', query='EUR')\n# Search for terms using 'polygon' as provider.\nobb.currency.search(provider='polygon', query='Euro zone')\n```\n\n", "parameters": { "standard": [ + { + "name": "query", + "type": "str", + "description": "Query to search for currency pairs.", + "default": null, + "optional": true + }, { "name": "provider", "type": "Literal['fmp', 'intrinio', 'polygon']", @@ -589,57 +596,7 @@ ], "fmp": [], "intrinio": [], - "polygon": [ - { - "name": "symbol", - "type": "str", - "description": "Symbol of the pair to search.", - "default": null, - "optional": true - }, - { - "name": "date", - "type": "Union[date, str]", - "description": "A specific date to get data for.", - "default": null, - "optional": true - }, - { - "name": "search", - "type": "str", - "description": "Search for terms within the ticker and/or company name.", - "default": "", - "optional": true - }, - { - "name": "active", - "type": "bool", - "description": "Specify if the tickers returned should be actively traded on the queried date.", - "default": true, - "optional": true - }, - { - "name": "order", - "type": "Literal['asc', 'desc']", - "description": "Order data by ascending or descending.", - "default": "asc", - "optional": true - }, - { - "name": "sort", - "type": "Literal['ticker', 'name', 'market', 'locale', 'currency_symbol', 'currency_name', 'base_currency_symbol', 'base_currency_name', 'last_updated_utc', 'delisted_utc']", - "description": "Sort field used for ordering.", - "default": null, - "optional": true - }, - { - "name": "limit", - "type": "Annotated[int, Gt(gt=0)]", - "description": "The number of data entries to return.", - "default": 1000, - "optional": true - } - ] + "polygon": [] }, "returns": { "OBBject": [ @@ -672,22 +629,22 @@ }, "data": { "standard": [ - { - "name": "name", - "type": "str", - "description": "Name of the currency pair.", - "default": "", - "optional": false - } - ], - "fmp": [ { "name": "symbol", "type": "str", - "description": "Symbol of the currency pair.", + "description": "Symbol representing the entity requested in the data.", "default": "", "optional": false }, + { + "name": "name", + "type": "str", + "description": "Name of the currency pair.", + "default": null, + "optional": true + } + ], + "fmp": [ { "name": "currency", "type": "str", @@ -711,13 +668,6 @@ } ], "intrinio": [ - { - "name": "code", - "type": "str", - "description": "Code of the currency pair.", - "default": "", - "optional": false - }, { "name": "base_currency", "type": "str", @@ -734,20 +684,6 @@ } ], "polygon": [ - { - "name": "market", - "type": "str", - "description": "Name of the trading market. Always 'fx'.", - "default": "", - "optional": false - }, - { - "name": "locale", - "type": "str", - "description": "Locale of the currency pair.", - "default": "", - "optional": false - }, { "name": "currency_symbol", "type": "str", @@ -755,13 +691,6 @@ "default": null, "optional": true }, - { - "name": "currency_name", - "type": "str", - "description": "Name of the quote currency.", - "default": null, - "optional": true - }, { "name": "base_currency_symbol", "type": "str", @@ -777,16 +706,30 @@ "optional": true }, { - "name": "last_updated_utc", - "type": "datetime", - "description": "The last updated timestamp in UTC.", + "name": "market", + "type": "str", + "description": "Name of the trading market. Always 'fx'.", "default": "", "optional": false }, { - "name": "delisted_utc", - "type": "datetime", - "description": "The delisted timestamp in UTC.", + "name": "locale", + "type": "str", + "description": "Locale of the currency pair.", + "default": "", + "optional": false + }, + { + "name": "last_updated", + "type": "date", + "description": "The date the reference data was last updated.", + "default": null, + "optional": true + }, + { + "name": "delisted", + "type": "date", + "description": "The date the item was delisted.", "default": null, "optional": true } diff --git a/openbb_platform/openbb/package/currency.py b/openbb_platform/openbb/package/currency.py index b2a90cfa9bc..05c7b823969 100644 --- a/openbb_platform/openbb/package/currency.py +++ b/openbb_platform/openbb/package/currency.py @@ -31,6 +31,10 @@ class ROUTER_currency(Container): @validate def search( self, + query: Annotated[ + Optional[str], + OpenBBField(description="Query to search for currency pairs."), + ] = None, provider: Annotated[ Optional[Literal["fmp", "intrinio", "polygon"]], OpenBBField( @@ -52,24 +56,12 @@ class ROUTER_currency(Container): Parameters ---------- + query : Optional[str] + Query to search for currency pairs. provider : Optional[Literal['fmp', 'intrinio', 'polygon']] The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default. - symbol : Optional[str] - Symbol of the pair to search. (provider: polygon) - date : Optional[datetime.date] - A specific date to get data for. (provider: polygon) - search : Optional[str] - Search for terms within the ticker and/or company name. (provider: polygon) - active : Optional[bool] - Specify if the tickers returned should be actively traded on the queried date. (provider: polygon) - order : Optional[Literal['asc', 'desc']] - Order data by ascending or descending. (provider: polygon) - sort : Optional[Literal['ticker', 'name', 'market', 'locale', 'currency_symbol', 'currency_name', 'base_currency_symbol', 'base_currency_name', 'last_updated_utc', 'delisted_utc']] - Sort field used for ordering. (provider: polygon) - limit : Optional[Annotated[int, Gt(gt=0)]] - The number of data entries to return. (provider: polygon) Returns ------- @@ -87,49 +79,43 @@ class ROUTER_currency(Container): CurrencyPairs ------------- - name : str + symbol : str + Symbol representing the entity requested in the data. + name : Optional[str] Name of the currency pair. - symbol : Optional[str] - Symbol of the currency pair. (provider: fmp) currency : Optional[str] Base currency of the currency pair. (provider: fmp) stock_exchange : Optional[str] Stock exchange of the currency pair. (provider: fmp) exchange_short_name : Optional[str] Short name of the stock exchange of the currency pair. (provider: fmp) - code : Optional[str] - Code of the currency pair. (provider: intrinio) base_currency : Optional[str] ISO 4217 currency code of the base currency. (provider: intrinio) quote_currency : Optional[str] ISO 4217 currency code of the quote currency. (provider: intrinio) - market : Optional[str] - Name of the trading market. Always 'fx'. (provider: polygon) - locale : Optional[str] - Locale of the currency pair. (provider: polygon) currency_symbol : Optional[str] The symbol of the quote currency. (provider: polygon) - currency_name : Optional[str] - Name of the quote currency. (provider: polygon) base_currency_symbol : Optional[str] The symbol of the base currency. (provider: polygon) base_currency_name : Optional[str] Name of the base currency. (provider: polygon) - last_updated_utc : Optional[datetime] - The last updated timestamp in UTC. (provider: polygon) - delisted_utc : Optional[datetime] - The delisted timestamp in UTC. (provider: polygon) + market : Optional[str] + Name of the trading market. Always 'fx'. (provider: polygon) + locale : Optional[str] + Locale of the currency pair. (provider: polygon) + last_updated : Optional[date] + The date the reference data was last updated. (provider: polygon) + delisted : Optional[date] + The date the item was delisted. (provider: polygon) Examples -------- >>> from openbb import obb - >>> obb.currency.search(provider='intrinio') - >>> # Search for 'EURUSD' currency pair using 'intrinio' as provider. - >>> obb.currency.search(provider='intrinio', symbol='EURUSD') - >>> # Search for actively traded currency pairs on the queried date using 'polygon' as provider. - >>> obb.currency.search(provider='polygon', date='2024-01-02', active=True) + >>> obb.currency.search(provider='fmp') + >>> # Search for 'EUR' currency pair using 'intrinio' as provider. + >>> obb.currency.search(provider='intrinio', query='EUR') >>> # Search for terms using 'polygon' as provider. - >>> obb.currency.search(provider='polygon', search='Euro zone') + >>> obb.currency.search(provider='polygon', query='Euro zone') """ # noqa: E501 return self._run( @@ -142,7 +128,9 @@ class ROUTER_currency(Container): ("fmp", "intrinio", "polygon"), ) }, - standard_params={}, + standard_params={ + "query": query, + }, extra_params=kwargs, ) ) diff --git a/openbb_platform/providers/fmp/openbb_fmp/models/currency_pairs.py b/openbb_platform/providers/fmp/openbb_fmp/models/currency_pairs.py index b5c3f2cd561..23c2d9b37a5 100644 --- a/openbb_platform/providers/fmp/openbb_fmp/models/currency_pairs.py +++ b/openbb_platform/providers/fmp/openbb_fmp/models/currency_pairs.py @@ -1,5 +1,7 @@ """FMP Currency Available Pairs Model.""" +# pylint: disable=unused-argument + from typing import Any, Dict, List, Optional from openbb_core.provider.abstract.fetcher import Fetcher @@ -7,7 +9,9 @@ from openbb_core.provider.standard_models.currency_pairs import ( CurrencyPairsData, CurrencyPairsQueryParams, ) +from openbb_core.provider.utils.errors import EmptyDataError from openbb_fmp.utils.helpers import get_data_many +from pandas import DataFrame from pydantic import Field @@ -53,7 +57,6 @@ class FMPCurrencyPairsFetcher( ) -> List[Dict]: """Return the raw data from the FMP endpoint.""" api_key = credentials.get("fmp_api_key") if credentials else "" - base_url = "https://financialmodelingprep.com/api/v3" url = f"{base_url}/symbol/available-forex-currency-pairs?apikey={api_key}" @@ -64,4 +67,20 @@ class FMPCurrencyPairsFetcher( query: FMPCurrencyPairsQueryParams, data: List[Dict], **kwargs: Any ) -> List[FMPCurrencyPairsData]: """Return the transformed data.""" - return [FMPCurrencyPairsData.model_validate(d) for d in data] + if not data: + raise EmptyDataError("The request was returned empty.") + df = DataFrame(data) + if query.query: + df = df[ + df["name"].str.contains(query.query, case=False) + | df["symbol"].str.contains(query.query, case=False) + | df["currency"].str.contains(query.query, case=False) + | df["stockExchange"].str.contains(query.query, case=False) + | df["exchangeShortName"].str.contains(query.query, case=False) + ] + if len(df) == 0: + raise EmptyDataError( + f"No results were found with the query supplied. -> {query.query}" + + " Hint: Names and descriptions are not searchable from FMP, try 3-letter symbols." + ) + return [FMPCurrencyPairsData.model_validate(d) for d in df.to_dict("records")] diff --git a/openbb_platform/providers/intrinio/openbb_intrinio/models/currency_pairs.py b/openbb_platform/providers/intrinio/openbb_intrinio/models/currency_pairs.py index fb99b5e5af2..9c418c166dd 100644 --- a/openbb_platform/providers/intrinio/openbb_intrinio/models/currency_pairs.py +++ b/openbb_platform/providers/intrinio/openbb_intrinio/models/currency_pairs.py @@ -7,7 +7,9 @@ from openbb_core.provider.standard_models.currency_pairs import ( CurrencyPairsData, CurrencyPairsQueryParams, ) +from openbb_core.provider.utils.errors import EmptyDataError from openbb_intrinio.utils.helpers import get_data_many +from pandas import DataFrame from pydantic import Field @@ -21,9 +23,8 @@ class IntrinioCurrencyPairsQueryParams(CurrencyPairsQueryParams): class IntrinioCurrencyPairsData(CurrencyPairsData): """Intrinio Currency Available Pairs Data.""" - __alias_dict__ = {"name": "code"} + __alias_dict__ = {"symbol": "code"} - code: str = Field(description="Code of the currency pair.", alias="name") base_currency: str = Field( description="ISO 4217 currency code of the base currency." ) @@ -56,7 +57,6 @@ class IntrinioCurrencyPairsFetcher( base_url = "https://api-v2.intrinio.com" url = f"{base_url}/forex/pairs?api_key={api_key}" - return await get_data_many(url, "pairs", **kwargs) @staticmethod @@ -64,4 +64,21 @@ class IntrinioCurrencyPairsFetcher( query: IntrinioCurrencyPairsQueryParams, data: List[Dict], **kwargs: Any ) -> List[IntrinioCurrencyPairsData]: """Return the transformed data.""" - return [IntrinioCurrencyPairsData.model_validate(d) for d in data] + if not data: + raise EmptyDataError("The request was returned empty.") + df = DataFrame(data) + if query.query: + df = df[ + df["code"].str.contains(query.query, case=False) + | df["base_currency"].str.contains(query.query, case=False) + | df["quote_currency"].str.contains(query.query, case=False) + ] + if len(df) == 0: + raise EmptyDataError( + f"No results were found with the query supplied. -> {query.query}" + + " Hint: Names and descriptions are not searchable from Intrinio, try 3-letter symbols." + ) + return [ + IntrinioCurrencyPairsData.model_validate(d) + for d in df.to_dict(orient="records") + ] diff --git a/openbb_platform/providers/polygon/openbb_polygon/models/currency_pairs.py b/openbb_platform/providers/polygon/openbb_polygon/models/currency_pairs.py index 28ee909d701..83cb753b64c 100644 --- a/openbb_platform/providers/polygon/openbb_polygon/models/currency_pairs.py +++ b/openbb_platform/providers/polygon/openbb_polygon/models/currency_pairs.py @@ -1,19 +1,22 @@ """Polygon Currency Available Pairs Model.""" +# pylint: disable=unused-argument + from datetime import ( date as dateType, datetime, ) -from typing import Any, Dict, List, Literal, Optional +from typing import Any, Dict, List, Optional from openbb_core.provider.abstract.fetcher import Fetcher from openbb_core.provider.standard_models.currency_pairs import ( CurrencyPairsData, CurrencyPairsQueryParams, ) -from openbb_core.provider.utils.descriptions import QUERY_DESCRIPTIONS +from openbb_core.provider.utils.errors import EmptyDataError from openbb_polygon.utils.helpers import get_data -from pydantic import Field, PositiveInt, field_validator +from pandas import DataFrame +from pydantic import Field, field_validator class PolygonCurrencyPairsQueryParams(CurrencyPairsQueryParams): @@ -22,75 +25,39 @@ class PolygonCurrencyPairsQueryParams(CurrencyPairsQueryParams): Source: https://polygon.io/docs/forex/get_v3_reference_tickers """ - symbol: Optional[str] = Field( - default=None, description="Symbol of the pair to search." - ) - date: Optional[dateType] = Field( - default=None, description=QUERY_DESCRIPTIONS.get("date", "") - ) - search: Optional[str] = Field( - default="", - description="Search for terms within the ticker and/or company name.", - ) - active: Optional[bool] = Field( - default=True, - description="Specify if the tickers returned should be actively traded on the queried date.", - ) - order: Optional[Literal["asc", "desc"]] = Field( - default="asc", description="Order data by ascending or descending." - ) - sort: Optional[ - Literal[ - "ticker", - "name", - "market", - "locale", - "currency_symbol", - "currency_name", - "base_currency_symbol", - "base_currency_name", - "last_updated_utc", - "delisted_utc", - ] - ] = Field(default=None, description="Sort field used for ordering.") - limit: Optional[PositiveInt] = Field( - default=1000, description=QUERY_DESCRIPTIONS.get("limit", "") - ) - class PolygonCurrencyPairsData(CurrencyPairsData): """Polygon Currency Available Pairs Data.""" - market: str = Field(description="Name of the trading market. Always 'fx'.") - locale: str = Field(description="Locale of the currency pair.") + __alias_dict__ = { + "last_updated": "last_updated_utc", + "delisted": "delisted_utc", + "name": "currency_name", + "symbol": "ticker", + } currency_symbol: Optional[str] = Field( default=None, description="The symbol of the quote currency." ) - currency_name: Optional[str] = Field( - default=None, description="Name of the quote currency." - ) base_currency_symbol: Optional[str] = Field( default=None, description="The symbol of the base currency." ) base_currency_name: Optional[str] = Field( default=None, description="Name of the base currency." ) - last_updated_utc: datetime = Field(description="The last updated timestamp in UTC.") - delisted_utc: Optional[datetime] = Field( - default=None, description="The delisted timestamp in UTC." + market: str = Field(description="Name of the trading market. Always 'fx'.") + locale: str = Field(description="Locale of the currency pair.") + last_updated: Optional[dateType] = Field( + default=None, description="The date the reference data was last updated." + ) + delisted: Optional[dateType] = Field( + default=None, description="The date the item was delisted." ) - @field_validator("last_updated_utc", mode="before", check_fields=False) + @field_validator("last_updated", "delisted", mode="before", check_fields=False) @classmethod def last_updated_utc_validate(cls, v): # pylint: disable=E0213 """Return the parsed last updated timestamp in UTC.""" - return datetime.strptime(v, "%Y-%m-%dT%H:%M:%SZ") - - @field_validator("delisted_utc", mode="before", check_fields=False) - @classmethod - def delisted_utc_validate(cls, v): # pylint: disable=E0213 - """Return the parsed delisted timestamp in UTC.""" - return datetime.strptime(v, "%Y-%m-%dT%H:%M:%SZ") + return datetime.strptime(v, "%Y-%m-%dT%H:%M:%SZ").date() if v else None class PolygonCurrencyPairsFetcher( @@ -99,51 +66,36 @@ class PolygonCurrencyPairsFetcher( List[PolygonCurrencyPairsData], ] ): - """Transform the query, extract and transform the data from the Polygon endpoints.""" + """Polygon Currency Pairs Fetcher.""" @staticmethod def transform_query(params: Dict[str, Any]) -> PolygonCurrencyPairsQueryParams: - """Transform the query parameters. Ticker is set if symbol is provided.""" - transform_params = params - now = datetime.now().date().isoformat() - symbol = params.get("symbol") - transform_params["symbol"] = f"ticker=C:{symbol.upper()}" if symbol else "" - if params.get("date") is None: - transform_params["date"] = now - - return PolygonCurrencyPairsQueryParams(**transform_params) + """Transform the query parameters.""" + return PolygonCurrencyPairsQueryParams(**params) @staticmethod async def aextract_data( query: PolygonCurrencyPairsQueryParams, credentials: Optional[Dict[str, str]], **kwargs: Any, - ) -> List[dict]: + ) -> List[Dict]: """Extract the data from the Polygon API.""" api_key = credentials.get("polygon_api_key") if credentials else "" - request_url = ( f"https://api.polygon.io/v3/reference/" - f"tickers?{query.symbol}&market=fx&date={query.date}&" - f"search={query.search}&active={query.active}&order={query.order}&" - f"limit={query.limit}" + f"tickers?&market=fx&limit=1000" + f"&apiKey={api_key}" ) - if query.sort: - request_url += f"&sort={query.sort}" - request_url = f"{request_url}&apiKey={api_key}" data = {"next_url": request_url} all_data: List[Dict] = [] while "next_url" in data: data = await get_data(request_url, **kwargs) - if isinstance(data, list): raise ValueError("Expected a dict, got a list") - if len(data["results"]) == 0: raise RuntimeError( "No results found. Please change your query parameters." ) - if data["status"] == "OK": results = data.get("results") if not isinstance(results, list): @@ -153,18 +105,34 @@ class PolygonCurrencyPairsFetcher( all_data.extend(results) elif data["status"] == "ERROR": raise UserWarning(data["error"]) - if "next_url" in data: request_url = f"{data['next_url']}&apiKey={api_key}" - return all_data - # pylint: disable=unused-argument @staticmethod def transform_data( query: PolygonCurrencyPairsQueryParams, - data: List[dict], + data: List[Dict], **kwargs: Any, ) -> List[PolygonCurrencyPairsData]: - """Transform the data into a list of PolygonCurrencyPairsData.""" - return [PolygonCurrencyPairsData.model_validate(d) for d in data] + """Filter data by search query and validate the model.""" + if not data: + raise EmptyDataError("The request was returned empty.") + df = DataFrame(data) + df["ticker"] = df["ticker"].str.replace("C:", "") + if query.query: + df = df[ + df["name"].str.contains(query.query, case=False) + | df["base_currency_name"].str.contains(query.query, case=False) + | df["currency_name"].str.contains(query.query, case=False) + | df["base_currency_symbol"].str.contains(query.query, case=False) + | df["currency_symbol"].str.contains(query.query, case=False) + | df["ticker"].str.contains(query.query, case=False) + ] + if len(df) == 0: + raise EmptyDataError( + f"No results were found with the query supplied. -> {query.query}" + ) + return [ + PolygonCurrencyPairsData.model_validate(d) for d in df.to_dict("records") + ] diff --git a/openbb_platform/providers/polygon/tests/record/http/test_polygon_fetchers/test_polygon_currency_pairs_fetcher.yaml b/openbb_platform/providers/polygon/tests/record/http/test_polygon_fetchers/test_polygon_currency_pairs_fetcher.yaml index 6cd40bde933..2f63edb4130 100644 --- a/openbb_platform/providers/polygon/tests/record/http/test_polygon_fetchers/test_polygon_currency_pairs_fetcher.yaml +++ b/openbb_platform/providers/polygon/tests/record/http/test_polygon_fetchers/test_polygon_currency_pairs_fetcher.yaml @@ -9,283 +9,283 @@ interactions: Connection: - keep-alive method: GET - uri: https://api.polygon.io/v3/reference/tickers?active=True&apiKey=MOCK_API_KEY&date=2023-01-01&limit=1000&market=fx&order=asc + uri: https://api.polygon.io/v3/reference/tickers?apiKey=MOCK_API_KEY&limit=1000&market=fx response: body: string: !!binary | - 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 - AP//68nYAu8yBAA= + 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 + 686P79TtMFt8vD77j/8XAAD//zVlYESiMwQA headers: Connection: - keep-alive @@ -294,9 +294,9 @@ interactions: Content-Type: - application/json Date: - - Tue, 07 May 2024 16:14:03 GMT + - Thu, 09 May 2024 05:16:50 GMT Link: - - ; + - ; rel="next" Server: - nginx/1.19.2 @@ -309,7 +309,7 @@ interactions: X-Item-Count: - '1000' X-Request-Id: - - b6491d6a58833e8f17bf0ea48c2fb8d3 + - 2557e9c6a8d55bf0bf57cfb244abe400 status: code: 200 message: OK @@ -323,123 +323,123 @@ interactions: Connection: - keep-alive method: GET - uri: https://api.polygon.io/v3/reference/tickers?apiKey=MOCK_API_KEY&cursor=YWN0aXZlPXRydWUmYXA9QyUzQVNFS1pBUiU3QzMzMTc2YTg2ZjlhZGY2YThhMjE1MWY2M2Y5MjJkMjBkZTU0YzMwYTVjN2RhMGM5ZjgxYWJiNjQ3ZmU5ZWU3M2UmYXM9JmRhdGU9MjAyMy0wMS0wMSZsaW1pdD0xMDAwJm1hcmtldD1meCZvcmRlcj1hc2Mmc29ydD10aWNrZXI + uri: https://api.polygon.io/v3/reference/tickers?apiKey=MOCK_API_KEY&cursor=YWN0aXZlPXRydWUmYXA9QyUzQVNFS1pBUiU3QzMzMTc2YTg2ZjlhZGY2YThhMjE1MWY2M2Y5MjJkMjBkZTU0YzMwYTVjN2RhMGM5ZjgxYWJiNjQ3ZmU5ZWU3M2UmYXM9JmRhdGU9MjAyNC0wNS0wOSZsaW1pdD0xMDAwJm1hcmtldD1meCZvcmRlcj1hc2Mmc29ydD10aWNrZXI response: body: string: !!binary | - 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 - h8Alz1nWuPrxz+/+8f8BAAD//07s25ishQEA + 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 headers: Connection: - keep-alive @@ -448,7 +448,7 @@ interactions: Content-Type: - application/json Date: - - Tue, 07 May 2024 16:14:03 GMT + - Thu, 09 May 2024 05:16:50 GMT Server: - nginx/1.19.2 Strict-Transport-Security: @@ -460,7 +460,7 @@ interactions: X-Item-Count: - '351' X-Request-Id: - - 3e66ea32a52f1eab3957b9ea2177678c + - 304d360bcfd5e560d5b2a0fe2bbbb357 status: code: 200 message: OK diff --git a/openbb_platform/providers/polygon/tests/test_polygon_fetchers.py b/openbb_platform/providers/polygon/tests/test_polygon_fetchers.py index 9d6ee5b4440..a0c108e573b 100644 --- a/openbb_platform/providers/polygon/tests/test_polygon_fetchers.py +++ b/openbb_platform/providers/polygon/tests/test_polygon_fetchers.py @@ -152,7 +152,7 @@ def test_polygon_currency_historical_fetcher(credentials=test_credentials): @pytest.mark.record_http def test_polygon_currency_pairs_fetcher(credentials=test_credentials): """Test the Polygon Currency Pairs fetcher.""" - params = {"date": date(2023, 1, 1)} + params = {} fetcher = PolygonCurrencyPairsFetcher() result = fetcher.test(params, credentials) From f191d163bafce144637a95b667cbf26c7ec984bf Mon Sep 17 00:00:00 2001 From: Danglewood <85772166+deeleeramone@users.noreply.github.com> Date: Thu, 9 May 2024 02:39:31 -0700 Subject: [PATCH 2/2] [BugFix] Update SEC pyproject.toml (#6379) * update sec toml * dash not underscore --- openbb_platform/providers/sec/poetry.lock | 462 ++++++++++++------- openbb_platform/providers/sec/pyproject.toml | 3 +- 2 files changed, 309 insertions(+), 156 deletions(-) diff --git a/openbb_platform/providers/sec/poetry.lock b/openbb_platform/providers/sec/poetry.lock index 7dd1d904393..d29a9774857 100644 --- a/openbb_platform/providers/sec/poetry.lock +++ b/openbb_platform/providers/sec/poetry.lock @@ -96,6 +96,32 @@ yarl = ">=1.0,<2.0" [package.extras] speedups = ["Brotli", "aiodns", "brotlicffi"] +[[package]] +name = "aiohttp-client-cache" +version = "0.10.0" +description = "Persistent cache for aiohttp requests" +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "aiohttp_client_cache-0.10.0-py3-none-any.whl", hash = "sha256:67eb7f71663c67b9029da83c250ac5faf231fcaa90734475beb64e1556a5f7eb"}, + {file = "aiohttp_client_cache-0.10.0.tar.gz", hash = "sha256:15753840da9af01f190039a813225f77c82c5032341c48c847d0760813f9e705"}, +] + +[package.dependencies] +aiohttp = ">=3.8,<4.0" +attrs = ">=21.2" +itsdangerous = ">=2.0" +url-normalize = ">=1.4,<2.0" + +[package.extras] +all = ["aioboto3 (>=9.0)", "aiobotocore (>=2.0)", "aiofiles (>=0.6.0)", "aiosqlite (>=0.16)", "motor (>=3.1)", "redis (>=4.2)"] +docs = ["furo (>=2023.8,<2024.0)", "linkify-it-py (>=2.0)", "markdown-it-py (>=2.2)", "myst-parser (>=2.0)", "python-forge (>=18.6,<19.0)", "sphinx (==7.1.2)", "sphinx-autodoc-typehints (>=1.23,<2.0)", "sphinx-automodapi (>=0.15)", "sphinx-copybutton (>=0.3,<0.4)", "sphinx-inline-tabs (>=2023.4)", "sphinxcontrib-apidoc (>=0.3)"] +dynamodb = ["aioboto3 (>=9.0)", "aiobotocore (>=2.0)"] +filesystem = ["aiofiles (>=0.6.0)", "aiosqlite (>=0.16)"] +mongodb = ["motor (>=3.1)"] +redis = ["redis (>=4.2)"] +sqlite = ["aiosqlite (>=0.16)"] + [[package]] name = "aiosignal" version = "1.3.1" @@ -110,6 +136,21 @@ files = [ [package.dependencies] frozenlist = ">=1.1.0" +[[package]] +name = "aiosqlite" +version = "0.19.0" +description = "asyncio bridge to the standard sqlite3 module" +optional = false +python-versions = ">=3.7" +files = [ + {file = "aiosqlite-0.19.0-py3-none-any.whl", hash = "sha256:edba222e03453e094a3ce605db1b970c4b3376264e56f32e2a4959f948d66a96"}, + {file = "aiosqlite-0.19.0.tar.gz", hash = "sha256:95ee77b91c8d2808bd08a59fbebf66270e9090c3d92ffbf260dc0db0b979577d"}, +] + +[package.extras] +dev = ["aiounittest (==1.4.1)", "attribution (==1.6.2)", "black (==23.3.0)", "coverage[toml] (==7.2.3)", "flake8 (==5.0.4)", "flake8-bugbear (==23.3.12)", "flit (==3.7.1)", "mypy (==1.2.0)", "ufmt (==2.1.0)", "usort (==1.0.6)"] +docs = ["sphinx (==6.1.3)", "sphinx-mdinclude (==0.5.3)"] + [[package]] name = "annotated-types" version = "0.6.0" @@ -186,31 +227,6 @@ files = [ {file = "backoff-2.2.1.tar.gz", hash = "sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba"}, ] -[[package]] -name = "cattrs" -version = "23.2.3" -description = "Composable complex class support for attrs and dataclasses." -optional = false -python-versions = ">=3.8" -files = [ - {file = "cattrs-23.2.3-py3-none-any.whl", hash = "sha256:0341994d94971052e9ee70662542699a3162ea1e0c62f7ce1b4a57f563685108"}, - {file = "cattrs-23.2.3.tar.gz", hash = "sha256:a934090d95abaa9e911dac357e3a8699e0b4b14f8529bcc7d2b1ad9d51672b9f"}, -] - -[package.dependencies] -attrs = ">=23.1.0" -exceptiongroup = {version = ">=1.1.1", markers = "python_version < \"3.11\""} -typing-extensions = {version = ">=4.1.0,<4.6.3 || >4.6.3", markers = "python_version < \"3.11\""} - -[package.extras] -bson = ["pymongo (>=4.4.0)"] -cbor2 = ["cbor2 (>=5.4.6)"] -msgpack = ["msgpack (>=1.0.5)"] -orjson = ["orjson (>=3.9.2)"] -pyyaml = ["pyyaml (>=6.0)"] -tomlkit = ["tomlkit (>=0.11.8)"] -ujson = ["ujson (>=5.7.0)"] - [[package]] name = "certifi" version = "2024.2.2" @@ -546,6 +562,187 @@ docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.link perf = ["ipython"] testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] +[[package]] +name = "itsdangerous" +version = "2.2.0" +description = "Safely pass data to untrusted environments and back." +optional = false +python-versions = ">=3.8" +files = [ + {file = "itsdangerous-2.2.0-py3-none-any.whl", hash = "sha256:c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef"}, + {file = "itsdangerous-2.2.0.tar.gz", hash = "sha256:e0050c0b7da1eea53ffaf149c0cfbb5c6e2e2b69c4bef22c81fa6eb73e5f6173"}, +] + +[[package]] +name = "lxml" +version = "5.2.1" +description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." +optional = false +python-versions = ">=3.6" +files = [ + {file = "lxml-5.2.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1f7785f4f789fdb522729ae465adcaa099e2a3441519df750ebdccc481d961a1"}, + {file = "lxml-5.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6cc6ee342fb7fa2471bd9b6d6fdfc78925a697bf5c2bcd0a302e98b0d35bfad3"}, + {file = "lxml-5.2.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:794f04eec78f1d0e35d9e0c36cbbb22e42d370dda1609fb03bcd7aeb458c6377"}, + {file = "lxml-5.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c817d420c60a5183953c783b0547d9eb43b7b344a2c46f69513d5952a78cddf3"}, + {file = "lxml-5.2.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2213afee476546a7f37c7a9b4ad4d74b1e112a6fafffc9185d6d21f043128c81"}, + {file = "lxml-5.2.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b070bbe8d3f0f6147689bed981d19bbb33070225373338df755a46893528104a"}, + {file = "lxml-5.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e02c5175f63effbd7c5e590399c118d5db6183bbfe8e0d118bdb5c2d1b48d937"}, + {file = "lxml-5.2.1-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:3dc773b2861b37b41a6136e0b72a1a44689a9c4c101e0cddb6b854016acc0aa8"}, + {file = "lxml-5.2.1-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:d7520db34088c96cc0e0a3ad51a4fd5b401f279ee112aa2b7f8f976d8582606d"}, + {file = "lxml-5.2.1-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:bcbf4af004f98793a95355980764b3d80d47117678118a44a80b721c9913436a"}, + {file = "lxml-5.2.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a2b44bec7adf3e9305ce6cbfa47a4395667e744097faed97abb4728748ba7d47"}, + {file = "lxml-5.2.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:1c5bb205e9212d0ebddf946bc07e73fa245c864a5f90f341d11ce7b0b854475d"}, + {file = "lxml-5.2.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2c9d147f754b1b0e723e6afb7ba1566ecb162fe4ea657f53d2139bbf894d050a"}, + {file = "lxml-5.2.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:3545039fa4779be2df51d6395e91a810f57122290864918b172d5dc7ca5bb433"}, + {file = "lxml-5.2.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a91481dbcddf1736c98a80b122afa0f7296eeb80b72344d7f45dc9f781551f56"}, + {file = "lxml-5.2.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2ddfe41ddc81f29a4c44c8ce239eda5ade4e7fc305fb7311759dd6229a080052"}, + {file = "lxml-5.2.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:a7baf9ffc238e4bf401299f50e971a45bfcc10a785522541a6e3179c83eabf0a"}, + {file = "lxml-5.2.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:31e9a882013c2f6bd2f2c974241bf4ba68c85eba943648ce88936d23209a2e01"}, + {file = "lxml-5.2.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0a15438253b34e6362b2dc41475e7f80de76320f335e70c5528b7148cac253a1"}, + {file = "lxml-5.2.1-cp310-cp310-win32.whl", hash = "sha256:6992030d43b916407c9aa52e9673612ff39a575523c5f4cf72cdef75365709a5"}, + {file = "lxml-5.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:da052e7962ea2d5e5ef5bc0355d55007407087392cf465b7ad84ce5f3e25fe0f"}, + {file = "lxml-5.2.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:70ac664a48aa64e5e635ae5566f5227f2ab7f66a3990d67566d9907edcbbf867"}, + {file = "lxml-5.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1ae67b4e737cddc96c99461d2f75d218bdf7a0c3d3ad5604d1f5e7464a2f9ffe"}, + {file = "lxml-5.2.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f18a5a84e16886898e51ab4b1d43acb3083c39b14c8caeb3589aabff0ee0b270"}, + {file = "lxml-5.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6f2c8372b98208ce609c9e1d707f6918cc118fea4e2c754c9f0812c04ca116d"}, + {file = "lxml-5.2.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:394ed3924d7a01b5bd9a0d9d946136e1c2f7b3dc337196d99e61740ed4bc6fe1"}, + {file = "lxml-5.2.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d077bc40a1fe984e1a9931e801e42959a1e6598edc8a3223b061d30fbd26bbc"}, + {file = "lxml-5.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:764b521b75701f60683500d8621841bec41a65eb739b8466000c6fdbc256c240"}, + {file = "lxml-5.2.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:3a6b45da02336895da82b9d472cd274b22dc27a5cea1d4b793874eead23dd14f"}, + {file = "lxml-5.2.1-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:5ea7b6766ac2dfe4bcac8b8595107665a18ef01f8c8343f00710b85096d1b53a"}, + {file = "lxml-5.2.1-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:e196a4ff48310ba62e53a8e0f97ca2bca83cdd2fe2934d8b5cb0df0a841b193a"}, + {file = "lxml-5.2.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:200e63525948e325d6a13a76ba2911f927ad399ef64f57898cf7c74e69b71095"}, + {file = "lxml-5.2.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:dae0ed02f6b075426accbf6b2863c3d0a7eacc1b41fb40f2251d931e50188dad"}, + {file = "lxml-5.2.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:ab31a88a651039a07a3ae327d68ebdd8bc589b16938c09ef3f32a4b809dc96ef"}, + {file = "lxml-5.2.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:df2e6f546c4df14bc81f9498bbc007fbb87669f1bb707c6138878c46b06f6510"}, + {file = "lxml-5.2.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5dd1537e7cc06efd81371f5d1a992bd5ab156b2b4f88834ca852de4a8ea523fa"}, + {file = "lxml-5.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9b9ec9c9978b708d488bec36b9e4c94d88fd12ccac3e62134a9d17ddba910ea9"}, + {file = "lxml-5.2.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:8e77c69d5892cb5ba71703c4057091e31ccf534bd7f129307a4d084d90d014b8"}, + {file = "lxml-5.2.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:a8d5c70e04aac1eda5c829a26d1f75c6e5286c74743133d9f742cda8e53b9c2f"}, + {file = "lxml-5.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c94e75445b00319c1fad60f3c98b09cd63fe1134a8a953dcd48989ef42318534"}, + {file = "lxml-5.2.1-cp311-cp311-win32.whl", hash = "sha256:4951e4f7a5680a2db62f7f4ab2f84617674d36d2d76a729b9a8be4b59b3659be"}, + {file = "lxml-5.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:5c670c0406bdc845b474b680b9a5456c561c65cf366f8db5a60154088c92d102"}, + {file = "lxml-5.2.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:abc25c3cab9ec7fcd299b9bcb3b8d4a1231877e425c650fa1c7576c5107ab851"}, + {file = "lxml-5.2.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6935bbf153f9a965f1e07c2649c0849d29832487c52bb4a5c5066031d8b44fd5"}, + {file = "lxml-5.2.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d793bebb202a6000390a5390078e945bbb49855c29c7e4d56a85901326c3b5d9"}, + {file = "lxml-5.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afd5562927cdef7c4f5550374acbc117fd4ecc05b5007bdfa57cc5355864e0a4"}, + {file = "lxml-5.2.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0e7259016bc4345a31af861fdce942b77c99049d6c2107ca07dc2bba2435c1d9"}, + {file = "lxml-5.2.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:530e7c04f72002d2f334d5257c8a51bf409db0316feee7c87e4385043be136af"}, + {file = "lxml-5.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59689a75ba8d7ffca577aefd017d08d659d86ad4585ccc73e43edbfc7476781a"}, + {file = "lxml-5.2.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:f9737bf36262046213a28e789cc82d82c6ef19c85a0cf05e75c670a33342ac2c"}, + {file = "lxml-5.2.1-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:3a74c4f27167cb95c1d4af1c0b59e88b7f3e0182138db2501c353555f7ec57f4"}, + {file = "lxml-5.2.1-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:68a2610dbe138fa8c5826b3f6d98a7cfc29707b850ddcc3e21910a6fe51f6ca0"}, + {file = "lxml-5.2.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:f0a1bc63a465b6d72569a9bba9f2ef0334c4e03958e043da1920299100bc7c08"}, + {file = "lxml-5.2.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c2d35a1d047efd68027817b32ab1586c1169e60ca02c65d428ae815b593e65d4"}, + {file = "lxml-5.2.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:79bd05260359170f78b181b59ce871673ed01ba048deef4bf49a36ab3e72e80b"}, + {file = "lxml-5.2.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:865bad62df277c04beed9478fe665b9ef63eb28fe026d5dedcb89b537d2e2ea6"}, + {file = "lxml-5.2.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:44f6c7caff88d988db017b9b0e4ab04934f11e3e72d478031efc7edcac6c622f"}, + {file = "lxml-5.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:71e97313406ccf55d32cc98a533ee05c61e15d11b99215b237346171c179c0b0"}, + {file = "lxml-5.2.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:057cdc6b86ab732cf361f8b4d8af87cf195a1f6dc5b0ff3de2dced242c2015e0"}, + {file = "lxml-5.2.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:f3bbbc998d42f8e561f347e798b85513ba4da324c2b3f9b7969e9c45b10f6169"}, + {file = "lxml-5.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:491755202eb21a5e350dae00c6d9a17247769c64dcf62d8c788b5c135e179dc4"}, + {file = "lxml-5.2.1-cp312-cp312-win32.whl", hash = "sha256:8de8f9d6caa7f25b204fc861718815d41cbcf27ee8f028c89c882a0cf4ae4134"}, + {file = "lxml-5.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:f2a9efc53d5b714b8df2b4b3e992accf8ce5bbdfe544d74d5c6766c9e1146a3a"}, + {file = "lxml-5.2.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:70a9768e1b9d79edca17890175ba915654ee1725975d69ab64813dd785a2bd5c"}, + {file = "lxml-5.2.1-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c38d7b9a690b090de999835f0443d8aa93ce5f2064035dfc48f27f02b4afc3d0"}, + {file = "lxml-5.2.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5670fb70a828663cc37552a2a85bf2ac38475572b0e9b91283dc09efb52c41d1"}, + {file = "lxml-5.2.1-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:958244ad566c3ffc385f47dddde4145088a0ab893504b54b52c041987a8c1863"}, + {file = "lxml-5.2.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b6241d4eee5f89453307c2f2bfa03b50362052ca0af1efecf9fef9a41a22bb4f"}, + {file = "lxml-5.2.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:2a66bf12fbd4666dd023b6f51223aed3d9f3b40fef06ce404cb75bafd3d89536"}, + {file = "lxml-5.2.1-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:9123716666e25b7b71c4e1789ec829ed18663152008b58544d95b008ed9e21e9"}, + {file = "lxml-5.2.1-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:0c3f67e2aeda739d1cc0b1102c9a9129f7dc83901226cc24dd72ba275ced4218"}, + {file = "lxml-5.2.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:5d5792e9b3fb8d16a19f46aa8208987cfeafe082363ee2745ea8b643d9cc5b45"}, + {file = "lxml-5.2.1-cp36-cp36m-musllinux_1_2_aarch64.whl", hash = "sha256:88e22fc0a6684337d25c994381ed8a1580a6f5ebebd5ad41f89f663ff4ec2885"}, + {file = "lxml-5.2.1-cp36-cp36m-musllinux_1_2_ppc64le.whl", hash = "sha256:21c2e6b09565ba5b45ae161b438e033a86ad1736b8c838c766146eff8ceffff9"}, + {file = "lxml-5.2.1-cp36-cp36m-musllinux_1_2_s390x.whl", hash = "sha256:afbbdb120d1e78d2ba8064a68058001b871154cc57787031b645c9142b937a62"}, + {file = "lxml-5.2.1-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:627402ad8dea044dde2eccde4370560a2b750ef894c9578e1d4f8ffd54000461"}, + {file = "lxml-5.2.1-cp36-cp36m-win32.whl", hash = "sha256:e89580a581bf478d8dcb97d9cd011d567768e8bc4095f8557b21c4d4c5fea7d0"}, + {file = "lxml-5.2.1-cp36-cp36m-win_amd64.whl", hash = "sha256:59565f10607c244bc4c05c0c5fa0c190c990996e0c719d05deec7030c2aa8289"}, + {file = "lxml-5.2.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:857500f88b17a6479202ff5fe5f580fc3404922cd02ab3716197adf1ef628029"}, + {file = "lxml-5.2.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:56c22432809085b3f3ae04e6e7bdd36883d7258fcd90e53ba7b2e463efc7a6af"}, + {file = "lxml-5.2.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a55ee573116ba208932e2d1a037cc4b10d2c1cb264ced2184d00b18ce585b2c0"}, + {file = "lxml-5.2.1-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:6cf58416653c5901e12624e4013708b6e11142956e7f35e7a83f1ab02f3fe456"}, + {file = "lxml-5.2.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:64c2baa7774bc22dd4474248ba16fe1a7f611c13ac6123408694d4cc93d66dbd"}, + {file = "lxml-5.2.1-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:74b28c6334cca4dd704e8004cba1955af0b778cf449142e581e404bd211fb619"}, + {file = "lxml-5.2.1-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:7221d49259aa1e5a8f00d3d28b1e0b76031655ca74bb287123ef56c3db92f213"}, + {file = "lxml-5.2.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3dbe858ee582cbb2c6294dc85f55b5f19c918c2597855e950f34b660f1a5ede6"}, + {file = "lxml-5.2.1-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:04ab5415bf6c86e0518d57240a96c4d1fcfc3cb370bb2ac2a732b67f579e5a04"}, + {file = "lxml-5.2.1-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:6ab833e4735a7e5533711a6ea2df26459b96f9eec36d23f74cafe03631647c41"}, + {file = "lxml-5.2.1-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:f443cdef978430887ed55112b491f670bba6462cea7a7742ff8f14b7abb98d75"}, + {file = "lxml-5.2.1-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:9e2addd2d1866fe112bc6f80117bcc6bc25191c5ed1bfbcf9f1386a884252ae8"}, + {file = "lxml-5.2.1-cp37-cp37m-win32.whl", hash = "sha256:f51969bac61441fd31f028d7b3b45962f3ecebf691a510495e5d2cd8c8092dbd"}, + {file = "lxml-5.2.1-cp37-cp37m-win_amd64.whl", hash = "sha256:b0b58fbfa1bf7367dde8a557994e3b1637294be6cf2169810375caf8571a085c"}, + {file = "lxml-5.2.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:804f74efe22b6a227306dd890eecc4f8c59ff25ca35f1f14e7482bbce96ef10b"}, + {file = "lxml-5.2.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:08802f0c56ed150cc6885ae0788a321b73505d2263ee56dad84d200cab11c07a"}, + {file = "lxml-5.2.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f8c09ed18ecb4ebf23e02b8e7a22a05d6411911e6fabef3a36e4f371f4f2585"}, + {file = "lxml-5.2.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3d30321949861404323c50aebeb1943461a67cd51d4200ab02babc58bd06a86"}, + {file = "lxml-5.2.1-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:b560e3aa4b1d49e0e6c847d72665384db35b2f5d45f8e6a5c0072e0283430533"}, + {file = "lxml-5.2.1-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:058a1308914f20784c9f4674036527e7c04f7be6fb60f5d61353545aa7fcb739"}, + {file = "lxml-5.2.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:adfb84ca6b87e06bc6b146dc7da7623395db1e31621c4785ad0658c5028b37d7"}, + {file = "lxml-5.2.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:417d14450f06d51f363e41cace6488519038f940676ce9664b34ebf5653433a5"}, + {file = "lxml-5.2.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a2dfe7e2473f9b59496247aad6e23b405ddf2e12ef0765677b0081c02d6c2c0b"}, + {file = "lxml-5.2.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bf2e2458345d9bffb0d9ec16557d8858c9c88d2d11fed53998512504cd9df49b"}, + {file = "lxml-5.2.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:58278b29cb89f3e43ff3e0c756abbd1518f3ee6adad9e35b51fb101c1c1daaec"}, + {file = "lxml-5.2.1-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:64641a6068a16201366476731301441ce93457eb8452056f570133a6ceb15fca"}, + {file = "lxml-5.2.1-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:78bfa756eab503673991bdcf464917ef7845a964903d3302c5f68417ecdc948c"}, + {file = "lxml-5.2.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:11a04306fcba10cd9637e669fd73aa274c1c09ca64af79c041aa820ea992b637"}, + {file = "lxml-5.2.1-cp38-cp38-win32.whl", hash = "sha256:66bc5eb8a323ed9894f8fa0ee6cb3e3fb2403d99aee635078fd19a8bc7a5a5da"}, + {file = "lxml-5.2.1-cp38-cp38-win_amd64.whl", hash = "sha256:9676bfc686fa6a3fa10cd4ae6b76cae8be26eb5ec6811d2a325636c460da1806"}, + {file = "lxml-5.2.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:cf22b41fdae514ee2f1691b6c3cdeae666d8b7fa9434de445f12bbeee0cf48dd"}, + {file = "lxml-5.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ec42088248c596dbd61d4ae8a5b004f97a4d91a9fd286f632e42e60b706718d7"}, + {file = "lxml-5.2.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd53553ddad4a9c2f1f022756ae64abe16da1feb497edf4d9f87f99ec7cf86bd"}, + {file = "lxml-5.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:feaa45c0eae424d3e90d78823f3828e7dc42a42f21ed420db98da2c4ecf0a2cb"}, + {file = "lxml-5.2.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ddc678fb4c7e30cf830a2b5a8d869538bc55b28d6c68544d09c7d0d8f17694dc"}, + {file = "lxml-5.2.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:853e074d4931dbcba7480d4dcab23d5c56bd9607f92825ab80ee2bd916edea53"}, + {file = "lxml-5.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc4691d60512798304acb9207987e7b2b7c44627ea88b9d77489bbe3e6cc3bd4"}, + {file = "lxml-5.2.1-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:beb72935a941965c52990f3a32d7f07ce869fe21c6af8b34bf6a277b33a345d3"}, + {file = "lxml-5.2.1-cp39-cp39-manylinux_2_28_ppc64le.whl", hash = "sha256:6588c459c5627fefa30139be4d2e28a2c2a1d0d1c265aad2ba1935a7863a4913"}, + {file = "lxml-5.2.1-cp39-cp39-manylinux_2_28_s390x.whl", hash = "sha256:588008b8497667f1ddca7c99f2f85ce8511f8f7871b4a06ceede68ab62dff64b"}, + {file = "lxml-5.2.1-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b6787b643356111dfd4032b5bffe26d2f8331556ecb79e15dacb9275da02866e"}, + {file = "lxml-5.2.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7c17b64b0a6ef4e5affae6a3724010a7a66bda48a62cfe0674dabd46642e8b54"}, + {file = "lxml-5.2.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:27aa20d45c2e0b8cd05da6d4759649170e8dfc4f4e5ef33a34d06f2d79075d57"}, + {file = "lxml-5.2.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:d4f2cc7060dc3646632d7f15fe68e2fa98f58e35dd5666cd525f3b35d3fed7f8"}, + {file = "lxml-5.2.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff46d772d5f6f73564979cd77a4fffe55c916a05f3cb70e7c9c0590059fb29ef"}, + {file = "lxml-5.2.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:96323338e6c14e958d775700ec8a88346014a85e5de73ac7967db0367582049b"}, + {file = "lxml-5.2.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:52421b41ac99e9d91934e4d0d0fe7da9f02bfa7536bb4431b4c05c906c8c6919"}, + {file = "lxml-5.2.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:7a7efd5b6d3e30d81ec68ab8a88252d7c7c6f13aaa875009fe3097eb4e30b84c"}, + {file = "lxml-5.2.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0ed777c1e8c99b63037b91f9d73a6aad20fd035d77ac84afcc205225f8f41188"}, + {file = "lxml-5.2.1-cp39-cp39-win32.whl", hash = "sha256:644df54d729ef810dcd0f7732e50e5ad1bd0a135278ed8d6bcb06f33b6b6f708"}, + {file = "lxml-5.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:9ca66b8e90daca431b7ca1408cae085d025326570e57749695d6a01454790e95"}, + {file = "lxml-5.2.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9b0ff53900566bc6325ecde9181d89afadc59c5ffa39bddf084aaedfe3b06a11"}, + {file = "lxml-5.2.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd6037392f2d57793ab98d9e26798f44b8b4da2f2464388588f48ac52c489ea1"}, + {file = "lxml-5.2.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b9c07e7a45bb64e21df4b6aa623cb8ba214dfb47d2027d90eac197329bb5e94"}, + {file = "lxml-5.2.1-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:3249cc2989d9090eeac5467e50e9ec2d40704fea9ab72f36b034ea34ee65ca98"}, + {file = "lxml-5.2.1-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f42038016852ae51b4088b2862126535cc4fc85802bfe30dea3500fdfaf1864e"}, + {file = "lxml-5.2.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:533658f8fbf056b70e434dff7e7aa611bcacb33e01f75de7f821810e48d1bb66"}, + {file = "lxml-5.2.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:622020d4521e22fb371e15f580d153134bfb68d6a429d1342a25f051ec72df1c"}, + {file = "lxml-5.2.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efa7b51824aa0ee957ccd5a741c73e6851de55f40d807f08069eb4c5a26b2baa"}, + {file = "lxml-5.2.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c6ad0fbf105f6bcc9300c00010a2ffa44ea6f555df1a2ad95c88f5656104817"}, + {file = "lxml-5.2.1-pp37-pypy37_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:e233db59c8f76630c512ab4a4daf5a5986da5c3d5b44b8e9fc742f2a24dbd460"}, + {file = "lxml-5.2.1-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6a014510830df1475176466b6087fc0c08b47a36714823e58d8b8d7709132a96"}, + {file = "lxml-5.2.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:d38c8f50ecf57f0463399569aa388b232cf1a2ffb8f0a9a5412d0db57e054860"}, + {file = "lxml-5.2.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5aea8212fb823e006b995c4dda533edcf98a893d941f173f6c9506126188860d"}, + {file = "lxml-5.2.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ff097ae562e637409b429a7ac958a20aab237a0378c42dabaa1e3abf2f896e5f"}, + {file = "lxml-5.2.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f5d65c39f16717a47c36c756af0fb36144069c4718824b7533f803ecdf91138"}, + {file = "lxml-5.2.1-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:3d0c3dd24bb4605439bf91068598d00c6370684f8de4a67c2992683f6c309d6b"}, + {file = "lxml-5.2.1-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e32be23d538753a8adb6c85bd539f5fd3b15cb987404327c569dfc5fd8366e85"}, + {file = "lxml-5.2.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:cc518cea79fd1e2f6c90baafa28906d4309d24f3a63e801d855e7424c5b34144"}, + {file = "lxml-5.2.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a0af35bd8ebf84888373630f73f24e86bf016642fb8576fba49d3d6b560b7cbc"}, + {file = "lxml-5.2.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8aca2e3a72f37bfc7b14ba96d4056244001ddcc18382bd0daa087fd2e68a354"}, + {file = "lxml-5.2.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ca1e8188b26a819387b29c3895c47a5e618708fe6f787f3b1a471de2c4a94d9"}, + {file = "lxml-5.2.1-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c8ba129e6d3b0136a0f50345b2cb3db53f6bda5dd8c7f5d83fbccba97fb5dcb5"}, + {file = "lxml-5.2.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e998e304036198b4f6914e6a1e2b6f925208a20e2042563d9734881150c6c246"}, + {file = "lxml-5.2.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:d3be9b2076112e51b323bdf6d5a7f8a798de55fb8d95fcb64bd179460cdc0704"}, + {file = "lxml-5.2.1.tar.gz", hash = "sha256:3f7765e69bbce0906a7c74d5fe46d2c7a7596147318dbc08e4a2431f3060e306"}, +] + +[package.extras] +cssselect = ["cssselect (>=0.7)"] +html-clean = ["lxml-html-clean"] +html5 = ["html5lib"] +htmlsoup = ["BeautifulSoup4"] +source = ["Cython (>=3.0.10)"] + [[package]] name = "monotonic" version = "1.6" @@ -833,21 +1030,6 @@ sql-other = ["SQLAlchemy (>=1.4.16)"] test = ["hypothesis (>=6.34.2)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)"] xml = ["lxml (>=4.6.3)"] -[[package]] -name = "platformdirs" -version = "4.2.0" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -optional = false -python-versions = ">=3.8" -files = [ - {file = "platformdirs-4.2.0-py3-none-any.whl", hash = "sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068"}, - {file = "platformdirs-4.2.0.tar.gz", hash = "sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768"}, -] - -[package.extras] -docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] - [[package]] name = "posthog" version = "3.5.0" @@ -884,18 +1066,18 @@ files = [ [[package]] name = "pydantic" -version = "2.7.0" +version = "2.7.1" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic-2.7.0-py3-none-any.whl", hash = "sha256:9dee74a271705f14f9a1567671d144a851c675b072736f0a7b2608fd9e495352"}, - {file = "pydantic-2.7.0.tar.gz", hash = "sha256:b5ecdd42262ca2462e2624793551e80911a1e989f462910bb81aef974b4bb383"}, + {file = "pydantic-2.7.1-py3-none-any.whl", hash = "sha256:e029badca45266732a9a79898a15ae2e8b14840b1eabbb25844be28f0b33f3d5"}, + {file = "pydantic-2.7.1.tar.gz", hash = "sha256:e9dbb5eada8abe4d9ae5f46b9939aead650cd2b68f249bb3a8139dbe125803cc"}, ] [package.dependencies] annotated-types = ">=0.4.0" -pydantic-core = "2.18.1" +pydantic-core = "2.18.2" typing-extensions = ">=4.6.1" [package.extras] @@ -903,90 +1085,90 @@ email = ["email-validator (>=2.0.0)"] [[package]] name = "pydantic-core" -version = "2.18.1" +version = "2.18.2" description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic_core-2.18.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:ee9cf33e7fe14243f5ca6977658eb7d1042caaa66847daacbd2117adb258b226"}, - {file = "pydantic_core-2.18.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6b7bbb97d82659ac8b37450c60ff2e9f97e4eb0f8a8a3645a5568b9334b08b50"}, - {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df4249b579e75094f7e9bb4bd28231acf55e308bf686b952f43100a5a0be394c"}, - {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d0491006a6ad20507aec2be72e7831a42efc93193d2402018007ff827dc62926"}, - {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ae80f72bb7a3e397ab37b53a2b49c62cc5496412e71bc4f1277620a7ce3f52b"}, - {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:58aca931bef83217fca7a390e0486ae327c4af9c3e941adb75f8772f8eeb03a1"}, - {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1be91ad664fc9245404a789d60cba1e91c26b1454ba136d2a1bf0c2ac0c0505a"}, - {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:667880321e916a8920ef49f5d50e7983792cf59f3b6079f3c9dac2b88a311d17"}, - {file = "pydantic_core-2.18.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f7054fdc556f5421f01e39cbb767d5ec5c1139ea98c3e5b350e02e62201740c7"}, - {file = "pydantic_core-2.18.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:030e4f9516f9947f38179249778709a460a3adb516bf39b5eb9066fcfe43d0e6"}, - {file = "pydantic_core-2.18.1-cp310-none-win32.whl", hash = "sha256:2e91711e36e229978d92642bfc3546333a9127ecebb3f2761372e096395fc649"}, - {file = "pydantic_core-2.18.1-cp310-none-win_amd64.whl", hash = "sha256:9a29726f91c6cb390b3c2338f0df5cd3e216ad7a938762d11c994bb37552edb0"}, - {file = "pydantic_core-2.18.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:9ece8a49696669d483d206b4474c367852c44815fca23ac4e48b72b339807f80"}, - {file = "pydantic_core-2.18.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7a5d83efc109ceddb99abd2c1316298ced2adb4570410defe766851a804fcd5b"}, - {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f7973c381283783cd1043a8c8f61ea5ce7a3a58b0369f0ee0ee975eaf2f2a1b"}, - {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:54c7375c62190a7845091f521add19b0f026bcf6ae674bdb89f296972272e86d"}, - {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dd63cec4e26e790b70544ae5cc48d11b515b09e05fdd5eff12e3195f54b8a586"}, - {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:561cf62c8a3498406495cfc49eee086ed2bb186d08bcc65812b75fda42c38294"}, - {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68717c38a68e37af87c4da20e08f3e27d7e4212e99e96c3d875fbf3f4812abfc"}, - {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2d5728e93d28a3c63ee513d9ffbac9c5989de8c76e049dbcb5bfe4b923a9739d"}, - {file = "pydantic_core-2.18.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f0f17814c505f07806e22b28856c59ac80cee7dd0fbb152aed273e116378f519"}, - {file = "pydantic_core-2.18.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d816f44a51ba5175394bc6c7879ca0bd2be560b2c9e9f3411ef3a4cbe644c2e9"}, - {file = "pydantic_core-2.18.1-cp311-none-win32.whl", hash = "sha256:09f03dfc0ef8c22622eaa8608caa4a1e189cfb83ce847045eca34f690895eccb"}, - {file = "pydantic_core-2.18.1-cp311-none-win_amd64.whl", hash = "sha256:27f1009dc292f3b7ca77feb3571c537276b9aad5dd4efb471ac88a8bd09024e9"}, - {file = "pydantic_core-2.18.1-cp311-none-win_arm64.whl", hash = "sha256:48dd883db92e92519201f2b01cafa881e5f7125666141a49ffba8b9facc072b0"}, - {file = "pydantic_core-2.18.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:b6b0e4912030c6f28bcb72b9ebe4989d6dc2eebcd2a9cdc35fefc38052dd4fe8"}, - {file = "pydantic_core-2.18.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f3202a429fe825b699c57892d4371c74cc3456d8d71b7f35d6028c96dfecad31"}, - {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3982b0a32d0a88b3907e4b0dc36809fda477f0757c59a505d4e9b455f384b8b"}, - {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:25595ac311f20e5324d1941909b0d12933f1fd2171075fcff763e90f43e92a0d"}, - {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:14fe73881cf8e4cbdaded8ca0aa671635b597e42447fec7060d0868b52d074e6"}, - {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ca976884ce34070799e4dfc6fbd68cb1d181db1eefe4a3a94798ddfb34b8867f"}, - {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:684d840d2c9ec5de9cb397fcb3f36d5ebb6fa0d94734f9886032dd796c1ead06"}, - {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:54764c083bbe0264f0f746cefcded6cb08fbbaaf1ad1d78fb8a4c30cff999a90"}, - {file = "pydantic_core-2.18.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:201713f2f462e5c015b343e86e68bd8a530a4f76609b33d8f0ec65d2b921712a"}, - {file = "pydantic_core-2.18.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fd1a9edb9dd9d79fbeac1ea1f9a8dd527a6113b18d2e9bcc0d541d308dae639b"}, - {file = "pydantic_core-2.18.1-cp312-none-win32.whl", hash = "sha256:d5e6b7155b8197b329dc787356cfd2684c9d6a6b1a197f6bbf45f5555a98d411"}, - {file = "pydantic_core-2.18.1-cp312-none-win_amd64.whl", hash = "sha256:9376d83d686ec62e8b19c0ac3bf8d28d8a5981d0df290196fb6ef24d8a26f0d6"}, - {file = "pydantic_core-2.18.1-cp312-none-win_arm64.whl", hash = "sha256:c562b49c96906b4029b5685075fe1ebd3b5cc2601dfa0b9e16c2c09d6cbce048"}, - {file = "pydantic_core-2.18.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:3e352f0191d99fe617371096845070dee295444979efb8f27ad941227de6ad09"}, - {file = "pydantic_core-2.18.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c0295d52b012cbe0d3059b1dba99159c3be55e632aae1999ab74ae2bd86a33d7"}, - {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56823a92075780582d1ffd4489a2e61d56fd3ebb4b40b713d63f96dd92d28144"}, - {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dd3f79e17b56741b5177bcc36307750d50ea0698df6aa82f69c7db32d968c1c2"}, - {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:38a5024de321d672a132b1834a66eeb7931959c59964b777e8f32dbe9523f6b1"}, - {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d2ce426ee691319d4767748c8e0895cfc56593d725594e415f274059bcf3cb76"}, - {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2adaeea59849ec0939af5c5d476935f2bab4b7f0335b0110f0f069a41024278e"}, - {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9b6431559676a1079eac0f52d6d0721fb8e3c5ba43c37bc537c8c83724031feb"}, - {file = "pydantic_core-2.18.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:85233abb44bc18d16e72dc05bf13848a36f363f83757541f1a97db2f8d58cfd9"}, - {file = "pydantic_core-2.18.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:641a018af4fe48be57a2b3d7a1f0f5dbca07c1d00951d3d7463f0ac9dac66622"}, - {file = "pydantic_core-2.18.1-cp38-none-win32.whl", hash = "sha256:63d7523cd95d2fde0d28dc42968ac731b5bb1e516cc56b93a50ab293f4daeaad"}, - {file = "pydantic_core-2.18.1-cp38-none-win_amd64.whl", hash = "sha256:907a4d7720abfcb1c81619863efd47c8a85d26a257a2dbebdb87c3b847df0278"}, - {file = "pydantic_core-2.18.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:aad17e462f42ddbef5984d70c40bfc4146c322a2da79715932cd8976317054de"}, - {file = "pydantic_core-2.18.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:94b9769ba435b598b547c762184bcfc4783d0d4c7771b04a3b45775c3589ca44"}, - {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:80e0e57cc704a52fb1b48f16d5b2c8818da087dbee6f98d9bf19546930dc64b5"}, - {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:76b86e24039c35280ceee6dce7e62945eb93a5175d43689ba98360ab31eebc4a"}, - {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12a05db5013ec0ca4a32cc6433f53faa2a014ec364031408540ba858c2172bb0"}, - {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:250ae39445cb5475e483a36b1061af1bc233de3e9ad0f4f76a71b66231b07f88"}, - {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a32204489259786a923e02990249c65b0f17235073149d0033efcebe80095570"}, - {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6395a4435fa26519fd96fdccb77e9d00ddae9dd6c742309bd0b5610609ad7fb2"}, - {file = "pydantic_core-2.18.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2533ad2883f001efa72f3d0e733fb846710c3af6dcdd544fe5bf14fa5fe2d7db"}, - {file = "pydantic_core-2.18.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b560b72ed4816aee52783c66854d96157fd8175631f01ef58e894cc57c84f0f6"}, - {file = "pydantic_core-2.18.1-cp39-none-win32.whl", hash = "sha256:582cf2cead97c9e382a7f4d3b744cf0ef1a6e815e44d3aa81af3ad98762f5a9b"}, - {file = "pydantic_core-2.18.1-cp39-none-win_amd64.whl", hash = "sha256:ca71d501629d1fa50ea7fa3b08ba884fe10cefc559f5c6c8dfe9036c16e8ae89"}, - {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e178e5b66a06ec5bf51668ec0d4ac8cfb2bdcb553b2c207d58148340efd00143"}, - {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:72722ce529a76a4637a60be18bd789d8fb871e84472490ed7ddff62d5fed620d"}, - {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2fe0c1ce5b129455e43f941f7a46f61f3d3861e571f2905d55cdbb8b5c6f5e2c"}, - {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4284c621f06a72ce2cb55f74ea3150113d926a6eb78ab38340c08f770eb9b4d"}, - {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a0c3e718f4e064efde68092d9d974e39572c14e56726ecfaeebbe6544521f47"}, - {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:2027493cc44c23b598cfaf200936110433d9caa84e2c6cf487a83999638a96ac"}, - {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:76909849d1a6bffa5a07742294f3fa1d357dc917cb1fe7b470afbc3a7579d539"}, - {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ee7ccc7fb7e921d767f853b47814c3048c7de536663e82fbc37f5eb0d532224b"}, - {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ee2794111c188548a4547eccc73a6a8527fe2af6cf25e1a4ebda2fd01cdd2e60"}, - {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a139fe9f298dc097349fb4f28c8b81cc7a202dbfba66af0e14be5cfca4ef7ce5"}, - {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d074b07a10c391fc5bbdcb37b2f16f20fcd9e51e10d01652ab298c0d07908ee2"}, - {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c69567ddbac186e8c0aadc1f324a60a564cfe25e43ef2ce81bcc4b8c3abffbae"}, - {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:baf1c7b78cddb5af00971ad5294a4583188bda1495b13760d9f03c9483bb6203"}, - {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:2684a94fdfd1b146ff10689c6e4e815f6a01141781c493b97342cdc5b06f4d5d"}, - {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:73c1bc8a86a5c9e8721a088df234265317692d0b5cd9e86e975ce3bc3db62a59"}, - {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:e60defc3c15defb70bb38dd605ff7e0fae5f6c9c7cbfe0ad7868582cb7e844a6"}, - {file = "pydantic_core-2.18.1.tar.gz", hash = "sha256:de9d3e8717560eb05e28739d1b35e4eac2e458553a52a301e51352a7ffc86a35"}, + {file = "pydantic_core-2.18.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:9e08e867b306f525802df7cd16c44ff5ebbe747ff0ca6cf3fde7f36c05a59a81"}, + {file = "pydantic_core-2.18.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f0a21cbaa69900cbe1a2e7cad2aa74ac3cf21b10c3efb0fa0b80305274c0e8a2"}, + {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0680b1f1f11fda801397de52c36ce38ef1c1dc841a0927a94f226dea29c3ae3d"}, + {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:95b9d5e72481d3780ba3442eac863eae92ae43a5f3adb5b4d0a1de89d42bb250"}, + {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fcf5cd9c4b655ad666ca332b9a081112cd7a58a8b5a6ca7a3104bc950f2038"}, + {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b5155ff768083cb1d62f3e143b49a8a3432e6789a3abee8acd005c3c7af1c74"}, + {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:553ef617b6836fc7e4df130bb851e32fe357ce36336d897fd6646d6058d980af"}, + {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b89ed9eb7d616ef5714e5590e6cf7f23b02d0d539767d33561e3675d6f9e3857"}, + {file = "pydantic_core-2.18.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:75f7e9488238e920ab6204399ded280dc4c307d034f3924cd7f90a38b1829563"}, + {file = "pydantic_core-2.18.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ef26c9e94a8c04a1b2924149a9cb081836913818e55681722d7f29af88fe7b38"}, + {file = "pydantic_core-2.18.2-cp310-none-win32.whl", hash = "sha256:182245ff6b0039e82b6bb585ed55a64d7c81c560715d1bad0cbad6dfa07b4027"}, + {file = "pydantic_core-2.18.2-cp310-none-win_amd64.whl", hash = "sha256:e23ec367a948b6d812301afc1b13f8094ab7b2c280af66ef450efc357d2ae543"}, + {file = "pydantic_core-2.18.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:219da3f096d50a157f33645a1cf31c0ad1fe829a92181dd1311022f986e5fbe3"}, + {file = "pydantic_core-2.18.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cc1cfd88a64e012b74e94cd00bbe0f9c6df57049c97f02bb07d39e9c852e19a4"}, + {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05b7133a6e6aeb8df37d6f413f7705a37ab4031597f64ab56384c94d98fa0e90"}, + {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:224c421235f6102e8737032483f43c1a8cfb1d2f45740c44166219599358c2cd"}, + {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b14d82cdb934e99dda6d9d60dc84a24379820176cc4a0d123f88df319ae9c150"}, + {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2728b01246a3bba6de144f9e3115b532ee44bd6cf39795194fb75491824a1413"}, + {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:470b94480bb5ee929f5acba6995251ada5e059a5ef3e0dfc63cca287283ebfa6"}, + {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:997abc4df705d1295a42f95b4eec4950a37ad8ae46d913caeee117b6b198811c"}, + {file = "pydantic_core-2.18.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:75250dbc5290e3f1a0f4618db35e51a165186f9034eff158f3d490b3fed9f8a0"}, + {file = "pydantic_core-2.18.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4456f2dca97c425231d7315737d45239b2b51a50dc2b6f0c2bb181fce6207664"}, + {file = "pydantic_core-2.18.2-cp311-none-win32.whl", hash = "sha256:269322dcc3d8bdb69f054681edff86276b2ff972447863cf34c8b860f5188e2e"}, + {file = "pydantic_core-2.18.2-cp311-none-win_amd64.whl", hash = "sha256:800d60565aec896f25bc3cfa56d2277d52d5182af08162f7954f938c06dc4ee3"}, + {file = "pydantic_core-2.18.2-cp311-none-win_arm64.whl", hash = "sha256:1404c69d6a676245199767ba4f633cce5f4ad4181f9d0ccb0577e1f66cf4c46d"}, + {file = "pydantic_core-2.18.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:fb2bd7be70c0fe4dfd32c951bc813d9fe6ebcbfdd15a07527796c8204bd36242"}, + {file = "pydantic_core-2.18.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6132dd3bd52838acddca05a72aafb6eab6536aa145e923bb50f45e78b7251043"}, + {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7d904828195733c183d20a54230c0df0eb46ec746ea1a666730787353e87182"}, + {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c9bd70772c720142be1020eac55f8143a34ec9f82d75a8e7a07852023e46617f"}, + {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2b8ed04b3582771764538f7ee7001b02e1170223cf9b75dff0bc698fadb00cf3"}, + {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e6dac87ddb34aaec85f873d737e9d06a3555a1cc1a8e0c44b7f8d5daeb89d86f"}, + {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ca4ae5a27ad7a4ee5170aebce1574b375de390bc01284f87b18d43a3984df72"}, + {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:886eec03591b7cf058467a70a87733b35f44707bd86cf64a615584fd72488b7c"}, + {file = "pydantic_core-2.18.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ca7b0c1f1c983e064caa85f3792dd2fe3526b3505378874afa84baf662e12241"}, + {file = "pydantic_core-2.18.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4b4356d3538c3649337df4074e81b85f0616b79731fe22dd11b99499b2ebbdf3"}, + {file = "pydantic_core-2.18.2-cp312-none-win32.whl", hash = "sha256:8b172601454f2d7701121bbec3425dd71efcb787a027edf49724c9cefc14c038"}, + {file = "pydantic_core-2.18.2-cp312-none-win_amd64.whl", hash = "sha256:b1bd7e47b1558ea872bd16c8502c414f9e90dcf12f1395129d7bb42a09a95438"}, + {file = "pydantic_core-2.18.2-cp312-none-win_arm64.whl", hash = "sha256:98758d627ff397e752bc339272c14c98199c613f922d4a384ddc07526c86a2ec"}, + {file = "pydantic_core-2.18.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:9fdad8e35f278b2c3eb77cbdc5c0a49dada440657bf738d6905ce106dc1de439"}, + {file = "pydantic_core-2.18.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1d90c3265ae107f91a4f279f4d6f6f1d4907ac76c6868b27dc7fb33688cfb347"}, + {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:390193c770399861d8df9670fb0d1874f330c79caaca4642332df7c682bf6b91"}, + {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:82d5d4d78e4448683cb467897fe24e2b74bb7b973a541ea1dcfec1d3cbce39fb"}, + {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4774f3184d2ef3e14e8693194f661dea5a4d6ca4e3dc8e39786d33a94865cefd"}, + {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d4d938ec0adf5167cb335acb25a4ee69a8107e4984f8fbd2e897021d9e4ca21b"}, + {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e0e8b1be28239fc64a88a8189d1df7fad8be8c1ae47fcc33e43d4be15f99cc70"}, + {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:868649da93e5a3d5eacc2b5b3b9235c98ccdbfd443832f31e075f54419e1b96b"}, + {file = "pydantic_core-2.18.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:78363590ef93d5d226ba21a90a03ea89a20738ee5b7da83d771d283fd8a56761"}, + {file = "pydantic_core-2.18.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:852e966fbd035a6468fc0a3496589b45e2208ec7ca95c26470a54daed82a0788"}, + {file = "pydantic_core-2.18.2-cp38-none-win32.whl", hash = "sha256:6a46e22a707e7ad4484ac9ee9f290f9d501df45954184e23fc29408dfad61350"}, + {file = "pydantic_core-2.18.2-cp38-none-win_amd64.whl", hash = "sha256:d91cb5ea8b11607cc757675051f61b3d93f15eca3cefb3e6c704a5d6e8440f4e"}, + {file = "pydantic_core-2.18.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:ae0a8a797a5e56c053610fa7be147993fe50960fa43609ff2a9552b0e07013e8"}, + {file = "pydantic_core-2.18.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:042473b6280246b1dbf530559246f6842b56119c2926d1e52b631bdc46075f2a"}, + {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a388a77e629b9ec814c1b1e6b3b595fe521d2cdc625fcca26fbc2d44c816804"}, + {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e25add29b8f3b233ae90ccef2d902d0ae0432eb0d45370fe315d1a5cf231004b"}, + {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f459a5ce8434614dfd39bbebf1041952ae01da6bed9855008cb33b875cb024c0"}, + {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eff2de745698eb46eeb51193a9f41d67d834d50e424aef27df2fcdee1b153845"}, + {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8309f67285bdfe65c372ea3722b7a5642680f3dba538566340a9d36e920b5f0"}, + {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f93a8a2e3938ff656a7c1bc57193b1319960ac015b6e87d76c76bf14fe0244b4"}, + {file = "pydantic_core-2.18.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:22057013c8c1e272eb8d0eebc796701167d8377441ec894a8fed1af64a0bf399"}, + {file = "pydantic_core-2.18.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cfeecd1ac6cc1fb2692c3d5110781c965aabd4ec5d32799773ca7b1456ac636b"}, + {file = "pydantic_core-2.18.2-cp39-none-win32.whl", hash = "sha256:0d69b4c2f6bb3e130dba60d34c0845ba31b69babdd3f78f7c0c8fae5021a253e"}, + {file = "pydantic_core-2.18.2-cp39-none-win_amd64.whl", hash = "sha256:d9319e499827271b09b4e411905b24a426b8fb69464dfa1696258f53a3334641"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a1874c6dd4113308bd0eb568418e6114b252afe44319ead2b4081e9b9521fe75"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:ccdd111c03bfd3666bd2472b674c6899550e09e9f298954cfc896ab92b5b0e6d"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e18609ceaa6eed63753037fc06ebb16041d17d28199ae5aba0052c51449650a9"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e5c584d357c4e2baf0ff7baf44f4994be121e16a2c88918a5817331fc7599d7"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:43f0f463cf89ace478de71a318b1b4f05ebc456a9b9300d027b4b57c1a2064fb"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:e1b395e58b10b73b07b7cf740d728dd4ff9365ac46c18751bf8b3d8cca8f625a"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:0098300eebb1c837271d3d1a2cd2911e7c11b396eac9661655ee524a7f10587b"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:36789b70d613fbac0a25bb07ab3d9dba4d2e38af609c020cf4d888d165ee0bf3"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3f9a801e7c8f1ef8718da265bba008fa121243dfe37c1cea17840b0944dfd72c"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:3a6515ebc6e69d85502b4951d89131ca4e036078ea35533bb76327f8424531ce"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20aca1e2298c56ececfd8ed159ae4dde2df0781988c97ef77d5c16ff4bd5b400"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:223ee893d77a310a0391dca6df00f70bbc2f36a71a895cecd9a0e762dc37b349"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2334ce8c673ee93a1d6a65bd90327588387ba073c17e61bf19b4fd97d688d63c"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:cbca948f2d14b09d20268cda7b0367723d79063f26c4ffc523af9042cad95592"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:b3ef08e20ec49e02d5c6717a91bb5af9b20f1805583cb0adfe9ba2c6b505b5ae"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c6fdc8627910eed0c01aed6a390a252fe3ea6d472ee70fdde56273f198938374"}, + {file = "pydantic_core-2.18.2.tar.gz", hash = "sha256:2e29d20810dfc3043ee13ac7d9e25105799817683348823f305ab3f349b9386e"}, ] [package.dependencies] @@ -1087,36 +1269,6 @@ urllib3 = ">=1.21.1,<3" socks = ["PySocks (>=1.5.6,!=1.5.7)"] use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] -[[package]] -name = "requests-cache" -version = "1.2.0" -description = "A persistent cache for python requests" -optional = false -python-versions = ">=3.8" -files = [ - {file = "requests_cache-1.2.0-py3-none-any.whl", hash = "sha256:490324301bf0cb924ff4e6324bd2613453e7e1f847353928b08adb0fdfb7f722"}, - {file = "requests_cache-1.2.0.tar.gz", hash = "sha256:db1c709ca343cc1cd5b6c8b1a5387298eceed02306a6040760db538c885e3838"}, -] - -[package.dependencies] -attrs = ">=21.2" -cattrs = ">=22.2" -platformdirs = ">=2.5" -requests = ">=2.22" -url-normalize = ">=1.4" -urllib3 = ">=1.25.5" - -[package.extras] -all = ["boto3 (>=1.15)", "botocore (>=1.18)", "itsdangerous (>=2.0)", "pymongo (>=3)", "pyyaml (>=6.0.1)", "redis (>=3)", "ujson (>=5.4)"] -bson = ["bson (>=0.5)"] -docs = ["furo (>=2023.3,<2024.0)", "linkify-it-py (>=2.0,<3.0)", "myst-parser (>=1.0,<2.0)", "sphinx (>=5.0.2,<6.0.0)", "sphinx-autodoc-typehints (>=1.19)", "sphinx-automodapi (>=0.14)", "sphinx-copybutton (>=0.5)", "sphinx-design (>=0.2)", "sphinx-notfound-page (>=0.8)", "sphinxcontrib-apidoc (>=0.3)", "sphinxext-opengraph (>=0.9)"] -dynamodb = ["boto3 (>=1.15)", "botocore (>=1.18)"] -json = ["ujson (>=5.4)"] -mongodb = ["pymongo (>=3)"] -redis = ["redis (>=3)"] -security = ["itsdangerous (>=2.0)"] -yaml = ["pyyaml (>=6.0.1)"] - [[package]] name = "rsa" version = "4.9" @@ -1504,4 +1656,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = ">=3.8,<3.12" -content-hash = "5af028ef4a8d49e475156eb7b0fe7abb71f2808efb6d21c6c867f37fc248d5eb" +content-hash = "5243653b144ae25375a442e85632a338c070bc6a92f33eea0a888a8d81359d5c" diff --git a/openbb_platform/providers/sec/pyproject.toml b/openbb_platform/providers/sec/pyproject.toml index 545475ea31f..e3ad4ff62cf 100644 --- a/openbb_platform/providers/sec/pyproject.toml +++ b/openbb_platform/providers/sec/pyproject.toml @@ -9,7 +9,8 @@ packages = [{ include = "openbb_sec" }] [tool.poetry.dependencies] python = ">=3.8,<3.12" openbb-core = "^1.1.6" -requests-cache = "^1.1.0" +aiohttp-client-cache = "^0.10.0" +aiosqlite = "^0.19.0" xmltodict = "^0.13.0" lxml = "^5.2.1"