From ce0863ccdbc2e47230dd27385c5d88e41aa4abfa Mon Sep 17 00:00:00 2001 From: Tomer Nosrati Date: Wed, 11 Oct 2023 00:42:52 +0300 Subject: [PATCH] Refactoring (#52) * Cleaner tox runs * Simplified folder & files structure * Added WORKER_DOCKERFILE_ROOTDIR to defaults * Cleanup * Fixed bug where celery_setup_name fixture wasn't used correctly * Changed docker tag for default worker container from pytest-celery/components/worker:base to pytest-celery/components/worker:default * Removed unused fixtures - default_rabbitmq_broker_celeryconfig - default_redis_broker_celeryconfig - default_redis_backend_celeryconfig * Renamed DEFAULT_NETWORK -> default_pytest_celery_network * poetry.lock * Refactored tests folder & files structure --- .github/workflows/python-package.yml | 6 +- poetry.lock | 485 +++++++++--------- src/pytest_celery/__init__.py | 89 +--- src/pytest_celery/api/__init__.py | 12 - .../backend/cluster.py => backend.py} | 14 +- .../api/{components/cluster => }/base.py | 41 +- .../broker/cluster.py => broker.py} | 14 +- src/pytest_celery/api/components/__init__.py | 10 - .../api/components/backend/__init__.py | 4 - .../api/components/backend/node.py | 11 - .../api/components/broker/__init__.py | 4 - .../api/components/broker/node.py | 11 - .../api/components/cluster/__init__.py | 4 - .../api/components/cluster/node.py | 37 -- .../api/components/worker/__init__.py | 4 - .../api/components/worker/cluster.py | 25 - src/pytest_celery/api/container.py | 3 + src/pytest_celery/api/setup.py | 11 +- .../{components/worker/node.py => worker.py} | 26 +- src/pytest_celery/components/__init__.py | 41 -- .../components/backend/__init__.py | 10 - .../components/backend/redis/__init__.py | 10 - .../components/broker/__init__.py | 18 - .../components/broker/rabbitmq/__init__.py | 10 - .../components/broker/rabbitmq/api.py | 5 - .../components/broker/redis/__init__.py | 10 - .../components/broker/redis/api.py | 5 - .../components/worker/__init__.py | 18 - src/pytest_celery/containers/__init__.py | 5 - src/pytest_celery/defaults.py | 6 +- src/pytest_celery/fixtures/__init__.py | 17 - src/pytest_celery/fixtures/backend.py | 4 +- src/pytest_celery/fixtures/broker.py | 4 +- src/pytest_celery/fixtures/setup.py | 55 +- src/pytest_celery/fixtures/worker.py | 4 +- .../pytest_celery/vendors}/__init__.py | 0 .../vendors/rabbitmq}/__init__.py | 0 src/pytest_celery/vendors/rabbitmq/api.py | 5 + .../rabbitmq/container.py} | 0 .../broker => vendors}/rabbitmq/fixtures.py | 11 +- .../pytest_celery/vendors/redis}/__init__.py | 0 .../vendors/redis/backend}/__init__.py | 0 .../redis => vendors/redis/backend}/api.py | 2 +- .../redis/backend}/fixtures.py | 11 +- .../vendors/redis/broker}/__init__.py | 0 src/pytest_celery/vendors/redis/broker/api.py | 5 + .../redis/broker}/fixtures.py | 11 +- .../redis.py => vendors/redis/container.py} | 0 .../{components => vendors}/worker/Dockerfile | 0 .../pytest_celery/vendors/worker}/__init__.py | 0 .../{components => vendors}/worker/app.py | 0 .../worker.py => vendors/worker/container.py} | 4 +- .../worker/fixtures.py | 24 +- .../{components => vendors}/worker/tasks.py | 0 tests/conftest.py | 10 +- .../api/custom_setup}/__init__.py | 0 .../custom => api/custom_setup}/conftest.py | 8 +- .../custom_setup}/test_custom_setup.py | 4 +- .../{containers => api}/test_container.py | 0 .../integration/{setup => api}/test_setup.py | 4 +- tests/integration/api/test_worker.py | 2 +- tests/integration/components/test_rabbitmq.py | 11 - tests/integration/components/test_worker.py | 15 - tests/integration/conftest.py | 6 +- tests/integration/containers/test_redis.py | 15 - tests/integration/vendors/__init__.py | 0 .../{containers => vendors}/test_rabbitmq.py | 7 + .../{components => vendors}/test_redis.py | 11 + .../{containers => vendors}/test_worker.py | 11 + tests/smoke/acceptance/conftest.py | 4 +- tests/smoke/acceptance/test_canvas.py | 2 +- tests/smoke/conftest.py | 6 +- tests/smoke/test_failover.py | 8 +- tests/smoke/test_signals.py | 2 +- .../{containers => api}/test_container.py | 0 tests/unit/{setup => api}/test_setup.py | 8 +- tests/unit/components/test_rabbitmq.py | 6 - tests/unit/components/test_redis.py | 12 - tests/unit/components/test_worker.py | 11 - tests/unit/conftest.py | 16 +- tests/unit/docker/api.py | 2 +- tests/unit/vendors/__init__.py | 0 .../{containers => vendors}/test_rabbitmq.py | 6 + .../{containers => vendors}/test_redis.py | 12 + .../{containers => vendors}/test_worker.py | 10 + tox.ini | 6 + 86 files changed, 540 insertions(+), 781 deletions(-) rename src/pytest_celery/api/{components/backend/cluster.py => backend.py} (69%) rename src/pytest_celery/api/{components/cluster => }/base.py (70%) rename src/pytest_celery/api/{components/broker/cluster.py => broker.py} (69%) delete mode 100644 src/pytest_celery/api/components/__init__.py delete mode 100644 src/pytest_celery/api/components/backend/__init__.py delete mode 100644 src/pytest_celery/api/components/backend/node.py delete mode 100644 src/pytest_celery/api/components/broker/__init__.py delete mode 100644 src/pytest_celery/api/components/broker/node.py delete mode 100644 src/pytest_celery/api/components/cluster/__init__.py delete mode 100644 src/pytest_celery/api/components/cluster/node.py delete mode 100644 src/pytest_celery/api/components/worker/__init__.py delete mode 100644 src/pytest_celery/api/components/worker/cluster.py rename src/pytest_celery/api/{components/worker/node.py => worker.py} (50%) delete mode 100644 src/pytest_celery/components/__init__.py delete mode 100644 src/pytest_celery/components/backend/__init__.py delete mode 100644 src/pytest_celery/components/backend/redis/__init__.py delete mode 100644 src/pytest_celery/components/broker/__init__.py delete mode 100644 src/pytest_celery/components/broker/rabbitmq/__init__.py delete mode 100644 src/pytest_celery/components/broker/rabbitmq/api.py delete mode 100644 src/pytest_celery/components/broker/redis/__init__.py delete mode 100644 src/pytest_celery/components/broker/redis/api.py delete mode 100644 src/pytest_celery/components/worker/__init__.py delete mode 100644 src/pytest_celery/containers/__init__.py rename {tests/integration/components => src/pytest_celery/vendors}/__init__.py (100%) rename {tests/integration/containers => src/pytest_celery/vendors/rabbitmq}/__init__.py (100%) create mode 100644 src/pytest_celery/vendors/rabbitmq/api.py rename src/pytest_celery/{containers/rabbitmq.py => vendors/rabbitmq/container.py} (100%) rename src/pytest_celery/{components/broker => vendors}/rabbitmq/fixtures.py (77%) rename {tests/integration/setup => src/pytest_celery/vendors/redis}/__init__.py (100%) rename {tests/integration/setup/custom => src/pytest_celery/vendors/redis/backend}/__init__.py (100%) rename src/pytest_celery/{components/backend/redis => vendors/redis/backend}/api.py (89%) rename src/pytest_celery/{components/backend/redis => vendors/redis/backend}/fixtures.py (77%) rename {tests/unit/components => src/pytest_celery/vendors/redis/broker}/__init__.py (100%) create mode 100644 src/pytest_celery/vendors/redis/broker/api.py rename src/pytest_celery/{components/broker/redis => vendors/redis/broker}/fixtures.py (77%) rename src/pytest_celery/{containers/redis.py => vendors/redis/container.py} (100%) rename src/pytest_celery/{components => vendors}/worker/Dockerfile (100%) rename {tests/unit/containers => src/pytest_celery/vendors/worker}/__init__.py (100%) rename src/pytest_celery/{components => vendors}/worker/app.py (100%) rename src/pytest_celery/{containers/worker.py => vendors/worker/container.py} (96%) rename src/pytest_celery/{components => vendors}/worker/fixtures.py (87%) rename src/pytest_celery/{components => vendors}/worker/tasks.py (100%) rename tests/{unit/setup => integration/api/custom_setup}/__init__.py (100%) rename tests/integration/{setup/custom => api/custom_setup}/conftest.py (82%) rename tests/integration/{setup/custom => api/custom_setup}/test_custom_setup.py (95%) rename tests/integration/{containers => api}/test_container.py (100%) rename tests/integration/{setup => api}/test_setup.py (94%) delete mode 100644 tests/integration/components/test_rabbitmq.py delete mode 100644 tests/integration/components/test_worker.py delete mode 100644 tests/integration/containers/test_redis.py create mode 100644 tests/integration/vendors/__init__.py rename tests/integration/{containers => vendors}/test_rabbitmq.py (66%) rename tests/integration/{components => vendors}/test_redis.py (56%) rename tests/integration/{containers => vendors}/test_worker.py (54%) rename tests/unit/{containers => api}/test_container.py (100%) rename tests/unit/{setup => api}/test_setup.py (83%) delete mode 100644 tests/unit/components/test_rabbitmq.py delete mode 100644 tests/unit/components/test_redis.py delete mode 100644 tests/unit/components/test_worker.py create mode 100644 tests/unit/vendors/__init__.py rename tests/unit/{containers => vendors}/test_rabbitmq.py (81%) rename tests/unit/{containers => vendors}/test_redis.py (69%) rename tests/unit/{containers => vendors}/test_worker.py (84%) diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index b5089d96..a8ae80a3 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -65,7 +65,7 @@ jobs: - name: Run tox for "${{ matrix.python-version }}-unit" timeout-minutes: 5 run: | - tox --verbose --verbose -e "${{ matrix.python-version }}-unit" -- -n auto --reruns 3 --rerun-except AssertionError + tox --verbose --verbose -e "${{ matrix.python-version }}-unit" -- -n auto --reruns 5 --rerun-except AssertionError - name: Upload coverage reports to Codecov uses: codecov/codecov-action@v3 @@ -119,7 +119,7 @@ jobs: - name: Run tox for "${{ matrix.python-version }}-integration" timeout-minutes: 15 run: | - tox --verbose --verbose -e "${{ matrix.python-version }}-integration" -- -n auto --reruns 3 --rerun-except AssertionError + tox --verbose --verbose -e "${{ matrix.python-version }}-integration" -- -n auto --reruns 5 --rerun-except AssertionError Smoke: needs: @@ -167,4 +167,4 @@ jobs: - name: Run tox for "${{ matrix.python-version }}-smoke" timeout-minutes: 50 run: | - tox --verbose --verbose -e "${{ matrix.python-version }}-smoke" -- -n auto --reruns 3 --rerun-except AssertionError + tox --verbose --verbose -e "${{ matrix.python-version }}-smoke" -- -n auto --reruns 5 --rerun-except AssertionError diff --git a/poetry.lock b/poetry.lock index d93ebf62..ee767041 100644 --- a/poetry.lock +++ b/poetry.lock @@ -242,75 +242,63 @@ files = [ [[package]] name = "cffi" -version = "1.15.1" +version = "1.16.0" description = "Foreign Function Interface for Python calling C code." optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, - {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, - {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, - {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, - {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, - {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, - {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, - {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, - {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, - {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, - {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, - {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, - {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, - {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, - {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, - {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, - {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, - {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, - {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, + {file = "cffi-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088"}, + {file = "cffi-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614"}, + {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743"}, + {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d"}, + {file = "cffi-1.16.0-cp310-cp310-win32.whl", hash = "sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a"}, + {file = "cffi-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1"}, + {file = "cffi-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404"}, + {file = "cffi-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e"}, + {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc"}, + {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb"}, + {file = "cffi-1.16.0-cp311-cp311-win32.whl", hash = "sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab"}, + {file = "cffi-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba"}, + {file = "cffi-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956"}, + {file = "cffi-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969"}, + {file = "cffi-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520"}, + {file = "cffi-1.16.0-cp312-cp312-win32.whl", hash = "sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b"}, + {file = "cffi-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235"}, + {file = "cffi-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324"}, + {file = "cffi-1.16.0-cp38-cp38-win32.whl", hash = "sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a"}, + {file = "cffi-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36"}, + {file = "cffi-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed"}, + {file = "cffi-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098"}, + {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000"}, + {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe"}, + {file = "cffi-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4"}, + {file = "cffi-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8"}, + {file = "cffi-1.16.0.tar.gz", hash = "sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0"}, ] [package.dependencies] @@ -340,86 +328,101 @@ files = [ [[package]] name = "charset-normalizer" -version = "3.2.0" +version = "3.3.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7.0" files = [ - {file = "charset-normalizer-3.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"}, - {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, + {file = "charset-normalizer-3.3.0.tar.gz", hash = "sha256:63563193aec44bce707e0c5ca64ff69fa72ed7cf34ce6e11d5127555756fd2f6"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:effe5406c9bd748a871dbcaf3ac69167c38d72db8c9baf3ff954c344f31c4cbe"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4162918ef3098851fcd8a628bf9b6a98d10c380725df9e04caf5ca6dd48c847a"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0570d21da019941634a531444364f2482e8db0b3425fcd5ac0c36565a64142c8"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5707a746c6083a3a74b46b3a631d78d129edab06195a92a8ece755aac25a3f3d"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:278c296c6f96fa686d74eb449ea1697f3c03dc28b75f873b65b5201806346a69"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a4b71f4d1765639372a3b32d2638197f5cd5221b19531f9245fcc9ee62d38f56"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5969baeaea61c97efa706b9b107dcba02784b1601c74ac84f2a532ea079403e"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3f93dab657839dfa61025056606600a11d0b696d79386f974e459a3fbc568ec"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:db756e48f9c5c607b5e33dd36b1d5872d0422e960145b08ab0ec7fd420e9d649"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:232ac332403e37e4a03d209a3f92ed9071f7d3dbda70e2a5e9cff1c4ba9f0678"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e5c1502d4ace69a179305abb3f0bb6141cbe4714bc9b31d427329a95acfc8bdd"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:2502dd2a736c879c0f0d3e2161e74d9907231e25d35794584b1ca5284e43f596"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23e8565ab7ff33218530bc817922fae827420f143479b753104ab801145b1d5b"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-win32.whl", hash = "sha256:1872d01ac8c618a8da634e232f24793883d6e456a66593135aeafe3784b0848d"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:557b21a44ceac6c6b9773bc65aa1b4cc3e248a5ad2f5b914b91579a32e22204d"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d7eff0f27edc5afa9e405f7165f85a6d782d308f3b6b9d96016c010597958e63"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6a685067d05e46641d5d1623d7c7fdf15a357546cbb2f71b0ebde91b175ffc3e"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0d3d5b7db9ed8a2b11a774db2bbea7ba1884430a205dbd54a32d61d7c2a190fa"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2935ffc78db9645cb2086c2f8f4cfd23d9b73cc0dc80334bc30aac6f03f68f8c"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fe359b2e3a7729010060fbca442ca225280c16e923b37db0e955ac2a2b72a05"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:380c4bde80bce25c6e4f77b19386f5ec9db230df9f2f2ac1e5ad7af2caa70459"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0d1e3732768fecb052d90d62b220af62ead5748ac51ef61e7b32c266cac9293"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1b2919306936ac6efb3aed1fbf81039f7087ddadb3160882a57ee2ff74fd2382"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f8888e31e3a85943743f8fc15e71536bda1c81d5aa36d014a3c0c44481d7db6e"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:82eb849f085624f6a607538ee7b83a6d8126df6d2f7d3b319cb837b289123078"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7b8b8bf1189b3ba9b8de5c8db4d541b406611a71a955bbbd7385bbc45fcb786c"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5adf257bd58c1b8632046bbe43ee38c04e1038e9d37de9c57a94d6bd6ce5da34"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c350354efb159b8767a6244c166f66e67506e06c8924ed74669b2c70bc8735b1"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-win32.whl", hash = "sha256:02af06682e3590ab952599fbadac535ede5d60d78848e555aa58d0c0abbde786"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:86d1f65ac145e2c9ed71d8ffb1905e9bba3a91ae29ba55b4c46ae6fc31d7c0d4"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:3b447982ad46348c02cb90d230b75ac34e9886273df3a93eec0539308a6296d7"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:abf0d9f45ea5fb95051c8bfe43cb40cda383772f7e5023a83cc481ca2604d74e"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b09719a17a2301178fac4470d54b1680b18a5048b481cb8890e1ef820cb80455"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b3d9b48ee6e3967b7901c052b670c7dda6deb812c309439adaffdec55c6d7b78"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:edfe077ab09442d4ef3c52cb1f9dab89bff02f4524afc0acf2d46be17dc479f5"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3debd1150027933210c2fc321527c2299118aa929c2f5a0a80ab6953e3bd1908"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86f63face3a527284f7bb8a9d4f78988e3c06823f7bea2bd6f0e0e9298ca0403"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:24817cb02cbef7cd499f7c9a2735286b4782bd47a5b3516a0e84c50eab44b98e"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c71f16da1ed8949774ef79f4a0260d28b83b3a50c6576f8f4f0288d109777989"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:9cf3126b85822c4e53aa28c7ec9869b924d6fcfb76e77a45c44b83d91afd74f9"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:b3b2316b25644b23b54a6f6401074cebcecd1244c0b8e80111c9a3f1c8e83d65"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:03680bb39035fbcffe828eae9c3f8afc0428c91d38e7d61aa992ef7a59fb120e"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4cc152c5dd831641e995764f9f0b6589519f6f5123258ccaca8c6d34572fefa8"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-win32.whl", hash = "sha256:b8f3307af845803fb0b060ab76cf6dd3a13adc15b6b451f54281d25911eb92df"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:8eaf82f0eccd1505cf39a45a6bd0a8cf1c70dcfc30dba338207a969d91b965c0"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dc45229747b67ffc441b3de2f3ae5e62877a282ea828a5bdb67883c4ee4a8810"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f4a0033ce9a76e391542c182f0d48d084855b5fcba5010f707c8e8c34663d77"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ada214c6fa40f8d800e575de6b91a40d0548139e5dc457d2ebb61470abf50186"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b1121de0e9d6e6ca08289583d7491e7fcb18a439305b34a30b20d8215922d43c"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1063da2c85b95f2d1a430f1c33b55c9c17ffaf5e612e10aeaad641c55a9e2b9d"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70f1d09c0d7748b73290b29219e854b3207aea922f839437870d8cc2168e31cc"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:250c9eb0f4600361dd80d46112213dff2286231d92d3e52af1e5a6083d10cad9"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:750b446b2ffce1739e8578576092179160f6d26bd5e23eb1789c4d64d5af7dc7"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:fc52b79d83a3fe3a360902d3f5d79073a993597d48114c29485e9431092905d8"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:588245972aca710b5b68802c8cad9edaa98589b1b42ad2b53accd6910dad3545"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e39c7eb31e3f5b1f88caff88bcff1b7f8334975b46f6ac6e9fc725d829bc35d4"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-win32.whl", hash = "sha256:abecce40dfebbfa6abf8e324e1860092eeca6f7375c8c4e655a8afb61af58f2c"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:24a91a981f185721542a0b7c92e9054b7ab4fea0508a795846bc5b0abf8118d4"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:67b8cc9574bb518ec76dc8e705d4c39ae78bb96237cb533edac149352c1f39fe"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ac71b2977fb90c35d41c9453116e283fac47bb9096ad917b8819ca8b943abecd"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3ae38d325b512f63f8da31f826e6cb6c367336f95e418137286ba362925c877e"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:542da1178c1c6af8873e143910e2269add130a299c9106eef2594e15dae5e482"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30a85aed0b864ac88309b7d94be09f6046c834ef60762a8833b660139cfbad13"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aae32c93e0f64469f74ccc730a7cb21c7610af3a775157e50bbd38f816536b38"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15b26ddf78d57f1d143bdf32e820fd8935d36abe8a25eb9ec0b5a71c82eb3895"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7f5d10bae5d78e4551b7be7a9b29643a95aded9d0f602aa2ba584f0388e7a557"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:249c6470a2b60935bafd1d1d13cd613f8cd8388d53461c67397ee6a0f5dce741"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c5a74c359b2d47d26cdbbc7845e9662d6b08a1e915eb015d044729e92e7050b7"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:b5bcf60a228acae568e9911f410f9d9e0d43197d030ae5799e20dca8df588287"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:187d18082694a29005ba2944c882344b6748d5be69e3a89bf3cc9d878e548d5a"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:81bf654678e575403736b85ba3a7867e31c2c30a69bc57fe88e3ace52fb17b89"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-win32.whl", hash = "sha256:85a32721ddde63c9df9ebb0d2045b9691d9750cb139c161c80e500d210f5e26e"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:468d2a840567b13a590e67dd276c570f8de00ed767ecc611994c301d0f8c014f"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e0fc42822278451bc13a2e8626cf2218ba570f27856b536e00cfa53099724828"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:09c77f964f351a7369cc343911e0df63e762e42bac24cd7d18525961c81754f4"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:12ebea541c44fdc88ccb794a13fe861cc5e35d64ed689513a5c03d05b53b7c82"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:805dfea4ca10411a5296bcc75638017215a93ffb584c9e344731eef0dcfb026a"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:96c2b49eb6a72c0e4991d62406e365d87067ca14c1a729a870d22354e6f68115"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aaf7b34c5bc56b38c931a54f7952f1ff0ae77a2e82496583b247f7c969eb1479"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:619d1c96099be5823db34fe89e2582b336b5b074a7f47f819d6b3a57ff7bdb86"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0ac5e7015a5920cfce654c06618ec40c33e12801711da6b4258af59a8eff00a"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:93aa7eef6ee71c629b51ef873991d6911b906d7312c6e8e99790c0f33c576f89"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7966951325782121e67c81299a031f4c115615e68046f79b85856b86ebffc4cd"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:02673e456dc5ab13659f85196c534dc596d4ef260e4d86e856c3b2773ce09843"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:c2af80fb58f0f24b3f3adcb9148e6203fa67dd3f61c4af146ecad033024dde43"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:153e7b6e724761741e0974fc4dcd406d35ba70b92bfe3fedcb497226c93b9da7"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-win32.whl", hash = "sha256:d47ecf253780c90ee181d4d871cd655a789da937454045b17b5798da9393901a"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:d97d85fa63f315a8bdaba2af9a6a686e0eceab77b3089af45133252618e70884"}, + {file = "charset_normalizer-3.3.0-py3-none-any.whl", hash = "sha256:e46cd37076971c1040fc8c41273a8b3e2c624ce4f2be3f5dfcb7a430c1d3acc2"}, ] [[package]] @@ -512,63 +515,63 @@ files = [ [[package]] name = "coverage" -version = "7.3.1" +version = "7.3.2" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.8" files = [ - {file = "coverage-7.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cd0f7429ecfd1ff597389907045ff209c8fdb5b013d38cfa7c60728cb484b6e3"}, - {file = "coverage-7.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:966f10df9b2b2115da87f50f6a248e313c72a668248be1b9060ce935c871f276"}, - {file = "coverage-7.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0575c37e207bb9b98b6cf72fdaaa18ac909fb3d153083400c2d48e2e6d28bd8e"}, - {file = "coverage-7.3.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:245c5a99254e83875c7fed8b8b2536f040997a9b76ac4c1da5bff398c06e860f"}, - {file = "coverage-7.3.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c96dd7798d83b960afc6c1feb9e5af537fc4908852ef025600374ff1a017392"}, - {file = "coverage-7.3.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:de30c1aa80f30af0f6b2058a91505ea6e36d6535d437520067f525f7df123887"}, - {file = "coverage-7.3.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:50dd1e2dd13dbbd856ffef69196781edff26c800a74f070d3b3e3389cab2600d"}, - {file = "coverage-7.3.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b9c0c19f70d30219113b18fe07e372b244fb2a773d4afde29d5a2f7930765136"}, - {file = "coverage-7.3.1-cp310-cp310-win32.whl", hash = "sha256:770f143980cc16eb601ccfd571846e89a5fe4c03b4193f2e485268f224ab602f"}, - {file = "coverage-7.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:cdd088c00c39a27cfa5329349cc763a48761fdc785879220d54eb785c8a38520"}, - {file = "coverage-7.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:74bb470399dc1989b535cb41f5ca7ab2af561e40def22d7e188e0a445e7639e3"}, - {file = "coverage-7.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:025ded371f1ca280c035d91b43252adbb04d2aea4c7105252d3cbc227f03b375"}, - {file = "coverage-7.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6191b3a6ad3e09b6cfd75b45c6aeeffe7e3b0ad46b268345d159b8df8d835f9"}, - {file = "coverage-7.3.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7eb0b188f30e41ddd659a529e385470aa6782f3b412f860ce22b2491c89b8593"}, - {file = "coverage-7.3.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75c8f0df9dfd8ff745bccff75867d63ef336e57cc22b2908ee725cc552689ec8"}, - {file = "coverage-7.3.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:7eb3cd48d54b9bd0e73026dedce44773214064be93611deab0b6a43158c3d5a0"}, - {file = "coverage-7.3.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:ac3c5b7e75acac31e490b7851595212ed951889918d398b7afa12736c85e13ce"}, - {file = "coverage-7.3.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5b4ee7080878077af0afa7238df1b967f00dc10763f6e1b66f5cced4abebb0a3"}, - {file = "coverage-7.3.1-cp311-cp311-win32.whl", hash = "sha256:229c0dd2ccf956bf5aeede7e3131ca48b65beacde2029f0361b54bf93d36f45a"}, - {file = "coverage-7.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:c6f55d38818ca9596dc9019eae19a47410d5322408140d9a0076001a3dcb938c"}, - {file = "coverage-7.3.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5289490dd1c3bb86de4730a92261ae66ea8d44b79ed3cc26464f4c2cde581fbc"}, - {file = "coverage-7.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ca833941ec701fda15414be400c3259479bfde7ae6d806b69e63b3dc423b1832"}, - {file = "coverage-7.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd694e19c031733e446c8024dedd12a00cda87e1c10bd7b8539a87963685e969"}, - {file = "coverage-7.3.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aab8e9464c00da5cb9c536150b7fbcd8850d376d1151741dd0d16dfe1ba4fd26"}, - {file = "coverage-7.3.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87d38444efffd5b056fcc026c1e8d862191881143c3aa80bb11fcf9dca9ae204"}, - {file = "coverage-7.3.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:8a07b692129b8a14ad7a37941a3029c291254feb7a4237f245cfae2de78de037"}, - {file = "coverage-7.3.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:2829c65c8faaf55b868ed7af3c7477b76b1c6ebeee99a28f59a2cb5907a45760"}, - {file = "coverage-7.3.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1f111a7d85658ea52ffad7084088277135ec5f368457275fc57f11cebb15607f"}, - {file = "coverage-7.3.1-cp312-cp312-win32.whl", hash = "sha256:c397c70cd20f6df7d2a52283857af622d5f23300c4ca8e5bd8c7a543825baa5a"}, - {file = "coverage-7.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:5ae4c6da8b3d123500f9525b50bf0168023313963e0e2e814badf9000dd6ef92"}, - {file = "coverage-7.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ca70466ca3a17460e8fc9cea7123c8cbef5ada4be3140a1ef8f7b63f2f37108f"}, - {file = "coverage-7.3.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f2781fd3cabc28278dc982a352f50c81c09a1a500cc2086dc4249853ea96b981"}, - {file = "coverage-7.3.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6407424621f40205bbe6325686417e5e552f6b2dba3535dd1f90afc88a61d465"}, - {file = "coverage-7.3.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:04312b036580ec505f2b77cbbdfb15137d5efdfade09156961f5277149f5e344"}, - {file = "coverage-7.3.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac9ad38204887349853d7c313f53a7b1c210ce138c73859e925bc4e5d8fc18e7"}, - {file = "coverage-7.3.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:53669b79f3d599da95a0afbef039ac0fadbb236532feb042c534fbb81b1a4e40"}, - {file = "coverage-7.3.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:614f1f98b84eb256e4f35e726bfe5ca82349f8dfa576faabf8a49ca09e630086"}, - {file = "coverage-7.3.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f1a317fdf5c122ad642db8a97964733ab7c3cf6009e1a8ae8821089993f175ff"}, - {file = "coverage-7.3.1-cp38-cp38-win32.whl", hash = "sha256:defbbb51121189722420a208957e26e49809feafca6afeef325df66c39c4fdb3"}, - {file = "coverage-7.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:f4f456590eefb6e1b3c9ea6328c1e9fa0f1006e7481179d749b3376fc793478e"}, - {file = "coverage-7.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f12d8b11a54f32688b165fd1a788c408f927b0960984b899be7e4c190ae758f1"}, - {file = "coverage-7.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f09195dda68d94a53123883de75bb97b0e35f5f6f9f3aa5bf6e496da718f0cb6"}, - {file = "coverage-7.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6601a60318f9c3945be6ea0f2a80571f4299b6801716f8a6e4846892737ebe4"}, - {file = "coverage-7.3.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07d156269718670d00a3b06db2288b48527fc5f36859425ff7cec07c6b367745"}, - {file = "coverage-7.3.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:636a8ac0b044cfeccae76a36f3b18264edcc810a76a49884b96dd744613ec0b7"}, - {file = "coverage-7.3.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5d991e13ad2ed3aced177f524e4d670f304c8233edad3210e02c465351f785a0"}, - {file = "coverage-7.3.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:586649ada7cf139445da386ab6f8ef00e6172f11a939fc3b2b7e7c9082052fa0"}, - {file = "coverage-7.3.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4aba512a15a3e1e4fdbfed2f5392ec221434a614cc68100ca99dcad7af29f3f8"}, - {file = "coverage-7.3.1-cp39-cp39-win32.whl", hash = "sha256:6bc6f3f4692d806831c136c5acad5ccedd0262aa44c087c46b7101c77e139140"}, - {file = "coverage-7.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:553d7094cb27db58ea91332e8b5681bac107e7242c23f7629ab1316ee73c4981"}, - {file = "coverage-7.3.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:220eb51f5fb38dfdb7e5d54284ca4d0cd70ddac047d750111a68ab1798945194"}, - {file = "coverage-7.3.1.tar.gz", hash = "sha256:6cb7fe1581deb67b782c153136541e20901aa312ceedaf1467dcb35255787952"}, + {file = "coverage-7.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d872145f3a3231a5f20fd48500274d7df222e291d90baa2026cc5152b7ce86bf"}, + {file = "coverage-7.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:310b3bb9c91ea66d59c53fa4989f57d2436e08f18fb2f421a1b0b6b8cc7fffda"}, + {file = "coverage-7.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f47d39359e2c3779c5331fc740cf4bce6d9d680a7b4b4ead97056a0ae07cb49a"}, + {file = "coverage-7.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa72dbaf2c2068404b9870d93436e6d23addd8bbe9295f49cbca83f6e278179c"}, + {file = "coverage-7.3.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:beaa5c1b4777f03fc63dfd2a6bd820f73f036bfb10e925fce067b00a340d0f3f"}, + {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:dbc1b46b92186cc8074fee9d9fbb97a9dd06c6cbbef391c2f59d80eabdf0faa6"}, + {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:315a989e861031334d7bee1f9113c8770472db2ac484e5b8c3173428360a9148"}, + {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d1bc430677773397f64a5c88cb522ea43175ff16f8bfcc89d467d974cb2274f9"}, + {file = "coverage-7.3.2-cp310-cp310-win32.whl", hash = "sha256:a889ae02f43aa45032afe364c8ae84ad3c54828c2faa44f3bfcafecb5c96b02f"}, + {file = "coverage-7.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:c0ba320de3fb8c6ec16e0be17ee1d3d69adcda99406c43c0409cb5c41788a611"}, + {file = "coverage-7.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ac8c802fa29843a72d32ec56d0ca792ad15a302b28ca6203389afe21f8fa062c"}, + {file = "coverage-7.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:89a937174104339e3a3ffcf9f446c00e3a806c28b1841c63edb2b369310fd074"}, + {file = "coverage-7.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e267e9e2b574a176ddb983399dec325a80dbe161f1a32715c780b5d14b5f583a"}, + {file = "coverage-7.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2443cbda35df0d35dcfb9bf8f3c02c57c1d6111169e3c85fc1fcc05e0c9f39a3"}, + {file = "coverage-7.3.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4175e10cc8dda0265653e8714b3174430b07c1dca8957f4966cbd6c2b1b8065a"}, + {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0cbf38419fb1a347aaf63481c00f0bdc86889d9fbf3f25109cf96c26b403fda1"}, + {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:5c913b556a116b8d5f6ef834038ba983834d887d82187c8f73dec21049abd65c"}, + {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1981f785239e4e39e6444c63a98da3a1db8e971cb9ceb50a945ba6296b43f312"}, + {file = "coverage-7.3.2-cp311-cp311-win32.whl", hash = "sha256:43668cabd5ca8258f5954f27a3aaf78757e6acf13c17604d89648ecc0cc66640"}, + {file = "coverage-7.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10c39c0452bf6e694511c901426d6b5ac005acc0f78ff265dbe36bf81f808a2"}, + {file = "coverage-7.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4cbae1051ab791debecc4a5dcc4a1ff45fc27b91b9aee165c8a27514dd160836"}, + {file = "coverage-7.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12d15ab5833a997716d76f2ac1e4b4d536814fc213c85ca72756c19e5a6b3d63"}, + {file = "coverage-7.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c7bba973ebee5e56fe9251300c00f1579652587a9f4a5ed8404b15a0471f216"}, + {file = "coverage-7.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe494faa90ce6381770746077243231e0b83ff3f17069d748f645617cefe19d4"}, + {file = "coverage-7.3.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6e9589bd04d0461a417562649522575d8752904d35c12907d8c9dfeba588faf"}, + {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d51ac2a26f71da1b57f2dc81d0e108b6ab177e7d30e774db90675467c847bbdf"}, + {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:99b89d9f76070237975b315b3d5f4d6956ae354a4c92ac2388a5695516e47c84"}, + {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fa28e909776dc69efb6ed975a63691bc8172b64ff357e663a1bb06ff3c9b589a"}, + {file = "coverage-7.3.2-cp312-cp312-win32.whl", hash = "sha256:289fe43bf45a575e3ab10b26d7b6f2ddb9ee2dba447499f5401cfb5ecb8196bb"}, + {file = "coverage-7.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:7dbc3ed60e8659bc59b6b304b43ff9c3ed858da2839c78b804973f613d3e92ed"}, + {file = "coverage-7.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f94b734214ea6a36fe16e96a70d941af80ff3bfd716c141300d95ebc85339738"}, + {file = "coverage-7.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:af3d828d2c1cbae52d34bdbb22fcd94d1ce715d95f1a012354a75e5913f1bda2"}, + {file = "coverage-7.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:630b13e3036e13c7adc480ca42fa7afc2a5d938081d28e20903cf7fd687872e2"}, + {file = "coverage-7.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9eacf273e885b02a0273bb3a2170f30e2d53a6d53b72dbe02d6701b5296101c"}, + {file = "coverage-7.3.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8f17966e861ff97305e0801134e69db33b143bbfb36436efb9cfff6ec7b2fd9"}, + {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b4275802d16882cf9c8b3d057a0839acb07ee9379fa2749eca54efbce1535b82"}, + {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:72c0cfa5250f483181e677ebc97133ea1ab3eb68645e494775deb6a7f6f83901"}, + {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cb536f0dcd14149425996821a168f6e269d7dcd2c273a8bff8201e79f5104e76"}, + {file = "coverage-7.3.2-cp38-cp38-win32.whl", hash = "sha256:307adb8bd3abe389a471e649038a71b4eb13bfd6b7dd9a129fa856f5c695cf92"}, + {file = "coverage-7.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:88ed2c30a49ea81ea3b7f172e0269c182a44c236eb394718f976239892c0a27a"}, + {file = "coverage-7.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b631c92dfe601adf8f5ebc7fc13ced6bb6e9609b19d9a8cd59fa47c4186ad1ce"}, + {file = "coverage-7.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d3d9df4051c4a7d13036524b66ecf7a7537d14c18a384043f30a303b146164e9"}, + {file = "coverage-7.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f7363d3b6a1119ef05015959ca24a9afc0ea8a02c687fe7e2d557705375c01f"}, + {file = "coverage-7.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f11cc3c967a09d3695d2a6f03fb3e6236622b93be7a4b5dc09166a861be6d25"}, + {file = "coverage-7.3.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:149de1d2401ae4655c436a3dced6dd153f4c3309f599c3d4bd97ab172eaf02d9"}, + {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3a4006916aa6fee7cd38db3bfc95aa9c54ebb4ffbfc47c677c8bba949ceba0a6"}, + {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9028a3871280110d6e1aa2df1afd5ef003bab5fb1ef421d6dc748ae1c8ef2ebc"}, + {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9f805d62aec8eb92bab5b61c0f07329275b6f41c97d80e847b03eb894f38d083"}, + {file = "coverage-7.3.2-cp39-cp39-win32.whl", hash = "sha256:d1c88ec1a7ff4ebca0219f5b1ef863451d828cccf889c173e1253aa84b1e07ce"}, + {file = "coverage-7.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b4767da59464bb593c07afceaddea61b154136300881844768037fd5e859353f"}, + {file = "coverage-7.3.2-pp38.pp39.pp310-none-any.whl", hash = "sha256:ae97af89f0fbf373400970c0a21eef5aa941ffeed90aee43650b81f7d7f47637"}, + {file = "coverage-7.3.2.tar.gz", hash = "sha256:be32ad29341b0170e795ca590e1c07e81fc061cb5b10c74ce7203491484404ef"}, ] [package.dependencies] @@ -743,13 +746,13 @@ pyflakes = ">=3.1.0,<3.2.0" [[package]] name = "identify" -version = "2.5.29" +version = "2.5.30" description = "File identification library for Python" optional = false python-versions = ">=3.8" files = [ - {file = "identify-2.5.29-py2.py3-none-any.whl", hash = "sha256:24437fbf6f4d3fe6efd0eb9d67e24dd9106db99af5ceb27996a5f7895f24bf1b"}, - {file = "identify-2.5.29.tar.gz", hash = "sha256:d43d52b86b15918c137e3a74fff5224f60385cd0e9c38e99d07c257f02f151a5"}, + {file = "identify-2.5.30-py2.py3-none-any.whl", hash = "sha256:afe67f26ae29bab007ec21b03d4114f41316ab9dd15aa8736a167481e108da54"}, + {file = "identify-2.5.30.tar.gz", hash = "sha256:f302a4256a15c849b91cfcdcec052a8ce914634b2f77ae87dad29cd749f2d88d"}, ] [package.extras] @@ -841,38 +844,38 @@ files = [ [[package]] name = "mypy" -version = "1.5.1" +version = "1.6.0" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f33592ddf9655a4894aef22d134de7393e95fcbdc2d15c1ab65828eee5c66c70"}, - {file = "mypy-1.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:258b22210a4a258ccd077426c7a181d789d1121aca6db73a83f79372f5569ae0"}, - {file = "mypy-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9ec1f695f0c25986e6f7f8778e5ce61659063268836a38c951200c57479cc12"}, - {file = "mypy-1.5.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:abed92d9c8f08643c7d831300b739562b0a6c9fcb028d211134fc9ab20ccad5d"}, - {file = "mypy-1.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:a156e6390944c265eb56afa67c74c0636f10283429171018446b732f1a05af25"}, - {file = "mypy-1.5.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6ac9c21bfe7bc9f7f1b6fae441746e6a106e48fc9de530dea29e8cd37a2c0cc4"}, - {file = "mypy-1.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:51cb1323064b1099e177098cb939eab2da42fea5d818d40113957ec954fc85f4"}, - {file = "mypy-1.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:596fae69f2bfcb7305808c75c00f81fe2829b6236eadda536f00610ac5ec2243"}, - {file = "mypy-1.5.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:32cb59609b0534f0bd67faebb6e022fe534bdb0e2ecab4290d683d248be1b275"}, - {file = "mypy-1.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:159aa9acb16086b79bbb0016145034a1a05360626046a929f84579ce1666b315"}, - {file = "mypy-1.5.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f6b0e77db9ff4fda74de7df13f30016a0a663928d669c9f2c057048ba44f09bb"}, - {file = "mypy-1.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:26f71b535dfc158a71264e6dc805a9f8d2e60b67215ca0bfa26e2e1aa4d4d373"}, - {file = "mypy-1.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fc3a600f749b1008cc75e02b6fb3d4db8dbcca2d733030fe7a3b3502902f161"}, - {file = "mypy-1.5.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:26fb32e4d4afa205b24bf645eddfbb36a1e17e995c5c99d6d00edb24b693406a"}, - {file = "mypy-1.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:82cb6193de9bbb3844bab4c7cf80e6227d5225cc7625b068a06d005d861ad5f1"}, - {file = "mypy-1.5.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4a465ea2ca12804d5b34bb056be3a29dc47aea5973b892d0417c6a10a40b2d65"}, - {file = "mypy-1.5.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9fece120dbb041771a63eb95e4896791386fe287fefb2837258925b8326d6160"}, - {file = "mypy-1.5.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d28ddc3e3dfeab553e743e532fb95b4e6afad51d4706dd22f28e1e5e664828d2"}, - {file = "mypy-1.5.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:57b10c56016adce71fba6bc6e9fd45d8083f74361f629390c556738565af8eeb"}, - {file = "mypy-1.5.1-cp38-cp38-win_amd64.whl", hash = "sha256:ff0cedc84184115202475bbb46dd99f8dcb87fe24d5d0ddfc0fe6b8575c88d2f"}, - {file = "mypy-1.5.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8f772942d372c8cbac575be99f9cc9d9fb3bd95c8bc2de6c01411e2c84ebca8a"}, - {file = "mypy-1.5.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5d627124700b92b6bbaa99f27cbe615c8ea7b3402960f6372ea7d65faf376c14"}, - {file = "mypy-1.5.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:361da43c4f5a96173220eb53340ace68cda81845cd88218f8862dfb0adc8cddb"}, - {file = "mypy-1.5.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:330857f9507c24de5c5724235e66858f8364a0693894342485e543f5b07c8693"}, - {file = "mypy-1.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:c543214ffdd422623e9fedd0869166c2f16affe4ba37463975043ef7d2ea8770"}, - {file = "mypy-1.5.1-py3-none-any.whl", hash = "sha256:f757063a83970d67c444f6e01d9550a7402322af3557ce7630d3c957386fa8f5"}, - {file = "mypy-1.5.1.tar.gz", hash = "sha256:b031b9601f1060bf1281feab89697324726ba0c0bae9d7cd7ab4b690940f0b92"}, + {file = "mypy-1.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:091f53ff88cb093dcc33c29eee522c087a438df65eb92acd371161c1f4380ff0"}, + {file = "mypy-1.6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:eb7ff4007865833c470a601498ba30462b7374342580e2346bf7884557e40531"}, + {file = "mypy-1.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49499cf1e464f533fc45be54d20a6351a312f96ae7892d8e9f1708140e27ce41"}, + {file = "mypy-1.6.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4c192445899c69f07874dabda7e931b0cc811ea055bf82c1ababf358b9b2a72c"}, + {file = "mypy-1.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:3df87094028e52766b0a59a3e46481bb98b27986ed6ded6a6cc35ecc75bb9182"}, + {file = "mypy-1.6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c8835a07b8442da900db47ccfda76c92c69c3a575872a5b764332c4bacb5a0a"}, + {file = "mypy-1.6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:24f3de8b9e7021cd794ad9dfbf2e9fe3f069ff5e28cb57af6f873ffec1cb0425"}, + {file = "mypy-1.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:856bad61ebc7d21dbc019b719e98303dc6256cec6dcc9ebb0b214b81d6901bd8"}, + {file = "mypy-1.6.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:89513ddfda06b5c8ebd64f026d20a61ef264e89125dc82633f3c34eeb50e7d60"}, + {file = "mypy-1.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:9f8464ed410ada641c29f5de3e6716cbdd4f460b31cf755b2af52f2d5ea79ead"}, + {file = "mypy-1.6.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:971104bcb180e4fed0d7bd85504c9036346ab44b7416c75dd93b5c8c6bb7e28f"}, + {file = "mypy-1.6.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ab98b8f6fdf669711f3abe83a745f67f50e3cbaea3998b90e8608d2b459fd566"}, + {file = "mypy-1.6.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a69db3018b87b3e6e9dd28970f983ea6c933800c9edf8c503c3135b3274d5ad"}, + {file = "mypy-1.6.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:dccd850a2e3863891871c9e16c54c742dba5470f5120ffed8152956e9e0a5e13"}, + {file = "mypy-1.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:f8598307150b5722854f035d2e70a1ad9cc3c72d392c34fffd8c66d888c90f17"}, + {file = "mypy-1.6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fea451a3125bf0bfe716e5d7ad4b92033c471e4b5b3e154c67525539d14dc15a"}, + {file = "mypy-1.6.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e28d7b221898c401494f3b77db3bac78a03ad0a0fff29a950317d87885c655d2"}, + {file = "mypy-1.6.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4b7a99275a61aa22256bab5839c35fe8a6887781862471df82afb4b445daae6"}, + {file = "mypy-1.6.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:7469545380dddce5719e3656b80bdfbb217cfe8dbb1438532d6abc754b828fed"}, + {file = "mypy-1.6.0-cp38-cp38-win_amd64.whl", hash = "sha256:7807a2a61e636af9ca247ba8494031fb060a0a744b9fee7de3a54bed8a753323"}, + {file = "mypy-1.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d2dad072e01764823d4b2f06bc7365bb1d4b6c2f38c4d42fade3c8d45b0b4b67"}, + {file = "mypy-1.6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b19006055dde8a5425baa5f3b57a19fa79df621606540493e5e893500148c72f"}, + {file = "mypy-1.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31eba8a7a71f0071f55227a8057468b8d2eb5bf578c8502c7f01abaec8141b2f"}, + {file = "mypy-1.6.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e0db37ac4ebb2fee7702767dfc1b773c7365731c22787cb99f507285014fcaf"}, + {file = "mypy-1.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:c69051274762cccd13498b568ed2430f8d22baa4b179911ad0c1577d336ed849"}, + {file = "mypy-1.6.0-py3-none-any.whl", hash = "sha256:9e1589ca150a51d9d00bb839bfeca2f7a04f32cd62fad87a847bc0818e15d7dc"}, + {file = "mypy-1.6.0.tar.gz", hash = "sha256:4f3d27537abde1be6d5f2c96c29a454da333a2a271ae7d5bc7110e6d4b7beb3f"}, ] [package.dependencies] @@ -912,13 +915,13 @@ setuptools = "*" [[package]] name = "packaging" -version = "23.1" +version = "23.2" description = "Core utilities for Python packages" optional = false python-versions = ">=3.7" files = [ - {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, - {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, + {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, + {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, ] [[package]] @@ -934,13 +937,13 @@ files = [ [[package]] name = "platformdirs" -version = "3.10.0" +version = "3.11.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." optional = false python-versions = ">=3.7" files = [ - {file = "platformdirs-3.10.0-py3-none-any.whl", hash = "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"}, - {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"}, + {file = "platformdirs-3.11.0-py3-none-any.whl", hash = "sha256:e9d171d00af68be50e9202731309c4e658fd8bc76f55c11c7dd760d023bda68e"}, + {file = "platformdirs-3.11.0.tar.gz", hash = "sha256:cf8ee52a3afdb965072dcc652433e0c7e3e40cf5ea1477cd4b3b1d2eb75495b3"}, ] [package.extras] @@ -1549,13 +1552,13 @@ files = [ [[package]] name = "urllib3" -version = "2.0.5" +version = "2.0.6" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.7" files = [ - {file = "urllib3-2.0.5-py3-none-any.whl", hash = "sha256:ef16afa8ba34a1f989db38e1dbbe0c302e4289a47856990d0682e374563ce35e"}, - {file = "urllib3-2.0.5.tar.gz", hash = "sha256:13abf37382ea2ce6fb744d4dad67838eec857c9f4f57009891805e0b5e123594"}, + {file = "urllib3-2.0.6-py3-none-any.whl", hash = "sha256:7a7c7003b000adf9e7ca2a377c9688bbc54ed41b985789ed576570342a375cd2"}, + {file = "urllib3-2.0.6.tar.gz", hash = "sha256:b19e1a85d206b56d7df1d5e683df4a7725252a964e3993648dd0fb5a1c157564"}, ] [package.extras] @@ -1597,24 +1600,24 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess [[package]] name = "wcwidth" -version = "0.2.6" +version = "0.2.8" description = "Measures the displayed width of unicode strings in a terminal" optional = false python-versions = "*" files = [ - {file = "wcwidth-0.2.6-py2.py3-none-any.whl", hash = "sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e"}, - {file = "wcwidth-0.2.6.tar.gz", hash = "sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0"}, + {file = "wcwidth-0.2.8-py2.py3-none-any.whl", hash = "sha256:77f719e01648ed600dfa5402c347481c0992263b81a027344f3e1ba25493a704"}, + {file = "wcwidth-0.2.8.tar.gz", hash = "sha256:8705c569999ffbb4f6a87c6d1b80f324bd6db952f5eb0b95bc07517f4c1813d4"}, ] [[package]] name = "websocket-client" -version = "1.6.3" +version = "1.6.4" description = "WebSocket client for Python with low level API options" optional = false python-versions = ">=3.8" files = [ - {file = "websocket-client-1.6.3.tar.gz", hash = "sha256:3aad25d31284266bcfcfd1fd8a743f63282305a364b8d0948a43bd606acc652f"}, - {file = "websocket_client-1.6.3-py3-none-any.whl", hash = "sha256:6cfc30d051ebabb73a5fa246efdcc14c8fbebbd0330f8984ac3bb6d9edd2ad03"}, + {file = "websocket-client-1.6.4.tar.gz", hash = "sha256:b3324019b3c28572086c4a319f91d1dcd44e6e11cd340232978c684a7650d0df"}, + {file = "websocket_client-1.6.4-py3-none-any.whl", hash = "sha256:084072e0a7f5f347ef2ac3d8698a5e0b4ffbfcab607628cadabc650fc9a83a24"}, ] [package.extras] diff --git a/src/pytest_celery/__init__.py b/src/pytest_celery/__init__.py index a7bddaca..41ce6efd 100644 --- a/src/pytest_celery/__init__.py +++ b/src/pytest_celery/__init__.py @@ -4,74 +4,27 @@ # flake8: noqa -from pytest_celery.defaults import * __version__ = "1.0.0a1" - -from pytest_celery.api import CeleryBackendCluster -from pytest_celery.api import CeleryBrokerCluster -from pytest_celery.api import CeleryTestBackend -from pytest_celery.api import CeleryTestBroker -from pytest_celery.api import CeleryTestCluster -from pytest_celery.api import CeleryTestContainer -from pytest_celery.api import CeleryTestNode -from pytest_celery.api import CeleryTestSetup -from pytest_celery.api import CeleryTestWorker -from pytest_celery.api import CeleryWorkerCluster -from pytest_celery.components import RabbitMQTestBroker -from pytest_celery.components import RedisTestBackend -from pytest_celery.components import RedisTestBroker -from pytest_celery.components import celery_base_worker_image -from pytest_celery.components import celery_rabbitmq_broker -from pytest_celery.components import celery_redis_backend -from pytest_celery.components import celery_redis_broker -from pytest_celery.components import celery_setup_worker -from pytest_celery.components import default_rabbitmq_broker -from pytest_celery.components import default_rabbitmq_broker_celeryconfig -from pytest_celery.components import default_rabbitmq_broker_cls -from pytest_celery.components import default_rabbitmq_broker_env -from pytest_celery.components import default_rabbitmq_broker_image -from pytest_celery.components import default_rabbitmq_broker_ports -from pytest_celery.components import default_redis_backend -from pytest_celery.components import default_redis_backend_celeryconfig -from pytest_celery.components import default_redis_backend_cls -from pytest_celery.components import default_redis_backend_env -from pytest_celery.components import default_redis_backend_image -from pytest_celery.components import default_redis_backend_ports -from pytest_celery.components import default_redis_broker -from pytest_celery.components import default_redis_broker_celeryconfig -from pytest_celery.components import default_redis_broker_cls -from pytest_celery.components import default_redis_broker_env -from pytest_celery.components import default_redis_broker_image -from pytest_celery.components import default_redis_broker_ports -from pytest_celery.components import default_worker_celerky_worker_queue -from pytest_celery.components import default_worker_celery_log_level -from pytest_celery.components import default_worker_celery_version -from pytest_celery.components import default_worker_celery_worker_name -from pytest_celery.components import default_worker_cls -from pytest_celery.components import default_worker_container -from pytest_celery.components import default_worker_container_cls -from pytest_celery.components import default_worker_container_session_cls -from pytest_celery.components import default_worker_env -from pytest_celery.components import default_worker_initial_content -from pytest_celery.components import default_worker_signals -from pytest_celery.components import default_worker_tasks -from pytest_celery.components import default_worker_volume -from pytest_celery.containers import CeleryWorkerContainer -from pytest_celery.containers import RabbitMQContainer -from pytest_celery.containers import RedisContainer -from pytest_celery.fixtures import celery_backend -from pytest_celery.fixtures import celery_backend_cluster -from pytest_celery.fixtures import celery_backend_cluster_config -from pytest_celery.fixtures import celery_broker -from pytest_celery.fixtures import celery_broker_cluster -from pytest_celery.fixtures import celery_broker_cluster_config -from pytest_celery.fixtures import celery_setup -from pytest_celery.fixtures import celery_setup_app -from pytest_celery.fixtures import celery_setup_cls -from pytest_celery.fixtures import celery_setup_config -from pytest_celery.fixtures import celery_setup_name -from pytest_celery.fixtures import celery_worker -from pytest_celery.fixtures import celery_worker_cluster -from pytest_celery.fixtures import celery_worker_cluster_config +from pytest_celery.api.backend import * +from pytest_celery.api.base import * +from pytest_celery.api.broker import * +from pytest_celery.api.container import * +from pytest_celery.api.setup import * +from pytest_celery.api.worker import * +from pytest_celery.defaults import * +from pytest_celery.fixtures.backend import * +from pytest_celery.fixtures.broker import * +from pytest_celery.fixtures.setup import * +from pytest_celery.fixtures.worker import * +from pytest_celery.vendors.rabbitmq.api import * +from pytest_celery.vendors.rabbitmq.container import * +from pytest_celery.vendors.rabbitmq.fixtures import * +from pytest_celery.vendors.redis.backend.api import * +from pytest_celery.vendors.redis.backend.fixtures import * +from pytest_celery.vendors.redis.broker.api import * +from pytest_celery.vendors.redis.broker.fixtures import * +from pytest_celery.vendors.redis.container import * +from pytest_celery.vendors.worker.container import * +from pytest_celery.vendors.worker.fixtures import * diff --git a/src/pytest_celery/api/__init__.py b/src/pytest_celery/api/__init__.py index 27f4e36a..e69de29b 100644 --- a/src/pytest_celery/api/__init__.py +++ b/src/pytest_celery/api/__init__.py @@ -1,12 +0,0 @@ -# flake8: noqa - -from pytest_celery.api.components import CeleryBackendCluster -from pytest_celery.api.components import CeleryBrokerCluster -from pytest_celery.api.components import CeleryTestBackend -from pytest_celery.api.components import CeleryTestBroker -from pytest_celery.api.components import CeleryTestCluster -from pytest_celery.api.components import CeleryTestNode -from pytest_celery.api.components import CeleryTestWorker -from pytest_celery.api.components import CeleryWorkerCluster -from pytest_celery.api.container import CeleryTestContainer -from pytest_celery.api.setup import CeleryTestSetup diff --git a/src/pytest_celery/api/components/backend/cluster.py b/src/pytest_celery/api/backend.py similarity index 69% rename from src/pytest_celery/api/components/backend/cluster.py rename to src/pytest_celery/api/backend.py index bb8fa86b..9658ed1e 100644 --- a/src/pytest_celery/api/components/backend/cluster.py +++ b/src/pytest_celery/api/backend.py @@ -3,12 +3,20 @@ from typing import Union from pytest_celery import defaults -from pytest_celery.api.components.backend.node import CeleryTestBackend -from pytest_celery.api.components.cluster.base import CeleryTestCluster -from pytest_celery.api.components.cluster.node import CeleryTestNode +from pytest_celery.api.base import CeleryTestCluster +from pytest_celery.api.base import CeleryTestNode from pytest_celery.api.container import CeleryTestContainer +class CeleryTestBackend(CeleryTestNode): + @classmethod + def default_config(cls) -> dict: + return { + "url": defaults.WORKER_ENV["CELERY_RESULT_BACKEND"], + "local_url": defaults.WORKER_ENV["CELERY_RESULT_BACKEND"], + } + + class CeleryBackendCluster(CeleryTestCluster): def __init__(self, *backends: Tuple[Union[CeleryTestBackend, CeleryTestContainer]]) -> None: super().__init__(*backends) diff --git a/src/pytest_celery/api/components/cluster/base.py b/src/pytest_celery/api/base.py similarity index 70% rename from src/pytest_celery/api/components/cluster/base.py rename to src/pytest_celery/api/base.py index 8b4c567b..8475ae96 100644 --- a/src/pytest_celery/api/components/cluster/base.py +++ b/src/pytest_celery/api/base.py @@ -5,10 +5,45 @@ from typing import Type from typing import Union -from pytest_celery.api.components.cluster.node import CeleryTestNode from pytest_celery.api.container import CeleryTestContainer +class CeleryTestNode: + def __init__(self, container: CeleryTestContainer): + self._container = container + + @property + def container(self) -> CeleryTestContainer: + return self._container + + def ready(self) -> bool: + return self.container.ready() + + def config(self, *args: tuple, **kwargs: dict) -> dict: + return self.container.celeryconfig + + @classmethod + def default_config(cls) -> dict: + return {} + + def __eq__(self, __value: object) -> bool: + if isinstance(__value, CeleryTestNode): + return self.container == __value.container + return False + + def logs(self) -> str: + return self.container.logs() + + def name(self) -> str: + return self.container.name + + def kill(self) -> None: + self.container.kill() + + def teardown(self) -> None: + self.container.teardown() + + class CeleryTestCluster: def __init__(self, *nodes: Tuple[Union[CeleryTestNode, CeleryTestContainer]]) -> None: if not nodes: @@ -38,11 +73,11 @@ def __eq__(self, __value: object) -> bool: @property def nodes(self) -> Tuple[CeleryTestNode]: - return self._nodes + return self.s @nodes.setter def nodes(self, nodes: Tuple[Union[CeleryTestNode, CeleryTestContainer]]) -> None: - self._nodes = self._set_nodes(*nodes) # type: ignore + self.s = self._set_nodes(*nodes) # type: ignore @abstractmethod def _set_nodes( diff --git a/src/pytest_celery/api/components/broker/cluster.py b/src/pytest_celery/api/broker.py similarity index 69% rename from src/pytest_celery/api/components/broker/cluster.py rename to src/pytest_celery/api/broker.py index e47f8ff3..803dddad 100644 --- a/src/pytest_celery/api/components/broker/cluster.py +++ b/src/pytest_celery/api/broker.py @@ -3,12 +3,20 @@ from typing import Union from pytest_celery import defaults -from pytest_celery.api.components.broker.node import CeleryTestBroker -from pytest_celery.api.components.cluster.base import CeleryTestCluster -from pytest_celery.api.components.cluster.node import CeleryTestNode +from pytest_celery.api.base import CeleryTestCluster +from pytest_celery.api.base import CeleryTestNode from pytest_celery.api.container import CeleryTestContainer +class CeleryTestBroker(CeleryTestNode): + @classmethod + def default_config(cls) -> dict: + return { + "url": defaults.WORKER_ENV["CELERY_BROKER_URL"], + "local_url": defaults.WORKER_ENV["CELERY_BROKER_URL"], + } + + class CeleryBrokerCluster(CeleryTestCluster): def __init__(self, *brokers: Tuple[Union[CeleryTestBroker, CeleryTestContainer]]) -> None: super().__init__(*brokers) diff --git a/src/pytest_celery/api/components/__init__.py b/src/pytest_celery/api/components/__init__.py deleted file mode 100644 index dd965258..00000000 --- a/src/pytest_celery/api/components/__init__.py +++ /dev/null @@ -1,10 +0,0 @@ -# flake8: noqa - -from pytest_celery.api.components.backend import CeleryBackendCluster -from pytest_celery.api.components.backend import CeleryTestBackend -from pytest_celery.api.components.broker import CeleryBrokerCluster -from pytest_celery.api.components.broker import CeleryTestBroker -from pytest_celery.api.components.cluster import CeleryTestCluster -from pytest_celery.api.components.cluster import CeleryTestNode -from pytest_celery.api.components.worker.cluster import CeleryWorkerCluster -from pytest_celery.api.components.worker.node import CeleryTestWorker diff --git a/src/pytest_celery/api/components/backend/__init__.py b/src/pytest_celery/api/components/backend/__init__.py deleted file mode 100644 index f0606b88..00000000 --- a/src/pytest_celery/api/components/backend/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -# flake8: noqa - -from pytest_celery.api.components.backend.cluster import CeleryBackendCluster -from pytest_celery.api.components.backend.node import CeleryTestBackend diff --git a/src/pytest_celery/api/components/backend/node.py b/src/pytest_celery/api/components/backend/node.py deleted file mode 100644 index ff185cf6..00000000 --- a/src/pytest_celery/api/components/backend/node.py +++ /dev/null @@ -1,11 +0,0 @@ -from pytest_celery import defaults -from pytest_celery.api.components.cluster.node import CeleryTestNode - - -class CeleryTestBackend(CeleryTestNode): - @classmethod - def default_config(cls) -> dict: - return { - "url": defaults.WORKER_ENV["CELERY_RESULT_BACKEND"], - "local_url": defaults.WORKER_ENV["CELERY_RESULT_BACKEND"], - } diff --git a/src/pytest_celery/api/components/broker/__init__.py b/src/pytest_celery/api/components/broker/__init__.py deleted file mode 100644 index d3c7999c..00000000 --- a/src/pytest_celery/api/components/broker/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -# flake8: noqa - -from pytest_celery.api.components.broker.cluster import CeleryBrokerCluster -from pytest_celery.api.components.broker.node import CeleryTestBroker diff --git a/src/pytest_celery/api/components/broker/node.py b/src/pytest_celery/api/components/broker/node.py deleted file mode 100644 index dc616e1a..00000000 --- a/src/pytest_celery/api/components/broker/node.py +++ /dev/null @@ -1,11 +0,0 @@ -from pytest_celery import defaults -from pytest_celery.api.components.cluster.node import CeleryTestNode - - -class CeleryTestBroker(CeleryTestNode): - @classmethod - def default_config(cls) -> dict: - return { - "url": defaults.WORKER_ENV["CELERY_BROKER_URL"], - "local_url": defaults.WORKER_ENV["CELERY_BROKER_URL"], - } diff --git a/src/pytest_celery/api/components/cluster/__init__.py b/src/pytest_celery/api/components/cluster/__init__.py deleted file mode 100644 index 98bcd9d6..00000000 --- a/src/pytest_celery/api/components/cluster/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -# flake8: noqa - -from pytest_celery.api.components.cluster.base import CeleryTestCluster -from pytest_celery.api.components.cluster.node import CeleryTestNode diff --git a/src/pytest_celery/api/components/cluster/node.py b/src/pytest_celery/api/components/cluster/node.py deleted file mode 100644 index 75dce27a..00000000 --- a/src/pytest_celery/api/components/cluster/node.py +++ /dev/null @@ -1,37 +0,0 @@ -from pytest_celery.api.container import CeleryTestContainer - - -class CeleryTestNode: - def __init__(self, container: CeleryTestContainer): - self._container = container - - @property - def container(self) -> CeleryTestContainer: - return self._container - - def ready(self) -> bool: - return self.container.ready() - - def config(self, *args: tuple, **kwargs: dict) -> dict: - return self.container.celeryconfig - - @classmethod - def default_config(cls) -> dict: - return {} - - def __eq__(self, __value: object) -> bool: - if isinstance(__value, CeleryTestNode): - return self.container == __value.container - return False - - def logs(self) -> str: - return self.container.logs() - - def name(self) -> str: - return self.container.name - - def kill(self) -> None: - self.container.kill() - - def teardown(self) -> None: - self.container.teardown() diff --git a/src/pytest_celery/api/components/worker/__init__.py b/src/pytest_celery/api/components/worker/__init__.py deleted file mode 100644 index d8ca50bc..00000000 --- a/src/pytest_celery/api/components/worker/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -# flake8: noqa - -from pytest_celery.api.components.worker.cluster import CeleryWorkerCluster -from pytest_celery.api.components.worker.node import CeleryTestWorker diff --git a/src/pytest_celery/api/components/worker/cluster.py b/src/pytest_celery/api/components/worker/cluster.py deleted file mode 100644 index d3d28e83..00000000 --- a/src/pytest_celery/api/components/worker/cluster.py +++ /dev/null @@ -1,25 +0,0 @@ -from typing import Set -from typing import Tuple -from typing import Type -from typing import Union - -from pytest_celery.api.components.cluster.base import CeleryTestCluster -from pytest_celery.api.components.cluster.node import CeleryTestNode -from pytest_celery.api.components.worker.node import CeleryTestWorker -from pytest_celery.api.container import CeleryTestContainer - - -class CeleryWorkerCluster(CeleryTestCluster): - def __init__(self, *workers: Tuple[Union[CeleryTestWorker, CeleryTestContainer]]) -> None: - super().__init__(*workers) - - def _set_nodes( - self, - *nodes: Tuple[Union[CeleryTestNode, CeleryTestContainer]], - node_cls: Type[CeleryTestNode] = CeleryTestWorker, - ) -> Tuple[CeleryTestNode]: - return super()._set_nodes(*nodes, node_cls=node_cls) - - @property - def versions(self) -> Set[str]: - return {worker.version for worker in self} # type: ignore diff --git a/src/pytest_celery/api/container.py b/src/pytest_celery/api/container.py index 5b197c48..d884a742 100644 --- a/src/pytest_celery/api/container.py +++ b/src/pytest_celery/api/container.py @@ -18,6 +18,9 @@ def celeryconfig(self) -> dict: @classmethod def command(cls) -> list: + # To be used with pytest_docker_tools.container + # using the command kwarg with the class method as value + # e.g. command=MyContainer.command() raise NotImplementedError("CeleryTestContainer.command") def teardown(self) -> None: diff --git a/src/pytest_celery/api/setup.py b/src/pytest_celery/api/setup.py index 347ca42f..bc492975 100644 --- a/src/pytest_celery/api/setup.py +++ b/src/pytest_celery/api/setup.py @@ -1,10 +1,11 @@ from celery import Celery from pytest_celery import defaults -from pytest_celery.api.components.backend.cluster import CeleryBackendCluster -from pytest_celery.api.components.broker.cluster import CeleryBrokerCluster -from pytest_celery.api.components.worker.cluster import CeleryWorkerCluster -from pytest_celery.api.components.worker.node import CeleryTestWorker +from pytest_celery.api.backend import CeleryBackendCluster +from pytest_celery.api.broker import CeleryBrokerCluster +from pytest_celery.api.worker import CeleryTestWorker +from pytest_celery.api.worker import CeleryWorkerCluster +from pytest_celery.vendors.worker.tasks import ping class CeleryTestSetup: @@ -20,8 +21,6 @@ def __init__( self._backend_cluster = backend_cluster self._app = app - from pytest_celery.components.worker.tasks import ping - self.ping = ping def __len__(self) -> int: diff --git a/src/pytest_celery/api/components/worker/node.py b/src/pytest_celery/api/worker.py similarity index 50% rename from src/pytest_celery/api/components/worker/node.py rename to src/pytest_celery/api/worker.py index a2a62ffd..76757122 100644 --- a/src/pytest_celery/api/components/worker/node.py +++ b/src/pytest_celery/api/worker.py @@ -1,8 +1,14 @@ +from typing import Set +from typing import Tuple +from typing import Type +from typing import Union + from celery import Celery -from pytest_celery.api.components.cluster.node import CeleryTestNode +from pytest_celery.api.base import CeleryTestCluster +from pytest_celery.api.base import CeleryTestNode from pytest_celery.api.container import CeleryTestContainer -from pytest_celery.containers.worker import CeleryWorkerContainer +from pytest_celery.vendors.worker.container import CeleryWorkerContainer class CeleryTestWorker(CeleryTestNode): @@ -33,3 +39,19 @@ def worker_name(self) -> str: @property def worker_queue(self) -> str: return self.container.worker_queue() + + +class CeleryWorkerCluster(CeleryTestCluster): + def __init__(self, *workers: Tuple[Union[CeleryTestWorker, CeleryTestContainer]]) -> None: + super().__init__(*workers) + + def _set_nodes( + self, + *nodes: Tuple[Union[CeleryTestNode, CeleryTestContainer]], + node_cls: Type[CeleryTestNode] = CeleryTestWorker, + ) -> Tuple[CeleryTestNode]: + return super()._set_nodes(*nodes, node_cls=node_cls) + + @property + def versions(self) -> Set[str]: + return {worker.version for worker in self} # type: ignore diff --git a/src/pytest_celery/components/__init__.py b/src/pytest_celery/components/__init__.py deleted file mode 100644 index 6e4ab8d4..00000000 --- a/src/pytest_celery/components/__init__.py +++ /dev/null @@ -1,41 +0,0 @@ -# flake8: noqa - -from pytest_celery.components.backend import RedisTestBackend -from pytest_celery.components.backend import celery_redis_backend -from pytest_celery.components.backend import default_redis_backend -from pytest_celery.components.backend import default_redis_backend_celeryconfig -from pytest_celery.components.backend import default_redis_backend_cls -from pytest_celery.components.backend import default_redis_backend_env -from pytest_celery.components.backend import default_redis_backend_image -from pytest_celery.components.backend import default_redis_backend_ports -from pytest_celery.components.broker import RabbitMQTestBroker -from pytest_celery.components.broker import RedisTestBroker -from pytest_celery.components.broker import celery_rabbitmq_broker -from pytest_celery.components.broker import celery_redis_broker -from pytest_celery.components.broker import default_rabbitmq_broker -from pytest_celery.components.broker import default_rabbitmq_broker_celeryconfig -from pytest_celery.components.broker import default_rabbitmq_broker_cls -from pytest_celery.components.broker import default_rabbitmq_broker_env -from pytest_celery.components.broker import default_rabbitmq_broker_image -from pytest_celery.components.broker import default_rabbitmq_broker_ports -from pytest_celery.components.broker import default_redis_broker -from pytest_celery.components.broker import default_redis_broker_celeryconfig -from pytest_celery.components.broker import default_redis_broker_cls -from pytest_celery.components.broker import default_redis_broker_env -from pytest_celery.components.broker import default_redis_broker_image -from pytest_celery.components.broker import default_redis_broker_ports -from pytest_celery.components.worker import celery_base_worker_image -from pytest_celery.components.worker import celery_setup_worker -from pytest_celery.components.worker import default_worker_celerky_worker_queue -from pytest_celery.components.worker import default_worker_celery_log_level -from pytest_celery.components.worker import default_worker_celery_version -from pytest_celery.components.worker import default_worker_celery_worker_name -from pytest_celery.components.worker import default_worker_cls -from pytest_celery.components.worker import default_worker_container -from pytest_celery.components.worker import default_worker_container_cls -from pytest_celery.components.worker import default_worker_container_session_cls -from pytest_celery.components.worker import default_worker_env -from pytest_celery.components.worker import default_worker_initial_content -from pytest_celery.components.worker import default_worker_signals -from pytest_celery.components.worker import default_worker_tasks -from pytest_celery.components.worker import default_worker_volume diff --git a/src/pytest_celery/components/backend/__init__.py b/src/pytest_celery/components/backend/__init__.py deleted file mode 100644 index cb77b0da..00000000 --- a/src/pytest_celery/components/backend/__init__.py +++ /dev/null @@ -1,10 +0,0 @@ -# flake8: noqa - -from pytest_celery.components.backend.redis import RedisTestBackend -from pytest_celery.components.backend.redis import celery_redis_backend -from pytest_celery.components.backend.redis import default_redis_backend -from pytest_celery.components.backend.redis import default_redis_backend_celeryconfig -from pytest_celery.components.backend.redis import default_redis_backend_cls -from pytest_celery.components.backend.redis import default_redis_backend_env -from pytest_celery.components.backend.redis import default_redis_backend_image -from pytest_celery.components.backend.redis import default_redis_backend_ports diff --git a/src/pytest_celery/components/backend/redis/__init__.py b/src/pytest_celery/components/backend/redis/__init__.py deleted file mode 100644 index 492ea26b..00000000 --- a/src/pytest_celery/components/backend/redis/__init__.py +++ /dev/null @@ -1,10 +0,0 @@ -# flake8: noqa - -from pytest_celery.components.backend.redis.api import RedisTestBackend -from pytest_celery.components.backend.redis.fixtures import celery_redis_backend -from pytest_celery.components.backend.redis.fixtures import default_redis_backend -from pytest_celery.components.backend.redis.fixtures import default_redis_backend_celeryconfig -from pytest_celery.components.backend.redis.fixtures import default_redis_backend_cls -from pytest_celery.components.backend.redis.fixtures import default_redis_backend_env -from pytest_celery.components.backend.redis.fixtures import default_redis_backend_image -from pytest_celery.components.backend.redis.fixtures import default_redis_backend_ports diff --git a/src/pytest_celery/components/broker/__init__.py b/src/pytest_celery/components/broker/__init__.py deleted file mode 100644 index a07e4297..00000000 --- a/src/pytest_celery/components/broker/__init__.py +++ /dev/null @@ -1,18 +0,0 @@ -# flake8: noqa - -from pytest_celery.components.broker.rabbitmq import RabbitMQTestBroker -from pytest_celery.components.broker.rabbitmq import celery_rabbitmq_broker -from pytest_celery.components.broker.rabbitmq import default_rabbitmq_broker -from pytest_celery.components.broker.rabbitmq import default_rabbitmq_broker_celeryconfig -from pytest_celery.components.broker.rabbitmq import default_rabbitmq_broker_cls -from pytest_celery.components.broker.rabbitmq import default_rabbitmq_broker_env -from pytest_celery.components.broker.rabbitmq import default_rabbitmq_broker_image -from pytest_celery.components.broker.rabbitmq import default_rabbitmq_broker_ports -from pytest_celery.components.broker.redis import RedisTestBroker -from pytest_celery.components.broker.redis import celery_redis_broker -from pytest_celery.components.broker.redis import default_redis_broker -from pytest_celery.components.broker.redis import default_redis_broker_celeryconfig -from pytest_celery.components.broker.redis import default_redis_broker_cls -from pytest_celery.components.broker.redis import default_redis_broker_env -from pytest_celery.components.broker.redis import default_redis_broker_image -from pytest_celery.components.broker.redis import default_redis_broker_ports diff --git a/src/pytest_celery/components/broker/rabbitmq/__init__.py b/src/pytest_celery/components/broker/rabbitmq/__init__.py deleted file mode 100644 index bdd883bf..00000000 --- a/src/pytest_celery/components/broker/rabbitmq/__init__.py +++ /dev/null @@ -1,10 +0,0 @@ -# flake8: noqa - -from pytest_celery.components.broker.rabbitmq.api import RabbitMQTestBroker -from pytest_celery.components.broker.rabbitmq.fixtures import celery_rabbitmq_broker -from pytest_celery.components.broker.rabbitmq.fixtures import default_rabbitmq_broker -from pytest_celery.components.broker.rabbitmq.fixtures import default_rabbitmq_broker_celeryconfig -from pytest_celery.components.broker.rabbitmq.fixtures import default_rabbitmq_broker_cls -from pytest_celery.components.broker.rabbitmq.fixtures import default_rabbitmq_broker_env -from pytest_celery.components.broker.rabbitmq.fixtures import default_rabbitmq_broker_image -from pytest_celery.components.broker.rabbitmq.fixtures import default_rabbitmq_broker_ports diff --git a/src/pytest_celery/components/broker/rabbitmq/api.py b/src/pytest_celery/components/broker/rabbitmq/api.py deleted file mode 100644 index 164a53e2..00000000 --- a/src/pytest_celery/components/broker/rabbitmq/api.py +++ /dev/null @@ -1,5 +0,0 @@ -from pytest_celery.fixtures.broker import CeleryTestBroker - - -class RabbitMQTestBroker(CeleryTestBroker): - pass diff --git a/src/pytest_celery/components/broker/redis/__init__.py b/src/pytest_celery/components/broker/redis/__init__.py deleted file mode 100644 index 98ac7158..00000000 --- a/src/pytest_celery/components/broker/redis/__init__.py +++ /dev/null @@ -1,10 +0,0 @@ -# flake8: noqa - -from pytest_celery.components.broker.redis.api import RedisTestBroker -from pytest_celery.components.broker.redis.fixtures import celery_redis_broker -from pytest_celery.components.broker.redis.fixtures import default_redis_broker -from pytest_celery.components.broker.redis.fixtures import default_redis_broker_celeryconfig -from pytest_celery.components.broker.redis.fixtures import default_redis_broker_cls -from pytest_celery.components.broker.redis.fixtures import default_redis_broker_env -from pytest_celery.components.broker.redis.fixtures import default_redis_broker_image -from pytest_celery.components.broker.redis.fixtures import default_redis_broker_ports diff --git a/src/pytest_celery/components/broker/redis/api.py b/src/pytest_celery/components/broker/redis/api.py deleted file mode 100644 index 6d6bf745..00000000 --- a/src/pytest_celery/components/broker/redis/api.py +++ /dev/null @@ -1,5 +0,0 @@ -from pytest_celery.fixtures.broker import CeleryTestBroker - - -class RedisTestBroker(CeleryTestBroker): - pass diff --git a/src/pytest_celery/components/worker/__init__.py b/src/pytest_celery/components/worker/__init__.py deleted file mode 100644 index 1a0c96ba..00000000 --- a/src/pytest_celery/components/worker/__init__.py +++ /dev/null @@ -1,18 +0,0 @@ -# flake8: noqa - - -from pytest_celery.components.worker.fixtures import celery_base_worker_image -from pytest_celery.components.worker.fixtures import celery_setup_worker -from pytest_celery.components.worker.fixtures import default_worker_celerky_worker_queue -from pytest_celery.components.worker.fixtures import default_worker_celery_log_level -from pytest_celery.components.worker.fixtures import default_worker_celery_version -from pytest_celery.components.worker.fixtures import default_worker_celery_worker_name -from pytest_celery.components.worker.fixtures import default_worker_cls -from pytest_celery.components.worker.fixtures import default_worker_container -from pytest_celery.components.worker.fixtures import default_worker_container_cls -from pytest_celery.components.worker.fixtures import default_worker_container_session_cls -from pytest_celery.components.worker.fixtures import default_worker_env -from pytest_celery.components.worker.fixtures import default_worker_initial_content -from pytest_celery.components.worker.fixtures import default_worker_signals -from pytest_celery.components.worker.fixtures import default_worker_tasks -from pytest_celery.components.worker.fixtures import default_worker_volume diff --git a/src/pytest_celery/containers/__init__.py b/src/pytest_celery/containers/__init__.py deleted file mode 100644 index 4326aae3..00000000 --- a/src/pytest_celery/containers/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -# flake8: noqa - -from pytest_celery.containers.rabbitmq import RabbitMQContainer -from pytest_celery.containers.redis import RedisContainer -from pytest_celery.containers.worker import CeleryWorkerContainer diff --git a/src/pytest_celery/defaults.py b/src/pytest_celery/defaults.py index 60a384d7..d7e9ba7e 100644 --- a/src/pytest_celery/defaults.py +++ b/src/pytest_celery/defaults.py @@ -15,7 +15,7 @@ RESULT_TIMEOUT = 60 -DEFAULT_NETWORK = network() +default_pytest_celery_network = network() ########## # Fixtures @@ -90,9 +90,11 @@ # Worker Container Settings ########################## +WORKER_DOCKERFILE_ROOTDIR = "src/pytest_celery/vendors/worker" + # Default container settings for all worker container fixtures WORKER_CELERY_APP_NAME = "celery_test_app" -WORKER_CELERY_VERSION = "5.3.0b2" +WORKER_CELERY_VERSION = "5.3" WORKER_LOG_LEVEL = "INFO" WORKER_NAME = CELERY_SETUP_WORKER WORKER_QUEUE = "celery" diff --git a/src/pytest_celery/fixtures/__init__.py b/src/pytest_celery/fixtures/__init__.py index e645522f..e69de29b 100644 --- a/src/pytest_celery/fixtures/__init__.py +++ b/src/pytest_celery/fixtures/__init__.py @@ -1,17 +0,0 @@ -# flake8: noqa - - -from pytest_celery.fixtures.backend import celery_backend -from pytest_celery.fixtures.backend import celery_backend_cluster -from pytest_celery.fixtures.backend import celery_backend_cluster_config -from pytest_celery.fixtures.broker import celery_broker -from pytest_celery.fixtures.broker import celery_broker_cluster -from pytest_celery.fixtures.broker import celery_broker_cluster_config -from pytest_celery.fixtures.setup import celery_setup -from pytest_celery.fixtures.setup import celery_setup_app -from pytest_celery.fixtures.setup import celery_setup_cls -from pytest_celery.fixtures.setup import celery_setup_config -from pytest_celery.fixtures.setup import celery_setup_name -from pytest_celery.fixtures.worker import celery_worker -from pytest_celery.fixtures.worker import celery_worker_cluster -from pytest_celery.fixtures.worker import celery_worker_cluster_config diff --git a/src/pytest_celery/fixtures/backend.py b/src/pytest_celery/fixtures/backend.py index 0cc44dce..0c87fa5e 100644 --- a/src/pytest_celery/fixtures/backend.py +++ b/src/pytest_celery/fixtures/backend.py @@ -3,8 +3,8 @@ import pytest from pytest_celery import defaults -from pytest_celery.api.components.backend import CeleryBackendCluster -from pytest_celery.api.components.backend import CeleryTestBackend +from pytest_celery.api.backend import CeleryBackendCluster +from pytest_celery.api.backend import CeleryTestBackend @pytest.fixture(params=defaults.ALL_CELERY_BACKENDS) diff --git a/src/pytest_celery/fixtures/broker.py b/src/pytest_celery/fixtures/broker.py index 4d6ac8e4..1ec13ef6 100644 --- a/src/pytest_celery/fixtures/broker.py +++ b/src/pytest_celery/fixtures/broker.py @@ -3,8 +3,8 @@ import pytest from pytest_celery import defaults -from pytest_celery.api.components.broker import CeleryBrokerCluster -from pytest_celery.api.components.broker import CeleryTestBroker +from pytest_celery.api.broker import CeleryBrokerCluster +from pytest_celery.api.broker import CeleryTestBroker @pytest.fixture(params=defaults.ALL_CELERY_BROKERS) diff --git a/src/pytest_celery/fixtures/setup.py b/src/pytest_celery/fixtures/setup.py index e2d88883..a40bb250 100644 --- a/src/pytest_celery/fixtures/setup.py +++ b/src/pytest_celery/fixtures/setup.py @@ -1,32 +1,14 @@ +# mypy: disable-error-code="misc" + from typing import Type import pytest from celery import Celery -from pytest_celery.api.components.backend.cluster import CeleryBackendCluster -from pytest_celery.api.components.broker.cluster import CeleryBrokerCluster -from pytest_celery.api.components.worker.cluster import CeleryWorkerCluster +from pytest_celery.api.backend import CeleryBackendCluster +from pytest_celery.api.broker import CeleryBrokerCluster from pytest_celery.api.setup import CeleryTestSetup - - -@pytest.fixture -def celery_setup_name() -> str: # type: ignore - yield CeleryTestSetup.name() - - -@pytest.fixture -def celery_setup_config(celery_worker_cluster_config: dict) -> dict: # type: ignore - yield CeleryTestSetup.config( - celery_worker_cluster_config=celery_worker_cluster_config, - ) - - -@pytest.fixture -def celery_setup_app(celery_setup_config: dict, celery_setup_name: str) -> Celery: # type: ignore - yield CeleryTestSetup.create_setup_app( - celery_setup_config=celery_setup_config, - celery_setup_app_name=celery_setup_name, - ) +from pytest_celery.api.worker import CeleryWorkerCluster @pytest.fixture @@ -51,3 +33,30 @@ def celery_setup( # type: ignore assert setup.ready() yield setup setup.teardown() + + +@pytest.fixture +def celery_setup_name(celery_setup_cls: Type[CeleryTestSetup]) -> str: # type: ignore + yield celery_setup_cls.name() + + +@pytest.fixture +def celery_setup_config( + celery_setup_cls: Type[CeleryTestSetup], + celery_worker_cluster_config: dict, +) -> dict: + yield celery_setup_cls.config( + celery_worker_cluster_config=celery_worker_cluster_config, + ) + + +@pytest.fixture +def celery_setup_app( + celery_setup_cls: Type[CeleryTestSetup], + celery_setup_config: dict, + celery_setup_name: str, +) -> Celery: + yield celery_setup_cls.create_setup_app( + celery_setup_config=celery_setup_config, + celery_setup_app_name=celery_setup_name, + ) diff --git a/src/pytest_celery/fixtures/worker.py b/src/pytest_celery/fixtures/worker.py index 7c6ed753..9d1d0cc1 100644 --- a/src/pytest_celery/fixtures/worker.py +++ b/src/pytest_celery/fixtures/worker.py @@ -3,8 +3,8 @@ import pytest from pytest_celery import defaults -from pytest_celery.api.components.worker import CeleryTestWorker -from pytest_celery.api.components.worker import CeleryWorkerCluster +from pytest_celery.api.worker import CeleryTestWorker +from pytest_celery.api.worker import CeleryWorkerCluster @pytest.fixture(params=defaults.ALL_CELERY_WORKERS) diff --git a/tests/integration/components/__init__.py b/src/pytest_celery/vendors/__init__.py similarity index 100% rename from tests/integration/components/__init__.py rename to src/pytest_celery/vendors/__init__.py diff --git a/tests/integration/containers/__init__.py b/src/pytest_celery/vendors/rabbitmq/__init__.py similarity index 100% rename from tests/integration/containers/__init__.py rename to src/pytest_celery/vendors/rabbitmq/__init__.py diff --git a/src/pytest_celery/vendors/rabbitmq/api.py b/src/pytest_celery/vendors/rabbitmq/api.py new file mode 100644 index 00000000..d9d4a4c6 --- /dev/null +++ b/src/pytest_celery/vendors/rabbitmq/api.py @@ -0,0 +1,5 @@ +from pytest_celery.api.broker import CeleryTestBroker + + +class RabbitMQTestBroker(CeleryTestBroker): + pass diff --git a/src/pytest_celery/containers/rabbitmq.py b/src/pytest_celery/vendors/rabbitmq/container.py similarity index 100% rename from src/pytest_celery/containers/rabbitmq.py rename to src/pytest_celery/vendors/rabbitmq/container.py diff --git a/src/pytest_celery/components/broker/rabbitmq/fixtures.py b/src/pytest_celery/vendors/rabbitmq/fixtures.py similarity index 77% rename from src/pytest_celery/components/broker/rabbitmq/fixtures.py rename to src/pytest_celery/vendors/rabbitmq/fixtures.py index 09a0faeb..1f39ebb8 100644 --- a/src/pytest_celery/components/broker/rabbitmq/fixtures.py +++ b/src/pytest_celery/vendors/rabbitmq/fixtures.py @@ -7,8 +7,8 @@ from pytest_docker_tools import fxtr from pytest_celery import defaults -from pytest_celery.components.broker.rabbitmq.api import RabbitMQTestBroker -from pytest_celery.containers.rabbitmq import RabbitMQContainer +from pytest_celery.vendors.rabbitmq.api import RabbitMQTestBroker +from pytest_celery.vendors.rabbitmq.container import RabbitMQContainer @pytest.fixture @@ -27,7 +27,7 @@ def default_rabbitmq_broker_cls() -> Type[RabbitMQContainer]: image="{default_rabbitmq_broker_image}", ports=fxtr("default_rabbitmq_broker_ports"), environment=fxtr("default_rabbitmq_broker_env"), - network="{DEFAULT_NETWORK.name}", + network="{default_pytest_celery_network.name}", wrapper_class=RabbitMQContainer, timeout=defaults.RABBITMQ_CONTAINER_TIMEOUT, ) @@ -46,8 +46,3 @@ def default_rabbitmq_broker_image(default_rabbitmq_broker_cls: Type[RabbitMQCont @pytest.fixture def default_rabbitmq_broker_ports(default_rabbitmq_broker_cls: Type[RabbitMQContainer]) -> dict: yield default_rabbitmq_broker_cls.ports() - - -@pytest.fixture -def default_rabbitmq_broker_celeryconfig(default_rabbitmq_broker: RabbitMQContainer) -> dict: - yield {"broker_url": default_rabbitmq_broker.celeryconfig["url"]} diff --git a/tests/integration/setup/__init__.py b/src/pytest_celery/vendors/redis/__init__.py similarity index 100% rename from tests/integration/setup/__init__.py rename to src/pytest_celery/vendors/redis/__init__.py diff --git a/tests/integration/setup/custom/__init__.py b/src/pytest_celery/vendors/redis/backend/__init__.py similarity index 100% rename from tests/integration/setup/custom/__init__.py rename to src/pytest_celery/vendors/redis/backend/__init__.py diff --git a/src/pytest_celery/components/backend/redis/api.py b/src/pytest_celery/vendors/redis/backend/api.py similarity index 89% rename from src/pytest_celery/components/backend/redis/api.py rename to src/pytest_celery/vendors/redis/backend/api.py index dfdc159a..7e550042 100644 --- a/src/pytest_celery/components/backend/redis/api.py +++ b/src/pytest_celery/vendors/redis/backend/api.py @@ -1,6 +1,6 @@ import gc -from pytest_celery.fixtures.backend import CeleryTestBackend +from pytest_celery.api.backend import CeleryTestBackend class RedisTestBackend(CeleryTestBackend): diff --git a/src/pytest_celery/components/backend/redis/fixtures.py b/src/pytest_celery/vendors/redis/backend/fixtures.py similarity index 77% rename from src/pytest_celery/components/backend/redis/fixtures.py rename to src/pytest_celery/vendors/redis/backend/fixtures.py index 7c883a25..0d36737b 100644 --- a/src/pytest_celery/components/backend/redis/fixtures.py +++ b/src/pytest_celery/vendors/redis/backend/fixtures.py @@ -7,8 +7,8 @@ from pytest_docker_tools import fxtr from pytest_celery import defaults -from pytest_celery.components.backend.redis.api import RedisTestBackend -from pytest_celery.containers.redis import RedisContainer +from pytest_celery.vendors.redis.backend.api import RedisTestBackend +from pytest_celery.vendors.redis.container import RedisContainer @pytest.fixture @@ -27,7 +27,7 @@ def default_redis_backend_cls() -> Type[RedisContainer]: image="{default_redis_backend_image}", ports=fxtr("default_redis_backend_ports"), environment=fxtr("default_redis_backend_env"), - network="{DEFAULT_NETWORK.name}", + network="{default_pytest_celery_network.name}", wrapper_class=RedisContainer, timeout=defaults.REDIS_CONTAINER_TIMEOUT, ) @@ -46,8 +46,3 @@ def default_redis_backend_image(default_redis_backend_cls: Type[RedisContainer]) @pytest.fixture def default_redis_backend_ports(default_redis_backend_cls: Type[RedisContainer]) -> dict: yield default_redis_backend_cls.ports() - - -@pytest.fixture -def default_redis_backend_celeryconfig(default_redis_backend: RedisContainer) -> dict: - yield {"result_backend": default_redis_backend.celeryconfig["url"]} diff --git a/tests/unit/components/__init__.py b/src/pytest_celery/vendors/redis/broker/__init__.py similarity index 100% rename from tests/unit/components/__init__.py rename to src/pytest_celery/vendors/redis/broker/__init__.py diff --git a/src/pytest_celery/vendors/redis/broker/api.py b/src/pytest_celery/vendors/redis/broker/api.py new file mode 100644 index 00000000..2727b7a5 --- /dev/null +++ b/src/pytest_celery/vendors/redis/broker/api.py @@ -0,0 +1,5 @@ +from pytest_celery.api.broker import CeleryTestBroker + + +class RedisTestBroker(CeleryTestBroker): + pass diff --git a/src/pytest_celery/components/broker/redis/fixtures.py b/src/pytest_celery/vendors/redis/broker/fixtures.py similarity index 77% rename from src/pytest_celery/components/broker/redis/fixtures.py rename to src/pytest_celery/vendors/redis/broker/fixtures.py index 80ed0f2c..928a6f46 100644 --- a/src/pytest_celery/components/broker/redis/fixtures.py +++ b/src/pytest_celery/vendors/redis/broker/fixtures.py @@ -7,8 +7,8 @@ from pytest_docker_tools import fxtr from pytest_celery import defaults -from pytest_celery.components.broker.redis.api import RedisTestBroker -from pytest_celery.containers.redis import RedisContainer +from pytest_celery.vendors.redis.broker.api import RedisTestBroker +from pytest_celery.vendors.redis.container import RedisContainer @pytest.fixture @@ -27,7 +27,7 @@ def default_redis_broker_cls() -> Type[RedisContainer]: image="{default_redis_broker_image}", ports=fxtr("default_redis_broker_ports"), environment=fxtr("default_redis_broker_env"), - network="{DEFAULT_NETWORK.name}", + network="{default_pytest_celery_network.name}", wrapper_class=RedisContainer, timeout=defaults.REDIS_CONTAINER_TIMEOUT, ) @@ -46,8 +46,3 @@ def default_redis_broker_image(default_redis_broker_cls: Type[RedisContainer]) - @pytest.fixture def default_redis_broker_ports(default_redis_broker_cls: Type[RedisContainer]) -> dict: yield default_redis_broker_cls.ports() - - -@pytest.fixture -def default_redis_broker_celeryconfig(default_redis_broker: RedisContainer) -> dict: - yield {"broker_url": default_redis_broker.celeryconfig["url"]} diff --git a/src/pytest_celery/containers/redis.py b/src/pytest_celery/vendors/redis/container.py similarity index 100% rename from src/pytest_celery/containers/redis.py rename to src/pytest_celery/vendors/redis/container.py diff --git a/src/pytest_celery/components/worker/Dockerfile b/src/pytest_celery/vendors/worker/Dockerfile similarity index 100% rename from src/pytest_celery/components/worker/Dockerfile rename to src/pytest_celery/vendors/worker/Dockerfile diff --git a/tests/unit/containers/__init__.py b/src/pytest_celery/vendors/worker/__init__.py similarity index 100% rename from tests/unit/containers/__init__.py rename to src/pytest_celery/vendors/worker/__init__.py diff --git a/src/pytest_celery/components/worker/app.py b/src/pytest_celery/vendors/worker/app.py similarity index 100% rename from src/pytest_celery/components/worker/app.py rename to src/pytest_celery/vendors/worker/app.py diff --git a/src/pytest_celery/containers/worker.py b/src/pytest_celery/vendors/worker/container.py similarity index 96% rename from src/pytest_celery/containers/worker.py rename to src/pytest_celery/vendors/worker/container.py index 275c7f56..71996281 100644 --- a/src/pytest_celery/containers/worker.py +++ b/src/pytest_celery/vendors/worker/container.py @@ -44,7 +44,7 @@ def env(cls, celery_worker_cluster_config: dict) -> dict: @classmethod def initial_content(cls, worker_tasks: set, worker_signals: Union[set, None] = None) -> dict: - from pytest_celery.components.worker import app as app_module + from pytest_celery.vendors.worker import app as app_module app_module_src = inspect.getsource(app_module) @@ -63,7 +63,7 @@ def initial_content(cls, worker_tasks: set, worker_signals: Union[set, None] = N @classmethod def _initial_content_worker_tasks(cls, worker_tasks: set) -> dict: - from pytest_celery.components.worker import tasks + from pytest_celery.vendors.worker import tasks worker_tasks.add(tasks) diff --git a/src/pytest_celery/components/worker/fixtures.py b/src/pytest_celery/vendors/worker/fixtures.py similarity index 87% rename from src/pytest_celery/components/worker/fixtures.py rename to src/pytest_celery/vendors/worker/fixtures.py index c3101d89..8abd901c 100644 --- a/src/pytest_celery/components/worker/fixtures.py +++ b/src/pytest_celery/vendors/worker/fixtures.py @@ -10,13 +10,8 @@ from pytest_docker_tools import volume from pytest_celery import defaults -from pytest_celery.api.components.worker.node import CeleryTestWorker -from pytest_celery.containers.worker import CeleryWorkerContainer - - -@pytest.fixture -def default_worker_cls() -> Type[CeleryTestWorker]: - return CeleryTestWorker +from pytest_celery.api.worker import CeleryTestWorker +from pytest_celery.vendors.worker.container import CeleryWorkerContainer @pytest.fixture @@ -33,6 +28,11 @@ def celery_setup_worker( worker.teardown() +@pytest.fixture +def default_worker_cls() -> Type[CeleryTestWorker]: + return CeleryTestWorker + + @pytest.fixture def default_worker_container_cls() -> Type[CeleryWorkerContainer]: return CeleryWorkerContainer @@ -46,20 +46,20 @@ def default_worker_container_session_cls() -> Type[CeleryWorkerContainer]: default_worker_container = container( image="{celery_base_worker_image.id}", environment=fxtr("default_worker_env"), - network="{DEFAULT_NETWORK.name}", + network="{default_pytest_celery_network.name}", volumes={"{default_worker_volume.name}": defaults.DEFAULT_WORKER_VOLUME}, wrapper_class=CeleryWorkerContainer, timeout=defaults.DEFAULT_WORKER_CONTAINER_TIMEOUT, ) celery_base_worker_image = build( - path="src/pytest_celery/components/worker", - tag="pytest-celery/components/worker:base", + path=defaults.WORKER_DOCKERFILE_ROOTDIR, + tag="pytest-celery/components/worker:default", buildargs={ "CELERY_VERSION": fxtr("default_worker_celery_version"), "CELERY_LOG_LEVEL": fxtr("default_worker_celery_log_level"), "CELERY_WORKER_NAME": fxtr("default_worker_celery_worker_name"), - "CELERY_WORKER_QUEUE": fxtr("default_worker_celerky_worker_queue"), + "CELERY_WORKER_QUEUE": fxtr("default_worker_celery_worker_queue"), }, ) @@ -84,7 +84,7 @@ def default_worker_celery_worker_name(default_worker_container_session_cls: Type @pytest.fixture(scope="session") -def default_worker_celerky_worker_queue(default_worker_container_session_cls: Type[CeleryWorkerContainer]) -> str: +def default_worker_celery_worker_queue(default_worker_container_session_cls: Type[CeleryWorkerContainer]) -> str: yield default_worker_container_session_cls.worker_queue() diff --git a/src/pytest_celery/components/worker/tasks.py b/src/pytest_celery/vendors/worker/tasks.py similarity index 100% rename from src/pytest_celery/components/worker/tasks.py rename to src/pytest_celery/vendors/worker/tasks.py diff --git a/tests/conftest.py b/tests/conftest.py index 1000b324..8874b333 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -6,9 +6,9 @@ from pytest_docker_tools import container from pytest_docker_tools import fxtr +from pytest_celery import CeleryTestWorker +from pytest_celery import CeleryWorkerContainer from pytest_celery import defaults -from pytest_celery.api.components.worker.node import CeleryTestWorker -from pytest_celery.containers.worker import CeleryWorkerContainer class Celery4WorkerContainer(CeleryWorkerContainer): @@ -34,7 +34,7 @@ def worker_queue(cls) -> str: celery4_worker_image = build( - path="src/pytest_celery/components/worker", + path=defaults.WORKER_DOCKERFILE_ROOTDIR, tag="pytest-celery/components/worker:celery4", buildargs=Celery4WorkerContainer.buildargs(), ) @@ -43,7 +43,7 @@ def worker_queue(cls) -> str: celery4_worker_container = container( image="{celery4_worker_image.id}", environment=fxtr("default_worker_env"), - network="{DEFAULT_NETWORK.name}", + network="{default_pytest_celery_network.name}", volumes={"{default_worker_volume.name}": defaults.DEFAULT_WORKER_VOLUME}, wrapper_class=Celery4WorkerContainer, timeout=defaults.DEFAULT_WORKER_CONTAINER_TIMEOUT, @@ -82,7 +82,7 @@ def worker_queue(cls) -> str: celery5_worker_image = build( - path="src/pytest_celery/components/worker", + path=defaults.WORKER_DOCKERFILE_ROOTDIR, tag="pytest-celery/components/worker:celery5", buildargs=Celery5WorkerContainer.buildargs(), ) diff --git a/tests/unit/setup/__init__.py b/tests/integration/api/custom_setup/__init__.py similarity index 100% rename from tests/unit/setup/__init__.py rename to tests/integration/api/custom_setup/__init__.py diff --git a/tests/integration/setup/custom/conftest.py b/tests/integration/api/custom_setup/conftest.py similarity index 82% rename from tests/integration/setup/custom/conftest.py rename to tests/integration/api/custom_setup/conftest.py index 1ce84f12..a06b9195 100644 --- a/tests/integration/setup/custom/conftest.py +++ b/tests/integration/api/custom_setup/conftest.py @@ -4,10 +4,10 @@ from pytest_docker_tools import container from pytest_docker_tools import fxtr +from pytest_celery import CeleryTestWorker +from pytest_celery import CeleryWorkerCluster +from pytest_celery import CeleryWorkerContainer from pytest_celery import defaults -from pytest_celery.api.components.worker.cluster import CeleryWorkerCluster -from pytest_celery.api.components.worker.node import CeleryTestWorker -from pytest_celery.containers.worker import CeleryWorkerContainer from tests.conftest import Celery5WorkerContainer @@ -31,7 +31,7 @@ def default_worker_container_session_cls() -> Type[CeleryWorkerContainer]: default_worker_container = container( image="{celery5_worker_image.id}", environment=fxtr("default_worker_env"), - network="{DEFAULT_NETWORK.name}", + network="{default_pytest_celery_network.name}", volumes={"{default_worker_volume.name}": defaults.DEFAULT_WORKER_VOLUME}, wrapper_class=Celery5WorkerContainer, timeout=defaults.DEFAULT_WORKER_CONTAINER_TIMEOUT, diff --git a/tests/integration/setup/custom/test_custom_setup.py b/tests/integration/api/custom_setup/test_custom_setup.py similarity index 95% rename from tests/integration/setup/custom/test_custom_setup.py rename to tests/integration/api/custom_setup/test_custom_setup.py index 42fdfb2c..1ffe9aa3 100644 --- a/tests/integration/setup/custom/test_custom_setup.py +++ b/tests/integration/api/custom_setup/test_custom_setup.py @@ -1,9 +1,9 @@ from celery import Celery from pytest_docker_tools.wrappers.container import wait_for_callable +from pytest_celery import CeleryTestSetup +from pytest_celery import CeleryTestWorker from pytest_celery import defaults -from pytest_celery.api.components.worker.node import CeleryTestWorker -from pytest_celery.api.setup import CeleryTestSetup from tests.conftest import Celery4WorkerContainer from tests.conftest import Celery5WorkerContainer from tests.tasks import identity diff --git a/tests/integration/containers/test_container.py b/tests/integration/api/test_container.py similarity index 100% rename from tests/integration/containers/test_container.py rename to tests/integration/api/test_container.py diff --git a/tests/integration/setup/test_setup.py b/tests/integration/api/test_setup.py similarity index 94% rename from tests/integration/setup/test_setup.py rename to tests/integration/api/test_setup.py index 7d36b77b..4832b28d 100644 --- a/tests/integration/setup/test_setup.py +++ b/tests/integration/api/test_setup.py @@ -2,9 +2,9 @@ from celery import Celery from pytest_docker_tools.wrappers.container import wait_for_callable +from pytest_celery import CeleryTestSetup +from pytest_celery import CeleryTestWorker from pytest_celery import defaults -from pytest_celery.api.components.worker.node import CeleryTestWorker -from pytest_celery.api.setup import CeleryTestSetup from tests.tasks import identity diff --git a/tests/integration/api/test_worker.py b/tests/integration/api/test_worker.py index 8256e923..bf1eb235 100644 --- a/tests/integration/api/test_worker.py +++ b/tests/integration/api/test_worker.py @@ -4,8 +4,8 @@ from pytest_celery import CeleryTestWorker from pytest_celery import CeleryWorkerCluster +from pytest_celery import CeleryWorkerContainer from pytest_celery import defaults -from pytest_celery.containers.worker import CeleryWorkerContainer @pytest.mark.parametrize("node", [lazy_fixture(defaults.CELERY_WORKER)]) diff --git a/tests/integration/components/test_rabbitmq.py b/tests/integration/components/test_rabbitmq.py deleted file mode 100644 index 2e842cc5..00000000 --- a/tests/integration/components/test_rabbitmq.py +++ /dev/null @@ -1,11 +0,0 @@ -import pytest -from pytest_lazyfixture import lazy_fixture - -from pytest_celery import RabbitMQTestBroker -from pytest_celery import defaults - - -@pytest.mark.parametrize("node", [lazy_fixture(defaults.CELERY_RABBITMQ_BROKER)]) -class test_rabbitmq_test_broker: - def test_ready(self, node: RabbitMQTestBroker): - assert node.ready() diff --git a/tests/integration/components/test_worker.py b/tests/integration/components/test_worker.py deleted file mode 100644 index cd04c078..00000000 --- a/tests/integration/components/test_worker.py +++ /dev/null @@ -1,15 +0,0 @@ -import pytest -from celery import Celery -from pytest_lazyfixture import lazy_fixture - -from pytest_celery import defaults -from pytest_celery.api.components.worker.node import CeleryTestWorker - - -@pytest.mark.parametrize("node", [lazy_fixture(defaults.CELERY_SETUP_WORKER)]) -class test_base_test_worker: - def test_ready(self, node: CeleryTestWorker): - assert node.ready() - - def test_app(self, node: CeleryTestWorker, celery_setup_app: Celery): - assert node.app is celery_setup_app diff --git a/tests/integration/conftest.py b/tests/integration/conftest.py index 3852a8c5..7c32108e 100644 --- a/tests/integration/conftest.py +++ b/tests/integration/conftest.py @@ -6,8 +6,8 @@ from pytest_docker_tools import container from pytest_docker_tools import fxtr +from pytest_celery import CeleryWorkerContainer from pytest_celery import defaults -from pytest_celery.containers.worker import CeleryWorkerContainer class IntegrationWorkerContainer(CeleryWorkerContainer): @@ -40,7 +40,7 @@ def default_worker_container_session_cls() -> Type[CeleryWorkerContainer]: integration_tests_worker_image = build( - path="src/pytest_celery/components/worker", + path=defaults.WORKER_DOCKERFILE_ROOTDIR, tag="pytest-celery/components/worker:integration", buildargs=IntegrationWorkerContainer.buildargs(), ) @@ -49,7 +49,7 @@ def default_worker_container_session_cls() -> Type[CeleryWorkerContainer]: default_worker_container = container( image="{integration_tests_worker_image.id}", environment=fxtr("default_worker_env"), - network="{DEFAULT_NETWORK.name}", + network="{default_pytest_celery_network.name}", volumes={"{default_worker_volume.name}": defaults.DEFAULT_WORKER_VOLUME}, wrapper_class=IntegrationWorkerContainer, timeout=defaults.DEFAULT_WORKER_CONTAINER_TIMEOUT, diff --git a/tests/integration/containers/test_redis.py b/tests/integration/containers/test_redis.py deleted file mode 100644 index 33ab2df0..00000000 --- a/tests/integration/containers/test_redis.py +++ /dev/null @@ -1,15 +0,0 @@ -import pytest -from pytest_lazyfixture import lazy_fixture - -from pytest_celery import RedisContainer -from pytest_celery import defaults - - -@pytest.mark.parametrize("container", lazy_fixture(defaults.ALL_REDIS_FIXTURES)) -class test_redis_container: - def test_client(self, container: RedisContainer): - assert container.client - assert container.client.ping() - assert container.client.set("ready", "1") - assert container.client.get("ready") == "1" - assert container.client.delete("ready") diff --git a/tests/integration/vendors/__init__.py b/tests/integration/vendors/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/integration/containers/test_rabbitmq.py b/tests/integration/vendors/test_rabbitmq.py similarity index 66% rename from tests/integration/containers/test_rabbitmq.py rename to tests/integration/vendors/test_rabbitmq.py index fe60a2bd..15e0e3ee 100644 --- a/tests/integration/containers/test_rabbitmq.py +++ b/tests/integration/vendors/test_rabbitmq.py @@ -3,6 +3,7 @@ from pytest_lazyfixture import lazy_fixture from pytest_celery import RabbitMQContainer +from pytest_celery import RabbitMQTestBroker from pytest_celery import defaults @@ -15,3 +16,9 @@ def test_client(self, container: RabbitMQContainer): assert c.connect() finally: c.release() + + +@pytest.mark.parametrize("node", [lazy_fixture(defaults.CELERY_RABBITMQ_BROKER)]) +class test_rabbitmq_test_broker: + def test_ready(self, node: RabbitMQTestBroker): + assert node.ready() diff --git a/tests/integration/components/test_redis.py b/tests/integration/vendors/test_redis.py similarity index 56% rename from tests/integration/components/test_redis.py rename to tests/integration/vendors/test_redis.py index 69459abd..cd014166 100644 --- a/tests/integration/components/test_redis.py +++ b/tests/integration/vendors/test_redis.py @@ -1,11 +1,22 @@ import pytest from pytest_lazyfixture import lazy_fixture +from pytest_celery import RedisContainer from pytest_celery import RedisTestBackend from pytest_celery import RedisTestBroker from pytest_celery import defaults +@pytest.mark.parametrize("container", lazy_fixture(defaults.ALL_REDIS_FIXTURES)) +class test_redis_container: + def test_client(self, container: RedisContainer): + assert container.client + assert container.client.ping() + assert container.client.set("ready", "1") + assert container.client.get("ready") == "1" + assert container.client.delete("ready") + + @pytest.mark.parametrize("node", [lazy_fixture(defaults.CELERY_REDIS_BACKEND)]) class test_redis_test_backend: def test_ready(self, node: RedisTestBackend): diff --git a/tests/integration/containers/test_worker.py b/tests/integration/vendors/test_worker.py similarity index 54% rename from tests/integration/containers/test_worker.py rename to tests/integration/vendors/test_worker.py index 0ddc252f..fb3a6532 100644 --- a/tests/integration/containers/test_worker.py +++ b/tests/integration/vendors/test_worker.py @@ -1,6 +1,8 @@ import pytest +from celery import Celery from pytest_lazyfixture import lazy_fixture +from pytest_celery import CeleryTestWorker from pytest_celery import CeleryWorkerContainer from pytest_celery import defaults @@ -10,3 +12,12 @@ class test_celery_worker_container: def test_client(self, container: CeleryWorkerContainer): assert container.client assert container.client == container, "Check tests/conftest.py/WorkerContainer.client" + + +@pytest.mark.parametrize("node", [lazy_fixture(defaults.CELERY_SETUP_WORKER)]) +class test_base_test_worker: + def test_ready(self, node: CeleryTestWorker): + assert node.ready() + + def test_app(self, node: CeleryTestWorker, celery_setup_app: Celery): + assert node.app is celery_setup_app diff --git a/tests/smoke/acceptance/conftest.py b/tests/smoke/acceptance/conftest.py index 1e0ba94c..9d766998 100644 --- a/tests/smoke/acceptance/conftest.py +++ b/tests/smoke/acceptance/conftest.py @@ -2,8 +2,8 @@ import pytest -from pytest_celery.api.components.worker.cluster import CeleryWorkerCluster -from pytest_celery.api.components.worker.node import CeleryTestWorker +from pytest_celery import CeleryTestWorker +from pytest_celery import CeleryWorkerCluster @pytest.fixture( diff --git a/tests/smoke/acceptance/test_canvas.py b/tests/smoke/acceptance/test_canvas.py index 70c23f8e..6fa9c74f 100644 --- a/tests/smoke/acceptance/test_canvas.py +++ b/tests/smoke/acceptance/test_canvas.py @@ -6,8 +6,8 @@ from pytest_docker_tools.wrappers.container import wait_for_callable from pytest_celery import CeleryTestSetup +from pytest_celery import CeleryTestWorker from pytest_celery import defaults -from pytest_celery.api.components.worker.node import CeleryTestWorker from tests.smoke.tasks import add from tests.tasks import identity diff --git a/tests/smoke/conftest.py b/tests/smoke/conftest.py index ebe6c324..3bf9dd1d 100644 --- a/tests/smoke/conftest.py +++ b/tests/smoke/conftest.py @@ -6,8 +6,8 @@ from pytest_docker_tools import container from pytest_docker_tools import fxtr +from pytest_celery import CeleryWorkerContainer from pytest_celery import defaults -from pytest_celery.containers.worker import CeleryWorkerContainer @pytest.fixture @@ -47,7 +47,7 @@ def default_worker_container_session_cls() -> Type[CeleryWorkerContainer]: smoke_tests_worker_image = build( - path="src/pytest_celery/components/worker", + path=defaults.WORKER_DOCKERFILE_ROOTDIR, tag="pytest-celery/components/worker:smoke", buildargs=SmokeWorkerContainer.buildargs(), ) @@ -56,7 +56,7 @@ def default_worker_container_session_cls() -> Type[CeleryWorkerContainer]: default_worker_container = container( image="{smoke_tests_worker_image.id}", # TODO: Use fixture to avoid defining default_worker_container again environment=fxtr("default_worker_env"), - network="{DEFAULT_NETWORK.name}", + network="{default_pytest_celery_network.name}", volumes={"{default_worker_volume.name}": defaults.DEFAULT_WORKER_VOLUME}, wrapper_class=SmokeWorkerContainer, timeout=defaults.DEFAULT_WORKER_CONTAINER_TIMEOUT, diff --git a/tests/smoke/test_failover.py b/tests/smoke/test_failover.py index e9725a33..26712bd3 100644 --- a/tests/smoke/test_failover.py +++ b/tests/smoke/test_failover.py @@ -4,18 +4,18 @@ from pytest_docker_tools import container from pytest_docker_tools import fxtr +from pytest_celery import CeleryBrokerCluster from pytest_celery import CeleryTestSetup +from pytest_celery import RabbitMQContainer +from pytest_celery import RabbitMQTestBroker from pytest_celery import defaults -from pytest_celery.api.components.broker.cluster import CeleryBrokerCluster -from pytest_celery.components.broker.rabbitmq.api import RabbitMQTestBroker -from pytest_celery.containers.rabbitmq import RabbitMQContainer from tests.tasks import identity failover_broker = container( image="{default_rabbitmq_broker_image}", ports=fxtr("default_rabbitmq_broker_ports"), environment=fxtr("default_rabbitmq_broker_env"), - network="{DEFAULT_NETWORK.name}", + network="{default_pytest_celery_network.name}", wrapper_class=RabbitMQContainer, timeout=defaults.RABBITMQ_CONTAINER_TIMEOUT, ) diff --git a/tests/smoke/test_signals.py b/tests/smoke/test_signals.py index d5967b38..42542523 100644 --- a/tests/smoke/test_signals.py +++ b/tests/smoke/test_signals.py @@ -4,8 +4,8 @@ from pytest_docker_tools.wrappers.container import wait_for_callable from pytest_celery import CeleryTestSetup +from pytest_celery import CeleryTestWorker from pytest_celery import defaults -from pytest_celery.api.components.worker.node import CeleryTestWorker from tests.tasks import identity diff --git a/tests/unit/containers/test_container.py b/tests/unit/api/test_container.py similarity index 100% rename from tests/unit/containers/test_container.py rename to tests/unit/api/test_container.py diff --git a/tests/unit/setup/test_setup.py b/tests/unit/api/test_setup.py similarity index 83% rename from tests/unit/setup/test_setup.py rename to tests/unit/api/test_setup.py index 384096c3..35d42ad7 100644 --- a/tests/unit/setup/test_setup.py +++ b/tests/unit/api/test_setup.py @@ -1,9 +1,9 @@ from celery import Celery -from pytest_celery.api.components.backend.node import CeleryTestBackend -from pytest_celery.api.components.broker.node import CeleryTestBroker -from pytest_celery.api.components.worker.node import CeleryTestWorker -from pytest_celery.api.setup import CeleryTestSetup +from pytest_celery import CeleryTestBackend +from pytest_celery import CeleryTestBroker +from pytest_celery import CeleryTestSetup +from pytest_celery import CeleryTestWorker class test_celery_test_setup_unit: diff --git a/tests/unit/components/test_rabbitmq.py b/tests/unit/components/test_rabbitmq.py deleted file mode 100644 index 9e5edb36..00000000 --- a/tests/unit/components/test_rabbitmq.py +++ /dev/null @@ -1,6 +0,0 @@ -from pytest_celery import RabbitMQTestBroker - - -class test_rabbitmq_test_broker: - def test_ready(self, celery_rabbitmq_broker: RabbitMQTestBroker): - assert celery_rabbitmq_broker.ready() diff --git a/tests/unit/components/test_redis.py b/tests/unit/components/test_redis.py deleted file mode 100644 index d2663200..00000000 --- a/tests/unit/components/test_redis.py +++ /dev/null @@ -1,12 +0,0 @@ -from pytest_celery import RedisTestBackend -from pytest_celery import RedisTestBroker - - -class test_redis_test_backend: - def test_ready(self, celery_redis_backend: RedisTestBackend): - assert celery_redis_backend.ready() - - -class test_redis_test_broker: - def test_ready(self, celery_redis_broker: RedisTestBroker): - assert celery_redis_broker.ready() diff --git a/tests/unit/components/test_worker.py b/tests/unit/components/test_worker.py deleted file mode 100644 index 2caaf292..00000000 --- a/tests/unit/components/test_worker.py +++ /dev/null @@ -1,11 +0,0 @@ -from celery import Celery - -from pytest_celery.api.components.worker.node import CeleryTestWorker - - -class test_base_test_worker: - def test_ready(self, celery_setup_worker: CeleryTestWorker): - assert celery_setup_worker.ready() - - def test_app(self, celery_setup_worker: CeleryTestWorker, celery_setup_app: Celery): - assert celery_setup_worker.app is celery_setup_app diff --git a/tests/unit/conftest.py b/tests/unit/conftest.py index 4ba56460..c0463c81 100644 --- a/tests/unit/conftest.py +++ b/tests/unit/conftest.py @@ -10,14 +10,14 @@ from pytest_docker_tools import network from pytest_docker_tools import volume +from pytest_celery import CeleryTestWorker +from pytest_celery import CeleryWorkerContainer +from pytest_celery import RabbitMQContainer +from pytest_celery import RabbitMQTestBroker +from pytest_celery import RedisContainer +from pytest_celery import RedisTestBackend +from pytest_celery import RedisTestBroker from pytest_celery import defaults -from pytest_celery.api.components.worker.node import CeleryTestWorker -from pytest_celery.components.backend.redis.api import RedisTestBackend -from pytest_celery.components.broker.rabbitmq.api import RabbitMQTestBroker -from pytest_celery.components.broker.redis.api import RedisTestBroker -from pytest_celery.containers.rabbitmq import RabbitMQContainer -from pytest_celery.containers.redis import RedisContainer -from pytest_celery.containers.worker import CeleryWorkerContainer from tests.unit.docker.api import UnitTestContainer from tests.unit.docker.api import UnitWorkerContainer @@ -42,7 +42,7 @@ ) celery_unit_worker_image = build( - path="src/pytest_celery/components/worker", + path=defaults.WORKER_DOCKERFILE_ROOTDIR, tag="pytest-celery/components/worker:unit", buildargs=UnitWorkerContainer.buildargs(), ) diff --git a/tests/unit/docker/api.py b/tests/unit/docker/api.py index 6cb27a1a..638d640f 100644 --- a/tests/unit/docker/api.py +++ b/tests/unit/docker/api.py @@ -1,7 +1,7 @@ from typing import Any from pytest_celery import CeleryTestContainer -from pytest_celery.containers.worker import CeleryWorkerContainer +from pytest_celery import CeleryWorkerContainer class UnitTestContainer(CeleryTestContainer): diff --git a/tests/unit/vendors/__init__.py b/tests/unit/vendors/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/unit/containers/test_rabbitmq.py b/tests/unit/vendors/test_rabbitmq.py similarity index 81% rename from tests/unit/containers/test_rabbitmq.py rename to tests/unit/vendors/test_rabbitmq.py index 4f41a4c1..809c5c46 100644 --- a/tests/unit/containers/test_rabbitmq.py +++ b/tests/unit/vendors/test_rabbitmq.py @@ -1,4 +1,5 @@ from pytest_celery import RabbitMQContainer +from pytest_celery import RabbitMQTestBroker from pytest_celery import defaults @@ -18,3 +19,8 @@ def test_env(self, rabbitmq_test_container: RabbitMQContainer): def test_image(self, rabbitmq_test_container: RabbitMQContainer): assert rabbitmq_test_container.image() == defaults.RABBITMQ_IMAGE + + +class test_rabbitmq_test_broker: + def test_ready(self, celery_rabbitmq_broker: RabbitMQTestBroker): + assert celery_rabbitmq_broker.ready() diff --git a/tests/unit/containers/test_redis.py b/tests/unit/vendors/test_redis.py similarity index 69% rename from tests/unit/containers/test_redis.py rename to tests/unit/vendors/test_redis.py index 1b996e82..53cd0e09 100644 --- a/tests/unit/containers/test_redis.py +++ b/tests/unit/vendors/test_redis.py @@ -1,4 +1,6 @@ from pytest_celery import RedisContainer +from pytest_celery import RedisTestBackend +from pytest_celery import RedisTestBroker from pytest_celery import defaults @@ -18,3 +20,13 @@ def test_env(self, redis_test_container: RedisContainer): def test_image(self, redis_test_container: RedisContainer): assert redis_test_container.image() == defaults.REDIS_IMAGE + + +class test_redis_test_backend: + def test_ready(self, celery_redis_backend: RedisTestBackend): + assert celery_redis_backend.ready() + + +class test_redis_test_broker: + def test_ready(self, celery_redis_broker: RedisTestBroker): + assert celery_redis_broker.ready() diff --git a/tests/unit/containers/test_worker.py b/tests/unit/vendors/test_worker.py similarity index 84% rename from tests/unit/containers/test_worker.py rename to tests/unit/vendors/test_worker.py index 78176d36..4055295b 100644 --- a/tests/unit/containers/test_worker.py +++ b/tests/unit/vendors/test_worker.py @@ -1,7 +1,9 @@ import inspect import pytest +from celery import Celery +from pytest_celery import CeleryTestWorker from pytest_celery import CeleryWorkerContainer from pytest_celery import defaults @@ -43,3 +45,11 @@ def test_initial_content_import_formatting(self, worker_test_container: CeleryWo def test_task_modules(self, worker_test_container: CeleryWorkerContainer): assert worker_test_container.tasks_modules() == set() + + +class test_base_test_worker: + def test_ready(self, celery_setup_worker: CeleryTestWorker): + assert celery_setup_worker.ready() + + def test_app(self, celery_setup_worker: CeleryTestWorker, celery_setup_app: Celery): + assert celery_setup_worker.app is celery_setup_app diff --git a/tox.ini b/tox.ini index db71f628..08c7f337 100644 --- a/tox.ini +++ b/tox.ini @@ -44,11 +44,17 @@ basepython = usedevelop = True [testenv:xdist] +setenv = + PYTHONUNBUFFERED = 1 + PYTHONDONTWRITEBYTECODE = 1 commands = python3 -m pytest tests --exitfirst -n auto \ --reruns 5 --rerun-except AssertionError {posargs} [testenv:parallel] +setenv = + PYTHONUNBUFFERED = 1 + PYTHONDONTWRITEBYTECODE = 1 commands = tox -e py311-unit,py311-integration,py311-smoke -p auto -o -- --exitfirst -n auto \ --reruns 10 --reruns-delay 15 --rerun-except AssertionError {posargs}