From f2437308b1f06c9e12bff75e2d9db60d4af21837 Mon Sep 17 00:00:00 2001 From: Ruslan Bel'kov Date: Wed, 13 Nov 2024 19:37:30 +0300 Subject: [PATCH] feat: generate avatar; cleanup bot messages --- Dockerfile | 9 +- README.md | 6 +- bot.py | 38 - docker-compose.yaml | 6 + docker-compose.yml | 8 - poetry.lock | 1399 +++++++++++++++++++++------------ pyproject.toml | 16 +- src/__init__.py | 0 src/avatar.py | 84 ++ src/bot.py | 205 +++++ src/color.py | 14 + src/parse_chat_name.py | 24 + static/Rubik-Bold.ttf | Bin 0 -> 208320 bytes static/logo.png | Bin 0 -> 625 bytes tests/test_parse_chat_name.py | 84 ++ 15 files changed, 1331 insertions(+), 562 deletions(-) delete mode 100644 bot.py create mode 100644 docker-compose.yaml delete mode 100644 docker-compose.yml create mode 100644 src/__init__.py create mode 100644 src/avatar.py create mode 100644 src/bot.py create mode 100644 src/color.py create mode 100644 src/parse_chat_name.py create mode 100644 static/Rubik-Bold.ttf create mode 100644 static/logo.png create mode 100644 tests/test_parse_chat_name.py diff --git a/Dockerfile b/Dockerfile index 32f423c..eec60ab 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,11 +1,12 @@ -FROM python:3.11-slim +FROM python:3.12-slim WORKDIR /usr/src/app -COPY pyproject.toml . +COPY pyproject.toml poetry.lock ./ RUN pip install poetry && poetry config virtualenvs.create false && poetry install --no-root -COPY . . +COPY static static +COPY src src -CMD ["python", "./bot.py"] +CMD ["python", "-m", "src.bot"] diff --git a/README.md b/README.md index af1d738..23eac55 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ Simplest bot for removing join/left notifications in Telegram chats. Built with ## Prerequisites -- Python 3.9 or newer +- Python 3.12 or newer - Docker and Docker Compose (for Docker deployment) - A Dokku server (for Dokku deployment) @@ -26,8 +26,8 @@ Simplest bot for removing join/left notifications in Telegram chats. Built with 1. Clone this repository: -`git clone https://github.com/IgorDuino/inno-chat-cleaner.git` -`cd inno-chat-cleaner` +`git clone https://github.com/one-zero-eight/chat-helper.git` +`cd chat-helper` 2. Create a `.env` file in the root directory with your Telegram bot token: diff --git a/bot.py b/bot.py deleted file mode 100644 index 5e0554b..0000000 --- a/bot.py +++ /dev/null @@ -1,38 +0,0 @@ -import logging -import os - -from aiogram import Bot, Dispatcher, executor, types -from aiogram.contrib.middlewares.logging import LoggingMiddleware -from aiogram.utils.exceptions import MessageToDeleteNotFound, MessageCantBeDeleted - -API_TOKEN = os.getenv('TELEGRAM_API_TOKEN') - -bot = Bot(token=API_TOKEN) -dp = Dispatcher(bot) -dp.middleware.setup(LoggingMiddleware()) - -logging.basicConfig(level=logging.INFO) - - -@dp.message_handler(content_types=['left_chat_member', 'new_chat_members']) -async def handle_left_member(message: types.Message): - if message.new_chat_members and message.new_chat_members[0].id == bot.id: - await message.reply( - "Привет! Я бот, который помогает управлять уведомлениями о входе и выходе участников в чатах\n" - "Пожалуйста, назначьте меня администратором, чтобы я мог удалять уведомления о входе и выходе участников.") - try: - await message.delete() - logging.info(f"Message deleted: {message.message_id}") - - except MessageToDeleteNotFound: - logging.warning(f"Message not found for deletion: {message.message_id}") - except MessageCantBeDeleted: - if (await bot.get_chat_member(message.chat.id, bot.id)).is_chat_admin(): - logging.warning(f"Message can't be deleted for unknown reason: {message.message_id}") - else: - logging.warning(f"Message can't because bot isn't admin: {message.message_id}") - - -if __name__ == '__main__': - logging.info("Starting bot") - executor.start_polling(dp, skip_updates=True) diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..71f9845 --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,6 @@ +services: + bot: + build: . + restart: always + environment: + TELEGRAM_API_TOKEN: $TELEGRAM_API_TOKEN diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index 3196372..0000000 --- a/docker-compose.yml +++ /dev/null @@ -1,8 +0,0 @@ -version: "3.8" - -services: - bot: - build: . - restart: unless-stopped - env_file: - - .env diff --git a/poetry.lock b/poetry.lock index cec9fe0..0b5c43d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,133 +1,167 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. + +[[package]] +name = "aiofiles" +version = "24.1.0" +description = "File support for asyncio." +optional = false +python-versions = ">=3.8" +files = [ + {file = "aiofiles-24.1.0-py3-none-any.whl", hash = "sha256:b4ec55f4195e3eb5d7abd1bf7e061763e864dd4954231fb8539a0ef8bb8260e5"}, + {file = "aiofiles-24.1.0.tar.gz", hash = "sha256:22a075c9e5a3810f0c2e48f3008c94d68c65d763b9b03857924c99e57355166c"}, +] [[package]] name = "aiogram" -version = "2.25.2" -description = "Is a pretty simple and fully asynchronous framework for Telegram Bot API" +version = "3.14.0" +description = "Modern and fully asynchronous framework for Telegram Bot API" optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" files = [ - {file = "aiogram-2.25.2-py3-none-any.whl", hash = "sha256:960b0a1a7238d515f7ab335cbbbc115a1b89579fdf2cb1cb4852a227346acb78"}, - {file = "aiogram-2.25.2.tar.gz", hash = "sha256:c4bc59b8c455c36e4f4de4a3f4ba79812717bbdb7a146552b5248ba6533afb31"}, + {file = "aiogram-3.14.0-py3-none-any.whl", hash = "sha256:ac86088673b04a30bb005a0075610d0048fcf4e9d1b33e42ab13502410cb1cf6"}, + {file = "aiogram-3.14.0.tar.gz", hash = "sha256:68529d7cb8b5cfa862b42c687cb5219eab9e8d589b4729e4806ece50a192d88f"}, ] [package.dependencies] -aiohttp = ">=3.8.0,<3.9.0" -Babel = ">=2.9.1,<2.10.0" -certifi = ">=2021.10.8" -magic-filter = ">=1.0.9" +aiofiles = ">=23.2.1,<24.2" +aiohttp = ">=3.9.0,<3.11" +certifi = ">=2023.7.22" +magic-filter = ">=1.0.12,<1.1" +pydantic = ">=2.4.1,<2.10" +typing-extensions = ">=4.7.0,<=5.0" [package.extras] -fast = ["ujson (>=1.35)", "uvloop (>=0.16.0,<0.17.0)"] -proxy = ["aiohttp-socks (>=0.5.3,<0.6.0)"] +cli = ["aiogram-cli (>=1.1.0,<2.0.0)"] +dev = ["black (>=24.4.2,<24.5.0)", "isort (>=5.13.2,<5.14.0)", "motor-types (>=1.0.0b4,<1.1.0)", "mypy (>=1.10.0,<1.11.0)", "packaging (>=24.1,<25.0)", "pre-commit (>=3.5,<4.0)", "ruff (>=0.5.1,<0.6.0)", "toml (>=0.10.2,<0.11.0)"] +docs = ["furo (>=2024.8.6,<2024.9.0)", "markdown-include (>=0.8.1,<0.9.0)", "pygments (>=2.18.0,<2.19.0)", "pymdown-extensions (>=10.3,<11.0)", "sphinx (>=8.0.2,<8.1.0)", "sphinx-autobuild (>=2024.9.3,<2024.10.0)", "sphinx-copybutton (>=0.5.2,<0.6.0)", "sphinx-intl (>=2.2.0,<2.3.0)", "sphinx-substitution-extensions (>=2024.8.6,<2024.9.0)", "sphinxcontrib-towncrier (>=0.4.0a0,<0.5.0)", "towncrier (>=24.8.0,<24.9.0)"] +fast = ["aiodns (>=3.0.0)", "uvloop (>=0.17.0)", "uvloop (>=0.21.0)"] +i18n = ["babel (>=2.13.0,<2.14.0)"] +mongo = ["motor (>=3.3.2,<3.7.0)"] +proxy = ["aiohttp-socks (>=0.8.3,<0.9.0)"] +redis = ["redis[hiredis] (>=5.0.1,<5.1.0)"] +test = ["aresponses (>=2.1.6,<2.2.0)", "pycryptodomex (>=3.19.0,<3.20.0)", "pytest (>=7.4.2,<7.5.0)", "pytest-aiohttp (>=1.0.5,<1.1.0)", "pytest-asyncio (>=0.21.1,<0.22.0)", "pytest-cov (>=4.1.0,<4.2.0)", "pytest-html (>=4.0.2,<4.1.0)", "pytest-lazy-fixture (>=0.6.3,<0.7.0)", "pytest-mock (>=3.12.0,<3.13.0)", "pytest-mypy (>=0.10.3,<0.11.0)", "pytz (>=2023.3,<2024.0)"] + +[[package]] +name = "aiohappyeyeballs" +version = "2.4.3" +description = "Happy Eyeballs for asyncio" +optional = false +python-versions = ">=3.8" +files = [ + {file = "aiohappyeyeballs-2.4.3-py3-none-any.whl", hash = "sha256:8a7a83727b2756f394ab2895ea0765a0a8c475e3c71e98d43d76f22b4b435572"}, + {file = "aiohappyeyeballs-2.4.3.tar.gz", hash = "sha256:75cf88a15106a5002a8eb1dab212525c00d1f4c0fa96e551c9fbe6f09a621586"}, +] [[package]] name = "aiohttp" -version = "3.8.6" +version = "3.10.10" description = "Async http client/server framework (asyncio)" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "aiohttp-3.8.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:41d55fc043954cddbbd82503d9cc3f4814a40bcef30b3569bc7b5e34130718c1"}, - {file = "aiohttp-3.8.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1d84166673694841d8953f0a8d0c90e1087739d24632fe86b1a08819168b4566"}, - {file = "aiohttp-3.8.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:253bf92b744b3170eb4c4ca2fa58f9c4b87aeb1df42f71d4e78815e6e8b73c9e"}, - {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3fd194939b1f764d6bb05490987bfe104287bbf51b8d862261ccf66f48fb4096"}, - {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6c5f938d199a6fdbdc10bbb9447496561c3a9a565b43be564648d81e1102ac22"}, - {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2817b2f66ca82ee699acd90e05c95e79bbf1dc986abb62b61ec8aaf851e81c93"}, - {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fa375b3d34e71ccccf172cab401cd94a72de7a8cc01847a7b3386204093bb47"}, - {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9de50a199b7710fa2904be5a4a9b51af587ab24c8e540a7243ab737b45844543"}, - {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e1d8cb0b56b3587c5c01de3bf2f600f186da7e7b5f7353d1bf26a8ddca57f965"}, - {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8e31e9db1bee8b4f407b77fd2507337a0a80665ad7b6c749d08df595d88f1cf5"}, - {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:7bc88fc494b1f0311d67f29fee6fd636606f4697e8cc793a2d912ac5b19aa38d"}, - {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ec00c3305788e04bf6d29d42e504560e159ccaf0be30c09203b468a6c1ccd3b2"}, - {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ad1407db8f2f49329729564f71685557157bfa42b48f4b93e53721a16eb813ed"}, - {file = "aiohttp-3.8.6-cp310-cp310-win32.whl", hash = "sha256:ccc360e87341ad47c777f5723f68adbb52b37ab450c8bc3ca9ca1f3e849e5fe2"}, - {file = "aiohttp-3.8.6-cp310-cp310-win_amd64.whl", hash = "sha256:93c15c8e48e5e7b89d5cb4613479d144fda8344e2d886cf694fd36db4cc86865"}, - {file = "aiohttp-3.8.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6e2f9cc8e5328f829f6e1fb74a0a3a939b14e67e80832975e01929e320386b34"}, - {file = "aiohttp-3.8.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e6a00ffcc173e765e200ceefb06399ba09c06db97f401f920513a10c803604ca"}, - {file = "aiohttp-3.8.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:41bdc2ba359032e36c0e9de5a3bd00d6fb7ea558a6ce6b70acedf0da86458321"}, - {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14cd52ccf40006c7a6cd34a0f8663734e5363fd981807173faf3a017e202fec9"}, - {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2d5b785c792802e7b275c420d84f3397668e9d49ab1cb52bd916b3b3ffcf09ad"}, - {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1bed815f3dc3d915c5c1e556c397c8667826fbc1b935d95b0ad680787896a358"}, - {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96603a562b546632441926cd1293cfcb5b69f0b4159e6077f7c7dbdfb686af4d"}, - {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d76e8b13161a202d14c9584590c4df4d068c9567c99506497bdd67eaedf36403"}, - {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e3f1e3f1a1751bb62b4a1b7f4e435afcdade6c17a4fd9b9d43607cebd242924a"}, - {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:76b36b3124f0223903609944a3c8bf28a599b2cc0ce0be60b45211c8e9be97f8"}, - {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:a2ece4af1f3c967a4390c284797ab595a9f1bc1130ef8b01828915a05a6ae684"}, - {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:16d330b3b9db87c3883e565340d292638a878236418b23cc8b9b11a054aaa887"}, - {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:42c89579f82e49db436b69c938ab3e1559e5a4409eb8639eb4143989bc390f2f"}, - {file = "aiohttp-3.8.6-cp311-cp311-win32.whl", hash = "sha256:efd2fcf7e7b9d7ab16e6b7d54205beded0a9c8566cb30f09c1abe42b4e22bdcb"}, - {file = "aiohttp-3.8.6-cp311-cp311-win_amd64.whl", hash = "sha256:3b2ab182fc28e7a81f6c70bfbd829045d9480063f5ab06f6e601a3eddbbd49a0"}, - {file = "aiohttp-3.8.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:fdee8405931b0615220e5ddf8cd7edd8592c606a8e4ca2a00704883c396e4479"}, - {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d25036d161c4fe2225d1abff2bd52c34ed0b1099f02c208cd34d8c05729882f0"}, - {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d791245a894be071d5ab04bbb4850534261a7d4fd363b094a7b9963e8cdbd31"}, - {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0cccd1de239afa866e4ce5c789b3032442f19c261c7d8a01183fd956b1935349"}, - {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f13f60d78224f0dace220d8ab4ef1dbc37115eeeab8c06804fec11bec2bbd07"}, - {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a9b5a0606faca4f6cc0d338359d6fa137104c337f489cd135bb7fbdbccb1e39"}, - {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:13da35c9ceb847732bf5c6c5781dcf4780e14392e5d3b3c689f6d22f8e15ae31"}, - {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:4d4cbe4ffa9d05f46a28252efc5941e0462792930caa370a6efaf491f412bc66"}, - {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:229852e147f44da0241954fc6cb910ba074e597f06789c867cb7fb0621e0ba7a"}, - {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:713103a8bdde61d13490adf47171a1039fd880113981e55401a0f7b42c37d071"}, - {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:45ad816b2c8e3b60b510f30dbd37fe74fd4a772248a52bb021f6fd65dff809b6"}, - {file = "aiohttp-3.8.6-cp36-cp36m-win32.whl", hash = "sha256:2b8d4e166e600dcfbff51919c7a3789ff6ca8b3ecce16e1d9c96d95dd569eb4c"}, - {file = "aiohttp-3.8.6-cp36-cp36m-win_amd64.whl", hash = "sha256:0912ed87fee967940aacc5306d3aa8ba3a459fcd12add0b407081fbefc931e53"}, - {file = "aiohttp-3.8.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e2a988a0c673c2e12084f5e6ba3392d76c75ddb8ebc6c7e9ead68248101cd446"}, - {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebf3fd9f141700b510d4b190094db0ce37ac6361a6806c153c161dc6c041ccda"}, - {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3161ce82ab85acd267c8f4b14aa226047a6bee1e4e6adb74b798bd42c6ae1f80"}, - {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d95fc1bf33a9a81469aa760617b5971331cdd74370d1214f0b3109272c0e1e3c"}, - {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c43ecfef7deaf0617cee936836518e7424ee12cb709883f2c9a1adda63cc460"}, - {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca80e1b90a05a4f476547f904992ae81eda5c2c85c66ee4195bb8f9c5fb47f28"}, - {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:90c72ebb7cb3a08a7f40061079817133f502a160561d0675b0a6adf231382c92"}, - {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bb54c54510e47a8c7c8e63454a6acc817519337b2b78606c4e840871a3e15349"}, - {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:de6a1c9f6803b90e20869e6b99c2c18cef5cc691363954c93cb9adeb26d9f3ae"}, - {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:a3628b6c7b880b181a3ae0a0683698513874df63783fd89de99b7b7539e3e8a8"}, - {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:fc37e9aef10a696a5a4474802930079ccfc14d9f9c10b4662169671ff034b7df"}, - {file = "aiohttp-3.8.6-cp37-cp37m-win32.whl", hash = "sha256:f8ef51e459eb2ad8e7a66c1d6440c808485840ad55ecc3cafefadea47d1b1ba2"}, - {file = "aiohttp-3.8.6-cp37-cp37m-win_amd64.whl", hash = "sha256:b2fe42e523be344124c6c8ef32a011444e869dc5f883c591ed87f84339de5976"}, - {file = "aiohttp-3.8.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:9e2ee0ac5a1f5c7dd3197de309adfb99ac4617ff02b0603fd1e65b07dc772e4b"}, - {file = "aiohttp-3.8.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:01770d8c04bd8db568abb636c1fdd4f7140b284b8b3e0b4584f070180c1e5c62"}, - {file = "aiohttp-3.8.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3c68330a59506254b556b99a91857428cab98b2f84061260a67865f7f52899f5"}, - {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89341b2c19fb5eac30c341133ae2cc3544d40d9b1892749cdd25892bbc6ac951"}, - {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71783b0b6455ac8f34b5ec99d83e686892c50498d5d00b8e56d47f41b38fbe04"}, - {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f628dbf3c91e12f4d6c8b3f092069567d8eb17814aebba3d7d60c149391aee3a"}, - {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b04691bc6601ef47c88f0255043df6f570ada1a9ebef99c34bd0b72866c217ae"}, - {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ee912f7e78287516df155f69da575a0ba33b02dd7c1d6614dbc9463f43066e3"}, - {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9c19b26acdd08dd239e0d3669a3dddafd600902e37881f13fbd8a53943079dbc"}, - {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:99c5ac4ad492b4a19fc132306cd57075c28446ec2ed970973bbf036bcda1bcc6"}, - {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:f0f03211fd14a6a0aed2997d4b1c013d49fb7b50eeb9ffdf5e51f23cfe2c77fa"}, - {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:8d399dade330c53b4106160f75f55407e9ae7505263ea86f2ccca6bfcbdb4921"}, - {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ec4fd86658c6a8964d75426517dc01cbf840bbf32d055ce64a9e63a40fd7b771"}, - {file = "aiohttp-3.8.6-cp38-cp38-win32.whl", hash = "sha256:33164093be11fcef3ce2571a0dccd9041c9a93fa3bde86569d7b03120d276c6f"}, - {file = "aiohttp-3.8.6-cp38-cp38-win_amd64.whl", hash = "sha256:bdf70bfe5a1414ba9afb9d49f0c912dc524cf60141102f3a11143ba3d291870f"}, - {file = "aiohttp-3.8.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d52d5dc7c6682b720280f9d9db41d36ebe4791622c842e258c9206232251ab2b"}, - {file = "aiohttp-3.8.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4ac39027011414dbd3d87f7edb31680e1f430834c8cef029f11c66dad0670aa5"}, - {file = "aiohttp-3.8.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3f5c7ce535a1d2429a634310e308fb7d718905487257060e5d4598e29dc17f0b"}, - {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b30e963f9e0d52c28f284d554a9469af073030030cef8693106d918b2ca92f54"}, - {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:918810ef188f84152af6b938254911055a72e0f935b5fbc4c1a4ed0b0584aed1"}, - {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:002f23e6ea8d3dd8d149e569fd580c999232b5fbc601c48d55398fbc2e582e8c"}, - {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4fcf3eabd3fd1a5e6092d1242295fa37d0354b2eb2077e6eb670accad78e40e1"}, - {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:255ba9d6d5ff1a382bb9a578cd563605aa69bec845680e21c44afc2670607a95"}, - {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d67f8baed00870aa390ea2590798766256f31dc5ed3ecc737debb6e97e2ede78"}, - {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:86f20cee0f0a317c76573b627b954c412ea766d6ada1a9fcf1b805763ae7feeb"}, - {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:39a312d0e991690ccc1a61f1e9e42daa519dcc34ad03eb6f826d94c1190190dd"}, - {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:e827d48cf802de06d9c935088c2924e3c7e7533377d66b6f31ed175c1620e05e"}, - {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bd111d7fc5591ddf377a408ed9067045259ff2770f37e2d94e6478d0f3fc0c17"}, - {file = "aiohttp-3.8.6-cp39-cp39-win32.whl", hash = "sha256:caf486ac1e689dda3502567eb89ffe02876546599bbf915ec94b1fa424eeffd4"}, - {file = "aiohttp-3.8.6-cp39-cp39-win_amd64.whl", hash = "sha256:3f0e27e5b733803333bb2371249f41cf42bae8884863e8e8965ec69bebe53132"}, - {file = "aiohttp-3.8.6.tar.gz", hash = "sha256:b0cf2a4501bff9330a8a5248b4ce951851e415bdcce9dc158e76cfd55e15085c"}, + {file = "aiohttp-3.10.10-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:be7443669ae9c016b71f402e43208e13ddf00912f47f623ee5994e12fc7d4b3f"}, + {file = "aiohttp-3.10.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7b06b7843929e41a94ea09eb1ce3927865387e3e23ebe108e0d0d09b08d25be9"}, + {file = "aiohttp-3.10.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:333cf6cf8e65f6a1e06e9eb3e643a0c515bb850d470902274239fea02033e9a8"}, + {file = "aiohttp-3.10.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:274cfa632350225ce3fdeb318c23b4a10ec25c0e2c880eff951a3842cf358ac1"}, + {file = "aiohttp-3.10.10-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d9e5e4a85bdb56d224f412d9c98ae4cbd032cc4f3161818f692cd81766eee65a"}, + {file = "aiohttp-3.10.10-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2b606353da03edcc71130b52388d25f9a30a126e04caef1fd637e31683033abd"}, + {file = "aiohttp-3.10.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab5a5a0c7a7991d90446a198689c0535be89bbd6b410a1f9a66688f0880ec026"}, + {file = "aiohttp-3.10.10-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:578a4b875af3e0daaf1ac6fa983d93e0bbfec3ead753b6d6f33d467100cdc67b"}, + {file = "aiohttp-3.10.10-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8105fd8a890df77b76dd3054cddf01a879fc13e8af576805d667e0fa0224c35d"}, + {file = "aiohttp-3.10.10-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3bcd391d083f636c06a68715e69467963d1f9600f85ef556ea82e9ef25f043f7"}, + {file = "aiohttp-3.10.10-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fbc6264158392bad9df19537e872d476f7c57adf718944cc1e4495cbabf38e2a"}, + {file = "aiohttp-3.10.10-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:e48d5021a84d341bcaf95c8460b152cfbad770d28e5fe14a768988c461b821bc"}, + {file = "aiohttp-3.10.10-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2609e9ab08474702cc67b7702dbb8a80e392c54613ebe80db7e8dbdb79837c68"}, + {file = "aiohttp-3.10.10-cp310-cp310-win32.whl", hash = "sha256:84afcdea18eda514c25bc68b9af2a2b1adea7c08899175a51fe7c4fb6d551257"}, + {file = "aiohttp-3.10.10-cp310-cp310-win_amd64.whl", hash = "sha256:9c72109213eb9d3874f7ac8c0c5fa90e072d678e117d9061c06e30c85b4cf0e6"}, + {file = "aiohttp-3.10.10-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c30a0eafc89d28e7f959281b58198a9fa5e99405f716c0289b7892ca345fe45f"}, + {file = "aiohttp-3.10.10-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:258c5dd01afc10015866114e210fb7365f0d02d9d059c3c3415382ab633fcbcb"}, + {file = "aiohttp-3.10.10-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:15ecd889a709b0080f02721255b3f80bb261c2293d3c748151274dfea93ac871"}, + {file = "aiohttp-3.10.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3935f82f6f4a3820270842e90456ebad3af15810cf65932bd24da4463bc0a4c"}, + {file = "aiohttp-3.10.10-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:413251f6fcf552a33c981c4709a6bba37b12710982fec8e558ae944bfb2abd38"}, + {file = "aiohttp-3.10.10-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d1720b4f14c78a3089562b8875b53e36b51c97c51adc53325a69b79b4b48ebcb"}, + {file = "aiohttp-3.10.10-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:679abe5d3858b33c2cf74faec299fda60ea9de62916e8b67e625d65bf069a3b7"}, + {file = "aiohttp-3.10.10-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:79019094f87c9fb44f8d769e41dbb664d6e8fcfd62f665ccce36762deaa0e911"}, + {file = "aiohttp-3.10.10-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:fe2fb38c2ed905a2582948e2de560675e9dfbee94c6d5ccdb1301c6d0a5bf092"}, + {file = "aiohttp-3.10.10-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:a3f00003de6eba42d6e94fabb4125600d6e484846dbf90ea8e48a800430cc142"}, + {file = "aiohttp-3.10.10-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:1bbb122c557a16fafc10354b9d99ebf2f2808a660d78202f10ba9d50786384b9"}, + {file = "aiohttp-3.10.10-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:30ca7c3b94708a9d7ae76ff281b2f47d8eaf2579cd05971b5dc681db8caac6e1"}, + {file = "aiohttp-3.10.10-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:df9270660711670e68803107d55c2b5949c2e0f2e4896da176e1ecfc068b974a"}, + {file = "aiohttp-3.10.10-cp311-cp311-win32.whl", hash = "sha256:aafc8ee9b742ce75044ae9a4d3e60e3d918d15a4c2e08a6c3c3e38fa59b92d94"}, + {file = "aiohttp-3.10.10-cp311-cp311-win_amd64.whl", hash = "sha256:362f641f9071e5f3ee6f8e7d37d5ed0d95aae656adf4ef578313ee585b585959"}, + {file = "aiohttp-3.10.10-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:9294bbb581f92770e6ed5c19559e1e99255e4ca604a22c5c6397b2f9dd3ee42c"}, + {file = "aiohttp-3.10.10-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a8fa23fe62c436ccf23ff930149c047f060c7126eae3ccea005f0483f27b2e28"}, + {file = "aiohttp-3.10.10-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5c6a5b8c7926ba5d8545c7dd22961a107526562da31a7a32fa2456baf040939f"}, + {file = "aiohttp-3.10.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:007ec22fbc573e5eb2fb7dec4198ef8f6bf2fe4ce20020798b2eb5d0abda6138"}, + {file = "aiohttp-3.10.10-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9627cc1a10c8c409b5822a92d57a77f383b554463d1884008e051c32ab1b3742"}, + {file = "aiohttp-3.10.10-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:50edbcad60d8f0e3eccc68da67f37268b5144ecc34d59f27a02f9611c1d4eec7"}, + {file = "aiohttp-3.10.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a45d85cf20b5e0d0aa5a8dca27cce8eddef3292bc29d72dcad1641f4ed50aa16"}, + {file = "aiohttp-3.10.10-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0b00807e2605f16e1e198f33a53ce3c4523114059b0c09c337209ae55e3823a8"}, + {file = "aiohttp-3.10.10-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f2d4324a98062be0525d16f768a03e0bbb3b9fe301ceee99611dc9a7953124e6"}, + {file = "aiohttp-3.10.10-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:438cd072f75bb6612f2aca29f8bd7cdf6e35e8f160bc312e49fbecab77c99e3a"}, + {file = "aiohttp-3.10.10-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:baa42524a82f75303f714108fea528ccacf0386af429b69fff141ffef1c534f9"}, + {file = "aiohttp-3.10.10-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:a7d8d14fe962153fc681f6366bdec33d4356f98a3e3567782aac1b6e0e40109a"}, + {file = "aiohttp-3.10.10-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c1277cd707c465cd09572a774559a3cc7c7a28802eb3a2a9472588f062097205"}, + {file = "aiohttp-3.10.10-cp312-cp312-win32.whl", hash = "sha256:59bb3c54aa420521dc4ce3cc2c3fe2ad82adf7b09403fa1f48ae45c0cbde6628"}, + {file = "aiohttp-3.10.10-cp312-cp312-win_amd64.whl", hash = "sha256:0e1b370d8007c4ae31ee6db7f9a2fe801a42b146cec80a86766e7ad5c4a259cf"}, + {file = "aiohttp-3.10.10-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ad7593bb24b2ab09e65e8a1d385606f0f47c65b5a2ae6c551db67d6653e78c28"}, + {file = "aiohttp-3.10.10-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1eb89d3d29adaf533588f209768a9c02e44e4baf832b08118749c5fad191781d"}, + {file = "aiohttp-3.10.10-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3fe407bf93533a6fa82dece0e74dbcaaf5d684e5a51862887f9eaebe6372cd79"}, + {file = "aiohttp-3.10.10-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50aed5155f819873d23520919e16703fc8925e509abbb1a1491b0087d1cd969e"}, + {file = "aiohttp-3.10.10-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4f05e9727ce409358baa615dbeb9b969db94324a79b5a5cea45d39bdb01d82e6"}, + {file = "aiohttp-3.10.10-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3dffb610a30d643983aeb185ce134f97f290f8935f0abccdd32c77bed9388b42"}, + {file = "aiohttp-3.10.10-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa6658732517ddabe22c9036479eabce6036655ba87a0224c612e1ae6af2087e"}, + {file = "aiohttp-3.10.10-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:741a46d58677d8c733175d7e5aa618d277cd9d880301a380fd296975a9cdd7bc"}, + {file = "aiohttp-3.10.10-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e00e3505cd80440f6c98c6d69269dcc2a119f86ad0a9fd70bccc59504bebd68a"}, + {file = "aiohttp-3.10.10-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ffe595f10566f8276b76dc3a11ae4bb7eba1aac8ddd75811736a15b0d5311414"}, + {file = "aiohttp-3.10.10-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:bdfcf6443637c148c4e1a20c48c566aa694fa5e288d34b20fcdc58507882fed3"}, + {file = "aiohttp-3.10.10-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:d183cf9c797a5291e8301790ed6d053480ed94070637bfaad914dd38b0981f67"}, + {file = "aiohttp-3.10.10-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:77abf6665ae54000b98b3c742bc6ea1d1fb31c394bcabf8b5d2c1ac3ebfe7f3b"}, + {file = "aiohttp-3.10.10-cp313-cp313-win32.whl", hash = "sha256:4470c73c12cd9109db8277287d11f9dd98f77fc54155fc71a7738a83ffcc8ea8"}, + {file = "aiohttp-3.10.10-cp313-cp313-win_amd64.whl", hash = "sha256:486f7aabfa292719a2753c016cc3a8f8172965cabb3ea2e7f7436c7f5a22a151"}, + {file = "aiohttp-3.10.10-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:1b66ccafef7336a1e1f0e389901f60c1d920102315a56df85e49552308fc0486"}, + {file = "aiohttp-3.10.10-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:acd48d5b80ee80f9432a165c0ac8cbf9253eaddb6113269a5e18699b33958dbb"}, + {file = "aiohttp-3.10.10-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3455522392fb15ff549d92fbf4b73b559d5e43dc522588f7eb3e54c3f38beee7"}, + {file = "aiohttp-3.10.10-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45c3b868724137f713a38376fef8120c166d1eadd50da1855c112fe97954aed8"}, + {file = "aiohttp-3.10.10-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:da1dee8948d2137bb51fbb8a53cce6b1bcc86003c6b42565f008438b806cccd8"}, + {file = "aiohttp-3.10.10-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c5ce2ce7c997e1971b7184ee37deb6ea9922ef5163c6ee5aa3c274b05f9e12fa"}, + {file = "aiohttp-3.10.10-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28529e08fde6f12eba8677f5a8608500ed33c086f974de68cc65ab218713a59d"}, + {file = "aiohttp-3.10.10-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f7db54c7914cc99d901d93a34704833568d86c20925b2762f9fa779f9cd2e70f"}, + {file = "aiohttp-3.10.10-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:03a42ac7895406220124c88911ebee31ba8b2d24c98507f4a8bf826b2937c7f2"}, + {file = "aiohttp-3.10.10-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:7e338c0523d024fad378b376a79faff37fafb3c001872a618cde1d322400a572"}, + {file = "aiohttp-3.10.10-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:038f514fe39e235e9fef6717fbf944057bfa24f9b3db9ee551a7ecf584b5b480"}, + {file = "aiohttp-3.10.10-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:64f6c17757251e2b8d885d728b6433d9d970573586a78b78ba8929b0f41d045a"}, + {file = "aiohttp-3.10.10-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:93429602396f3383a797a2a70e5f1de5df8e35535d7806c9f91df06f297e109b"}, + {file = "aiohttp-3.10.10-cp38-cp38-win32.whl", hash = "sha256:c823bc3971c44ab93e611ab1a46b1eafeae474c0c844aff4b7474287b75fe49c"}, + {file = "aiohttp-3.10.10-cp38-cp38-win_amd64.whl", hash = "sha256:54ca74df1be3c7ca1cf7f4c971c79c2daf48d9aa65dea1a662ae18926f5bc8ce"}, + {file = "aiohttp-3.10.10-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:01948b1d570f83ee7bbf5a60ea2375a89dfb09fd419170e7f5af029510033d24"}, + {file = "aiohttp-3.10.10-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9fc1500fd2a952c5c8e3b29aaf7e3cc6e27e9cfc0a8819b3bce48cc1b849e4cc"}, + {file = "aiohttp-3.10.10-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f614ab0c76397661b90b6851a030004dac502e48260ea10f2441abd2207fbcc7"}, + {file = "aiohttp-3.10.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00819de9e45d42584bed046314c40ea7e9aea95411b38971082cad449392b08c"}, + {file = "aiohttp-3.10.10-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05646ebe6b94cc93407b3bf34b9eb26c20722384d068eb7339de802154d61bc5"}, + {file = "aiohttp-3.10.10-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:998f3bd3cfc95e9424a6acd7840cbdd39e45bc09ef87533c006f94ac47296090"}, + {file = "aiohttp-3.10.10-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9010c31cd6fa59438da4e58a7f19e4753f7f264300cd152e7f90d4602449762"}, + {file = "aiohttp-3.10.10-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ea7ffc6d6d6f8a11e6f40091a1040995cdff02cfc9ba4c2f30a516cb2633554"}, + {file = "aiohttp-3.10.10-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:ef9c33cc5cbca35808f6c74be11eb7f5f6b14d2311be84a15b594bd3e58b5527"}, + {file = "aiohttp-3.10.10-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:ce0cdc074d540265bfeb31336e678b4e37316849d13b308607efa527e981f5c2"}, + {file = "aiohttp-3.10.10-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:597a079284b7ee65ee102bc3a6ea226a37d2b96d0418cc9047490f231dc09fe8"}, + {file = "aiohttp-3.10.10-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:7789050d9e5d0c309c706953e5e8876e38662d57d45f936902e176d19f1c58ab"}, + {file = "aiohttp-3.10.10-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e7f8b04d83483577fd9200461b057c9f14ced334dcb053090cea1da9c8321a91"}, + {file = "aiohttp-3.10.10-cp39-cp39-win32.whl", hash = "sha256:c02a30b904282777d872266b87b20ed8cc0d1501855e27f831320f471d54d983"}, + {file = "aiohttp-3.10.10-cp39-cp39-win_amd64.whl", hash = "sha256:edfe3341033a6b53a5c522c802deb2079eee5cbfbb0af032a55064bd65c73a23"}, + {file = "aiohttp-3.10.10.tar.gz", hash = "sha256:0631dd7c9f0822cc61c88586ca76d5b5ada26538097d0f1df510b082bad3411a"}, ] [package.dependencies] +aiohappyeyeballs = ">=2.3.0" aiosignal = ">=1.1.2" -async-timeout = ">=4.0.0a3,<5.0" attrs = ">=17.3.0" -charset-normalizer = ">=2.0,<4.0" frozenlist = ">=1.1.1" multidict = ">=4.5,<7.0" -yarl = ">=1.0,<2.0" +yarl = ">=1.12.0,<2.0" [package.extras] -speedups = ["Brotli", "aiodns", "cchardet"] +speedups = ["Brotli", "aiodns (>=3.2.0)", "brotlicffi"] [[package]] name = "aiosignal" @@ -144,254 +178,181 @@ files = [ frozenlist = ">=1.1.0" [[package]] -name = "async-timeout" -version = "4.0.3" -description = "Timeout context manager for asyncio programs" +name = "annotated-types" +version = "0.7.0" +description = "Reusable constraint types to use with typing.Annotated" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"}, - {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"}, + {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, + {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, ] [[package]] name = "attrs" -version = "23.2.0" +version = "24.2.0" description = "Classes Without Boilerplate" optional = false python-versions = ">=3.7" files = [ - {file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"}, - {file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"}, + {file = "attrs-24.2.0-py3-none-any.whl", hash = "sha256:81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2"}, + {file = "attrs-24.2.0.tar.gz", hash = "sha256:5cfb1b9148b5b086569baec03f20d7b6bf3bcacc9a42bebf87ffaaca362f6346"}, ] [package.extras] -cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] -dev = ["attrs[tests]", "pre-commit"] -docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] -tests = ["attrs[tests-no-zope]", "zope-interface"] -tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"] -tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"] - -[[package]] -name = "babel" -version = "2.9.1" -description = "Internationalization utilities" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "Babel-2.9.1-py2.py3-none-any.whl", hash = "sha256:ab49e12b91d937cd11f0b67cb259a57ab4ad2b59ac7a3b41d6c06c0ac5b0def9"}, - {file = "Babel-2.9.1.tar.gz", hash = "sha256:bc0c176f9f6a994582230df350aa6e05ba2ebe4b3ac317eab29d9be5d2768da0"}, -] - -[package.dependencies] -pytz = ">=2015.7" +benchmark = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +cov = ["cloudpickle", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier (<24.7)"] +tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"] [[package]] name = "certifi" -version = "2024.2.2" +version = "2024.8.30" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"}, - {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, + {file = "certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8"}, + {file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"}, ] [[package]] -name = "charset-normalizer" -version = "3.3.2" -description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." optional = false -python-versions = ">=3.7.0" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ - {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, - {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] [[package]] name = "frozenlist" -version = "1.4.1" +version = "1.5.0" description = "A list-like structure which implements collections.abc.MutableSequence" optional = false python-versions = ">=3.8" files = [ - {file = "frozenlist-1.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f9aa1878d1083b276b0196f2dfbe00c9b7e752475ed3b682025ff20c1c1f51ac"}, - {file = "frozenlist-1.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:29acab3f66f0f24674b7dc4736477bcd4bc3ad4b896f5f45379a67bce8b96868"}, - {file = "frozenlist-1.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:74fb4bee6880b529a0c6560885fce4dc95936920f9f20f53d99a213f7bf66776"}, - {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:590344787a90ae57d62511dd7c736ed56b428f04cd8c161fcc5e7232c130c69a"}, - {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:068b63f23b17df8569b7fdca5517edef76171cf3897eb68beb01341131fbd2ad"}, - {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c849d495bf5154cd8da18a9eb15db127d4dba2968d88831aff6f0331ea9bd4c"}, - {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9750cc7fe1ae3b1611bb8cfc3f9ec11d532244235d75901fb6b8e42ce9229dfe"}, - {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9b2de4cf0cdd5bd2dee4c4f63a653c61d2408055ab77b151c1957f221cabf2a"}, - {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0633c8d5337cb5c77acbccc6357ac49a1770b8c487e5b3505c57b949b4b82e98"}, - {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:27657df69e8801be6c3638054e202a135c7f299267f1a55ed3a598934f6c0d75"}, - {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:f9a3ea26252bd92f570600098783d1371354d89d5f6b7dfd87359d669f2109b5"}, - {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:4f57dab5fe3407b6c0c1cc907ac98e8a189f9e418f3b6e54d65a718aaafe3950"}, - {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e02a0e11cf6597299b9f3bbd3f93d79217cb90cfd1411aec33848b13f5c656cc"}, - {file = "frozenlist-1.4.1-cp310-cp310-win32.whl", hash = "sha256:a828c57f00f729620a442881cc60e57cfcec6842ba38e1b19fd3e47ac0ff8dc1"}, - {file = "frozenlist-1.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:f56e2333dda1fe0f909e7cc59f021eba0d2307bc6f012a1ccf2beca6ba362439"}, - {file = "frozenlist-1.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a0cb6f11204443f27a1628b0e460f37fb30f624be6051d490fa7d7e26d4af3d0"}, - {file = "frozenlist-1.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b46c8ae3a8f1f41a0d2ef350c0b6e65822d80772fe46b653ab6b6274f61d4a49"}, - {file = "frozenlist-1.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fde5bd59ab5357e3853313127f4d3565fc7dad314a74d7b5d43c22c6a5ed2ced"}, - {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:722e1124aec435320ae01ee3ac7bec11a5d47f25d0ed6328f2273d287bc3abb0"}, - {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2471c201b70d58a0f0c1f91261542a03d9a5e088ed3dc6c160d614c01649c106"}, - {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c757a9dd70d72b076d6f68efdbb9bc943665ae954dad2801b874c8c69e185068"}, - {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f146e0911cb2f1da549fc58fc7bcd2b836a44b79ef871980d605ec392ff6b0d2"}, - {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f9c515e7914626b2a2e1e311794b4c35720a0be87af52b79ff8e1429fc25f19"}, - {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c302220494f5c1ebeb0912ea782bcd5e2f8308037b3c7553fad0e48ebad6ad82"}, - {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:442acde1e068288a4ba7acfe05f5f343e19fac87bfc96d89eb886b0363e977ec"}, - {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:1b280e6507ea8a4fa0c0a7150b4e526a8d113989e28eaaef946cc77ffd7efc0a"}, - {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:fe1a06da377e3a1062ae5fe0926e12b84eceb8a50b350ddca72dc85015873f74"}, - {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:db9e724bebd621d9beca794f2a4ff1d26eed5965b004a97f1f1685a173b869c2"}, - {file = "frozenlist-1.4.1-cp311-cp311-win32.whl", hash = "sha256:e774d53b1a477a67838a904131c4b0eef6b3d8a651f8b138b04f748fccfefe17"}, - {file = "frozenlist-1.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:fb3c2db03683b5767dedb5769b8a40ebb47d6f7f45b1b3e3b4b51ec8ad9d9825"}, - {file = "frozenlist-1.4.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:1979bc0aeb89b33b588c51c54ab0161791149f2461ea7c7c946d95d5f93b56ae"}, - {file = "frozenlist-1.4.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cc7b01b3754ea68a62bd77ce6020afaffb44a590c2289089289363472d13aedb"}, - {file = "frozenlist-1.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c9c92be9fd329ac801cc420e08452b70e7aeab94ea4233a4804f0915c14eba9b"}, - {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c3894db91f5a489fc8fa6a9991820f368f0b3cbdb9cd8849547ccfab3392d86"}, - {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ba60bb19387e13597fb059f32cd4d59445d7b18b69a745b8f8e5db0346f33480"}, - {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8aefbba5f69d42246543407ed2461db31006b0f76c4e32dfd6f42215a2c41d09"}, - {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780d3a35680ced9ce682fbcf4cb9c2bad3136eeff760ab33707b71db84664e3a"}, - {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9acbb16f06fe7f52f441bb6f413ebae6c37baa6ef9edd49cdd567216da8600cd"}, - {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:23b701e65c7b36e4bf15546a89279bd4d8675faabc287d06bbcfac7d3c33e1e6"}, - {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3e0153a805a98f5ada7e09826255ba99fb4f7524bb81bf6b47fb702666484ae1"}, - {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:dd9b1baec094d91bf36ec729445f7769d0d0cf6b64d04d86e45baf89e2b9059b"}, - {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:1a4471094e146b6790f61b98616ab8e44f72661879cc63fa1049d13ef711e71e"}, - {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5667ed53d68d91920defdf4035d1cdaa3c3121dc0b113255124bcfada1cfa1b8"}, - {file = "frozenlist-1.4.1-cp312-cp312-win32.whl", hash = "sha256:beee944ae828747fd7cb216a70f120767fc9f4f00bacae8543c14a6831673f89"}, - {file = "frozenlist-1.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:64536573d0a2cb6e625cf309984e2d873979709f2cf22839bf2d61790b448ad5"}, - {file = "frozenlist-1.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:20b51fa3f588ff2fe658663db52a41a4f7aa6c04f6201449c6c7c476bd255c0d"}, - {file = "frozenlist-1.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:410478a0c562d1a5bcc2f7ea448359fcb050ed48b3c6f6f4f18c313a9bdb1826"}, - {file = "frozenlist-1.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c6321c9efe29975232da3bd0af0ad216800a47e93d763ce64f291917a381b8eb"}, - {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48f6a4533887e189dae092f1cf981f2e3885175f7a0f33c91fb5b7b682b6bab6"}, - {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6eb73fa5426ea69ee0e012fb59cdc76a15b1283d6e32e4f8dc4482ec67d1194d"}, - {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fbeb989b5cc29e8daf7f976b421c220f1b8c731cbf22b9130d8815418ea45887"}, - {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32453c1de775c889eb4e22f1197fe3bdfe457d16476ea407472b9442e6295f7a"}, - {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693945278a31f2086d9bf3df0fe8254bbeaef1fe71e1351c3bd730aa7d31c41b"}, - {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:1d0ce09d36d53bbbe566fe296965b23b961764c0bcf3ce2fa45f463745c04701"}, - {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3a670dc61eb0d0eb7080890c13de3066790f9049b47b0de04007090807c776b0"}, - {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:dca69045298ce5c11fd539682cff879cc1e664c245d1c64da929813e54241d11"}, - {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a06339f38e9ed3a64e4c4e43aec7f59084033647f908e4259d279a52d3757d09"}, - {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b7f2f9f912dca3934c1baec2e4585a674ef16fe00218d833856408c48d5beee7"}, - {file = "frozenlist-1.4.1-cp38-cp38-win32.whl", hash = "sha256:e7004be74cbb7d9f34553a5ce5fb08be14fb33bc86f332fb71cbe5216362a497"}, - {file = "frozenlist-1.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:5a7d70357e7cee13f470c7883a063aae5fe209a493c57d86eb7f5a6f910fae09"}, - {file = "frozenlist-1.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bfa4a17e17ce9abf47a74ae02f32d014c5e9404b6d9ac7f729e01562bbee601e"}, - {file = "frozenlist-1.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b7e3ed87d4138356775346e6845cccbe66cd9e207f3cd11d2f0b9fd13681359d"}, - {file = "frozenlist-1.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c99169d4ff810155ca50b4da3b075cbde79752443117d89429595c2e8e37fed8"}, - {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edb678da49d9f72c9f6c609fbe41a5dfb9a9282f9e6a2253d5a91e0fc382d7c0"}, - {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6db4667b187a6742b33afbbaf05a7bc551ffcf1ced0000a571aedbb4aa42fc7b"}, - {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55fdc093b5a3cb41d420884cdaf37a1e74c3c37a31f46e66286d9145d2063bd0"}, - {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82e8211d69a4f4bc360ea22cd6555f8e61a1bd211d1d5d39d3d228b48c83a897"}, - {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89aa2c2eeb20957be2d950b85974b30a01a762f3308cd02bb15e1ad632e22dc7"}, - {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9d3e0c25a2350080e9319724dede4f31f43a6c9779be48021a7f4ebde8b2d742"}, - {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7268252af60904bf52c26173cbadc3a071cece75f873705419c8681f24d3edea"}, - {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:0c250a29735d4f15321007fb02865f0e6b6a41a6b88f1f523ca1596ab5f50bd5"}, - {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:96ec70beabbd3b10e8bfe52616a13561e58fe84c0101dd031dc78f250d5128b9"}, - {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:23b2d7679b73fe0e5a4560b672a39f98dfc6f60df63823b0a9970525325b95f6"}, - {file = "frozenlist-1.4.1-cp39-cp39-win32.whl", hash = "sha256:a7496bfe1da7fb1a4e1cc23bb67c58fab69311cc7d32b5a99c2007b4b2a0e932"}, - {file = "frozenlist-1.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:e6a20a581f9ce92d389a8c7d7c3dd47c81fd5d6e655c8dddf341e14aa48659d0"}, - {file = "frozenlist-1.4.1-py3-none-any.whl", hash = "sha256:04ced3e6a46b4cfffe20f9ae482818e34eba9b5fb0ce4056e4cc9b6e212d09b7"}, - {file = "frozenlist-1.4.1.tar.gz", hash = "sha256:c037a86e8513059a2613aaba4d817bb90b9d9b6b69aace3ce9c877e8c8ed402b"}, + {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5b6a66c18b5b9dd261ca98dffcb826a525334b2f29e7caa54e182255c5f6a65a"}, + {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d1b3eb7b05ea246510b43a7e53ed1653e55c2121019a97e60cad7efb881a97bb"}, + {file = "frozenlist-1.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:15538c0cbf0e4fa11d1e3a71f823524b0c46299aed6e10ebb4c2089abd8c3bec"}, + {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e79225373c317ff1e35f210dd5f1344ff31066ba8067c307ab60254cd3a78ad5"}, + {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9272fa73ca71266702c4c3e2d4a28553ea03418e591e377a03b8e3659d94fa76"}, + {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:498524025a5b8ba81695761d78c8dd7382ac0b052f34e66939c42df860b8ff17"}, + {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:92b5278ed9d50fe610185ecd23c55d8b307d75ca18e94c0e7de328089ac5dcba"}, + {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f3c8c1dacd037df16e85227bac13cca58c30da836c6f936ba1df0c05d046d8d"}, + {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f2ac49a9bedb996086057b75bf93538240538c6d9b38e57c82d51f75a73409d2"}, + {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e66cc454f97053b79c2ab09c17fbe3c825ea6b4de20baf1be28919460dd7877f"}, + {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:5a3ba5f9a0dfed20337d3e966dc359784c9f96503674c2faf015f7fe8e96798c"}, + {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6321899477db90bdeb9299ac3627a6a53c7399c8cd58d25da094007402b039ab"}, + {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:76e4753701248476e6286f2ef492af900ea67d9706a0155335a40ea21bf3b2f5"}, + {file = "frozenlist-1.5.0-cp310-cp310-win32.whl", hash = "sha256:977701c081c0241d0955c9586ffdd9ce44f7a7795df39b9151cd9a6fd0ce4cfb"}, + {file = "frozenlist-1.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:189f03b53e64144f90990d29a27ec4f7997d91ed3d01b51fa39d2dbe77540fd4"}, + {file = "frozenlist-1.5.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:fd74520371c3c4175142d02a976aee0b4cb4a7cc912a60586ffd8d5929979b30"}, + {file = "frozenlist-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2f3f7a0fbc219fb4455264cae4d9f01ad41ae6ee8524500f381de64ffaa077d5"}, + {file = "frozenlist-1.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f47c9c9028f55a04ac254346e92977bf0f166c483c74b4232bee19a6697e4778"}, + {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0996c66760924da6e88922756d99b47512a71cfd45215f3570bf1e0b694c206a"}, + {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a2fe128eb4edeabe11896cb6af88fca5346059f6c8d807e3b910069f39157869"}, + {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1a8ea951bbb6cacd492e3948b8da8c502a3f814f5d20935aae74b5df2b19cf3d"}, + {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de537c11e4aa01d37db0d403b57bd6f0546e71a82347a97c6a9f0dcc532b3a45"}, + {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c2623347b933fcb9095841f1cc5d4ff0b278addd743e0e966cb3d460278840d"}, + {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cee6798eaf8b1416ef6909b06f7dc04b60755206bddc599f52232606e18179d3"}, + {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f5f9da7f5dbc00a604fe74aa02ae7c98bcede8a3b8b9666f9f86fc13993bc71a"}, + {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:90646abbc7a5d5c7c19461d2e3eeb76eb0b204919e6ece342feb6032c9325ae9"}, + {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:bdac3c7d9b705d253b2ce370fde941836a5f8b3c5c2b8fd70940a3ea3af7f4f2"}, + {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:03d33c2ddbc1816237a67f66336616416e2bbb6beb306e5f890f2eb22b959cdf"}, + {file = "frozenlist-1.5.0-cp311-cp311-win32.whl", hash = "sha256:237f6b23ee0f44066219dae14c70ae38a63f0440ce6750f868ee08775073f942"}, + {file = "frozenlist-1.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:0cc974cc93d32c42e7b0f6cf242a6bd941c57c61b618e78b6c0a96cb72788c1d"}, + {file = "frozenlist-1.5.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:31115ba75889723431aa9a4e77d5f398f5cf976eea3bdf61749731f62d4a4a21"}, + {file = "frozenlist-1.5.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7437601c4d89d070eac8323f121fcf25f88674627505334654fd027b091db09d"}, + {file = "frozenlist-1.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7948140d9f8ece1745be806f2bfdf390127cf1a763b925c4a805c603df5e697e"}, + {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:feeb64bc9bcc6b45c6311c9e9b99406660a9c05ca8a5b30d14a78555088b0b3a"}, + {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:683173d371daad49cffb8309779e886e59c2f369430ad28fe715f66d08d4ab1a"}, + {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7d57d8f702221405a9d9b40f9da8ac2e4a1a8b5285aac6100f3393675f0a85ee"}, + {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30c72000fbcc35b129cb09956836c7d7abf78ab5416595e4857d1cae8d6251a6"}, + {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:000a77d6034fbad9b6bb880f7ec073027908f1b40254b5d6f26210d2dab1240e"}, + {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5d7f5a50342475962eb18b740f3beecc685a15b52c91f7d975257e13e029eca9"}, + {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:87f724d055eb4785d9be84e9ebf0f24e392ddfad00b3fe036e43f489fafc9039"}, + {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:6e9080bb2fb195a046e5177f10d9d82b8a204c0736a97a153c2466127de87784"}, + {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9b93d7aaa36c966fa42efcaf716e6b3900438632a626fb09c049f6a2f09fc631"}, + {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:52ef692a4bc60a6dd57f507429636c2af8b6046db8b31b18dac02cbc8f507f7f"}, + {file = "frozenlist-1.5.0-cp312-cp312-win32.whl", hash = "sha256:29d94c256679247b33a3dc96cce0f93cbc69c23bf75ff715919332fdbb6a32b8"}, + {file = "frozenlist-1.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:8969190d709e7c48ea386db202d708eb94bdb29207a1f269bab1196ce0dcca1f"}, + {file = "frozenlist-1.5.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:7a1a048f9215c90973402e26c01d1cff8a209e1f1b53f72b95c13db61b00f953"}, + {file = "frozenlist-1.5.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:dd47a5181ce5fcb463b5d9e17ecfdb02b678cca31280639255ce9d0e5aa67af0"}, + {file = "frozenlist-1.5.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1431d60b36d15cda188ea222033eec8e0eab488f39a272461f2e6d9e1a8e63c2"}, + {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6482a5851f5d72767fbd0e507e80737f9c8646ae7fd303def99bfe813f76cf7f"}, + {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:44c49271a937625619e862baacbd037a7ef86dd1ee215afc298a417ff3270608"}, + {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:12f78f98c2f1c2429d42e6a485f433722b0061d5c0b0139efa64f396efb5886b"}, + {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ce3aa154c452d2467487765e3adc730a8c153af77ad84096bc19ce19a2400840"}, + {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b7dc0c4338e6b8b091e8faf0db3168a37101943e687f373dce00959583f7439"}, + {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:45e0896250900b5aa25180f9aec243e84e92ac84bd4a74d9ad4138ef3f5c97de"}, + {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:561eb1c9579d495fddb6da8959fd2a1fca2c6d060d4113f5844b433fc02f2641"}, + {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:df6e2f325bfee1f49f81aaac97d2aa757c7646534a06f8f577ce184afe2f0a9e"}, + {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:140228863501b44b809fb39ec56b5d4071f4d0aa6d216c19cbb08b8c5a7eadb9"}, + {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7707a25d6a77f5d27ea7dc7d1fc608aa0a478193823f88511ef5e6b8a48f9d03"}, + {file = "frozenlist-1.5.0-cp313-cp313-win32.whl", hash = "sha256:31a9ac2b38ab9b5a8933b693db4939764ad3f299fcaa931a3e605bc3460e693c"}, + {file = "frozenlist-1.5.0-cp313-cp313-win_amd64.whl", hash = "sha256:11aabdd62b8b9c4b84081a3c246506d1cddd2dd93ff0ad53ede5defec7886b28"}, + {file = "frozenlist-1.5.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:dd94994fc91a6177bfaafd7d9fd951bc8689b0a98168aa26b5f543868548d3ca"}, + {file = "frozenlist-1.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2d0da8bbec082bf6bf18345b180958775363588678f64998c2b7609e34719b10"}, + {file = "frozenlist-1.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:73f2e31ea8dd7df61a359b731716018c2be196e5bb3b74ddba107f694fbd7604"}, + {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:828afae9f17e6de596825cf4228ff28fbdf6065974e5ac1410cecc22f699d2b3"}, + {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f1577515d35ed5649d52ab4319db757bb881ce3b2b796d7283e6634d99ace307"}, + {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2150cc6305a2c2ab33299453e2968611dacb970d2283a14955923062c8d00b10"}, + {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a72b7a6e3cd2725eff67cd64c8f13335ee18fc3c7befc05aed043d24c7b9ccb9"}, + {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c16d2fa63e0800723139137d667e1056bee1a1cf7965153d2d104b62855e9b99"}, + {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:17dcc32fc7bda7ce5875435003220a457bcfa34ab7924a49a1c19f55b6ee185c"}, + {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:97160e245ea33d8609cd2b8fd997c850b56db147a304a262abc2b3be021a9171"}, + {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:f1e6540b7fa044eee0bb5111ada694cf3dc15f2b0347ca125ee9ca984d5e9e6e"}, + {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:91d6c171862df0a6c61479d9724f22efb6109111017c87567cfeb7b5d1449fdf"}, + {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c1fac3e2ace2eb1052e9f7c7db480818371134410e1f5c55d65e8f3ac6d1407e"}, + {file = "frozenlist-1.5.0-cp38-cp38-win32.whl", hash = "sha256:b97f7b575ab4a8af9b7bc1d2ef7f29d3afee2226bd03ca3875c16451ad5a7723"}, + {file = "frozenlist-1.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:374ca2dabdccad8e2a76d40b1d037f5bd16824933bf7bcea3e59c891fd4a0923"}, + {file = "frozenlist-1.5.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9bbcdfaf4af7ce002694a4e10a0159d5a8d20056a12b05b45cea944a4953f972"}, + {file = "frozenlist-1.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1893f948bf6681733aaccf36c5232c231e3b5166d607c5fa77773611df6dc336"}, + {file = "frozenlist-1.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2b5e23253bb709ef57a8e95e6ae48daa9ac5f265637529e4ce6b003a37b2621f"}, + {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f253985bb515ecd89629db13cb58d702035ecd8cfbca7d7a7e29a0e6d39af5f"}, + {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:04a5c6babd5e8fb7d3c871dc8b321166b80e41b637c31a995ed844a6139942b6"}, + {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9fe0f1c29ba24ba6ff6abf688cb0b7cf1efab6b6aa6adc55441773c252f7411"}, + {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:226d72559fa19babe2ccd920273e767c96a49b9d3d38badd7c91a0fdeda8ea08"}, + {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15b731db116ab3aedec558573c1a5eec78822b32292fe4f2f0345b7f697745c2"}, + {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:366d8f93e3edfe5a918c874702f78faac300209a4d5bf38352b2c1bdc07a766d"}, + {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1b96af8c582b94d381a1c1f51ffaedeb77c821c690ea5f01da3d70a487dd0a9b"}, + {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:c03eff4a41bd4e38415cbed054bbaff4a075b093e2394b6915dca34a40d1e38b"}, + {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:50cf5e7ee9b98f22bdecbabf3800ae78ddcc26e4a435515fc72d97903e8488e0"}, + {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1e76bfbc72353269c44e0bc2cfe171900fbf7f722ad74c9a7b638052afe6a00c"}, + {file = "frozenlist-1.5.0-cp39-cp39-win32.whl", hash = "sha256:666534d15ba8f0fda3f53969117383d5dc021266b3c1a42c9ec4855e4b58b9d3"}, + {file = "frozenlist-1.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:5c28f4b5dbef8a0d8aad0d4de24d1e9e981728628afaf4ea0792f5d0939372f0"}, + {file = "frozenlist-1.5.0-py3-none-any.whl", hash = "sha256:d994863bba198a4a518b467bb971c56e1db3f180a25c6cf7bb1949c267f748c3"}, + {file = "frozenlist-1.5.0.tar.gz", hash = "sha256:81d5af29e61b9c8348e876d442253723928dce6433e0e76cd925cd83f1b4b817"}, ] [[package]] name = "idna" -version = "3.6" +version = "3.10" description = "Internationalized Domain Names in Applications (IDNA)" optional = false -python-versions = ">=3.5" +python-versions = ">=3.6" files = [ - {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, - {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, + {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, + {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, +] + +[package.extras] +all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] + +[[package]] +name = "iniconfig" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" +optional = false +python-versions = ">=3.7" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, ] [[package]] @@ -410,218 +371,646 @@ dev = ["black (>=22.8.0,<22.9.0)", "flake8 (>=5.0.4,<5.1.0)", "isort (>=5.11.5,< [[package]] name = "multidict" -version = "6.0.5" +version = "6.1.0" description = "multidict implementation" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" +files = [ + {file = "multidict-6.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3380252550e372e8511d49481bd836264c009adb826b23fefcc5dd3c69692f60"}, + {file = "multidict-6.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:99f826cbf970077383d7de805c0681799491cb939c25450b9b5b3ced03ca99f1"}, + {file = "multidict-6.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a114d03b938376557927ab23f1e950827c3b893ccb94b62fd95d430fd0e5cf53"}, + {file = "multidict-6.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1c416351ee6271b2f49b56ad7f308072f6f44b37118d69c2cad94f3fa8a40d5"}, + {file = "multidict-6.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6b5d83030255983181005e6cfbac1617ce9746b219bc2aad52201ad121226581"}, + {file = "multidict-6.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3e97b5e938051226dc025ec80980c285b053ffb1e25a3db2a3aa3bc046bf7f56"}, + {file = "multidict-6.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d618649d4e70ac6efcbba75be98b26ef5078faad23592f9b51ca492953012429"}, + {file = "multidict-6.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:10524ebd769727ac77ef2278390fb0068d83f3acb7773792a5080f2b0abf7748"}, + {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ff3827aef427c89a25cc96ded1759271a93603aba9fb977a6d264648ebf989db"}, + {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:06809f4f0f7ab7ea2cabf9caca7d79c22c0758b58a71f9d32943ae13c7ace056"}, + {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:f179dee3b863ab1c59580ff60f9d99f632f34ccb38bf67a33ec6b3ecadd0fd76"}, + {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:aaed8b0562be4a0876ee3b6946f6869b7bcdb571a5d1496683505944e268b160"}, + {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3c8b88a2ccf5493b6c8da9076fb151ba106960a2df90c2633f342f120751a9e7"}, + {file = "multidict-6.1.0-cp310-cp310-win32.whl", hash = "sha256:4a9cb68166a34117d6646c0023c7b759bf197bee5ad4272f420a0141d7eb03a0"}, + {file = "multidict-6.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:20b9b5fbe0b88d0bdef2012ef7dee867f874b72528cf1d08f1d59b0e3850129d"}, + {file = "multidict-6.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3efe2c2cb5763f2f1b275ad2bf7a287d3f7ebbef35648a9726e3b69284a4f3d6"}, + {file = "multidict-6.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c7053d3b0353a8b9de430a4f4b4268ac9a4fb3481af37dfe49825bf45ca24156"}, + {file = "multidict-6.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:27e5fc84ccef8dfaabb09d82b7d179c7cf1a3fbc8a966f8274fcb4ab2eb4cadb"}, + {file = "multidict-6.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e2b90b43e696f25c62656389d32236e049568b39320e2735d51f08fd362761b"}, + {file = "multidict-6.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d83a047959d38a7ff552ff94be767b7fd79b831ad1cd9920662db05fec24fe72"}, + {file = "multidict-6.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d1a9dd711d0877a1ece3d2e4fea11a8e75741ca21954c919406b44e7cf971304"}, + {file = "multidict-6.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec2abea24d98246b94913b76a125e855eb5c434f7c46546046372fe60f666351"}, + {file = "multidict-6.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4867cafcbc6585e4b678876c489b9273b13e9fff9f6d6d66add5e15d11d926cb"}, + {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5b48204e8d955c47c55b72779802b219a39acc3ee3d0116d5080c388970b76e3"}, + {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:d8fff389528cad1618fb4b26b95550327495462cd745d879a8c7c2115248e399"}, + {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a7a9541cd308eed5e30318430a9c74d2132e9a8cb46b901326272d780bf2d423"}, + {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:da1758c76f50c39a2efd5e9859ce7d776317eb1dd34317c8152ac9251fc574a3"}, + {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c943a53e9186688b45b323602298ab727d8865d8c9ee0b17f8d62d14b56f0753"}, + {file = "multidict-6.1.0-cp311-cp311-win32.whl", hash = "sha256:90f8717cb649eea3504091e640a1b8568faad18bd4b9fcd692853a04475a4b80"}, + {file = "multidict-6.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:82176036e65644a6cc5bd619f65f6f19781e8ec2e5330f51aa9ada7504cc1926"}, + {file = "multidict-6.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b04772ed465fa3cc947db808fa306d79b43e896beb677a56fb2347ca1a49c1fa"}, + {file = "multidict-6.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6180c0ae073bddeb5a97a38c03f30c233e0a4d39cd86166251617d1bbd0af436"}, + {file = "multidict-6.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:071120490b47aa997cca00666923a83f02c7fbb44f71cf7f136df753f7fa8761"}, + {file = "multidict-6.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50b3a2710631848991d0bf7de077502e8994c804bb805aeb2925a981de58ec2e"}, + {file = "multidict-6.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b58c621844d55e71c1b7f7c498ce5aa6985d743a1a59034c57a905b3f153c1ef"}, + {file = "multidict-6.1.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55b6d90641869892caa9ca42ff913f7ff1c5ece06474fbd32fb2cf6834726c95"}, + {file = "multidict-6.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b820514bfc0b98a30e3d85462084779900347e4d49267f747ff54060cc33925"}, + {file = "multidict-6.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:10a9b09aba0c5b48c53761b7c720aaaf7cf236d5fe394cd399c7ba662d5f9966"}, + {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1e16bf3e5fc9f44632affb159d30a437bfe286ce9e02754759be5536b169b305"}, + {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:76f364861c3bfc98cbbcbd402d83454ed9e01a5224bb3a28bf70002a230f73e2"}, + {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:820c661588bd01a0aa62a1283f20d2be4281b086f80dad9e955e690c75fb54a2"}, + {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:0e5f362e895bc5b9e67fe6e4ded2492d8124bdf817827f33c5b46c2fe3ffaca6"}, + {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3ec660d19bbc671e3a6443325f07263be452c453ac9e512f5eb935e7d4ac28b3"}, + {file = "multidict-6.1.0-cp312-cp312-win32.whl", hash = "sha256:58130ecf8f7b8112cdb841486404f1282b9c86ccb30d3519faf301b2e5659133"}, + {file = "multidict-6.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:188215fc0aafb8e03341995e7c4797860181562380f81ed0a87ff455b70bf1f1"}, + {file = "multidict-6.1.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:d569388c381b24671589335a3be6e1d45546c2988c2ebe30fdcada8457a31008"}, + {file = "multidict-6.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:052e10d2d37810b99cc170b785945421141bf7bb7d2f8799d431e7db229c385f"}, + {file = "multidict-6.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f90c822a402cb865e396a504f9fc8173ef34212a342d92e362ca498cad308e28"}, + {file = "multidict-6.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b225d95519a5bf73860323e633a664b0d85ad3d5bede6d30d95b35d4dfe8805b"}, + {file = "multidict-6.1.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:23bfd518810af7de1116313ebd9092cb9aa629beb12f6ed631ad53356ed6b86c"}, + {file = "multidict-6.1.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c09fcfdccdd0b57867577b719c69e347a436b86cd83747f179dbf0cc0d4c1f3"}, + {file = "multidict-6.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf6bea52ec97e95560af5ae576bdac3aa3aae0b6758c6efa115236d9e07dae44"}, + {file = "multidict-6.1.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57feec87371dbb3520da6192213c7d6fc892d5589a93db548331954de8248fd2"}, + {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0c3f390dc53279cbc8ba976e5f8035eab997829066756d811616b652b00a23a3"}, + {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:59bfeae4b25ec05b34f1956eaa1cb38032282cd4dfabc5056d0a1ec4d696d3aa"}, + {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:b2f59caeaf7632cc633b5cf6fc449372b83bbdf0da4ae04d5be36118e46cc0aa"}, + {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:37bb93b2178e02b7b618893990941900fd25b6b9ac0fa49931a40aecdf083fe4"}, + {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4e9f48f58c2c523d5a06faea47866cd35b32655c46b443f163d08c6d0ddb17d6"}, + {file = "multidict-6.1.0-cp313-cp313-win32.whl", hash = "sha256:3a37ffb35399029b45c6cc33640a92bef403c9fd388acce75cdc88f58bd19a81"}, + {file = "multidict-6.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:e9aa71e15d9d9beaad2c6b9319edcdc0a49a43ef5c0a4c8265ca9ee7d6c67774"}, + {file = "multidict-6.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:db7457bac39421addd0c8449933ac32d8042aae84a14911a757ae6ca3eef1392"}, + {file = "multidict-6.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d094ddec350a2fb899fec68d8353c78233debde9b7d8b4beeafa70825f1c281a"}, + {file = "multidict-6.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5845c1fd4866bb5dd3125d89b90e57ed3138241540897de748cdf19de8a2fca2"}, + {file = "multidict-6.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9079dfc6a70abe341f521f78405b8949f96db48da98aeb43f9907f342f627cdc"}, + {file = "multidict-6.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3914f5aaa0f36d5d60e8ece6a308ee1c9784cd75ec8151062614657a114c4478"}, + {file = "multidict-6.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c08be4f460903e5a9d0f76818db3250f12e9c344e79314d1d570fc69d7f4eae4"}, + {file = "multidict-6.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d093be959277cb7dee84b801eb1af388b6ad3ca6a6b6bf1ed7585895789d027d"}, + {file = "multidict-6.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3702ea6872c5a2a4eeefa6ffd36b042e9773f05b1f37ae3ef7264b1163c2dcf6"}, + {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:2090f6a85cafc5b2db085124d752757c9d251548cedabe9bd31afe6363e0aff2"}, + {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:f67f217af4b1ff66c68a87318012de788dd95fcfeb24cc889011f4e1c7454dfd"}, + {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:189f652a87e876098bbc67b4da1049afb5f5dfbaa310dd67c594b01c10388db6"}, + {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:6bb5992037f7a9eff7991ebe4273ea7f51f1c1c511e6a2ce511d0e7bdb754492"}, + {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:ac10f4c2b9e770c4e393876e35a7046879d195cd123b4f116d299d442b335bcd"}, + {file = "multidict-6.1.0-cp38-cp38-win32.whl", hash = "sha256:e27bbb6d14416713a8bd7aaa1313c0fc8d44ee48d74497a0ff4c3a1b6ccb5167"}, + {file = "multidict-6.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:22f3105d4fb15c8f57ff3959a58fcab6ce36814486500cd7485651230ad4d4ef"}, + {file = "multidict-6.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:4e18b656c5e844539d506a0a06432274d7bd52a7487e6828c63a63d69185626c"}, + {file = "multidict-6.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a185f876e69897a6f3325c3f19f26a297fa058c5e456bfcff8015e9a27e83ae1"}, + {file = "multidict-6.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ab7c4ceb38d91570a650dba194e1ca87c2b543488fe9309b4212694174fd539c"}, + {file = "multidict-6.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e617fb6b0b6953fffd762669610c1c4ffd05632c138d61ac7e14ad187870669c"}, + {file = "multidict-6.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:16e5f4bf4e603eb1fdd5d8180f1a25f30056f22e55ce51fb3d6ad4ab29f7d96f"}, + {file = "multidict-6.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4c035da3f544b1882bac24115f3e2e8760f10a0107614fc9839fd232200b875"}, + {file = "multidict-6.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:957cf8e4b6e123a9eea554fa7ebc85674674b713551de587eb318a2df3e00255"}, + {file = "multidict-6.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:483a6aea59cb89904e1ceabd2b47368b5600fb7de78a6e4a2c2987b2d256cf30"}, + {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:87701f25a2352e5bf7454caa64757642734da9f6b11384c1f9d1a8e699758057"}, + {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:682b987361e5fd7a139ed565e30d81fd81e9629acc7d925a205366877d8c8657"}, + {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ce2186a7df133a9c895dea3331ddc5ddad42cdd0d1ea2f0a51e5d161e4762f28"}, + {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:9f636b730f7e8cb19feb87094949ba54ee5357440b9658b2a32a5ce4bce53972"}, + {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:73eae06aa53af2ea5270cc066dcaf02cc60d2994bbb2c4ef5764949257d10f43"}, + {file = "multidict-6.1.0-cp39-cp39-win32.whl", hash = "sha256:1ca0083e80e791cffc6efce7660ad24af66c8d4079d2a750b29001b53ff59ada"}, + {file = "multidict-6.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:aa466da5b15ccea564bdab9c89175c762bc12825f4659c11227f515cee76fa4a"}, + {file = "multidict-6.1.0-py3-none-any.whl", hash = "sha256:48e171e52d1c4d33888e529b999e5900356b9ae588c2f09a52dcefb158b27506"}, + {file = "multidict-6.1.0.tar.gz", hash = "sha256:22ae2ebf9b0c69d206c003e2f6a914ea33f0a932d4aa16f236afc049d9958f4a"}, +] + +[[package]] +name = "numpy" +version = "2.1.3" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.10" +files = [ + {file = "numpy-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c894b4305373b9c5576d7a12b473702afdf48ce5369c074ba304cc5ad8730dff"}, + {file = "numpy-2.1.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b47fbb433d3260adcd51eb54f92a2ffbc90a4595f8970ee00e064c644ac788f5"}, + {file = "numpy-2.1.3-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:825656d0743699c529c5943554d223c021ff0494ff1442152ce887ef4f7561a1"}, + {file = "numpy-2.1.3-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:6a4825252fcc430a182ac4dee5a505053d262c807f8a924603d411f6718b88fd"}, + {file = "numpy-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e711e02f49e176a01d0349d82cb5f05ba4db7d5e7e0defd026328e5cfb3226d3"}, + {file = "numpy-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78574ac2d1a4a02421f25da9559850d59457bac82f2b8d7a44fe83a64f770098"}, + {file = "numpy-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c7662f0e3673fe4e832fe07b65c50342ea27d989f92c80355658c7f888fcc83c"}, + {file = "numpy-2.1.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:fa2d1337dc61c8dc417fbccf20f6d1e139896a30721b7f1e832b2bb6ef4eb6c4"}, + {file = "numpy-2.1.3-cp310-cp310-win32.whl", hash = "sha256:72dcc4a35a8515d83e76b58fdf8113a5c969ccd505c8a946759b24e3182d1f23"}, + {file = "numpy-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:ecc76a9ba2911d8d37ac01de72834d8849e55473457558e12995f4cd53e778e0"}, + {file = "numpy-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4d1167c53b93f1f5d8a139a742b3c6f4d429b54e74e6b57d0eff40045187b15d"}, + {file = "numpy-2.1.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c80e4a09b3d95b4e1cac08643f1152fa71a0a821a2d4277334c88d54b2219a41"}, + {file = "numpy-2.1.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:576a1c1d25e9e02ed7fa5477f30a127fe56debd53b8d2c89d5578f9857d03ca9"}, + {file = "numpy-2.1.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:973faafebaae4c0aaa1a1ca1ce02434554d67e628b8d805e61f874b84e136b09"}, + {file = "numpy-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:762479be47a4863e261a840e8e01608d124ee1361e48b96916f38b119cfda04a"}, + {file = "numpy-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc6f24b3d1ecc1eebfbf5d6051faa49af40b03be1aaa781ebdadcbc090b4539b"}, + {file = "numpy-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:17ee83a1f4fef3c94d16dc1802b998668b5419362c8a4f4e8a491de1b41cc3ee"}, + {file = "numpy-2.1.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:15cb89f39fa6d0bdfb600ea24b250e5f1a3df23f901f51c8debaa6a5d122b2f0"}, + {file = "numpy-2.1.3-cp311-cp311-win32.whl", hash = "sha256:d9beb777a78c331580705326d2367488d5bc473b49a9bc3036c154832520aca9"}, + {file = "numpy-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:d89dd2b6da69c4fff5e39c28a382199ddedc3a5be5390115608345dec660b9e2"}, + {file = "numpy-2.1.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f55ba01150f52b1027829b50d70ef1dafd9821ea82905b63936668403c3b471e"}, + {file = "numpy-2.1.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:13138eadd4f4da03074851a698ffa7e405f41a0845a6b1ad135b81596e4e9958"}, + {file = "numpy-2.1.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:a6b46587b14b888e95e4a24d7b13ae91fa22386c199ee7b418f449032b2fa3b8"}, + {file = "numpy-2.1.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:0fa14563cc46422e99daef53d725d0c326e99e468a9320a240affffe87852564"}, + {file = "numpy-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8637dcd2caa676e475503d1f8fdb327bc495554e10838019651b76d17b98e512"}, + {file = "numpy-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2312b2aa89e1f43ecea6da6ea9a810d06aae08321609d8dc0d0eda6d946a541b"}, + {file = "numpy-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a38c19106902bb19351b83802531fea19dee18e5b37b36454f27f11ff956f7fc"}, + {file = "numpy-2.1.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:02135ade8b8a84011cbb67dc44e07c58f28575cf9ecf8ab304e51c05528c19f0"}, + {file = "numpy-2.1.3-cp312-cp312-win32.whl", hash = "sha256:e6988e90fcf617da2b5c78902fe8e668361b43b4fe26dbf2d7b0f8034d4cafb9"}, + {file = "numpy-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:0d30c543f02e84e92c4b1f415b7c6b5326cbe45ee7882b6b77db7195fb971e3a"}, + {file = "numpy-2.1.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:96fe52fcdb9345b7cd82ecd34547fca4321f7656d500eca497eb7ea5a926692f"}, + {file = "numpy-2.1.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f653490b33e9c3a4c1c01d41bc2aef08f9475af51146e4a7710c450cf9761598"}, + {file = "numpy-2.1.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:dc258a761a16daa791081d026f0ed4399b582712e6fc887a95af09df10c5ca57"}, + {file = "numpy-2.1.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:016d0f6f5e77b0f0d45d77387ffa4bb89816b57c835580c3ce8e099ef830befe"}, + {file = "numpy-2.1.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c181ba05ce8299c7aa3125c27b9c2167bca4a4445b7ce73d5febc411ca692e43"}, + {file = "numpy-2.1.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5641516794ca9e5f8a4d17bb45446998c6554704d888f86df9b200e66bdcce56"}, + {file = "numpy-2.1.3-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ea4dedd6e394a9c180b33c2c872b92f7ce0f8e7ad93e9585312b0c5a04777a4a"}, + {file = "numpy-2.1.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b0df3635b9c8ef48bd3be5f862cf71b0a4716fa0e702155c45067c6b711ddcef"}, + {file = "numpy-2.1.3-cp313-cp313-win32.whl", hash = "sha256:50ca6aba6e163363f132b5c101ba078b8cbd3fa92c7865fd7d4d62d9779ac29f"}, + {file = "numpy-2.1.3-cp313-cp313-win_amd64.whl", hash = "sha256:747641635d3d44bcb380d950679462fae44f54b131be347d5ec2bce47d3df9ed"}, + {file = "numpy-2.1.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:996bb9399059c5b82f76b53ff8bb686069c05acc94656bb259b1d63d04a9506f"}, + {file = "numpy-2.1.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:45966d859916ad02b779706bb43b954281db43e185015df6eb3323120188f9e4"}, + {file = "numpy-2.1.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:baed7e8d7481bfe0874b566850cb0b85243e982388b7b23348c6db2ee2b2ae8e"}, + {file = "numpy-2.1.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:a9f7f672a3388133335589cfca93ed468509cb7b93ba3105fce780d04a6576a0"}, + {file = "numpy-2.1.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7aac50327da5d208db2eec22eb11e491e3fe13d22653dce51b0f4109101b408"}, + {file = "numpy-2.1.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4394bc0dbd074b7f9b52024832d16e019decebf86caf909d94f6b3f77a8ee3b6"}, + {file = "numpy-2.1.3-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:50d18c4358a0a8a53f12a8ba9d772ab2d460321e6a93d6064fc22443d189853f"}, + {file = "numpy-2.1.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:14e253bd43fc6b37af4921b10f6add6925878a42a0c5fe83daee390bca80bc17"}, + {file = "numpy-2.1.3-cp313-cp313t-win32.whl", hash = "sha256:08788d27a5fd867a663f6fc753fd7c3ad7e92747efc73c53bca2f19f8bc06f48"}, + {file = "numpy-2.1.3-cp313-cp313t-win_amd64.whl", hash = "sha256:2564fbdf2b99b3f815f2107c1bbc93e2de8ee655a69c261363a1172a79a257d4"}, + {file = "numpy-2.1.3-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:4f2015dfe437dfebbfce7c85c7b53d81ba49e71ba7eadbf1df40c915af75979f"}, + {file = "numpy-2.1.3-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:3522b0dfe983a575e6a9ab3a4a4dfe156c3e428468ff08ce582b9bb6bd1d71d4"}, + {file = "numpy-2.1.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c006b607a865b07cd981ccb218a04fc86b600411d83d6fc261357f1c0966755d"}, + {file = "numpy-2.1.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e14e26956e6f1696070788252dcdff11b4aca4c3e8bd166e0df1bb8f315a67cb"}, + {file = "numpy-2.1.3.tar.gz", hash = "sha256:aa08e04e08aaf974d4458def539dece0d28146d866a39da5639596f4921fd761"}, +] + +[[package]] +name = "packaging" +version = "24.2" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, + {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, +] + +[[package]] +name = "pillow" +version = "11.0.0" +description = "Python Imaging Library (Fork)" +optional = false +python-versions = ">=3.9" files = [ - {file = "multidict-6.0.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:228b644ae063c10e7f324ab1ab6b548bdf6f8b47f3ec234fef1093bc2735e5f9"}, - {file = "multidict-6.0.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:896ebdcf62683551312c30e20614305f53125750803b614e9e6ce74a96232604"}, - {file = "multidict-6.0.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:411bf8515f3be9813d06004cac41ccf7d1cd46dfe233705933dd163b60e37600"}, - {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d147090048129ce3c453f0292e7697d333db95e52616b3793922945804a433c"}, - {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:215ed703caf15f578dca76ee6f6b21b7603791ae090fbf1ef9d865571039ade5"}, - {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c6390cf87ff6234643428991b7359b5f59cc15155695deb4eda5c777d2b880f"}, - {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fd81c4ebdb4f214161be351eb5bcf385426bf023041da2fd9e60681f3cebae"}, - {file = "multidict-6.0.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3cc2ad10255f903656017363cd59436f2111443a76f996584d1077e43ee51182"}, - {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6939c95381e003f54cd4c5516740faba40cf5ad3eeff460c3ad1d3e0ea2549bf"}, - {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:220dd781e3f7af2c2c1053da9fa96d9cf3072ca58f057f4c5adaaa1cab8fc442"}, - {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:766c8f7511df26d9f11cd3a8be623e59cca73d44643abab3f8c8c07620524e4a"}, - {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:fe5d7785250541f7f5019ab9cba2c71169dc7d74d0f45253f8313f436458a4ef"}, - {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c1c1496e73051918fcd4f58ff2e0f2f3066d1c76a0c6aeffd9b45d53243702cc"}, - {file = "multidict-6.0.5-cp310-cp310-win32.whl", hash = "sha256:7afcdd1fc07befad18ec4523a782cde4e93e0a2bf71239894b8d61ee578c1319"}, - {file = "multidict-6.0.5-cp310-cp310-win_amd64.whl", hash = "sha256:99f60d34c048c5c2fabc766108c103612344c46e35d4ed9ae0673d33c8fb26e8"}, - {file = "multidict-6.0.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f285e862d2f153a70586579c15c44656f888806ed0e5b56b64489afe4a2dbfba"}, - {file = "multidict-6.0.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:53689bb4e102200a4fafa9de9c7c3c212ab40a7ab2c8e474491914d2305f187e"}, - {file = "multidict-6.0.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:612d1156111ae11d14afaf3a0669ebf6c170dbb735e510a7438ffe2369a847fd"}, - {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7be7047bd08accdb7487737631d25735c9a04327911de89ff1b26b81745bd4e3"}, - {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de170c7b4fe6859beb8926e84f7d7d6c693dfe8e27372ce3b76f01c46e489fcf"}, - {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:04bde7a7b3de05732a4eb39c94574db1ec99abb56162d6c520ad26f83267de29"}, - {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85f67aed7bb647f93e7520633d8f51d3cbc6ab96957c71272b286b2f30dc70ed"}, - {file = "multidict-6.0.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:425bf820055005bfc8aa9a0b99ccb52cc2f4070153e34b701acc98d201693733"}, - {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d3eb1ceec286eba8220c26f3b0096cf189aea7057b6e7b7a2e60ed36b373b77f"}, - {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7901c05ead4b3fb75113fb1dd33eb1253c6d3ee37ce93305acd9d38e0b5f21a4"}, - {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e0e79d91e71b9867c73323a3444724d496c037e578a0e1755ae159ba14f4f3d1"}, - {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:29bfeb0dff5cb5fdab2023a7a9947b3b4af63e9c47cae2a10ad58394b517fddc"}, - {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e030047e85cbcedbfc073f71836d62dd5dadfbe7531cae27789ff66bc551bd5e"}, - {file = "multidict-6.0.5-cp311-cp311-win32.whl", hash = "sha256:2f4848aa3baa109e6ab81fe2006c77ed4d3cd1e0ac2c1fbddb7b1277c168788c"}, - {file = "multidict-6.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:2faa5ae9376faba05f630d7e5e6be05be22913782b927b19d12b8145968a85ea"}, - {file = "multidict-6.0.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:51d035609b86722963404f711db441cf7134f1889107fb171a970c9701f92e1e"}, - {file = "multidict-6.0.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cbebcd5bcaf1eaf302617c114aa67569dd3f090dd0ce8ba9e35e9985b41ac35b"}, - {file = "multidict-6.0.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2ffc42c922dbfddb4a4c3b438eb056828719f07608af27d163191cb3e3aa6cc5"}, - {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ceb3b7e6a0135e092de86110c5a74e46bda4bd4fbfeeb3a3bcec79c0f861e450"}, - {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:79660376075cfd4b2c80f295528aa6beb2058fd289f4c9252f986751a4cd0496"}, - {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e4428b29611e989719874670fd152b6625500ad6c686d464e99f5aaeeaca175a"}, - {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d84a5c3a5f7ce6db1f999fb9438f686bc2e09d38143f2d93d8406ed2dd6b9226"}, - {file = "multidict-6.0.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:76c0de87358b192de7ea9649beb392f107dcad9ad27276324c24c91774ca5271"}, - {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:79a6d2ba910adb2cbafc95dad936f8b9386e77c84c35bc0add315b856d7c3abb"}, - {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:92d16a3e275e38293623ebf639c471d3e03bb20b8ebb845237e0d3664914caef"}, - {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:fb616be3538599e797a2017cccca78e354c767165e8858ab5116813146041a24"}, - {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:14c2976aa9038c2629efa2c148022ed5eb4cb939e15ec7aace7ca932f48f9ba6"}, - {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:435a0984199d81ca178b9ae2c26ec3d49692d20ee29bc4c11a2a8d4514c67eda"}, - {file = "multidict-6.0.5-cp312-cp312-win32.whl", hash = "sha256:9fe7b0653ba3d9d65cbe7698cca585bf0f8c83dbbcc710db9c90f478e175f2d5"}, - {file = "multidict-6.0.5-cp312-cp312-win_amd64.whl", hash = "sha256:01265f5e40f5a17f8241d52656ed27192be03bfa8764d88e8220141d1e4b3556"}, - {file = "multidict-6.0.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:19fe01cea168585ba0f678cad6f58133db2aa14eccaf22f88e4a6dccadfad8b3"}, - {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bf7a982604375a8d49b6cc1b781c1747f243d91b81035a9b43a2126c04766f5"}, - {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:107c0cdefe028703fb5dafe640a409cb146d44a6ae201e55b35a4af8e95457dd"}, - {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:403c0911cd5d5791605808b942c88a8155c2592e05332d2bf78f18697a5fa15e"}, - {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aeaf541ddbad8311a87dd695ed9642401131ea39ad7bc8cf3ef3967fd093b626"}, - {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e4972624066095e52b569e02b5ca97dbd7a7ddd4294bf4e7247d52635630dd83"}, - {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d946b0a9eb8aaa590df1fe082cee553ceab173e6cb5b03239716338629c50c7a"}, - {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b55358304d7a73d7bdf5de62494aaf70bd33015831ffd98bc498b433dfe5b10c"}, - {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:a3145cb08d8625b2d3fee1b2d596a8766352979c9bffe5d7833e0503d0f0b5e5"}, - {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:d65f25da8e248202bd47445cec78e0025c0fe7582b23ec69c3b27a640dd7a8e3"}, - {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c9bf56195c6bbd293340ea82eafd0071cb3d450c703d2c93afb89f93b8386ccc"}, - {file = "multidict-6.0.5-cp37-cp37m-win32.whl", hash = "sha256:69db76c09796b313331bb7048229e3bee7928eb62bab5e071e9f7fcc4879caee"}, - {file = "multidict-6.0.5-cp37-cp37m-win_amd64.whl", hash = "sha256:fce28b3c8a81b6b36dfac9feb1de115bab619b3c13905b419ec71d03a3fc1423"}, - {file = "multidict-6.0.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:76f067f5121dcecf0d63a67f29080b26c43c71a98b10c701b0677e4a065fbd54"}, - {file = "multidict-6.0.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b82cc8ace10ab5bd93235dfaab2021c70637005e1ac787031f4d1da63d493c1d"}, - {file = "multidict-6.0.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5cb241881eefd96b46f89b1a056187ea8e9ba14ab88ba632e68d7a2ecb7aadf7"}, - {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8e94e6912639a02ce173341ff62cc1201232ab86b8a8fcc05572741a5dc7d93"}, - {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09a892e4a9fb47331da06948690ae38eaa2426de97b4ccbfafbdcbe5c8f37ff8"}, - {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55205d03e8a598cfc688c71ca8ea5f66447164efff8869517f175ea632c7cb7b"}, - {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37b15024f864916b4951adb95d3a80c9431299080341ab9544ed148091b53f50"}, - {file = "multidict-6.0.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2a1dee728b52b33eebff5072817176c172050d44d67befd681609b4746e1c2e"}, - {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:edd08e6f2f1a390bf137080507e44ccc086353c8e98c657e666c017718561b89"}, - {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:60d698e8179a42ec85172d12f50b1668254628425a6bd611aba022257cac1386"}, - {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:3d25f19500588cbc47dc19081d78131c32637c25804df8414463ec908631e453"}, - {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:4cc0ef8b962ac7a5e62b9e826bd0cd5040e7d401bc45a6835910ed699037a461"}, - {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:eca2e9d0cc5a889850e9bbd68e98314ada174ff6ccd1129500103df7a94a7a44"}, - {file = "multidict-6.0.5-cp38-cp38-win32.whl", hash = "sha256:4a6a4f196f08c58c59e0b8ef8ec441d12aee4125a7d4f4fef000ccb22f8d7241"}, - {file = "multidict-6.0.5-cp38-cp38-win_amd64.whl", hash = "sha256:0275e35209c27a3f7951e1ce7aaf93ce0d163b28948444bec61dd7badc6d3f8c"}, - {file = "multidict-6.0.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e7be68734bd8c9a513f2b0cfd508802d6609da068f40dc57d4e3494cefc92929"}, - {file = "multidict-6.0.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1d9ea7a7e779d7a3561aade7d596649fbecfa5c08a7674b11b423783217933f9"}, - {file = "multidict-6.0.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ea1456df2a27c73ce51120fa2f519f1bea2f4a03a917f4a43c8707cf4cbbae1a"}, - {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf590b134eb70629e350691ecca88eac3e3b8b3c86992042fb82e3cb1830d5e1"}, - {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5c0631926c4f58e9a5ccce555ad7747d9a9f8b10619621f22f9635f069f6233e"}, - {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dce1c6912ab9ff5f179eaf6efe7365c1f425ed690b03341911bf4939ef2f3046"}, - {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0868d64af83169e4d4152ec612637a543f7a336e4a307b119e98042e852ad9c"}, - {file = "multidict-6.0.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:141b43360bfd3bdd75f15ed811850763555a251e38b2405967f8e25fb43f7d40"}, - {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7df704ca8cf4a073334e0427ae2345323613e4df18cc224f647f251e5e75a527"}, - {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6214c5a5571802c33f80e6c84713b2c79e024995b9c5897f794b43e714daeec9"}, - {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:cd6c8fca38178e12c00418de737aef1261576bd1b6e8c6134d3e729a4e858b38"}, - {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:e02021f87a5b6932fa6ce916ca004c4d441509d33bbdbeca70d05dff5e9d2479"}, - {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ebd8d160f91a764652d3e51ce0d2956b38efe37c9231cd82cfc0bed2e40b581c"}, - {file = "multidict-6.0.5-cp39-cp39-win32.whl", hash = "sha256:04da1bb8c8dbadf2a18a452639771951c662c5ad03aefe4884775454be322c9b"}, - {file = "multidict-6.0.5-cp39-cp39-win_amd64.whl", hash = "sha256:d6f6d4f185481c9669b9447bf9d9cf3b95a0e9df9d169bbc17e363b7d5487755"}, - {file = "multidict-6.0.5-py3-none-any.whl", hash = "sha256:0d63c74e3d7ab26de115c49bffc92cc77ed23395303d496eae515d4204a625e7"}, - {file = "multidict-6.0.5.tar.gz", hash = "sha256:f7e301075edaf50500f0b341543c41194d8df3ae5caf4702f2095f3ca73dd8da"}, + {file = "pillow-11.0.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:6619654954dc4936fcff82db8eb6401d3159ec6be81e33c6000dfd76ae189947"}, + {file = "pillow-11.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b3c5ac4bed7519088103d9450a1107f76308ecf91d6dabc8a33a2fcfb18d0fba"}, + {file = "pillow-11.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a65149d8ada1055029fcb665452b2814fe7d7082fcb0c5bed6db851cb69b2086"}, + {file = "pillow-11.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88a58d8ac0cc0e7f3a014509f0455248a76629ca9b604eca7dc5927cc593c5e9"}, + {file = "pillow-11.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:c26845094b1af3c91852745ae78e3ea47abf3dbcd1cf962f16b9a5fbe3ee8488"}, + {file = "pillow-11.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:1a61b54f87ab5786b8479f81c4b11f4d61702830354520837f8cc791ebba0f5f"}, + {file = "pillow-11.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:674629ff60030d144b7bca2b8330225a9b11c482ed408813924619c6f302fdbb"}, + {file = "pillow-11.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:598b4e238f13276e0008299bd2482003f48158e2b11826862b1eb2ad7c768b97"}, + {file = "pillow-11.0.0-cp310-cp310-win32.whl", hash = "sha256:9a0f748eaa434a41fccf8e1ee7a3eed68af1b690e75328fd7a60af123c193b50"}, + {file = "pillow-11.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:a5629742881bcbc1f42e840af185fd4d83a5edeb96475a575f4da50d6ede337c"}, + {file = "pillow-11.0.0-cp310-cp310-win_arm64.whl", hash = "sha256:ee217c198f2e41f184f3869f3e485557296d505b5195c513b2bfe0062dc537f1"}, + {file = "pillow-11.0.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:1c1d72714f429a521d8d2d018badc42414c3077eb187a59579f28e4270b4b0fc"}, + {file = "pillow-11.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:499c3a1b0d6fc8213519e193796eb1a86a1be4b1877d678b30f83fd979811d1a"}, + {file = "pillow-11.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c8b2351c85d855293a299038e1f89db92a2f35e8d2f783489c6f0b2b5f3fe8a3"}, + {file = "pillow-11.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f4dba50cfa56f910241eb7f883c20f1e7b1d8f7d91c750cd0b318bad443f4d5"}, + {file = "pillow-11.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:5ddbfd761ee00c12ee1be86c9c0683ecf5bb14c9772ddbd782085779a63dd55b"}, + {file = "pillow-11.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:45c566eb10b8967d71bf1ab8e4a525e5a93519e29ea071459ce517f6b903d7fa"}, + {file = "pillow-11.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b4fd7bd29610a83a8c9b564d457cf5bd92b4e11e79a4ee4716a63c959699b306"}, + {file = "pillow-11.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:cb929ca942d0ec4fac404cbf520ee6cac37bf35be479b970c4ffadf2b6a1cad9"}, + {file = "pillow-11.0.0-cp311-cp311-win32.whl", hash = "sha256:006bcdd307cc47ba43e924099a038cbf9591062e6c50e570819743f5607404f5"}, + {file = "pillow-11.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:52a2d8323a465f84faaba5236567d212c3668f2ab53e1c74c15583cf507a0291"}, + {file = "pillow-11.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:16095692a253047fe3ec028e951fa4221a1f3ed3d80c397e83541a3037ff67c9"}, + {file = "pillow-11.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d2c0a187a92a1cb5ef2c8ed5412dd8d4334272617f532d4ad4de31e0495bd923"}, + {file = "pillow-11.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:084a07ef0821cfe4858fe86652fffac8e187b6ae677e9906e192aafcc1b69903"}, + {file = "pillow-11.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8069c5179902dcdce0be9bfc8235347fdbac249d23bd90514b7a47a72d9fecf4"}, + {file = "pillow-11.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f02541ef64077f22bf4924f225c0fd1248c168f86e4b7abdedd87d6ebaceab0f"}, + {file = "pillow-11.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:fcb4621042ac4b7865c179bb972ed0da0218a076dc1820ffc48b1d74c1e37fe9"}, + {file = "pillow-11.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:00177a63030d612148e659b55ba99527803288cea7c75fb05766ab7981a8c1b7"}, + {file = "pillow-11.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8853a3bf12afddfdf15f57c4b02d7ded92c7a75a5d7331d19f4f9572a89c17e6"}, + {file = "pillow-11.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3107c66e43bda25359d5ef446f59c497de2b5ed4c7fdba0894f8d6cf3822dafc"}, + {file = "pillow-11.0.0-cp312-cp312-win32.whl", hash = "sha256:86510e3f5eca0ab87429dd77fafc04693195eec7fd6a137c389c3eeb4cfb77c6"}, + {file = "pillow-11.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:8ec4a89295cd6cd4d1058a5e6aec6bf51e0eaaf9714774e1bfac7cfc9051db47"}, + {file = "pillow-11.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:27a7860107500d813fcd203b4ea19b04babe79448268403172782754870dac25"}, + {file = "pillow-11.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:bcd1fb5bb7b07f64c15618c89efcc2cfa3e95f0e3bcdbaf4642509de1942a699"}, + {file = "pillow-11.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0e038b0745997c7dcaae350d35859c9715c71e92ffb7e0f4a8e8a16732150f38"}, + {file = "pillow-11.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ae08bd8ffc41aebf578c2af2f9d8749d91f448b3bfd41d7d9ff573d74f2a6b2"}, + {file = "pillow-11.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d69bfd8ec3219ae71bcde1f942b728903cad25fafe3100ba2258b973bd2bc1b2"}, + {file = "pillow-11.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:61b887f9ddba63ddf62fd02a3ba7add935d053b6dd7d58998c630e6dbade8527"}, + {file = "pillow-11.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:c6a660307ca9d4867caa8d9ca2c2658ab685de83792d1876274991adec7b93fa"}, + {file = "pillow-11.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:73e3a0200cdda995c7e43dd47436c1548f87a30bb27fb871f352a22ab8dcf45f"}, + {file = "pillow-11.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fba162b8872d30fea8c52b258a542c5dfd7b235fb5cb352240c8d63b414013eb"}, + {file = "pillow-11.0.0-cp313-cp313-win32.whl", hash = "sha256:f1b82c27e89fffc6da125d5eb0ca6e68017faf5efc078128cfaa42cf5cb38798"}, + {file = "pillow-11.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:8ba470552b48e5835f1d23ecb936bb7f71d206f9dfeee64245f30c3270b994de"}, + {file = "pillow-11.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:846e193e103b41e984ac921b335df59195356ce3f71dcfd155aa79c603873b84"}, + {file = "pillow-11.0.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4ad70c4214f67d7466bea6a08061eba35c01b1b89eaa098040a35272a8efb22b"}, + {file = "pillow-11.0.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:6ec0d5af64f2e3d64a165f490d96368bb5dea8b8f9ad04487f9ab60dc4bb6003"}, + {file = "pillow-11.0.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c809a70e43c7977c4a42aefd62f0131823ebf7dd73556fa5d5950f5b354087e2"}, + {file = "pillow-11.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:4b60c9520f7207aaf2e1d94de026682fc227806c6e1f55bba7606d1c94dd623a"}, + {file = "pillow-11.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:1e2688958a840c822279fda0086fec1fdab2f95bf2b717b66871c4ad9859d7e8"}, + {file = "pillow-11.0.0-cp313-cp313t-win32.whl", hash = "sha256:607bbe123c74e272e381a8d1957083a9463401f7bd01287f50521ecb05a313f8"}, + {file = "pillow-11.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:5c39ed17edea3bc69c743a8dd3e9853b7509625c2462532e62baa0732163a904"}, + {file = "pillow-11.0.0-cp313-cp313t-win_arm64.whl", hash = "sha256:75acbbeb05b86bc53cbe7b7e6fe00fbcf82ad7c684b3ad82e3d711da9ba287d3"}, + {file = "pillow-11.0.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:2e46773dc9f35a1dd28bd6981332fd7f27bec001a918a72a79b4133cf5291dba"}, + {file = "pillow-11.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2679d2258b7f1192b378e2893a8a0a0ca472234d4c2c0e6bdd3380e8dfa21b6a"}, + {file = "pillow-11.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eda2616eb2313cbb3eebbe51f19362eb434b18e3bb599466a1ffa76a033fb916"}, + {file = "pillow-11.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20ec184af98a121fb2da42642dea8a29ec80fc3efbaefb86d8fdd2606619045d"}, + {file = "pillow-11.0.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:8594f42df584e5b4bb9281799698403f7af489fba84c34d53d1c4bfb71b7c4e7"}, + {file = "pillow-11.0.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:c12b5ae868897c7338519c03049a806af85b9b8c237b7d675b8c5e089e4a618e"}, + {file = "pillow-11.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:70fbbdacd1d271b77b7721fe3cdd2d537bbbd75d29e6300c672ec6bb38d9672f"}, + {file = "pillow-11.0.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5178952973e588b3f1360868847334e9e3bf49d19e169bbbdfaf8398002419ae"}, + {file = "pillow-11.0.0-cp39-cp39-win32.whl", hash = "sha256:8c676b587da5673d3c75bd67dd2a8cdfeb282ca38a30f37950511766b26858c4"}, + {file = "pillow-11.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:94f3e1780abb45062287b4614a5bc0874519c86a777d4a7ad34978e86428b8dd"}, + {file = "pillow-11.0.0-cp39-cp39-win_arm64.whl", hash = "sha256:290f2cc809f9da7d6d622550bbf4c1e57518212da51b6a30fe8e0a270a5b78bd"}, + {file = "pillow-11.0.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:1187739620f2b365de756ce086fdb3604573337cc28a0d3ac4a01ab6b2d2a6d2"}, + {file = "pillow-11.0.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:fbbcb7b57dc9c794843e3d1258c0fbf0f48656d46ffe9e09b63bbd6e8cd5d0a2"}, + {file = "pillow-11.0.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d203af30149ae339ad1b4f710d9844ed8796e97fda23ffbc4cc472968a47d0b"}, + {file = "pillow-11.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21a0d3b115009ebb8ac3d2ebec5c2982cc693da935f4ab7bb5c8ebe2f47d36f2"}, + {file = "pillow-11.0.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:73853108f56df97baf2bb8b522f3578221e56f646ba345a372c78326710d3830"}, + {file = "pillow-11.0.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e58876c91f97b0952eb766123bfef372792ab3f4e3e1f1a2267834c2ab131734"}, + {file = "pillow-11.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:224aaa38177597bb179f3ec87eeefcce8e4f85e608025e9cfac60de237ba6316"}, + {file = "pillow-11.0.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:5bd2d3bdb846d757055910f0a59792d33b555800813c3b39ada1829c372ccb06"}, + {file = "pillow-11.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:375b8dd15a1f5d2feafff536d47e22f69625c1aa92f12b339ec0b2ca40263273"}, + {file = "pillow-11.0.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:daffdf51ee5db69a82dd127eabecce20729e21f7a3680cf7cbb23f0829189790"}, + {file = "pillow-11.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7326a1787e3c7b0429659e0a944725e1b03eeaa10edd945a86dead1913383944"}, + {file = "pillow-11.0.0.tar.gz", hash = "sha256:72bacbaf24ac003fea9bff9837d1eedb6088758d41e100c1552930151f677739"}, ] +[package.extras] +docs = ["furo", "olefile", "sphinx (>=8.1)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinxext-opengraph"] +fpx = ["olefile"] +mic = ["olefile"] +tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] +typing = ["typing-extensions"] +xmp = ["defusedxml"] + [[package]] -name = "pytz" -version = "2024.1" -description = "World timezone definitions, modern and historical" +name = "pluggy" +version = "1.5.0" +description = "plugin and hook calling mechanisms for python" optional = false -python-versions = "*" +python-versions = ">=3.8" +files = [ + {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, + {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, +] + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "propcache" +version = "0.2.0" +description = "Accelerated property cache" +optional = false +python-versions = ">=3.8" files = [ - {file = "pytz-2024.1-py2.py3-none-any.whl", hash = "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319"}, - {file = "pytz-2024.1.tar.gz", hash = "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"}, + {file = "propcache-0.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c5869b8fd70b81835a6f187c5fdbe67917a04d7e52b6e7cc4e5fe39d55c39d58"}, + {file = "propcache-0.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:952e0d9d07609d9c5be361f33b0d6d650cd2bae393aabb11d9b719364521984b"}, + {file = "propcache-0.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:33ac8f098df0585c0b53009f039dfd913b38c1d2edafed0cedcc0c32a05aa110"}, + {file = "propcache-0.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97e48e8875e6c13909c800fa344cd54cc4b2b0db1d5f911f840458a500fde2c2"}, + {file = "propcache-0.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:388f3217649d6d59292b722d940d4d2e1e6a7003259eb835724092a1cca0203a"}, + {file = "propcache-0.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f571aea50ba5623c308aa146eb650eebf7dbe0fd8c5d946e28343cb3b5aad577"}, + {file = "propcache-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3dfafb44f7bb35c0c06eda6b2ab4bfd58f02729e7c4045e179f9a861b07c9850"}, + {file = "propcache-0.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3ebe9a75be7ab0b7da2464a77bb27febcb4fab46a34f9288f39d74833db7f61"}, + {file = "propcache-0.2.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d2f0d0f976985f85dfb5f3d685697ef769faa6b71993b46b295cdbbd6be8cc37"}, + {file = "propcache-0.2.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:a3dc1a4b165283bd865e8f8cb5f0c64c05001e0718ed06250d8cac9bec115b48"}, + {file = "propcache-0.2.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:9e0f07b42d2a50c7dd2d8675d50f7343d998c64008f1da5fef888396b7f84630"}, + {file = "propcache-0.2.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:e63e3e1e0271f374ed489ff5ee73d4b6e7c60710e1f76af5f0e1a6117cd26394"}, + {file = "propcache-0.2.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:56bb5c98f058a41bb58eead194b4db8c05b088c93d94d5161728515bd52b052b"}, + {file = "propcache-0.2.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7665f04d0c7f26ff8bb534e1c65068409bf4687aa2534faf7104d7182debb336"}, + {file = "propcache-0.2.0-cp310-cp310-win32.whl", hash = "sha256:7cf18abf9764746b9c8704774d8b06714bcb0a63641518a3a89c7f85cc02c2ad"}, + {file = "propcache-0.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:cfac69017ef97db2438efb854edf24f5a29fd09a536ff3a992b75990720cdc99"}, + {file = "propcache-0.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:63f13bf09cc3336eb04a837490b8f332e0db41da66995c9fd1ba04552e516354"}, + {file = "propcache-0.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:608cce1da6f2672a56b24a015b42db4ac612ee709f3d29f27a00c943d9e851de"}, + {file = "propcache-0.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:466c219deee4536fbc83c08d09115249db301550625c7fef1c5563a584c9bc87"}, + {file = "propcache-0.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc2db02409338bf36590aa985a461b2c96fce91f8e7e0f14c50c5fcc4f229016"}, + {file = "propcache-0.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a6ed8db0a556343d566a5c124ee483ae113acc9a557a807d439bcecc44e7dfbb"}, + {file = "propcache-0.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:91997d9cb4a325b60d4e3f20967f8eb08dfcb32b22554d5ef78e6fd1dda743a2"}, + {file = "propcache-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c7dde9e533c0a49d802b4f3f218fa9ad0a1ce21f2c2eb80d5216565202acab4"}, + {file = "propcache-0.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffcad6c564fe6b9b8916c1aefbb37a362deebf9394bd2974e9d84232e3e08504"}, + {file = "propcache-0.2.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:97a58a28bcf63284e8b4d7b460cbee1edaab24634e82059c7b8c09e65284f178"}, + {file = "propcache-0.2.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:945db8ee295d3af9dbdbb698cce9bbc5c59b5c3fe328bbc4387f59a8a35f998d"}, + {file = "propcache-0.2.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:39e104da444a34830751715f45ef9fc537475ba21b7f1f5b0f4d71a3b60d7fe2"}, + {file = "propcache-0.2.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:c5ecca8f9bab618340c8e848d340baf68bcd8ad90a8ecd7a4524a81c1764b3db"}, + {file = "propcache-0.2.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:c436130cc779806bdf5d5fae0d848713105472b8566b75ff70048c47d3961c5b"}, + {file = "propcache-0.2.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:191db28dc6dcd29d1a3e063c3be0b40688ed76434622c53a284e5427565bbd9b"}, + {file = "propcache-0.2.0-cp311-cp311-win32.whl", hash = "sha256:5f2564ec89058ee7c7989a7b719115bdfe2a2fb8e7a4543b8d1c0cc4cf6478c1"}, + {file = "propcache-0.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:6e2e54267980349b723cff366d1e29b138b9a60fa376664a157a342689553f71"}, + {file = "propcache-0.2.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:2ee7606193fb267be4b2e3b32714f2d58cad27217638db98a60f9efb5efeccc2"}, + {file = "propcache-0.2.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:91ee8fc02ca52e24bcb77b234f22afc03288e1dafbb1f88fe24db308910c4ac7"}, + {file = "propcache-0.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2e900bad2a8456d00a113cad8c13343f3b1f327534e3589acc2219729237a2e8"}, + {file = "propcache-0.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f52a68c21363c45297aca15561812d542f8fc683c85201df0bebe209e349f793"}, + {file = "propcache-0.2.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1e41d67757ff4fbc8ef2af99b338bfb955010444b92929e9e55a6d4dcc3c4f09"}, + {file = "propcache-0.2.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a64e32f8bd94c105cc27f42d3b658902b5bcc947ece3c8fe7bc1b05982f60e89"}, + {file = "propcache-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:55346705687dbd7ef0d77883ab4f6fabc48232f587925bdaf95219bae072491e"}, + {file = "propcache-0.2.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00181262b17e517df2cd85656fcd6b4e70946fe62cd625b9d74ac9977b64d8d9"}, + {file = "propcache-0.2.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6994984550eaf25dd7fc7bd1b700ff45c894149341725bb4edc67f0ffa94efa4"}, + {file = "propcache-0.2.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:56295eb1e5f3aecd516d91b00cfd8bf3a13991de5a479df9e27dd569ea23959c"}, + {file = "propcache-0.2.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:439e76255daa0f8151d3cb325f6dd4a3e93043e6403e6491813bcaaaa8733887"}, + {file = "propcache-0.2.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:f6475a1b2ecb310c98c28d271a30df74f9dd436ee46d09236a6b750a7599ce57"}, + {file = "propcache-0.2.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:3444cdba6628accf384e349014084b1cacd866fbb88433cd9d279d90a54e0b23"}, + {file = "propcache-0.2.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4a9d9b4d0a9b38d1c391bb4ad24aa65f306c6f01b512e10a8a34a2dc5675d348"}, + {file = "propcache-0.2.0-cp312-cp312-win32.whl", hash = "sha256:69d3a98eebae99a420d4b28756c8ce6ea5a29291baf2dc9ff9414b42676f61d5"}, + {file = "propcache-0.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:ad9c9b99b05f163109466638bd30ada1722abb01bbb85c739c50b6dc11f92dc3"}, + {file = "propcache-0.2.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ecddc221a077a8132cf7c747d5352a15ed763b674c0448d811f408bf803d9ad7"}, + {file = "propcache-0.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0e53cb83fdd61cbd67202735e6a6687a7b491c8742dfc39c9e01e80354956763"}, + {file = "propcache-0.2.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92fe151145a990c22cbccf9ae15cae8ae9eddabfc949a219c9f667877e40853d"}, + {file = "propcache-0.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6a21ef516d36909931a2967621eecb256018aeb11fc48656e3257e73e2e247a"}, + {file = "propcache-0.2.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f88a4095e913f98988f5b338c1d4d5d07dbb0b6bad19892fd447484e483ba6b"}, + {file = "propcache-0.2.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a5b3bb545ead161be780ee85a2b54fdf7092815995661947812dde94a40f6fb"}, + {file = "propcache-0.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67aeb72e0f482709991aa91345a831d0b707d16b0257e8ef88a2ad246a7280bf"}, + {file = "propcache-0.2.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c997f8c44ec9b9b0bcbf2d422cc00a1d9b9c681f56efa6ca149a941e5560da2"}, + {file = "propcache-0.2.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:2a66df3d4992bc1d725b9aa803e8c5a66c010c65c741ad901e260ece77f58d2f"}, + {file = "propcache-0.2.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:3ebbcf2a07621f29638799828b8d8668c421bfb94c6cb04269130d8de4fb7136"}, + {file = "propcache-0.2.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:1235c01ddaa80da8235741e80815ce381c5267f96cc49b1477fdcf8c047ef325"}, + {file = "propcache-0.2.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3947483a381259c06921612550867b37d22e1df6d6d7e8361264b6d037595f44"}, + {file = "propcache-0.2.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:d5bed7f9805cc29c780f3aee05de3262ee7ce1f47083cfe9f77471e9d6777e83"}, + {file = "propcache-0.2.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e4a91d44379f45f5e540971d41e4626dacd7f01004826a18cb048e7da7e96544"}, + {file = "propcache-0.2.0-cp313-cp313-win32.whl", hash = "sha256:f902804113e032e2cdf8c71015651c97af6418363bea8d78dc0911d56c335032"}, + {file = "propcache-0.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:8f188cfcc64fb1266f4684206c9de0e80f54622c3f22a910cbd200478aeae61e"}, + {file = "propcache-0.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:53d1bd3f979ed529f0805dd35ddaca330f80a9a6d90bc0121d2ff398f8ed8861"}, + {file = "propcache-0.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:83928404adf8fb3d26793665633ea79b7361efa0287dfbd372a7e74311d51ee6"}, + {file = "propcache-0.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:77a86c261679ea5f3896ec060be9dc8e365788248cc1e049632a1be682442063"}, + {file = "propcache-0.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:218db2a3c297a3768c11a34812e63b3ac1c3234c3a086def9c0fee50d35add1f"}, + {file = "propcache-0.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7735e82e3498c27bcb2d17cb65d62c14f1100b71723b68362872bca7d0913d90"}, + {file = "propcache-0.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:20a617c776f520c3875cf4511e0d1db847a076d720714ae35ffe0df3e440be68"}, + {file = "propcache-0.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67b69535c870670c9f9b14a75d28baa32221d06f6b6fa6f77a0a13c5a7b0a5b9"}, + {file = "propcache-0.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4569158070180c3855e9c0791c56be3ceeb192defa2cdf6a3f39e54319e56b89"}, + {file = "propcache-0.2.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:db47514ffdbd91ccdc7e6f8407aac4ee94cc871b15b577c1c324236b013ddd04"}, + {file = "propcache-0.2.0-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:2a60ad3e2553a74168d275a0ef35e8c0a965448ffbc3b300ab3a5bb9956c2162"}, + {file = "propcache-0.2.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:662dd62358bdeaca0aee5761de8727cfd6861432e3bb828dc2a693aa0471a563"}, + {file = "propcache-0.2.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:25a1f88b471b3bc911d18b935ecb7115dff3a192b6fef46f0bfaf71ff4f12418"}, + {file = "propcache-0.2.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:f60f0ac7005b9f5a6091009b09a419ace1610e163fa5deaba5ce3484341840e7"}, + {file = "propcache-0.2.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:74acd6e291f885678631b7ebc85d2d4aec458dd849b8c841b57ef04047833bed"}, + {file = "propcache-0.2.0-cp38-cp38-win32.whl", hash = "sha256:d9b6ddac6408194e934002a69bcaadbc88c10b5f38fb9307779d1c629181815d"}, + {file = "propcache-0.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:676135dcf3262c9c5081cc8f19ad55c8a64e3f7282a21266d05544450bffc3a5"}, + {file = "propcache-0.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:25c8d773a62ce0451b020c7b29a35cfbc05de8b291163a7a0f3b7904f27253e6"}, + {file = "propcache-0.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:375a12d7556d462dc64d70475a9ee5982465fbb3d2b364f16b86ba9135793638"}, + {file = "propcache-0.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1ec43d76b9677637a89d6ab86e1fef70d739217fefa208c65352ecf0282be957"}, + {file = "propcache-0.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f45eec587dafd4b2d41ac189c2156461ebd0c1082d2fe7013571598abb8505d1"}, + {file = "propcache-0.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bc092ba439d91df90aea38168e11f75c655880c12782facf5cf9c00f3d42b562"}, + {file = "propcache-0.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fa1076244f54bb76e65e22cb6910365779d5c3d71d1f18b275f1dfc7b0d71b4d"}, + {file = "propcache-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:682a7c79a2fbf40f5dbb1eb6bfe2cd865376deeac65acf9beb607505dced9e12"}, + {file = "propcache-0.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8e40876731f99b6f3c897b66b803c9e1c07a989b366c6b5b475fafd1f7ba3fb8"}, + {file = "propcache-0.2.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:363ea8cd3c5cb6679f1c2f5f1f9669587361c062e4899fce56758efa928728f8"}, + {file = "propcache-0.2.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:140fbf08ab3588b3468932974a9331aff43c0ab8a2ec2c608b6d7d1756dbb6cb"}, + {file = "propcache-0.2.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:e70fac33e8b4ac63dfc4c956fd7d85a0b1139adcfc0d964ce288b7c527537fea"}, + {file = "propcache-0.2.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:b33d7a286c0dc1a15f5fc864cc48ae92a846df287ceac2dd499926c3801054a6"}, + {file = "propcache-0.2.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:f6d5749fdd33d90e34c2efb174c7e236829147a2713334d708746e94c4bde40d"}, + {file = "propcache-0.2.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:22aa8f2272d81d9317ff5756bb108021a056805ce63dd3630e27d042c8092798"}, + {file = "propcache-0.2.0-cp39-cp39-win32.whl", hash = "sha256:73e4b40ea0eda421b115248d7e79b59214411109a5bc47d0d48e4c73e3b8fcf9"}, + {file = "propcache-0.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:9517d5e9e0731957468c29dbfd0f976736a0e55afaea843726e887f36fe017df"}, + {file = "propcache-0.2.0-py3-none-any.whl", hash = "sha256:2ccc28197af5313706511fab3a8b66dcd6da067a1331372c82ea1cb74285e036"}, + {file = "propcache-0.2.0.tar.gz", hash = "sha256:df81779732feb9d01e5d513fad0122efb3d53bbc75f61b2a4f29a020bc985e70"}, +] + +[[package]] +name = "pydantic" +version = "2.9.2" +description = "Data validation using Python type hints" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pydantic-2.9.2-py3-none-any.whl", hash = "sha256:f048cec7b26778210e28a0459867920654d48e5e62db0958433636cde4254f12"}, + {file = "pydantic-2.9.2.tar.gz", hash = "sha256:d155cef71265d1e9807ed1c32b4c8deec042a44a50a4188b25ac67ecd81a9c0f"}, +] + +[package.dependencies] +annotated-types = ">=0.6.0" +pydantic-core = "2.23.4" +typing-extensions = [ + {version = ">=4.12.2", markers = "python_version >= \"3.13\""}, + {version = ">=4.6.1", markers = "python_version < \"3.13\""}, +] + +[package.extras] +email = ["email-validator (>=2.0.0)"] +timezone = ["tzdata"] + +[[package]] +name = "pydantic-core" +version = "2.23.4" +description = "Core functionality for Pydantic validation and serialization" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pydantic_core-2.23.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:b10bd51f823d891193d4717448fab065733958bdb6a6b351967bd349d48d5c9b"}, + {file = "pydantic_core-2.23.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4fc714bdbfb534f94034efaa6eadd74e5b93c8fa6315565a222f7b6f42ca1166"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63e46b3169866bd62849936de036f901a9356e36376079b05efa83caeaa02ceb"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed1a53de42fbe34853ba90513cea21673481cd81ed1be739f7f2efb931b24916"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cfdd16ab5e59fc31b5e906d1a3f666571abc367598e3e02c83403acabc092e07"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:255a8ef062cbf6674450e668482456abac99a5583bbafb73f9ad469540a3a232"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a7cd62e831afe623fbb7aabbb4fe583212115b3ef38a9f6b71869ba644624a2"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f09e2ff1f17c2b51f2bc76d1cc33da96298f0a036a137f5440ab3ec5360b624f"}, + {file = "pydantic_core-2.23.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e38e63e6f3d1cec5a27e0afe90a085af8b6806ee208b33030e65b6516353f1a3"}, + {file = "pydantic_core-2.23.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0dbd8dbed2085ed23b5c04afa29d8fd2771674223135dc9bc937f3c09284d071"}, + {file = "pydantic_core-2.23.4-cp310-none-win32.whl", hash = "sha256:6531b7ca5f951d663c339002e91aaebda765ec7d61b7d1e3991051906ddde119"}, + {file = "pydantic_core-2.23.4-cp310-none-win_amd64.whl", hash = "sha256:7c9129eb40958b3d4500fa2467e6a83356b3b61bfff1b414c7361d9220f9ae8f"}, + {file = "pydantic_core-2.23.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:77733e3892bb0a7fa797826361ce8a9184d25c8dffaec60b7ffe928153680ba8"}, + {file = "pydantic_core-2.23.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b84d168f6c48fabd1f2027a3d1bdfe62f92cade1fb273a5d68e621da0e44e6d"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df49e7a0861a8c36d089c1ed57d308623d60416dab2647a4a17fe050ba85de0e"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ff02b6d461a6de369f07ec15e465a88895f3223eb75073ffea56b84d9331f607"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:996a38a83508c54c78a5f41456b0103c30508fed9abcad0a59b876d7398f25fd"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d97683ddee4723ae8c95d1eddac7c192e8c552da0c73a925a89fa8649bf13eea"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:216f9b2d7713eb98cb83c80b9c794de1f6b7e3145eef40400c62e86cee5f4e1e"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6f783e0ec4803c787bcea93e13e9932edab72068f68ecffdf86a99fd5918878b"}, + {file = "pydantic_core-2.23.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d0776dea117cf5272382634bd2a5c1b6eb16767c223c6a5317cd3e2a757c61a0"}, + {file = "pydantic_core-2.23.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d5f7a395a8cf1621939692dba2a6b6a830efa6b3cee787d82c7de1ad2930de64"}, + {file = "pydantic_core-2.23.4-cp311-none-win32.whl", hash = "sha256:74b9127ffea03643e998e0c5ad9bd3811d3dac8c676e47db17b0ee7c3c3bf35f"}, + {file = "pydantic_core-2.23.4-cp311-none-win_amd64.whl", hash = "sha256:98d134c954828488b153d88ba1f34e14259284f256180ce659e8d83e9c05eaa3"}, + {file = "pydantic_core-2.23.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:f3e0da4ebaef65158d4dfd7d3678aad692f7666877df0002b8a522cdf088f231"}, + {file = "pydantic_core-2.23.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f69a8e0b033b747bb3e36a44e7732f0c99f7edd5cea723d45bc0d6e95377ffee"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:723314c1d51722ab28bfcd5240d858512ffd3116449c557a1336cbe3919beb87"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bb2802e667b7051a1bebbfe93684841cc9351004e2badbd6411bf357ab8d5ac8"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d18ca8148bebe1b0a382a27a8ee60350091a6ddaf475fa05ef50dc35b5df6327"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33e3d65a85a2a4a0dc3b092b938a4062b1a05f3a9abde65ea93b233bca0e03f2"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:128585782e5bfa515c590ccee4b727fb76925dd04a98864182b22e89a4e6ed36"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:68665f4c17edcceecc112dfed5dbe6f92261fb9d6054b47d01bf6371a6196126"}, + {file = "pydantic_core-2.23.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:20152074317d9bed6b7a95ade3b7d6054845d70584216160860425f4fbd5ee9e"}, + {file = "pydantic_core-2.23.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9261d3ce84fa1d38ed649c3638feefeae23d32ba9182963e465d58d62203bd24"}, + {file = "pydantic_core-2.23.4-cp312-none-win32.whl", hash = "sha256:4ba762ed58e8d68657fc1281e9bb72e1c3e79cc5d464be146e260c541ec12d84"}, + {file = "pydantic_core-2.23.4-cp312-none-win_amd64.whl", hash = "sha256:97df63000f4fea395b2824da80e169731088656d1818a11b95f3b173747b6cd9"}, + {file = "pydantic_core-2.23.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:7530e201d10d7d14abce4fb54cfe5b94a0aefc87da539d0346a484ead376c3cc"}, + {file = "pydantic_core-2.23.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:df933278128ea1cd77772673c73954e53a1c95a4fdf41eef97c2b779271bd0bd"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cb3da3fd1b6a5d0279a01877713dbda118a2a4fc6f0d821a57da2e464793f05"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:42c6dcb030aefb668a2b7009c85b27f90e51e6a3b4d5c9bc4c57631292015b0d"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:696dd8d674d6ce621ab9d45b205df149399e4bb9aa34102c970b721554828510"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2971bb5ffe72cc0f555c13e19b23c85b654dd2a8f7ab493c262071377bfce9f6"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8394d940e5d400d04cad4f75c0598665cbb81aecefaca82ca85bd28264af7f9b"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0dff76e0602ca7d4cdaacc1ac4c005e0ce0dcfe095d5b5259163a80d3a10d327"}, + {file = "pydantic_core-2.23.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7d32706badfe136888bdea71c0def994644e09fff0bfe47441deaed8e96fdbc6"}, + {file = "pydantic_core-2.23.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ed541d70698978a20eb63d8c5d72f2cc6d7079d9d90f6b50bad07826f1320f5f"}, + {file = "pydantic_core-2.23.4-cp313-none-win32.whl", hash = "sha256:3d5639516376dce1940ea36edf408c554475369f5da2abd45d44621cb616f769"}, + {file = "pydantic_core-2.23.4-cp313-none-win_amd64.whl", hash = "sha256:5a1504ad17ba4210df3a045132a7baeeba5a200e930f57512ee02909fc5c4cb5"}, + {file = "pydantic_core-2.23.4-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:d4488a93b071c04dc20f5cecc3631fc78b9789dd72483ba15d423b5b3689b555"}, + {file = "pydantic_core-2.23.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:81965a16b675b35e1d09dd14df53f190f9129c0202356ed44ab2728b1c905658"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ffa2ebd4c8530079140dd2d7f794a9d9a73cbb8e9d59ffe24c63436efa8f271"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:61817945f2fe7d166e75fbfb28004034b48e44878177fc54d81688e7b85a3665"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:29d2c342c4bc01b88402d60189f3df065fb0dda3654744d5a165a5288a657368"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5e11661ce0fd30a6790e8bcdf263b9ec5988e95e63cf901972107efc49218b13"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d18368b137c6295db49ce7218b1a9ba15c5bc254c96d7c9f9e924a9bc7825ad"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ec4e55f79b1c4ffb2eecd8a0cfba9955a2588497d96851f4c8f99aa4a1d39b12"}, + {file = "pydantic_core-2.23.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:374a5e5049eda9e0a44c696c7ade3ff355f06b1fe0bb945ea3cac2bc336478a2"}, + {file = "pydantic_core-2.23.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5c364564d17da23db1106787675fc7af45f2f7b58b4173bfdd105564e132e6fb"}, + {file = "pydantic_core-2.23.4-cp38-none-win32.whl", hash = "sha256:d7a80d21d613eec45e3d41eb22f8f94ddc758a6c4720842dc74c0581f54993d6"}, + {file = "pydantic_core-2.23.4-cp38-none-win_amd64.whl", hash = "sha256:5f5ff8d839f4566a474a969508fe1c5e59c31c80d9e140566f9a37bba7b8d556"}, + {file = "pydantic_core-2.23.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:a4fa4fc04dff799089689f4fd502ce7d59de529fc2f40a2c8836886c03e0175a"}, + {file = "pydantic_core-2.23.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0a7df63886be5e270da67e0966cf4afbae86069501d35c8c1b3b6c168f42cb36"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcedcd19a557e182628afa1d553c3895a9f825b936415d0dbd3cd0bbcfd29b4b"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f54b118ce5de9ac21c363d9b3caa6c800341e8c47a508787e5868c6b79c9323"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:86d2f57d3e1379a9525c5ab067b27dbb8a0642fb5d454e17a9ac434f9ce523e3"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:de6d1d1b9e5101508cb37ab0d972357cac5235f5c6533d1071964c47139257df"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1278e0d324f6908e872730c9102b0112477a7f7cf88b308e4fc36ce1bdb6d58c"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9a6b5099eeec78827553827f4c6b8615978bb4b6a88e5d9b93eddf8bb6790f55"}, + {file = "pydantic_core-2.23.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e55541f756f9b3ee346b840103f32779c695a19826a4c442b7954550a0972040"}, + {file = "pydantic_core-2.23.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a5c7ba8ffb6d6f8f2ab08743be203654bb1aaa8c9dcb09f82ddd34eadb695605"}, + {file = "pydantic_core-2.23.4-cp39-none-win32.whl", hash = "sha256:37b0fe330e4a58d3c58b24d91d1eb102aeec675a3db4c292ec3928ecd892a9a6"}, + {file = "pydantic_core-2.23.4-cp39-none-win_amd64.whl", hash = "sha256:1498bec4c05c9c787bde9125cfdcc63a41004ff167f495063191b863399b1a29"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f455ee30a9d61d3e1a15abd5068827773d6e4dc513e795f380cdd59932c782d5"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1e90d2e3bd2c3863d48525d297cd143fe541be8bbf6f579504b9712cb6b643ec"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e203fdf807ac7e12ab59ca2bfcabb38c7cf0b33c41efeb00f8e5da1d86af480"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e08277a400de01bc72436a0ccd02bdf596631411f592ad985dcee21445bd0068"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f220b0eea5965dec25480b6333c788fb72ce5f9129e8759ef876a1d805d00801"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:d06b0c8da4f16d1d1e352134427cb194a0a6e19ad5db9161bf32b2113409e728"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:ba1a0996f6c2773bd83e63f18914c1de3c9dd26d55f4ac302a7efe93fb8e7433"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:9a5bce9d23aac8f0cf0836ecfc033896aa8443b501c58d0602dbfd5bd5b37753"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:78ddaaa81421a29574a682b3179d4cf9e6d405a09b99d93ddcf7e5239c742e21"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:883a91b5dd7d26492ff2f04f40fbb652de40fcc0afe07e8129e8ae779c2110eb"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88ad334a15b32a791ea935af224b9de1bf99bcd62fabf745d5f3442199d86d59"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:233710f069d251feb12a56da21e14cca67994eab08362207785cf8c598e74577"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:19442362866a753485ba5e4be408964644dd6a09123d9416c54cd49171f50744"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:624e278a7d29b6445e4e813af92af37820fafb6dcc55c012c834f9e26f9aaaef"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f5ef8f42bec47f21d07668a043f077d507e5bf4e668d5c6dfe6aaba89de1a5b8"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:aea443fffa9fbe3af1a9ba721a87f926fe548d32cab71d188a6ede77d0ff244e"}, + {file = "pydantic_core-2.23.4.tar.gz", hash = "sha256:2584f7cf844ac4d970fba483a717dbe10c1c1c96a969bf65d61ffe94df1b2863"}, +] + +[package.dependencies] +typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" + +[[package]] +name = "pytest" +version = "8.3.3" +description = "pytest: simple powerful testing with Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pytest-8.3.3-py3-none-any.whl", hash = "sha256:a6853c7375b2663155079443d2e45de913a911a11d669df02a50814944db57b2"}, + {file = "pytest-8.3.3.tar.gz", hash = "sha256:70b98107bd648308a7952b06e6ca9a50bc660be218d53c257cc1fc94fda10181"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=1.5,<2" + +[package.extras] +dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] + +[[package]] +name = "typing-extensions" +version = "4.12.2" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = false +python-versions = ">=3.8" +files = [ + {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, + {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, ] [[package]] name = "yarl" -version = "1.9.4" +version = "1.17.1" description = "Yet another URL library" optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" files = [ - {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a8c1df72eb746f4136fe9a2e72b0c9dc1da1cbd23b5372f94b5820ff8ae30e0e"}, - {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a3a6ed1d525bfb91b3fc9b690c5a21bb52de28c018530ad85093cc488bee2dd2"}, - {file = "yarl-1.9.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c38c9ddb6103ceae4e4498f9c08fac9b590c5c71b0370f98714768e22ac6fa66"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9e09c9d74f4566e905a0b8fa668c58109f7624db96a2171f21747abc7524234"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8477c1ee4bd47c57d49621a062121c3023609f7a13b8a46953eb6c9716ca392"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5ff2c858f5f6a42c2a8e751100f237c5e869cbde669a724f2062d4c4ef93551"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:357495293086c5b6d34ca9616a43d329317feab7917518bc97a08f9e55648455"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54525ae423d7b7a8ee81ba189f131054defdb122cde31ff17477951464c1691c"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:801e9264d19643548651b9db361ce3287176671fb0117f96b5ac0ee1c3530d53"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e516dc8baf7b380e6c1c26792610230f37147bb754d6426462ab115a02944385"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:7d5aaac37d19b2904bb9dfe12cdb08c8443e7ba7d2852894ad448d4b8f442863"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:54beabb809ffcacbd9d28ac57b0db46e42a6e341a030293fb3185c409e626b8b"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bac8d525a8dbc2a1507ec731d2867025d11ceadcb4dd421423a5d42c56818541"}, - {file = "yarl-1.9.4-cp310-cp310-win32.whl", hash = "sha256:7855426dfbddac81896b6e533ebefc0af2f132d4a47340cee6d22cac7190022d"}, - {file = "yarl-1.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:848cd2a1df56ddbffeb375535fb62c9d1645dde33ca4d51341378b3f5954429b"}, - {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:35a2b9396879ce32754bd457d31a51ff0a9d426fd9e0e3c33394bf4b9036b099"}, - {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c7d56b293cc071e82532f70adcbd8b61909eec973ae9d2d1f9b233f3d943f2c"}, - {file = "yarl-1.9.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d8a1c6c0be645c745a081c192e747c5de06e944a0d21245f4cf7c05e457c36e0"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b3c1ffe10069f655ea2d731808e76e0f452fc6c749bea04781daf18e6039525"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:549d19c84c55d11687ddbd47eeb348a89df9cb30e1993f1b128f4685cd0ebbf8"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7409f968456111140c1c95301cadf071bd30a81cbd7ab829169fb9e3d72eae9"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e23a6d84d9d1738dbc6e38167776107e63307dfc8ad108e580548d1f2c587f42"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d8b889777de69897406c9fb0b76cdf2fd0f31267861ae7501d93003d55f54fbe"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:03caa9507d3d3c83bca08650678e25364e1843b484f19986a527630ca376ecce"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4e9035df8d0880b2f1c7f5031f33f69e071dfe72ee9310cfc76f7b605958ceb9"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:c0ec0ed476f77db9fb29bca17f0a8fcc7bc97ad4c6c1d8959c507decb22e8572"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:ee04010f26d5102399bd17f8df8bc38dc7ccd7701dc77f4a68c5b8d733406958"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:49a180c2e0743d5d6e0b4d1a9e5f633c62eca3f8a86ba5dd3c471060e352ca98"}, - {file = "yarl-1.9.4-cp311-cp311-win32.whl", hash = "sha256:81eb57278deb6098a5b62e88ad8281b2ba09f2f1147c4767522353eaa6260b31"}, - {file = "yarl-1.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:d1d2532b340b692880261c15aee4dc94dd22ca5d61b9db9a8a361953d36410b1"}, - {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0d2454f0aef65ea81037759be5ca9947539667eecebca092733b2eb43c965a81"}, - {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:44d8ffbb9c06e5a7f529f38f53eda23e50d1ed33c6c869e01481d3fafa6b8142"}, - {file = "yarl-1.9.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:aaaea1e536f98754a6e5c56091baa1b6ce2f2700cc4a00b0d49eca8dea471074"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3777ce5536d17989c91696db1d459574e9a9bd37660ea7ee4d3344579bb6f129"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fc5fc1eeb029757349ad26bbc5880557389a03fa6ada41703db5e068881e5f2"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea65804b5dc88dacd4a40279af0cdadcfe74b3e5b4c897aa0d81cf86927fee78"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa102d6d280a5455ad6a0f9e6d769989638718e938a6a0a2ff3f4a7ff8c62cc4"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09efe4615ada057ba2d30df871d2f668af661e971dfeedf0c159927d48bbeff0"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:008d3e808d03ef28542372d01057fd09168419cdc8f848efe2804f894ae03e51"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:6f5cb257bc2ec58f437da2b37a8cd48f666db96d47b8a3115c29f316313654ff"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:992f18e0ea248ee03b5a6e8b3b4738850ae7dbb172cc41c966462801cbf62cf7"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0e9d124c191d5b881060a9e5060627694c3bdd1fe24c5eecc8d5d7d0eb6faabc"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3986b6f41ad22988e53d5778f91855dc0399b043fc8946d4f2e68af22ee9ff10"}, - {file = "yarl-1.9.4-cp312-cp312-win32.whl", hash = "sha256:4b21516d181cd77ebd06ce160ef8cc2a5e9ad35fb1c5930882baff5ac865eee7"}, - {file = "yarl-1.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:a9bd00dc3bc395a662900f33f74feb3e757429e545d831eef5bb280252631984"}, - {file = "yarl-1.9.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:63b20738b5aac74e239622d2fe30df4fca4942a86e31bf47a81a0e94c14df94f"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7d7f7de27b8944f1fee2c26a88b4dabc2409d2fea7a9ed3df79b67277644e17"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c74018551e31269d56fab81a728f683667e7c28c04e807ba08f8c9e3bba32f14"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ca06675212f94e7a610e85ca36948bb8fc023e458dd6c63ef71abfd482481aa5"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5aef935237d60a51a62b86249839b51345f47564208c6ee615ed2a40878dccdd"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b134fd795e2322b7684155b7855cc99409d10b2e408056db2b93b51a52accc7"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d25039a474c4c72a5ad4b52495056f843a7ff07b632c1b92ea9043a3d9950f6e"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f7d6b36dd2e029b6bcb8a13cf19664c7b8e19ab3a58e0fefbb5b8461447ed5ec"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:957b4774373cf6f709359e5c8c4a0af9f6d7875db657adb0feaf8d6cb3c3964c"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:d7eeb6d22331e2fd42fce928a81c697c9ee2d51400bd1a28803965883e13cead"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:6a962e04b8f91f8c4e5917e518d17958e3bdee71fd1d8b88cdce74dd0ebbf434"}, - {file = "yarl-1.9.4-cp37-cp37m-win32.whl", hash = "sha256:f3bc6af6e2b8f92eced34ef6a96ffb248e863af20ef4fde9448cc8c9b858b749"}, - {file = "yarl-1.9.4-cp37-cp37m-win_amd64.whl", hash = "sha256:ad4d7a90a92e528aadf4965d685c17dacff3df282db1121136c382dc0b6014d2"}, - {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ec61d826d80fc293ed46c9dd26995921e3a82146feacd952ef0757236fc137be"}, - {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8be9e837ea9113676e5754b43b940b50cce76d9ed7d2461df1af39a8ee674d9f"}, - {file = "yarl-1.9.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bef596fdaa8f26e3d66af846bbe77057237cb6e8efff8cd7cc8dff9a62278bbf"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d47552b6e52c3319fede1b60b3de120fe83bde9b7bddad11a69fb0af7db32f1"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84fc30f71689d7fc9168b92788abc977dc8cefa806909565fc2951d02f6b7d57"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4aa9741085f635934f3a2583e16fcf62ba835719a8b2b28fb2917bb0537c1dfa"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:206a55215e6d05dbc6c98ce598a59e6fbd0c493e2de4ea6cc2f4934d5a18d130"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07574b007ee20e5c375a8fe4a0789fad26db905f9813be0f9fef5a68080de559"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5a2e2433eb9344a163aced6a5f6c9222c0786e5a9e9cac2c89f0b28433f56e23"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6ad6d10ed9b67a382b45f29ea028f92d25bc0bc1daf6c5b801b90b5aa70fb9ec"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:6fe79f998a4052d79e1c30eeb7d6c1c1056ad33300f682465e1b4e9b5a188b78"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a825ec844298c791fd28ed14ed1bffc56a98d15b8c58a20e0e08c1f5f2bea1be"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8619d6915b3b0b34420cf9b2bb6d81ef59d984cb0fde7544e9ece32b4b3043c3"}, - {file = "yarl-1.9.4-cp38-cp38-win32.whl", hash = "sha256:686a0c2f85f83463272ddffd4deb5e591c98aac1897d65e92319f729c320eece"}, - {file = "yarl-1.9.4-cp38-cp38-win_amd64.whl", hash = "sha256:a00862fb23195b6b8322f7d781b0dc1d82cb3bcac346d1e38689370cc1cc398b"}, - {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:604f31d97fa493083ea21bd9b92c419012531c4e17ea6da0f65cacdcf5d0bd27"}, - {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8a854227cf581330ffa2c4824d96e52ee621dd571078a252c25e3a3b3d94a1b1"}, - {file = "yarl-1.9.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ba6f52cbc7809cd8d74604cce9c14868306ae4aa0282016b641c661f981a6e91"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6327976c7c2f4ee6816eff196e25385ccc02cb81427952414a64811037bbc8b"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8397a3817d7dcdd14bb266283cd1d6fc7264a48c186b986f32e86d86d35fbac5"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0381b4ce23ff92f8170080c97678040fc5b08da85e9e292292aba67fdac6c34"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23d32a2594cb5d565d358a92e151315d1b2268bc10f4610d098f96b147370136"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ddb2a5c08a4eaaba605340fdee8fc08e406c56617566d9643ad8bf6852778fc7"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:26a1dc6285e03f3cc9e839a2da83bcbf31dcb0d004c72d0730e755b33466c30e"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:18580f672e44ce1238b82f7fb87d727c4a131f3a9d33a5e0e82b793362bf18b4"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:29e0f83f37610f173eb7e7b5562dd71467993495e568e708d99e9d1944f561ec"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:1f23e4fe1e8794f74b6027d7cf19dc25f8b63af1483d91d595d4a07eca1fb26c"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:db8e58b9d79200c76956cefd14d5c90af54416ff5353c5bfd7cbe58818e26ef0"}, - {file = "yarl-1.9.4-cp39-cp39-win32.whl", hash = "sha256:c7224cab95645c7ab53791022ae77a4509472613e839dab722a72abe5a684575"}, - {file = "yarl-1.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:824d6c50492add5da9374875ce72db7a0733b29c2394890aef23d533106e2b15"}, - {file = "yarl-1.9.4-py3-none-any.whl", hash = "sha256:928cecb0ef9d5a7946eb6ff58417ad2fe9375762382f1bf5c55e61645f2c43ad"}, - {file = "yarl-1.9.4.tar.gz", hash = "sha256:566db86717cf8080b99b58b083b773a908ae40f06681e87e589a976faf8246bf"}, + {file = "yarl-1.17.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b1794853124e2f663f0ea54efb0340b457f08d40a1cef78edfa086576179c91"}, + {file = "yarl-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fbea1751729afe607d84acfd01efd95e3b31db148a181a441984ce9b3d3469da"}, + {file = "yarl-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8ee427208c675f1b6e344a1f89376a9613fc30b52646a04ac0c1f6587c7e46ec"}, + {file = "yarl-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b74ff4767d3ef47ffe0cd1d89379dc4d828d4873e5528976ced3b44fe5b0a21"}, + {file = "yarl-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:62a91aefff3d11bf60e5956d340eb507a983a7ec802b19072bb989ce120cd948"}, + {file = "yarl-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:846dd2e1243407133d3195d2d7e4ceefcaa5f5bf7278f0a9bda00967e6326b04"}, + {file = "yarl-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e844be8d536afa129366d9af76ed7cb8dfefec99f5f1c9e4f8ae542279a6dc3"}, + {file = "yarl-1.17.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cc7c92c1baa629cb03ecb0c3d12564f172218fb1739f54bf5f3881844daadc6d"}, + {file = "yarl-1.17.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ae3476e934b9d714aa8000d2e4c01eb2590eee10b9d8cd03e7983ad65dfbfcba"}, + {file = "yarl-1.17.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:c7e177c619342e407415d4f35dec63d2d134d951e24b5166afcdfd1362828e17"}, + {file = "yarl-1.17.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:64cc6e97f14cf8a275d79c5002281f3040c12e2e4220623b5759ea7f9868d6a5"}, + {file = "yarl-1.17.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:84c063af19ef5130084db70ada40ce63a84f6c1ef4d3dbc34e5e8c4febb20822"}, + {file = "yarl-1.17.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:482c122b72e3c5ec98f11457aeb436ae4aecca75de19b3d1de7cf88bc40db82f"}, + {file = "yarl-1.17.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:380e6c38ef692b8fd5a0f6d1fa8774d81ebc08cfbd624b1bca62a4d4af2f9931"}, + {file = "yarl-1.17.1-cp310-cp310-win32.whl", hash = "sha256:16bca6678a83657dd48df84b51bd56a6c6bd401853aef6d09dc2506a78484c7b"}, + {file = "yarl-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:561c87fea99545ef7d692403c110b2f99dced6dff93056d6e04384ad3bc46243"}, + {file = "yarl-1.17.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:cbad927ea8ed814622305d842c93412cb47bd39a496ed0f96bfd42b922b4a217"}, + {file = "yarl-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fca4b4307ebe9c3ec77a084da3a9d1999d164693d16492ca2b64594340999988"}, + {file = "yarl-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ff5c6771c7e3511a06555afa317879b7db8d640137ba55d6ab0d0c50425cab75"}, + {file = "yarl-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b29beab10211a746f9846baa39275e80034e065460d99eb51e45c9a9495bcca"}, + {file = "yarl-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a52a1ffdd824fb1835272e125385c32fd8b17fbdefeedcb4d543cc23b332d74"}, + {file = "yarl-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:58c8e9620eb82a189c6c40cb6b59b4e35b2ee68b1f2afa6597732a2b467d7e8f"}, + {file = "yarl-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d216e5d9b8749563c7f2c6f7a0831057ec844c68b4c11cb10fc62d4fd373c26d"}, + {file = "yarl-1.17.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:881764d610e3269964fc4bb3c19bb6fce55422828e152b885609ec176b41cf11"}, + {file = "yarl-1.17.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8c79e9d7e3d8a32d4824250a9c6401194fb4c2ad9a0cec8f6a96e09a582c2cc0"}, + {file = "yarl-1.17.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:299f11b44d8d3a588234adbe01112126010bd96d9139c3ba7b3badd9829261c3"}, + {file = "yarl-1.17.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:cc7d768260f4ba4ea01741c1b5fe3d3a6c70eb91c87f4c8761bbcce5181beafe"}, + {file = "yarl-1.17.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:de599af166970d6a61accde358ec9ded821234cbbc8c6413acfec06056b8e860"}, + {file = "yarl-1.17.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:2b24ec55fad43e476905eceaf14f41f6478780b870eda5d08b4d6de9a60b65b4"}, + {file = "yarl-1.17.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9fb815155aac6bfa8d86184079652c9715c812d506b22cfa369196ef4e99d1b4"}, + {file = "yarl-1.17.1-cp311-cp311-win32.whl", hash = "sha256:7615058aabad54416ddac99ade09a5510cf77039a3b903e94e8922f25ed203d7"}, + {file = "yarl-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:14bc88baa44e1f84164a392827b5defb4fa8e56b93fecac3d15315e7c8e5d8b3"}, + {file = "yarl-1.17.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:327828786da2006085a4d1feb2594de6f6d26f8af48b81eb1ae950c788d97f61"}, + {file = "yarl-1.17.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cc353841428d56b683a123a813e6a686e07026d6b1c5757970a877195f880c2d"}, + {file = "yarl-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c73df5b6e8fabe2ddb74876fb82d9dd44cbace0ca12e8861ce9155ad3c886139"}, + {file = "yarl-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0bdff5e0995522706c53078f531fb586f56de9c4c81c243865dd5c66c132c3b5"}, + {file = "yarl-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:06157fb3c58f2736a5e47c8fcbe1afc8b5de6fb28b14d25574af9e62150fcaac"}, + {file = "yarl-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1654ec814b18be1af2c857aa9000de7a601400bd4c9ca24629b18486c2e35463"}, + {file = "yarl-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f6595c852ca544aaeeb32d357e62c9c780eac69dcd34e40cae7b55bc4fb1147"}, + {file = "yarl-1.17.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:459e81c2fb920b5f5df744262d1498ec2c8081acdcfe18181da44c50f51312f7"}, + {file = "yarl-1.17.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7e48cdb8226644e2fbd0bdb0a0f87906a3db07087f4de77a1b1b1ccfd9e93685"}, + {file = "yarl-1.17.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:d9b6b28a57feb51605d6ae5e61a9044a31742db557a3b851a74c13bc61de5172"}, + {file = "yarl-1.17.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e594b22688d5747b06e957f1ef822060cb5cb35b493066e33ceac0cf882188b7"}, + {file = "yarl-1.17.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5f236cb5999ccd23a0ab1bd219cfe0ee3e1c1b65aaf6dd3320e972f7ec3a39da"}, + {file = "yarl-1.17.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:a2a64e62c7a0edd07c1c917b0586655f3362d2c2d37d474db1a509efb96fea1c"}, + {file = "yarl-1.17.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d0eea830b591dbc68e030c86a9569826145df485b2b4554874b07fea1275a199"}, + {file = "yarl-1.17.1-cp312-cp312-win32.whl", hash = "sha256:46ddf6e0b975cd680eb83318aa1d321cb2bf8d288d50f1754526230fcf59ba96"}, + {file = "yarl-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:117ed8b3732528a1e41af3aa6d4e08483c2f0f2e3d3d7dca7cf538b3516d93df"}, + {file = "yarl-1.17.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:5d1d42556b063d579cae59e37a38c61f4402b47d70c29f0ef15cee1acaa64488"}, + {file = "yarl-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c0167540094838ee9093ef6cc2c69d0074bbf84a432b4995835e8e5a0d984374"}, + {file = "yarl-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2f0a6423295a0d282d00e8701fe763eeefba8037e984ad5de44aa349002562ac"}, + {file = "yarl-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5b078134f48552c4d9527db2f7da0b5359abd49393cdf9794017baec7506170"}, + {file = "yarl-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d401f07261dc5aa36c2e4efc308548f6ae943bfff20fcadb0a07517a26b196d8"}, + {file = "yarl-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b5f1ac7359e17efe0b6e5fec21de34145caef22b260e978336f325d5c84e6938"}, + {file = "yarl-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f63d176a81555984e91f2c84c2a574a61cab7111cc907e176f0f01538e9ff6e"}, + {file = "yarl-1.17.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e275792097c9f7e80741c36de3b61917aebecc08a67ae62899b074566ff8556"}, + {file = "yarl-1.17.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:81713b70bea5c1386dc2f32a8f0dab4148a2928c7495c808c541ee0aae614d67"}, + {file = "yarl-1.17.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:aa46dce75078fceaf7cecac5817422febb4355fbdda440db55206e3bd288cfb8"}, + {file = "yarl-1.17.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:1ce36ded585f45b1e9bb36d0ae94765c6608b43bd2e7f5f88079f7a85c61a4d3"}, + {file = "yarl-1.17.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:2d374d70fdc36f5863b84e54775452f68639bc862918602d028f89310a034ab0"}, + {file = "yarl-1.17.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:2d9f0606baaec5dd54cb99667fcf85183a7477f3766fbddbe3f385e7fc253299"}, + {file = "yarl-1.17.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b0341e6d9a0c0e3cdc65857ef518bb05b410dbd70d749a0d33ac0f39e81a4258"}, + {file = "yarl-1.17.1-cp313-cp313-win32.whl", hash = "sha256:2e7ba4c9377e48fb7b20dedbd473cbcbc13e72e1826917c185157a137dac9df2"}, + {file = "yarl-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:949681f68e0e3c25377462be4b658500e85ca24323d9619fdc41f68d46a1ffda"}, + {file = "yarl-1.17.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8994b29c462de9a8fce2d591028b986dbbe1b32f3ad600b2d3e1c482c93abad6"}, + {file = "yarl-1.17.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f9cbfbc5faca235fbdf531b93aa0f9f005ec7d267d9d738761a4d42b744ea159"}, + {file = "yarl-1.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b40d1bf6e6f74f7c0a567a9e5e778bbd4699d1d3d2c0fe46f4b717eef9e96b95"}, + {file = "yarl-1.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f5efe0661b9fcd6246f27957f6ae1c0eb29bc60552820f01e970b4996e016004"}, + {file = "yarl-1.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b5c4804e4039f487e942c13381e6c27b4b4e66066d94ef1fae3f6ba8b953f383"}, + {file = "yarl-1.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b5d6a6c9602fd4598fa07e0389e19fe199ae96449008d8304bf5d47cb745462e"}, + {file = "yarl-1.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f4c9156c4d1eb490fe374fb294deeb7bc7eaccda50e23775b2354b6a6739934"}, + {file = "yarl-1.17.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6324274b4e0e2fa1b3eccb25997b1c9ed134ff61d296448ab8269f5ac068c4c"}, + {file = "yarl-1.17.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:d8a8b74d843c2638f3864a17d97a4acda58e40d3e44b6303b8cc3d3c44ae2d29"}, + {file = "yarl-1.17.1-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:7fac95714b09da9278a0b52e492466f773cfe37651cf467a83a1b659be24bf71"}, + {file = "yarl-1.17.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:c180ac742a083e109c1a18151f4dd8675f32679985a1c750d2ff806796165b55"}, + {file = "yarl-1.17.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:578d00c9b7fccfa1745a44f4eddfdc99d723d157dad26764538fbdda37209857"}, + {file = "yarl-1.17.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:1a3b91c44efa29e6c8ef8a9a2b583347998e2ba52c5d8280dbd5919c02dfc3b5"}, + {file = "yarl-1.17.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a7ac5b4984c468ce4f4a553df281450df0a34aefae02e58d77a0847be8d1e11f"}, + {file = "yarl-1.17.1-cp39-cp39-win32.whl", hash = "sha256:7294e38f9aa2e9f05f765b28ffdc5d81378508ce6dadbe93f6d464a8c9594473"}, + {file = "yarl-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:eb6dce402734575e1a8cc0bb1509afca508a400a57ce13d306ea2c663bad1138"}, + {file = "yarl-1.17.1-py3-none-any.whl", hash = "sha256:f1790a4b1e8e8e028c391175433b9c8122c39b46e1663228158e61e6f915bf06"}, + {file = "yarl-1.17.1.tar.gz", hash = "sha256:067a63fcfda82da6b198fa73079b1ca40b7c9b7994995b6ee38acda728b64d47"}, ] [package.dependencies] idna = ">=2.0" multidict = ">=4.0" +propcache = ">=0.2.0" [metadata] lock-version = "2.0" -python-versions = "^3.9" -content-hash = "4baee616daa2bd74a77594463789300d7720e25bc816382c8490b783bf570148" +python-versions = "^3.12" +content-hash = "62af17b651ebefcf22143212010711b2233eaaabead2bdbffb65b382e79f9772" diff --git a/pyproject.toml b/pyproject.toml index 6d0a1a9..1ee2eb9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,12 +1,20 @@ [tool.poetry] -name = "telegram-bot" +name = "chat-helper" version = "0.1.0" description = "" -authors = ["Your Name "] +authors = ["one-zero-eight "] +package-mode = false [tool.poetry.dependencies] -python = "^3.9" -aiogram = "^2.13" +python = "^3.12" +aiogram = "^3.14.0" +numpy = "^2.1.3" +pillow = "^11.0.0" +pytest = "^8.3.3" + +[tool.ruff] +line-length = 120 +lint.extend-select = ["I", "UP", "PL"] [build-system] requires = ["poetry-core>=1.0.0"] diff --git a/src/__init__.py b/src/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/avatar.py b/src/avatar.py new file mode 100644 index 0000000..8483ba0 --- /dev/null +++ b/src/avatar.py @@ -0,0 +1,84 @@ +import numpy as np +from PIL import Image, ImageDraw, ImageFont + +LOGO_IMG = np.array(Image.open("static/logo.png")) +font_big = ImageFont.truetype("static/Rubik-Bold.ttf", 124) +font_small = ImageFont.truetype("static/Rubik-Bold.ttf", 74) + + +def print_text(img: Image, pos: tuple[int, int], text: str, font: ImageFont, max_width: int, max_height: int) -> Image: + font_size = font.size + draw = ImageDraw.Draw(img) + current_font = ImageFont.truetype(font.path, font_size) + + # Wrap text to fit within max_width and max_height + wrapped_text = text + trials = 1000 + while trials: + trials -= 1 + lines = [] + words = wrapped_text.split() + current_line = [] + + for word in words: + current_line.append(word) + test_line = " ".join(current_line) + _, _, w, _ = current_font.getbbox(test_line) + if w > max_width: + # If line width exceeds max_width, start a new line + current_line.pop() # remove word causing overflow + lines.append(" ".join(current_line)) + current_line = [word] # start new line with current word + # Add any remaining words in the current line to lines + if current_line: + lines.append(" ".join(current_line)) + + max_width_in_lines = 0 + + for line in lines: + _, _, w, _ = current_font.getbbox(line) + max_width_in_lines = max(w, max_width_in_lines) + + # Calculate total height of the text block + _, _, _, line_height = current_font.getbbox("A") + text_height = line_height * len(lines) + + if (text_height <= max_height) and (max_width_in_lines <= max_width): + # Draw the wrapped text + y_text = pos[1] - text_height // 2 + for line in lines: + _, _, text_width, _ = current_font.getbbox(line) + x_text = pos[0] - text_width // 2 + draw.text((x_text, y_text), line, font=current_font, fill=(255, 255, 255)) + y_text += line_height + break + else: + # Reduce font size if text block is too tall + font_size -= 1 + current_font = ImageFont.truetype(font.path, font_size) + + return img + + +def generate_avatar(title: str, subtitle: str | None, color: tuple[int, int, int]) -> Image: + img = np.zeros((640, 640, 3), np.uint32) + np.array(color) + + h = LOGO_IMG.shape[0] + w = LOGO_IMG.shape[1] + y0 = 105 - h // 2 + x0 = (img.shape[1] - w) // 2 + roi = img[y0 : y0 + h, x0 : x0 + w, :] + img[y0 : y0 + h, x0 : x0 + w, :] = roi * (255 - LOGO_IMG[:, :, :3]) // 255 + (LOGO_IMG[:, :, :3]) + + img = img.clip(0, 255).astype(np.uint8) + + img = Image.fromarray(img) + max_width = 600 + max_height = 300 + if subtitle is not None: + img = print_text(img, (640 // 2, 640 // 2), title, font_big, max_width, max_height) + img = print_text(img, (640 // 2, 640 // 2 + 200), subtitle, font_small, max_width, 74) + else: + img = print_text(img, (640 // 2, 640 // 2), title, font_big, max_width, max_height) + + return img diff --git a/src/bot.py b/src/bot.py new file mode 100644 index 0000000..0a87a67 --- /dev/null +++ b/src/bot.py @@ -0,0 +1,205 @@ +import asyncio +import logging +import os +import re +from io import BytesIO + +from PIL.JpegPresets import presets +from aiogram import Bot, Dispatcher, types +from aiogram.enums import ChatMemberStatus +from aiogram.exceptions import TelegramBadRequest +from aiogram.filters import Command, CommandObject +from aiogram.filters.callback_data import CallbackData +from aiogram.types import ( + BufferedInputFile, + CallbackQuery, + InlineKeyboardButton, + InlineKeyboardMarkup, +) +from aiogram.utils.formatting import Text + +from src.avatar import generate_avatar +from src.color import pick_stable_random +from src.parse_chat_name import get_course_name, get_semester + +API_TOKEN = os.getenv("TELEGRAM_API_TOKEN") + +logging.basicConfig(level=logging.INFO) + +bot = Bot(token=API_TOKEN) +dp = Dispatcher() + + +async def on_startup(): + logging.info("Bot is starting up...") + await bot.delete_webhook(drop_pending_updates=True) + + +class SetPhotoCallbackData(CallbackData, prefix="set_photo"): + pass + + +class DeleteCallbackData(CallbackData, prefix="delete"): + pass + + +def _get_avatar_bytes(title: str, subtitle: str | None, color: tuple[int, int, int]) -> bytes: + picture = generate_avatar(title, subtitle, color) + bio = BytesIO() + picture.save(bio, "jpeg", quality=95, **presets["maximum"]) + bio.seek(0) + return bio.read() + + +@dp.message(Command("set_image")) +async def handle_set_image(message: types.Message, command: CommandObject): + chat_member = await bot.get_chat_member(message.chat.id, message.from_user.id) + if chat_member.status == ChatMemberStatus.ADMINISTRATOR or chat_member.status == ChatMemberStatus.CREATOR: + if command.args and len(command.args.splitlines()): + splitted = command.args.splitlines() + title, subtitle, color, *_ = (splitted + [None, None, None])[:3] + else: + title, subtitle, color = get_course_name(message.chat.full_name), get_semester(message.chat.full_name), None + + if color is not None: + color = color.lstrip("#") + rgb = int(color[0:2], 16), int(color[2:4], 16), int(color[4:6], 16) + else: + rgb = pick_stable_random(title) + caption = f""" +Текущие параметры: +
\ +{title} +{subtitle or ""} +#{rgb[0]:02x}{rgb[1]:02x}{rgb[2]:02x}\ +
+ +Для генерации другой аватарки отправьте сообщение: +
\
+/set_image
+Заголовок
+Подзаголовок (опционально)
+Цвет в формате hex (опционально)\
+
""" + avatar_bytes = _get_avatar_bytes(title, subtitle, rgb) + + await message.reply_photo( + BufferedInputFile(avatar_bytes, "avatar.jpeg"), + caption=caption, + parse_mode="HTML", + reply_markup=InlineKeyboardMarkup( + inline_keyboard=[ + [ + InlineKeyboardButton( + text="Задать как аватар чата", + callback_data=SetPhotoCallbackData().pack(), + ), + InlineKeyboardButton( + text="Удалить это сообщение", + callback_data=DeleteCallbackData().pack(), + ), + ] + ] + ), + ) + else: + logging.info("No way...") + + +@dp.callback_query(SetPhotoCallbackData.filter()) +async def handle_set_image(callback_query: CallbackQuery): + await callback_query.answer() + chat_member = await bot.get_chat_member(callback_query.message.chat.id, callback_query.from_user.id) + if chat_member.status == ChatMemberStatus.ADMINISTRATOR or chat_member.status == ChatMemberStatus.CREATOR: + as_html = Text.from_entities(callback_query.message.caption, callback_query.message.caption_entities).as_html() + first_blockquote = re.search(r"
(?P.*?)
", as_html, re.DOTALL | re.MULTILINE) + content = first_blockquote.group("content") + splitted = content.splitlines() + + title, subtitle, color, *_ = (splitted + [None, None, None])[:3] + + if color is not None: + color = color.lstrip("#") + rgb = int(color[0:2], 16), int(color[2:4], 16), int(color[4:6], 16) + else: + rgb = pick_stable_random(title) + + avatar_bytes = _get_avatar_bytes(title, subtitle, rgb) + await bot.set_chat_photo( + chat_id=callback_query.message.chat.id, + photo=BufferedInputFile(avatar_bytes, "avatar.jpeg"), + ) + if callback_query.message.reply_to_message: + await callback_query.message.reply_to_message.delete() + await callback_query.message.delete() + else: + logging.info("No way...") + + +@dp.callback_query(DeleteCallbackData.filter()) +async def handle_delete_message(callback_query: CallbackQuery): + await callback_query.answer() + chat_member = await bot.get_chat_member(callback_query.message.chat.id, callback_query.from_user.id) + if chat_member.status == ChatMemberStatus.ADMINISTRATOR or chat_member.status == ChatMemberStatus.CREATOR: + await callback_query.message.delete() + + +@dp.message() +async def handle(message: types.Message): + if message.new_chat_members and message.new_chat_members[0].id == bot.id: + text = ( + "Привет 👋 Я бот, который удаляет уведомления о входе и выходе участников в чатах. Также я умею " + "генерировать аватарку для чата (/set_image).\n\n" + ) + bot_chat_member = await bot.get_chat_member(message.chat.id, bot.id) + if bot_chat_member.status != ChatMemberStatus.ADMINISTRATOR: + text += ( + "Пожалуйста, назначьте меня администратором, чтобы я мог удалять уведомления о входе и выходе " + "участников." + ) + else: + text += "✅ Я администратор, для дальнейшей работы всё уже настроено." + + await message.answer( + text, + reply_markup=InlineKeyboardMarkup( + inline_keyboard=[ + [ + InlineKeyboardButton( + text="Удалить это сообщение", + callback_data=DeleteCallbackData().pack(), + ), + ] + ] + ), + ) + chat = await bot.get_chat(message.chat.id) + + if chat.photo is None and bot_chat_member.status == ChatMemberStatus.ADMINISTRATOR: + title, subtitle = get_course_name(message.chat.full_name), get_semester(message.chat.full_name) + rgb = pick_stable_random(title) + avatar_bytes = _get_avatar_bytes(title, subtitle, rgb) + await bot.set_chat_photo( + chat_id=message.chat.id, + photo=BufferedInputFile(avatar_bytes, "avatar.jpeg"), + ) + + if ( + message.left_chat_member is not None + or message.new_chat_members is not None + or message.new_chat_photo is not None + ): + try: + await message.delete() + logging.info(f"Message deleted: {message.message_id}") + + except TelegramBadRequest as e: + logging.warning(f"Message can't be deleted: {e}") + + +async def main() -> None: + await dp.start_polling(bot) + + +if __name__ == "__main__": + asyncio.run(main()) diff --git a/src/color.py b/src/color.py new file mode 100644 index 0000000..4800290 --- /dev/null +++ b/src/color.py @@ -0,0 +1,14 @@ +from zlib import crc32 +import colorsys + + +def pick_stable_random(to_hash: str): + hash_value = crc32(to_hash.encode()) & 0xFFFFFFFF + hue = (hash_value % 100) / 100 + value, saturation = 1, 0.75 + r, g, b = colorsys.hsv_to_rgb(hue, value, saturation) + r *= 255 + g *= 255 + b *= 255 + + return int(r), int(g), int(b) diff --git a/src/parse_chat_name.py b/src/parse_chat_name.py new file mode 100644 index 0000000..da41440 --- /dev/null +++ b/src/parse_chat_name.py @@ -0,0 +1,24 @@ +import re + + +def get_course_name(chat_name: str) -> str: + # Regex pattern to remove the prefix like [S24], [F23], etc., and any suffix after " / " + match = re.match(r"\[.*?\]\s*([^\s/]+.*?)(\s*/.*)?$", chat_name) + if match: + course_name = match.group(1).strip() + # Remove "Students" if it appears at the end + if course_name.endswith("Students"): + course_name = course_name.rsplit(" ", 1)[0].strip() + # Remove any trailing parentheses and their content + course_name = re.sub(r"\s*\(.*?\)$", "", course_name).strip() + return course_name + return chat_name # Return as is if pattern doesn't match + + +def get_semester(chat_name: str) -> str | None: + match = re.match(r"\[.*?\]", chat_name) + + if match: + return match.group(0).strip("[] ").capitalize() + + return None diff --git a/static/Rubik-Bold.ttf b/static/Rubik-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..1a9693d97fe25e8635691463d9d51a63ecd32aa0 GIT binary patch literal 208320 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�v)g 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

W$?`|>FrI~k0Onu-~^9q?^ST^$9#{m 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 Q0ZLR1p00i_>zopr06U}vasU7T literal 0 HcmV?d00001 diff --git a/tests/test_parse_chat_name.py b/tests/test_parse_chat_name.py new file mode 100644 index 0000000..149aad8 --- /dev/null +++ b/tests/test_parse_chat_name.py @@ -0,0 +1,84 @@ +from unittest import TestCase + +import pytest + +from src.parse_chat_name import get_course_name + +cases_course_groups = [ + ("[S24] Databases", "Databases"), + ( + "[S24] Distributed and Network Programming", + "Distributed and Network Programming", + ), + ("[S24] Intro to ML", "Intro to ML"), + ( + "[S24] System and Network Administration", + "System and Network Administration", + ), + ( + "[F24] Network and Cyber Security / Сетевая и кибербезопасность", + "Network and Cyber Security", + ), + ("[F24] Information Retrieval / Информационный поиск", "Information Retrieval"), + ( + "[F24] Software Architecture / Архитектура программного обеспечения", + "Software Architecture", + ), + ( + "[F24] Fundamentals of Information Security / Основные принципы информационной безопасности", + "Fundamentals of Information Security", + ), + ("[s23] Linear Algebra II", "Linear Algebra II"), + ("[Sum24] Безопасность жизнедеятельности", "Безопасность жизнедеятельности"), + ( + "[F24] Introduction to Functional Programming and Scala Language", + "Introduction to Functional Programming and Scala Language", + ), + ("[F23] Differential Equations Students", "Differential Equations"), + ("[S24] Databases", "Databases"), + ("[S23] Math Analysis II (Discussions)", "Math Analysis II"), + ("[Sum24] MLOps Engineering / Разработка и внедрение ML-решений", "MLOps Engineering"), + ( + "[Sum24] Personal Efficiency Skills of IT-specialist / Навыки личной эффективности ИТ-специалиста", + "Personal Efficiency Skills of IT-specialist", + ), + ("[Sum24] Practicum Project / Прикладной проект", "Practicum Project"), + ("[Sum23] History / История (история России, всеобщая история) Students", "History"), + ("[S24] Distributed and Network Programming", "Distributed and Network Programming"), + ("[S24] Intro to ML", "Intro to ML"), + ("[S24] System and Network Administration", "System and Network Administration"), + ("[S24] Networks Students", "Networks"), + ("[F23] Philosophy II (Introduction to AI) Students", "Philosophy II"), + ("[F23] Probability & Statistics", "Probability & Statistics"), + ("[F23] Probability and Statistics Students", "Probability and Statistics"), + ("[F23] Operating Systems Students", "Operating Systems"), + ("[S23] Data Structures and Algorithms Students", "Data Structures and Algorithms"), + ("[F23] Introduction to Optimization Students", "Introduction to Optimization"), + ("[F23] Physics I (Mechanics) Students", "Physics I"), + ("[F22] AGLA I", "AGLA I"), + ("[S23]Theoretical Sports / Физическая культура и спорт", "Theoretical Sports"), + ("[Sum23] Software Project Students", "Software Project"), + ("[Sum23] Software Project", "Software Project"), + ( + "[Sum23] Introduction to Robot Operating System: Basics, Motion, and Vision Students", + "Introduction to Robot Operating System: Basics, Motion, and Vision", + ), + ("[S23] Theoretical Computer Science Students", "Theoretical Computer Science"), + ("[S23] Sport electives", "Sport electives"), + ("[S23] Data Structures and Algorithms", "Data Structures and Algorithms"), + ( + "[S23] Software Systems Analysis and Design / Проектирование и анализ программных систем", + "Software Systems Analysis and Design", + ), + ("[F22] Introduction to Programming", "Introduction to Programming"), + ("[F22] Logic and Discrete Mathematics", "Logic and Discrete Mathematics"), +] + + +@pytest.mark.parametrize("input_, desired", cases_course_groups) +def test_location_parser(input_, desired: str): + _ = TestCase() + _.maxDiff = None + + course_name = get_course_name(input_) + assert course_name == desired