summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIgor Radovanovic <74266147+IgorWounds@users.noreply.github.com>2024-01-30 10:57:01 +0100
committerGitHub <noreply@github.com>2024-01-30 09:57:01 +0000
commit7a07970fc8bd4b03ea459cb0d892005ff5130ffe (patch)
tree0dc1c5704271ad6890c020f0eb205c397a8fd346
parente21721ca3932b20cac04de1b02ad26aaf8efa3fd (diff)
Remove Ultima provider (#6012)
-rw-r--r--openbb_platform/PROVIDERS.md9
-rw-r--r--openbb_platform/README.md9
-rw-r--r--openbb_platform/core/openbb_core/app/service/hub_service.py2
-rw-r--r--openbb_platform/extensions/news/integration/test_news_api.py29
-rw-r--r--openbb_platform/extensions/news/integration/test_news_python.py28
-rw-r--r--openbb_platform/providers/ultima/README.md15
-rw-r--r--openbb_platform/providers/ultima/__init__.py0
-rw-r--r--openbb_platform/providers/ultima/openbb_ultima/__init__.py27
-rw-r--r--openbb_platform/providers/ultima/openbb_ultima/models/__init__.py0
-rw-r--r--openbb_platform/providers/ultima/openbb_ultima/models/company_news.py95
-rw-r--r--openbb_platform/providers/ultima/openbb_ultima/models/sector_news.py103
-rw-r--r--openbb_platform/providers/ultima/openbb_ultima/py.typed0
-rw-r--r--openbb_platform/providers/ultima/openbb_ultima/utils/__init__.py0
-rw-r--r--openbb_platform/providers/ultima/openbb_ultima/utils/helpers.py26
-rw-r--r--openbb_platform/providers/ultima/poetry.lock1393
-rw-r--r--openbb_platform/providers/ultima/pyproject.toml18
-rw-r--r--openbb_platform/providers/ultima/tests/__init__.py0
-rw-r--r--openbb_platform/providers/ultima/tests/record/http/test_ultima_fetchers/test_ultima_company_news_fetcher.yaml112
-rw-r--r--openbb_platform/providers/ultima/tests/record/http/test_ultima_fetchers/test_ultima_sector_news_fetcher.yaml395
-rw-r--r--openbb_platform/providers/ultima/tests/test_ultima_fetchers.py45
20 files changed, 8 insertions, 2298 deletions
diff --git a/openbb_platform/PROVIDERS.md b/openbb_platform/PROVIDERS.md
index 6116ef0893c..d6ea4587f68 100644
--- a/openbb_platform/PROVIDERS.md
+++ b/openbb_platform/PROVIDERS.md
@@ -2,10 +2,9 @@
| Provider | URL | Package name | Description | Maintainer |
| --- | --- | --- | --- | --- |
-| [FMP](./providers/fmp/README.md) | https://financialmodelingprep.com/ | `openbb-fmp` | Access all stocks discounted cash flow statements, market price, stock markets news, and learn more about Financial Modeling. | [@OpenBB-Finance](https://github.com/OpenBB-finance) |
-| [Polygon](./providers/polygon/README.md) | https://polygon.io/ | `openbb-polygon` | Free stock data APIs. Real time and historical data, unlimited usage, tick level and aggregate granularity, in standardized JSON and CSV formats. | [@OpenBB-Finance](https://github.com/OpenBB-finance) |
-| [Benzinga](./providers/benzinga/README.md) | https://www.benzinga.com/ | `openbb-benzinga` | Stock Market Quotes, Business News, Financial News, Trading Ideas, and Stock Research by Professionals. | [@OpenBB-Finance](https://github.com/OpenBB-finance) |
-| [FRED](./providers/fred/README.md) | https://fred.stlouisfed.org/ | `openbb-fred` | Download, graph, and track 823000 economic time series from 114 sources. | [@OpenBB-Finance](https://github.com/OpenBB-finance) |
-| [Ultima](./providers/ultima/README.md) | https://ultimainsights.ai | `openbb-ultima` | Ultima Insights harnesses the power of LLMs + GPT to present relevant news to investors, often before it appears on platforms like Bloomberg. Ultima aims to provide timely and significant information for its users. | [@Ultima-Insights](https://github.com/Ultima-Insights)
+| [FMP](./providers/fmp/README.md) | <https://financialmodelingprep.com/> | `openbb-fmp` | Access all stocks discounted cash flow statements, market price, stock markets news, and learn more about Financial Modeling. | [@OpenBB-Finance](https://github.com/OpenBB-finance) |
+| [Polygon](./providers/polygon/README.md) | <https://polygon.io/> | `openbb-polygon` | Free stock data APIs. Real time and historical data, unlimited usage, tick level and aggregate granularity, in standardized JSON and CSV formats. | [@OpenBB-Finance](https://github.com/OpenBB-finance) |
+| [Benzinga](./providers/benzinga/README.md) | <https://www.benzinga.com/> | `openbb-benzinga` | Stock Market Quotes, Business News, Financial News, Trading Ideas, and Stock Research by Professionals. | [@OpenBB-Finance](https://github.com/OpenBB-finance) |
+| [FRED](./providers/fred/README.md) | <https://fred.stlouisfed.org/> | `openbb-fred` | Download, graph, and track 823000 economic time series from 114 sources. | [@OpenBB-Finance](https://github.com/OpenBB-finance) |
<!-- Add your Data Provider integration above this line -->
diff --git a/openbb_platform/README.md b/openbb_platform/README.md
index d37133ff382..23c0a5acb96 100644
--- a/openbb_platform/README.md
+++ b/openbb_platform/README.md
@@ -37,8 +37,6 @@ This will install the following data providers:
| openbb-sec | [SEC](https://www.sec.gov/edgar/sec-api-documentation) data connector | pip install openbb-sec | Free |
| openbb-tiingo | [Tiingo](https://www.tiingo.com/about/pricing) data connector | pip install openbb-tiingo | Free |
| openbb-tradingeconomics | [TradingEconomics](https://tradingeconomics.com/api) data connector | pip install openbb-tradingeconomics | Paid |
-| openbb-ultima | [Ultima Insights](https://ultimainsights.ai/openbb) data connector | pip install openbb-ultima | Paid |
-
To install extensions that expand the core functionalities specify the extension name or use `all` to install all.
@@ -48,9 +46,10 @@ pip install openbb[charting]
pip install openbb-yfinance
```
-Alternatively, you can install all extensions at once.
+Alternatively, you can install all extensions at once.
+
```bash
-pip install openbb[all]
+pip install openbb[all]
```
> Note: These instruction are specific to v4. For installation instructions and documentation for v3 go to our [website](https://docs.openbb.co/sdk).
@@ -83,7 +82,7 @@ To fully leverage the OpenBB Platform you need to get some API keys to connect w
### 1. OpenBB Hub
-Set your keys at [OpenBB Hub](https://my.openbb.co/app/sdk/api-keys) and get your personal access token from https://my.openbb.co/app/sdk/pat to connect with your account.
+Set your keys at [OpenBB Hub](https://my.openbb.co/app/sdk/api-keys) and get your personal access token from <https://my.openbb.co/app/sdk/pat> to connect with your account.
```python
>>> from openbb import obb
diff --git a/openbb_platform/core/openbb_core/app/service/hub_service.py b/openbb_platform/core/openbb_core/app/service/hub_service.py
index 08e5d3655de..22e6330bd76 100644
--- a/openbb_platform/core/openbb_core/app/service/hub_service.py
+++ b/openbb_platform/core/openbb_core/app/service/hub_service.py
@@ -229,7 +229,6 @@ class HubService:
intrinio_api_key=settings.features_keys.API_INTRINIO_KEY,
polygon_api_key=settings.features_keys.API_POLYGON_KEY,
nasdaq_api_key=settings.features_keys.API_KEY_QUANDL,
- ultima_api_key=settings.features_keys.API_ULTIMA_KEY,
)
return credentials
@@ -249,7 +248,6 @@ class HubService:
API_KEY_FINANCIALMODELINGPREP=get_cred("fmp_api_key"),
API_POLYGON_KEY=get_cred("polygon_api_key"),
API_KEY_QUANDL=get_cred("nasdaq_api_key"),
- API_ULTIMA_KEY=get_cred("ultima_api_key"),
)
hub_user_settings = HubUserSettings(features_keys=features_keys)
return hub_user_settings
diff --git a/openbb_platform/extensions/news/integration/test_news_api.py b/openbb_platform/extensions/news/integration/test_news_api.py
index 746c62933f7..fd120956a67 100644
--- a/openbb_platform/extensions/news/integration/test_news_api.py
+++ b/openbb_platform/extensions/news/integration/test_news_api.py
@@ -147,12 +147,6 @@ def test_news_world(params, headers):
"source": "bloomberg.com",
}
),
- # (
- # {
- # "provider": "ultima",
- # "sectors": "Real Estate",
- # }
- # ),
],
)
@pytest.mark.integration
@@ -164,26 +158,3 @@ def test_news_company(params, headers):
result = requests.get(url, headers=headers, timeout=10)
assert isinstance(result, requests.Response)
assert result.status_code == 200
-
-
-@pytest.mark.skip("openbb-ultima is not installed on the CI.")
-@parametrize(
- "params",
- [
- (
- {
- "provider": "ultima",
- "sectors": "Real Estate",
- }
- ),
- ],
-)
-@pytest.mark.integration
-def test_news_sector(params, headers):
- params = {p: v for p, v in params.items() if v}
-
- query_str = get_querystring(params, [])
- url = f"http://0.0.0.0:8000/api/v1/news/sector?{query_str}"
- result = requests.get(url, headers=headers, timeout=10)
- assert isinstance(result, requests.Response)
- assert result.status_code == 200
diff --git a/openbb_platform/extensions/news/integration/test_news_python.py b/openbb_platform/extensions/news/integration/test_news_python.py
index 574e4f7cf5b..dcfa212c08c 100644
--- a/openbb_platform/extensions/news/integration/test_news_python.py
+++ b/openbb_platform/extensions/news/integration/test_news_python.py
@@ -141,12 +141,6 @@ def test_news_world(params, obb):
"source": "bloomberg.com",
}
),
- # (
- # {
- # "provider": "ultima",
- # "symbols": "AAPL,MSFT",
- # }
- # ),
],
)
@pytest.mark.integration
@@ -157,25 +151,3 @@ def test_news_company(params, obb):
assert result
assert isinstance(result, OBBject)
assert len(result.results) > 0
-
-
-@pytest.mark.skip("openbb-ultima is not installed on the CI.")
-@parametrize(
- "params",
- [
- (
- {
- "provider": "ultima",
- "sectors": "Real Estate",
- }
- ),
- ],
-)
-@pytest.mark.integration
-def test_news_sector(params, obb):
- params = {p: v for p, v in params.items() if v}
-
- result = obb.news.sector(**params)
- assert result
- assert isinstance(result, OBBject)
- assert len(result.results) > 0
diff --git a/openbb_platform/providers/ultima/README.md b/openbb_platform/providers/ultima/README.md
deleted file mode 100644
index 7e974ee297b..00000000000
--- a/openbb_platform/providers/ultima/README.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# OpenBB Ultima Provider
-
-This extension integrates the [Ultima Insights](https://www.ultimainsights.ai/) data provider into the OpenBB Platform.
-
-## Installation
-
-To install the extension:
-
-```bash
-pip install openbb-ultima
-```
-
-For development please check [Contribution Guidelines](https://github.com/OpenBB-finance/OpenBBTerminal/blob/develop/openbb_platform/CONTRIBUTING.md).
-
-Documentation available [here](https://docs.openbb.co/platform).
diff --git a/openbb_platform/providers/ultima/__init__.py b/openbb_platform/providers/ultima/__init__.py
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/openbb_platform/providers/ultima/__init__.py
+++ /dev/null
diff --git a/openbb_platform/providers/ultima/openbb_ultima/__init__.py b/openbb_platform/providers/ultima/openbb_ultima/__init__.py
deleted file mode 100644
index 1d7b285740b..00000000000
--- a/openbb_platform/providers/ultima/openbb_ultima/__init__.py
+++ /dev/null
@@ -1,27 +0,0 @@
-"""Ultima provider module."""
-
-import warnings
-from typing import Union
-
-from openbb_core.provider.abstract.provider import Provider
-
-ultima_provider: Union[Provider, None] = None
-
-try:
- from openbb_ultima.models.company_news import UltimaCompanyNewsFetcher
- from openbb_ultima.models.sector_news import UltimaSectorNewsFetcher
-
- ultima_provider = Provider(
- name="ultima",
- website="https://www.ultimainsights.ai/openbb",
- description="""Ultima harnesses the power of LLMs to deliver news before it hits the frontpage of Bloomberg.""",
- credentials=["api_key"],
- fetcher_dict={
- "CompanyNews": UltimaCompanyNewsFetcher,
- "SectorNews": UltimaSectorNewsFetcher,
- },
- )
-except ImportError:
- warnings.warn(
- "openbb-ultima is not installed. Please install openbb-ultima to use the Ultima provider."
- )
diff --git a/openbb_platform/providers/ultima/openbb_ultima/models/__init__.py b/openbb_platform/providers/ultima/openbb_ultima/models/__init__.py
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/openbb_platform/providers/ultima/openbb_ultima/models/__init__.py
+++ /dev/null
diff --git a/openbb_platform/providers/ultima/openbb_ultima/models/company_news.py b/openbb_platform/providers/ultima/openbb_ultima/models/company_news.py
deleted file mode 100644
index 8d28d65cdae..00000000000
--- a/openbb_platform/providers/ultima/openbb_ultima/models/company_news.py
+++ /dev/null
@@ -1,95 +0,0 @@
-"""Ultima Company News Model."""
-
-from datetime import datetime
-from typing import Any, Dict, List, Optional
-
-from openbb_core.provider.abstract.fetcher import Fetcher
-from openbb_core.provider.standard_models.company_news import (
- CompanyNewsData,
- CompanyNewsQueryParams,
-)
-from openbb_ultima.utils.helpers import get_data
-from pydantic import Field
-
-
-class UltimaCompanyNewsQueryParams(CompanyNewsQueryParams):
- """Ultima Company News Query.
-
- Source: https://api.ultimainsights.ai/v1/api-docs#/default/get_v1_getOpenBBProInsights__tickers_
- """
-
- __alias_dict__ = {
- "symbols": "tickers",
- }
-
-
-class UltimaCompanyNewsData(CompanyNewsData):
- """Ultima Company News Data."""
-
- __alias_dict__ = {
- "symbols": "ticker",
- "date": "publishedDate",
- "text": "summary",
- "title": "headline",
- }
-
- publisher: str = Field(description="Publisher of the news.")
- risk_category: str = Field(description="Risk category of the news.")
-
-
-class UltimaCompanyNewsFetcher(
- Fetcher[
- UltimaCompanyNewsQueryParams,
- List[UltimaCompanyNewsData],
- ]
-):
- """Transform the query, extract and transform the data from the Ultima endpoints."""
-
- @staticmethod
- def transform_query(params: Dict[str, Any]) -> UltimaCompanyNewsQueryParams:
- """Transform query."""
- return UltimaCompanyNewsQueryParams(**params)
-
- @staticmethod
- def extract_data(
- query: UltimaCompanyNewsQueryParams,
- credentials: Optional[Dict[str, str]],
- **kwargs: Any,
- ) -> List[Dict]:
- """Extract data from Ultima Insights API."""
- token = credentials.get("ultima_api_key") if credentials else ""
- kwargs["auth"] = token
-
- base_url = "https://api.ultimainsights.ai/v1/getOpenBBProInsights"
-
- querystring = str(query).split("=")[1].split("'")[1].replace(" ", "")
-
- data = []
- url = f"{base_url}/{querystring}"
- response = get_data(url, **kwargs)
- data.extend(response)
-
- return data
-
- @staticmethod
- def transform_data(
- query: UltimaCompanyNewsQueryParams,
- data: List[Dict],
- **kwargs: Any,
- ) -> List[UltimaCompanyNewsData]:
- """Transform data."""
- results = []
- for ele in data:
- for key in ["8k_filings", "articles", "industry_summary"]:
- for item in ele[key]:
- # manual assignment required for Pydantic to work
- item["symbols"] = ele["ticker"]
- item["date"] = datetime.strptime(
- item["publishedDate"], "%Y-%m-%d %H:%M:%S"
- )
- item["title"] = item["headline"]
- item["url"] = item["url"]
- item["publisher"] = item["publisher"]
- item["risk_category"] = item["riskCategory"]
- results.append(UltimaCompanyNewsData.model_validate(item))
- return results
diff --git a/openbb_platform/providers/ultima/openbb_ultima/models/sector_news.py b/openbb_platform/providers/ultima/openbb_ultima/models/sector_news.py
deleted file mode 100644
index 78c5c23b248..00000000000
--- a/openbb_platform/providers/ultima/openbb_ultima/models/sector_news.py
+++ /dev/null
@@ -1,103 +0,0 @@
-"""Ultima Sector News Model."""
-
-from datetime import datetime
-from typing import Any, Dict, List, Optional
-
-from openbb_core.provider.abstract.fetcher import Fetcher
-from openbb_core.provider.standard_models.sector_news import (
- SectorNewsData,
- SectorNewsQueryParams,
-)
-from openbb_ultima.utils.helpers import get_data
-from pydantic import Field
-
-
-class UltimaSectorNewsQueryParams(SectorNewsQueryParams):
- """Ultima Sector News Query.
-
- Source: https://api.ultimainsights.ai/v1/api-docs#/default/get_v1_getOpenBBProInsights__tickers_
- """
-
- __alias_dict__ = {
- "symbols": "sectors",
- }
-
-
-class UltimaSectorNewsData(SectorNewsData):
- """Ultima Sector News Data."""
-
- __alias_dict__ = {
- "symbols": "ticker",
- "date": "publishedDate",
- "text": "summary",
- "title": "headline",
- }
-
- publisher: str = Field(description="Publisher of the news.")
- risk_category: str = Field(description="Risk category of the news.")
-
-
-class UltimaSectorNewsFetcher(
- Fetcher[
- UltimaSectorNewsQueryParams,
- List[UltimaSectorNewsData],
- ]
-):
- """Transform the query, extract and transform the data from the Ultima endpoints."""
-
- @staticmethod
- def transform_query(params: Dict[str, Any]) -> UltimaSectorNewsQueryParams:
- """Transform query."""
- return UltimaSectorNewsQueryParams(**params)
-
- @staticmethod
- def extract_data(
- query: UltimaSectorNewsQueryParams,
- credentials: Optional[Dict[str, str]],
- **kwargs: Any,
- ) -> List[Dict]:
- """Extract data from Ultima Insights API."""
- token = credentials.get("ultima_api_key") if credentials else ""
- kwargs["auth"] = token
-
- base_url = "https://api.ultimainsights.ai/v1/getCompaniesForSectors"
- pro_base_url = "https://api.ultimainsights.ai/v1/getOpenBBProInsights"
-
- querystring = str(query).split("=")[1].split("'")[1]
-
- tickers = []
- url = f"{base_url}/{querystring}"
- response = get_data(url, **kwargs)
- tickers.extend(response)
-
- querystring = ",".join(tickers)
-
- data = []
- url = f"{pro_base_url}/{querystring}"
- response = get_data(url, **kwargs)
- data.extend(response)
-
- return data
-
- @staticmethod
- def transform_data(
- query: UltimaSectorNewsQueryParams,
- data: List[Dict],
- **kwargs: Any,
- ) -> List[UltimaSectorNewsData]:
- """Transform data."""
- results = []
- for ele in data:
- for key in ["8k_filings", "articles", "industry_summary"]:
- for item in ele[key]:
- # manual assignment required for Pydantic to work
- item["symbols"] = ele["ticker"]
- item["date"] = datetime.strptime(
- item["publishedDate"], "%Y-%m-%d %H:%M:%S"
- )
- item["title"] = item["headline"]
- item["url"] = item["url"]
- item["publisher"] = item["publisher"]
- item["risk_category"] = item["riskCategory"]
- results.append(UltimaSectorNewsData.model_validate(item))
- return results
diff --git a/openbb_platform/providers/ultima/openbb_ultima/py.typed b/openbb_platform/providers/ultima/openbb_ultima/py.typed
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/openbb_platform/providers/ultima/openbb_ultima/py.typed
+++ /dev/null
diff --git a/openbb_platform/providers/ultima/openbb_ultima/utils/__init__.py b/openbb_platform/providers/ultima/openbb_ultima/utils/__init__.py
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/openbb_platform/providers/ultima/openbb_ultima/utils/__init__.py
+++ /dev/null
diff --git a/openbb_platform/providers/ultima/openbb_ultima/utils/helpers.py b/openbb_platform/providers/ultima/openbb_ultima/utils/helpers.py
deleted file mode 100644
index 1fe2c3dc64e..00000000000
--- a/openbb_platform/providers/ultima/openbb_ultima/utils/helpers.py
+++ /dev/null
@@ -1,26 +0,0 @@
-"""Ultima Helpers."""
-
-from typing import Any, Dict
-
-from openbb_core.provider import helpers
-
-
-def get_data(url: str, **kwargs: Any) -> Dict:
- """Do an API request to Ultima and return the data."""
- auth = kwargs.pop("auth", "")
- if auth is None or len(auth) == 0:
- raise RuntimeError("Ultima API key is required.")
- if "Bearer" not in auth:
- auth = f"Bearer {auth}"
- result = helpers.make_request(
- url,
- timeout=10,
- headers={"accept": "application/json", "Authorization": auth},
- **kwargs,
- )
- if result.status_code != 200:
- data = result.json()
- message = data.get("message")
- raise RuntimeError(f"Error in Ultima request -> {message}")
-
- return result.json()
diff --git a/openbb_platform/providers/ultima/poetry.lock b/openbb_platform/providers/ultima/poetry.lock
deleted file mode 100644
index 085721f79a1..00000000000
--- a/openbb_platform/providers/ultima/poetry.lock
+++ /dev/null
@@ -1,1393 +0,0 @@
-# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand.
-
-[[package]]
-name = "aiohttp"
-version = "3.9.1"
-description = "Async http client/server framework (asyncio)"
-optional = false
-python-versions = ">=3.8"
-files = [
- {file = "aiohttp-3.9.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e1f80197f8b0b846a8d5cf7b7ec6084493950d0882cc5537fb7b96a69e3c8590"},
- {file = "aiohttp-3.9.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c72444d17777865734aa1a4d167794c34b63e5883abb90356a0364a28904e6c0"},
- {file = "aiohttp-3.9.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9b05d5cbe9dafcdc733262c3a99ccf63d2f7ce02543620d2bd8db4d4f7a22f83"},
- {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c4fa235d534b3547184831c624c0b7c1e262cd1de847d95085ec94c16fddcd5"},
- {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:289ba9ae8e88d0ba16062ecf02dd730b34186ea3b1e7489046fc338bdc3361c4"},
- {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bff7e2811814fa2271be95ab6e84c9436d027a0e59665de60edf44e529a42c1f"},
- {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81b77f868814346662c96ab36b875d7814ebf82340d3284a31681085c051320f"},
- {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3b9c7426923bb7bd66d409da46c41e3fb40f5caf679da624439b9eba92043fa6"},
- {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8d44e7bf06b0c0a70a20f9100af9fcfd7f6d9d3913e37754c12d424179b4e48f"},
- {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:22698f01ff5653fe66d16ffb7658f582a0ac084d7da1323e39fd9eab326a1f26"},
- {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ca7ca5abfbfe8d39e653870fbe8d7710be7a857f8a8386fc9de1aae2e02ce7e4"},
- {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:8d7f98fde213f74561be1d6d3fa353656197f75d4edfbb3d94c9eb9b0fc47f5d"},
- {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5216b6082c624b55cfe79af5d538e499cd5f5b976820eac31951fb4325974501"},
- {file = "aiohttp-3.9.1-cp310-cp310-win32.whl", hash = "sha256:0e7ba7ff228c0d9a2cd66194e90f2bca6e0abca810b786901a569c0de082f489"},
- {file = "aiohttp-3.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:c7e939f1ae428a86e4abbb9a7c4732bf4706048818dfd979e5e2839ce0159f23"},
- {file = "aiohttp-3.9.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:df9cf74b9bc03d586fc53ba470828d7b77ce51b0582d1d0b5b2fb673c0baa32d"},
- {file = "aiohttp-3.9.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ecca113f19d5e74048c001934045a2b9368d77b0b17691d905af18bd1c21275e"},
- {file = "aiohttp-3.9.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8cef8710fb849d97c533f259103f09bac167a008d7131d7b2b0e3a33269185c0"},
- {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bea94403a21eb94c93386d559bce297381609153e418a3ffc7d6bf772f59cc35"},
- {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91c742ca59045dce7ba76cab6e223e41d2c70d79e82c284a96411f8645e2afff"},
- {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6c93b7c2e52061f0925c3382d5cb8980e40f91c989563d3d32ca280069fd6a87"},
- {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee2527134f95e106cc1653e9ac78846f3a2ec1004cf20ef4e02038035a74544d"},
- {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11ff168d752cb41e8492817e10fb4f85828f6a0142b9726a30c27c35a1835f01"},
- {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b8c3a67eb87394386847d188996920f33b01b32155f0a94f36ca0e0c635bf3e3"},
- {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c7b5d5d64e2a14e35a9240b33b89389e0035e6de8dbb7ffa50d10d8b65c57449"},
- {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:69985d50a2b6f709412d944ffb2e97d0be154ea90600b7a921f95a87d6f108a2"},
- {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:c9110c06eaaac7e1f5562caf481f18ccf8f6fdf4c3323feab28a93d34cc646bd"},
- {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d737e69d193dac7296365a6dcb73bbbf53bb760ab25a3727716bbd42022e8d7a"},
- {file = "aiohttp-3.9.1-cp311-cp311-win32.whl", hash = "sha256:4ee8caa925aebc1e64e98432d78ea8de67b2272252b0a931d2ac3bd876ad5544"},
- {file = "aiohttp-3.9.1-cp311-cp311-win_amd64.whl", hash = "sha256:a34086c5cc285be878622e