From 36a28c0b7d9f8d2c528c9b8ef5b7c5790da0b74e Mon Sep 17 00:00:00 2001 From: Emmanuel Hadoux Date: Wed, 12 Mar 2025 17:27:49 +0000 Subject: [PATCH 1/9] feat!: move to poetry and remove ID pool feature --- .github/workflows/release-please.yml | 15 +- .github/workflows/test.yml | 11 +- .github/workflows/update-doc.yml | 8 +- LICENSE.md | 2 +- docs_source/conf.py | 7 +- docs_source/installation.rst | 2 +- poetry.lock | 1242 ++++++++++++++++++++++++++ pyproject.toml | 35 + requirements.txt | 62 -- scribeauth/__init__.py | 2 + scribeauth/__main__.py | 9 +- scribeauth/scribeauth.py | 227 +---- setup.py | 29 - tests/test_scribeauth.py | 139 +-- 14 files changed, 1394 insertions(+), 396 deletions(-) create mode 100644 poetry.lock create mode 100644 pyproject.toml delete mode 100644 requirements.txt delete mode 100644 setup.py diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index 970e501..254d69f 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -17,16 +17,15 @@ jobs: id: release - uses: actions/checkout@v4 if: ${{ steps.release.outputs.release_created }} + - name: Install poetry + if: ${{ steps.release.outputs.release_created }} + run: pipx install poetry - uses: actions/setup-python@v5 if: ${{ steps.release.outputs.release_created }} with: - python-version: '3.10' - cache: 'pip' - - run: pip install -r requirements.txt - if: ${{ steps.release.outputs.release_created }} - - run: python3 -m build + python-version: '3.11' + cache: 'poetry' + - run: poetry install --without dev if: ${{ steps.release.outputs.release_created }} - - uses: pypa/gh-action-pypi-publish@release/v1 + - run: poetry publish --build --username __token__ --password ${{ secrets.PYPI_PASSWORD }} if: ${{ steps.release.outputs.release_created }} - with: - password: ${{ secrets.PYPI_PASSWORD }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 35c9257..3f6a6d0 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -15,14 +15,16 @@ jobs: steps: - name: Clone uses: actions/checkout@v4 + - name: Install poetry + run: pipx install poetry - uses: actions/setup-python@v5 with: - python-version: '3.10' - cache: 'pip' + python-version: '3.11' + cache: 'poetry' - name: Install deps - run: pip install -r requirements.txt + run: poetry install - name: Run tests - run: python -m coverage run -m pytest + run: poetry run pytest env: CLIENT_ID: ${{ secrets.CLIENT_ID }} USERNAME: ${{ secrets.USERNAME }} @@ -30,7 +32,6 @@ jobs: PASSWORD: ${{ secrets.PASSWORD }} OTPCODE: ${{ secrets.OTPCODE }} USER_POOL_ID: ${{ secrets.USER_POOL_ID }} - FEDERATED_POOL_ID: ${{ secrets.FEDERATED_POOL_ID }} - name: Publish code coverage uses: paambaati/codeclimate-action@v6.0.0 env: diff --git a/.github/workflows/update-doc.yml b/.github/workflows/update-doc.yml index 9715957..70b9a58 100644 --- a/.github/workflows/update-doc.yml +++ b/.github/workflows/update-doc.yml @@ -11,8 +11,14 @@ jobs: steps: - name: Checkout uses: actions/checkout@v4 + - name: Install poetry + run: pipx install poetry + - uses: actions/setup-python@v5 + with: + python-version: '3.11' + cache: 'poetry' - name: Install deps - run: pip install -r requirements.txt + run: poetry install - name: Create md files run: sphinx-build -M markdown ./docs_source ./docs - name: Update docs website diff --git a/LICENSE.md b/LICENSE.md index d238010..6378188 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2022 Scribe Labs Limited +Copyright (c) 2025 Scribe Labs Limited Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/docs_source/conf.py b/docs_source/conf.py index e032a09..c261a7d 100644 --- a/docs_source/conf.py +++ b/docs_source/conf.py @@ -6,10 +6,13 @@ # -- Project information ----------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information +import json + project = "Scribe Auth" -copyright = "2023, Scribe Labs Limited" +copyright = "2025, Scribe Labs Limited" author = "Ailin Venerus" -release = "1.0.2" +with open("../.release-please-manifest.json") as f: + release = json.load(f)["."] # -- General configuration --------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration diff --git a/docs_source/installation.rst b/docs_source/installation.rst index 809a086..f31b37c 100644 --- a/docs_source/installation.rst +++ b/docs_source/installation.rst @@ -7,7 +7,7 @@ To use Scribe Auth, first install it using pip: (.venv) $ pip install scribeauth -This library requires Python >= 3.10 that supports typings. +This library requires Python >= 3.11 that supports typings. -------------- diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 0000000..d2d45b1 --- /dev/null +++ b/poetry.lock @@ -0,0 +1,1242 @@ +# This file is automatically @generated by Poetry 2.0.1 and should not be changed by hand. + +[[package]] +name = "alabaster" +version = "1.0.0" +description = "A light, configurable Sphinx theme" +optional = false +python-versions = ">=3.10" +groups = ["dev"] +files = [ + {file = "alabaster-1.0.0-py3-none-any.whl", hash = "sha256:fc6786402dc3fcb2de3cabd5fe455a2db534b371124f1f21de8731783dec828b"}, + {file = "alabaster-1.0.0.tar.gz", hash = "sha256:c00dca57bca26fa62a6d7d0a9fcce65f3e026e9bfe33e9c538fd3fbb2144fd9e"}, +] + +[[package]] +name = "babel" +version = "2.17.0" +description = "Internationalization utilities" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2"}, + {file = "babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d"}, +] + +[package.extras] +dev = ["backports.zoneinfo", "freezegun (>=1.0,<2.0)", "jinja2 (>=3.0)", "pytest (>=6.0)", "pytest-cov", "pytz", "setuptools", "tzdata"] + +[[package]] +name = "boto3" +version = "1.37.11" +description = "The AWS SDK for Python" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "boto3-1.37.11-py3-none-any.whl", hash = "sha256:da6c22fc8a7e9bca5d7fc465a877ac3d45b6b086d776bd1a6c55bdde60523741"}, + {file = "boto3-1.37.11.tar.gz", hash = "sha256:8eec08363ef5db05c2fbf58e89f0c0de6276cda2fdce01e76b3b5f423cd5c0f4"}, +] + +[package.dependencies] +botocore = ">=1.37.11,<1.38.0" +jmespath = ">=0.7.1,<2.0.0" +s3transfer = ">=0.11.0,<0.12.0" + +[package.extras] +crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] + +[[package]] +name = "botocore" +version = "1.37.11" +description = "Low-level, data-driven core of boto 3." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "botocore-1.37.11-py3-none-any.whl", hash = "sha256:02505309b1235f9f15a6da79103ca224b3f3dc5f6a62f8630fbb2c6ed05e2da8"}, + {file = "botocore-1.37.11.tar.gz", hash = "sha256:72eb3a9a58b064be26ba154e5e56373633b58f951941c340ace0d379590d98b5"}, +] + +[package.dependencies] +jmespath = ">=0.7.1,<2.0.0" +python-dateutil = ">=2.1,<3.0.0" +urllib3 = {version = ">=1.25.4,<2.2.0 || >2.2.0,<3", markers = "python_version >= \"3.10\""} + +[package.extras] +crt = ["awscrt (==0.23.8)"] + +[[package]] +name = "botocore-stubs" +version = "1.37.11" +description = "Type annotations and code completion for botocore" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "botocore_stubs-1.37.11-py3-none-any.whl", hash = "sha256:bec458a0d054892cdf82466b4d075f30a36fa03ce34f9becbcace5f36ec674bf"}, + {file = "botocore_stubs-1.37.11.tar.gz", hash = "sha256:9b89ba9a98eb9f088a5f82c52488013858092777c17b56265574bbf2d21da422"}, +] + +[package.dependencies] +types-awscrt = "*" + +[package.extras] +botocore = ["botocore"] + +[[package]] +name = "certifi" +version = "2025.1.31" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +groups = ["dev"] +files = [ + {file = "certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe"}, + {file = "certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651"}, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.1" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7" +groups = ["dev"] +files = [ + {file = "charset_normalizer-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-win32.whl", hash = "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-win32.whl", hash = "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-win32.whl", hash = "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-win32.whl", hash = "sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-win32.whl", hash = "sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-win32.whl", hash = "sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765"}, + {file = "charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85"}, + {file = "charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3"}, +] + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["dev"] +markers = "sys_platform == \"win32\"" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "docutils" +version = "0.21.2" +description = "Docutils -- Python Documentation Utilities" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "docutils-0.21.2-py3-none-any.whl", hash = "sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2"}, + {file = "docutils-0.21.2.tar.gz", hash = "sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f"}, +] + +[[package]] +name = "dotenv" +version = "0.9.9" +description = "Deprecated package" +optional = false +python-versions = "*" +groups = ["dev"] +files = [ + {file = "dotenv-0.9.9-py2.py3-none-any.whl", hash = "sha256:29cf74a087b31dafdb5a446b6d7e11cbce8ed2741540e2339c69fbef92c94ce9"}, +] + +[package.dependencies] +python-dotenv = "*" + +[[package]] +name = "idna" +version = "3.10" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.6" +groups = ["dev"] +files = [ + {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, + {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, +] + +[package.extras] +all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] + +[[package]] +name = "imagesize" +version = "1.4.1" +description = "Getting image size from png/jpeg/jpeg2000/gif file" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +groups = ["dev"] +files = [ + {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, + {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, +] + +[[package]] +name = "iniconfig" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" +optional = false +python-versions = ">=3.7" +groups = ["dev"] +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] + +[[package]] +name = "jinja2" +version = "3.1.6" +description = "A very fast and expressive template engine." +optional = false +python-versions = ">=3.7" +groups = ["dev"] +files = [ + {file = "jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"}, + {file = "jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d"}, +] + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "jmespath" +version = "1.0.1" +description = "JSON Matching Expressions" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "jmespath-1.0.1-py3-none-any.whl", hash = "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980"}, + {file = "jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe"}, +] + +[[package]] +name = "markupsafe" +version = "3.0.2" +description = "Safely add untrusted strings to HTML/XML markup." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-win32.whl", hash = "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a"}, + {file = "markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0"}, +] + +[[package]] +name = "packaging" +version = "24.2" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, + {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, +] + +[[package]] +name = "pluggy" +version = "1.5.0" +description = "plugin and hook calling mechanisms for python" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, + {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, +] + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "pygments" +version = "2.19.1" +description = "Pygments is a syntax highlighting package written in Python." +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c"}, + {file = "pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f"}, +] + +[package.extras] +windows-terminal = ["colorama (>=0.4.6)"] + +[[package]] +name = "pyotp" +version = "2.9.0" +description = "Python One Time Password Library" +optional = false +python-versions = ">=3.7" +groups = ["dev"] +files = [ + {file = "pyotp-2.9.0-py3-none-any.whl", hash = "sha256:81c2e5865b8ac55e825b0358e496e1d9387c811e85bb40e71a3b29b288963612"}, + {file = "pyotp-2.9.0.tar.gz", hash = "sha256:346b6642e0dbdde3b4ff5a930b664ca82abfa116356ed48cc42c7d6590d36f63"}, +] + +[package.extras] +test = ["coverage", "mypy", "ruff", "wheel"] + +[[package]] +name = "pytest" +version = "8.3.5" +description = "pytest: simple powerful testing with Python" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "pytest-8.3.5-py3-none-any.whl", hash = "sha256:c69214aa47deac29fad6c2a4f590b9c4a9fdb16a403176fe154b79c0b4d4d820"}, + {file = "pytest-8.3.5.tar.gz", hash = "sha256:f4efe70cc14e511565ac476b57c279e12a855b11f48f212af1080ef2263d3845"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=1.5,<2" + +[package.extras] +dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["main"] +files = [ + {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, + {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, +] + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "python-dotenv" +version = "1.0.1" +description = "Read key-value pairs from a .env file and set them as environment variables" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "python-dotenv-1.0.1.tar.gz", hash = "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca"}, + {file = "python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a"}, +] + +[package.extras] +cli = ["click (>=5.0)"] + +[[package]] +name = "requests" +version = "2.32.3" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, + {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "roman-numerals-py" +version = "3.1.0" +description = "Manipulate well-formed Roman numerals" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "roman_numerals_py-3.1.0-py3-none-any.whl", hash = "sha256:9da2ad2fb670bcf24e81070ceb3be72f6c11c440d73bd579fbeca1e9f330954c"}, + {file = "roman_numerals_py-3.1.0.tar.gz", hash = "sha256:be4bf804f083a4ce001b5eb7e3c0862479d10f94c936f6c4e5f250aa5ff5bd2d"}, +] + +[package.extras] +lint = ["mypy (==1.15.0)", "pyright (==1.1.394)", "ruff (==0.9.7)"] +test = ["pytest (>=8)"] + +[[package]] +name = "s3transfer" +version = "0.11.4" +description = "An Amazon S3 Transfer Manager" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "s3transfer-0.11.4-py3-none-any.whl", hash = "sha256:ac265fa68318763a03bf2dc4f39d5cbd6a9e178d81cc9483ad27da33637e320d"}, + {file = "s3transfer-0.11.4.tar.gz", hash = "sha256:559f161658e1cf0a911f45940552c696735f5c74e64362e515f333ebed87d679"}, +] + +[package.dependencies] +botocore = ">=1.37.4,<2.0a.0" + +[package.extras] +crt = ["botocore[crt] (>=1.37.4,<2.0a.0)"] + +[[package]] +name = "six" +version = "1.17.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["main"] +files = [ + {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, + {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, +] + +[[package]] +name = "snowballstemmer" +version = "2.2.0" +description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." +optional = false +python-versions = "*" +groups = ["dev"] +files = [ + {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, + {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, +] + +[[package]] +name = "sphinx" +version = "8.2.3" +description = "Python documentation generator" +optional = false +python-versions = ">=3.11" +groups = ["dev"] +files = [ + {file = "sphinx-8.2.3-py3-none-any.whl", hash = "sha256:4405915165f13521d875a8c29c8970800a0141c14cc5416a38feca4ea5d9b9c3"}, + {file = "sphinx-8.2.3.tar.gz", hash = "sha256:398ad29dee7f63a75888314e9424d40f52ce5a6a87ae88e7071e80af296ec348"}, +] + +[package.dependencies] +alabaster = ">=0.7.14" +babel = ">=2.13" +colorama = {version = ">=0.4.6", markers = "sys_platform == \"win32\""} +docutils = ">=0.20,<0.22" +imagesize = ">=1.3" +Jinja2 = ">=3.1" +packaging = ">=23.0" +Pygments = ">=2.17" +requests = ">=2.30.0" +roman-numerals-py = ">=1.0.0" +snowballstemmer = ">=2.2" +sphinxcontrib-applehelp = ">=1.0.7" +sphinxcontrib-devhelp = ">=1.0.6" +sphinxcontrib-htmlhelp = ">=2.0.6" +sphinxcontrib-jsmath = ">=1.0.1" +sphinxcontrib-qthelp = ">=1.0.6" +sphinxcontrib-serializinghtml = ">=1.1.9" + +[package.extras] +docs = ["sphinxcontrib-websupport"] +lint = ["betterproto (==2.0.0b6)", "mypy (==1.15.0)", "pypi-attestations (==0.0.21)", "pyright (==1.1.395)", "pytest (>=8.0)", "ruff (==0.9.9)", "sphinx-lint (>=0.9)", "types-Pillow (==10.2.0.20240822)", "types-Pygments (==2.19.0.20250219)", "types-colorama (==0.4.15.20240311)", "types-defusedxml (==0.7.0.20240218)", "types-docutils (==0.21.0.20241128)", "types-requests (==2.32.0.20241016)", "types-urllib3 (==1.26.25.14)"] +test = ["cython (>=3.0)", "defusedxml (>=0.7.1)", "pytest (>=8.0)", "pytest-xdist[psutil] (>=3.4)", "setuptools (>=70.0)", "typing_extensions (>=4.9)"] + +[[package]] +name = "sphinx-markdown-builder" +version = "0.6.8" +description = "A Sphinx extension to add markdown generation support." +optional = false +python-versions = ">=3.7" +groups = ["dev"] +files = [ + {file = "sphinx_markdown_builder-0.6.8-py3-none-any.whl", hash = "sha256:f04ab42d52449363228b9104569c56b778534f9c41a168af8cfc721a1e0e3edc"}, + {file = "sphinx_markdown_builder-0.6.8.tar.gz", hash = "sha256:6141b566bf18dd1cd515a0a90efd91c6c4d10fc638554fab2fd19cba66543dd7"}, +] + +[package.dependencies] +docutils = "*" +sphinx = ">=5.1.0" +tabulate = "*" + +[package.extras] +dev = ["black", "bumpver", "coveralls", "flake8", "isort", "pip-tools", "pylint", "pytest", "pytest-cov", "sphinx (>=5.3.0)", "sphinxcontrib-plantuml", "sphinxcontrib.httpdomain"] + +[[package]] +name = "sphinxcontrib-applehelp" +version = "2.0.0" +description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "sphinxcontrib_applehelp-2.0.0-py3-none-any.whl", hash = "sha256:4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5"}, + {file = "sphinxcontrib_applehelp-2.0.0.tar.gz", hash = "sha256:2f29ef331735ce958efa4734873f084941970894c6090408b079c61b2e1c06d1"}, +] + +[package.extras] +lint = ["mypy", "ruff (==0.5.5)", "types-docutils"] +standalone = ["Sphinx (>=5)"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-devhelp" +version = "2.0.0" +description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "sphinxcontrib_devhelp-2.0.0-py3-none-any.whl", hash = "sha256:aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2"}, + {file = "sphinxcontrib_devhelp-2.0.0.tar.gz", hash = "sha256:411f5d96d445d1d73bb5d52133377b4248ec79db5c793ce7dbe59e074b4dd1ad"}, +] + +[package.extras] +lint = ["mypy", "ruff (==0.5.5)", "types-docutils"] +standalone = ["Sphinx (>=5)"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-htmlhelp" +version = "2.1.0" +description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl", hash = "sha256:166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8"}, + {file = "sphinxcontrib_htmlhelp-2.1.0.tar.gz", hash = "sha256:c9e2916ace8aad64cc13a0d233ee22317f2b9025b9cf3295249fa985cc7082e9"}, +] + +[package.extras] +lint = ["mypy", "ruff (==0.5.5)", "types-docutils"] +standalone = ["Sphinx (>=5)"] +test = ["html5lib", "pytest"] + +[[package]] +name = "sphinxcontrib-jsmath" +version = "1.0.1" +description = "A sphinx extension which renders display math in HTML via JavaScript" +optional = false +python-versions = ">=3.5" +groups = ["dev"] +files = [ + {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, + {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, +] + +[package.extras] +test = ["flake8", "mypy", "pytest"] + +[[package]] +name = "sphinxcontrib-qthelp" +version = "2.0.0" +description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "sphinxcontrib_qthelp-2.0.0-py3-none-any.whl", hash = "sha256:b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb"}, + {file = "sphinxcontrib_qthelp-2.0.0.tar.gz", hash = "sha256:4fe7d0ac8fc171045be623aba3e2a8f613f8682731f9153bb2e40ece16b9bbab"}, +] + +[package.extras] +lint = ["mypy", "ruff (==0.5.5)", "types-docutils"] +standalone = ["Sphinx (>=5)"] +test = ["defusedxml (>=0.7.1)", "pytest"] + +[[package]] +name = "sphinxcontrib-serializinghtml" +version = "2.0.0" +description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl", hash = "sha256:6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331"}, + {file = "sphinxcontrib_serializinghtml-2.0.0.tar.gz", hash = "sha256:e9d912827f872c029017a53f0ef2180b327c3f7fd23c87229f7a8e8b70031d4d"}, +] + +[package.extras] +lint = ["mypy", "ruff (==0.5.5)", "types-docutils"] +standalone = ["Sphinx (>=5)"] +test = ["pytest"] + +[[package]] +name = "tabulate" +version = "0.9.0" +description = "Pretty-print tabular data" +optional = false +python-versions = ">=3.7" +groups = ["dev"] +files = [ + {file = "tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f"}, + {file = "tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c"}, +] + +[package.extras] +widechars = ["wcwidth"] + +[[package]] +name = "types-awscrt" +version = "0.24.1" +description = "Type annotations and code completion for awscrt" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "types_awscrt-0.24.1-py3-none-any.whl", hash = "sha256:f3f2578ff74a254a79882b95961fb493ba217cebc350b3eb239d1cd948d4d7fa"}, + {file = "types_awscrt-0.24.1.tar.gz", hash = "sha256:fc6eae56f8dc5a3f8cc93cc2c7c332fa82909f8284fbe25e014c575757af397d"}, +] + +[[package]] +name = "types-boto3" +version = "1.37.11" +description = "Type annotations for boto3 1.37.11 generated with mypy-boto3-builder 8.10.0" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "types_boto3-1.37.11-py3-none-any.whl", hash = "sha256:9198951239fce107d1b868ac450dcafe4b22f8212a8ce6ccdccc9856811b1ef7"}, + {file = "types_boto3-1.37.11.tar.gz", hash = "sha256:cb76c347264f72f9e870a01dbc5034e8caad87aa7edce5fe1360e7cc125e33fd"}, +] + +[package.dependencies] +botocore-stubs = "*" +types-boto3-cognito-idp = {version = ">=1.37.0,<1.38.0", optional = true, markers = "extra == \"cognito-idp\""} +types-s3transfer = "*" +typing-extensions = {version = ">=4.1.0", markers = "python_version < \"3.12\""} + +[package.extras] +accessanalyzer = ["types-boto3-accessanalyzer (>=1.37.0,<1.38.0)"] +account = ["types-boto3-account (>=1.37.0,<1.38.0)"] +acm = ["types-boto3-acm (>=1.37.0,<1.38.0)"] +acm-pca = ["types-boto3-acm-pca (>=1.37.0,<1.38.0)"] +all = ["types-boto3-accessanalyzer (>=1.37.0,<1.38.0)", "types-boto3-account (>=1.37.0,<1.38.0)", "types-boto3-acm (>=1.37.0,<1.38.0)", "types-boto3-acm-pca (>=1.37.0,<1.38.0)", "types-boto3-amp (>=1.37.0,<1.38.0)", "types-boto3-amplify (>=1.37.0,<1.38.0)", "types-boto3-amplifybackend (>=1.37.0,<1.38.0)", "types-boto3-amplifyuibuilder (>=1.37.0,<1.38.0)", "types-boto3-apigateway (>=1.37.0,<1.38.0)", "types-boto3-apigatewaymanagementapi (>=1.37.0,<1.38.0)", "types-boto3-apigatewayv2 (>=1.37.0,<1.38.0)", "types-boto3-appconfig (>=1.37.0,<1.38.0)", "types-boto3-appconfigdata (>=1.37.0,<1.38.0)", "types-boto3-appfabric (>=1.37.0,<1.38.0)", "types-boto3-appflow (>=1.37.0,<1.38.0)", "types-boto3-appintegrations (>=1.37.0,<1.38.0)", "types-boto3-application-autoscaling (>=1.37.0,<1.38.0)", "types-boto3-application-insights (>=1.37.0,<1.38.0)", "types-boto3-application-signals (>=1.37.0,<1.38.0)", "types-boto3-applicationcostprofiler (>=1.37.0,<1.38.0)", "types-boto3-appmesh (>=1.37.0,<1.38.0)", "types-boto3-apprunner (>=1.37.0,<1.38.0)", "types-boto3-appstream (>=1.37.0,<1.38.0)", "types-boto3-appsync (>=1.37.0,<1.38.0)", "types-boto3-apptest (>=1.37.0,<1.38.0)", "types-boto3-arc-zonal-shift (>=1.37.0,<1.38.0)", "types-boto3-artifact (>=1.37.0,<1.38.0)", "types-boto3-athena (>=1.37.0,<1.38.0)", "types-boto3-auditmanager (>=1.37.0,<1.38.0)", "types-boto3-autoscaling (>=1.37.0,<1.38.0)", "types-boto3-autoscaling-plans (>=1.37.0,<1.38.0)", "types-boto3-b2bi (>=1.37.0,<1.38.0)", "types-boto3-backup (>=1.37.0,<1.38.0)", "types-boto3-backup-gateway (>=1.37.0,<1.38.0)", "types-boto3-backupsearch (>=1.37.0,<1.38.0)", "types-boto3-batch (>=1.37.0,<1.38.0)", "types-boto3-bcm-data-exports (>=1.37.0,<1.38.0)", "types-boto3-bcm-pricing-calculator (>=1.37.0,<1.38.0)", "types-boto3-bedrock (>=1.37.0,<1.38.0)", "types-boto3-bedrock-agent (>=1.37.0,<1.38.0)", "types-boto3-bedrock-agent-runtime (>=1.37.0,<1.38.0)", "types-boto3-bedrock-data-automation (>=1.37.0,<1.38.0)", "types-boto3-bedrock-data-automation-runtime (>=1.37.0,<1.38.0)", "types-boto3-bedrock-runtime (>=1.37.0,<1.38.0)", "types-boto3-billing (>=1.37.0,<1.38.0)", "types-boto3-billingconductor (>=1.37.0,<1.38.0)", "types-boto3-braket (>=1.37.0,<1.38.0)", "types-boto3-budgets (>=1.37.0,<1.38.0)", "types-boto3-ce (>=1.37.0,<1.38.0)", "types-boto3-chatbot (>=1.37.0,<1.38.0)", "types-boto3-chime (>=1.37.0,<1.38.0)", "types-boto3-chime-sdk-identity (>=1.37.0,<1.38.0)", "types-boto3-chime-sdk-media-pipelines (>=1.37.0,<1.38.0)", "types-boto3-chime-sdk-meetings (>=1.37.0,<1.38.0)", "types-boto3-chime-sdk-messaging (>=1.37.0,<1.38.0)", "types-boto3-chime-sdk-voice (>=1.37.0,<1.38.0)", "types-boto3-cleanrooms (>=1.37.0,<1.38.0)", "types-boto3-cleanroomsml (>=1.37.0,<1.38.0)", "types-boto3-cloud9 (>=1.37.0,<1.38.0)", "types-boto3-cloudcontrol (>=1.37.0,<1.38.0)", "types-boto3-clouddirectory (>=1.37.0,<1.38.0)", "types-boto3-cloudformation (>=1.37.0,<1.38.0)", "types-boto3-cloudfront (>=1.37.0,<1.38.0)", "types-boto3-cloudfront-keyvaluestore (>=1.37.0,<1.38.0)", "types-boto3-cloudhsm (>=1.37.0,<1.38.0)", "types-boto3-cloudhsmv2 (>=1.37.0,<1.38.0)", "types-boto3-cloudsearch (>=1.37.0,<1.38.0)", "types-boto3-cloudsearchdomain (>=1.37.0,<1.38.0)", "types-boto3-cloudtrail (>=1.37.0,<1.38.0)", "types-boto3-cloudtrail-data (>=1.37.0,<1.38.0)", "types-boto3-cloudwatch (>=1.37.0,<1.38.0)", "types-boto3-codeartifact (>=1.37.0,<1.38.0)", "types-boto3-codebuild (>=1.37.0,<1.38.0)", "types-boto3-codecatalyst (>=1.37.0,<1.38.0)", "types-boto3-codecommit (>=1.37.0,<1.38.0)", "types-boto3-codeconnections (>=1.37.0,<1.38.0)", "types-boto3-codedeploy (>=1.37.0,<1.38.0)", "types-boto3-codeguru-reviewer (>=1.37.0,<1.38.0)", "types-boto3-codeguru-security (>=1.37.0,<1.38.0)", "types-boto3-codeguruprofiler (>=1.37.0,<1.38.0)", "types-boto3-codepipeline (>=1.37.0,<1.38.0)", "types-boto3-codestar-connections (>=1.37.0,<1.38.0)", "types-boto3-codestar-notifications (>=1.37.0,<1.38.0)", "types-boto3-cognito-identity (>=1.37.0,<1.38.0)", "types-boto3-cognito-idp (>=1.37.0,<1.38.0)", "types-boto3-cognito-sync (>=1.37.0,<1.38.0)", "types-boto3-comprehend (>=1.37.0,<1.38.0)", "types-boto3-comprehendmedical (>=1.37.0,<1.38.0)", "types-boto3-compute-optimizer (>=1.37.0,<1.38.0)", "types-boto3-config (>=1.37.0,<1.38.0)", "types-boto3-connect (>=1.37.0,<1.38.0)", "types-boto3-connect-contact-lens (>=1.37.0,<1.38.0)", "types-boto3-connectcampaigns (>=1.37.0,<1.38.0)", "types-boto3-connectcampaignsv2 (>=1.37.0,<1.38.0)", "types-boto3-connectcases (>=1.37.0,<1.38.0)", "types-boto3-connectparticipant (>=1.37.0,<1.38.0)", "types-boto3-controlcatalog (>=1.37.0,<1.38.0)", "types-boto3-controltower (>=1.37.0,<1.38.0)", "types-boto3-cost-optimization-hub (>=1.37.0,<1.38.0)", "types-boto3-cur (>=1.37.0,<1.38.0)", "types-boto3-customer-profiles (>=1.37.0,<1.38.0)", "types-boto3-databrew (>=1.37.0,<1.38.0)", "types-boto3-dataexchange (>=1.37.0,<1.38.0)", "types-boto3-datapipeline (>=1.37.0,<1.38.0)", "types-boto3-datasync (>=1.37.0,<1.38.0)", "types-boto3-datazone (>=1.37.0,<1.38.0)", "types-boto3-dax (>=1.37.0,<1.38.0)", "types-boto3-deadline (>=1.37.0,<1.38.0)", "types-boto3-detective (>=1.37.0,<1.38.0)", "types-boto3-devicefarm (>=1.37.0,<1.38.0)", "types-boto3-devops-guru (>=1.37.0,<1.38.0)", "types-boto3-directconnect (>=1.37.0,<1.38.0)", "types-boto3-discovery (>=1.37.0,<1.38.0)", "types-boto3-dlm (>=1.37.0,<1.38.0)", "types-boto3-dms (>=1.37.0,<1.38.0)", "types-boto3-docdb (>=1.37.0,<1.38.0)", "types-boto3-docdb-elastic (>=1.37.0,<1.38.0)", "types-boto3-drs (>=1.37.0,<1.38.0)", "types-boto3-ds (>=1.37.0,<1.38.0)", "types-boto3-ds-data (>=1.37.0,<1.38.0)", "types-boto3-dsql (>=1.37.0,<1.38.0)", "types-boto3-dynamodb (>=1.37.0,<1.38.0)", "types-boto3-dynamodbstreams (>=1.37.0,<1.38.0)", "types-boto3-ebs (>=1.37.0,<1.38.0)", "types-boto3-ec2 (>=1.37.0,<1.38.0)", "types-boto3-ec2-instance-connect (>=1.37.0,<1.38.0)", "types-boto3-ecr (>=1.37.0,<1.38.0)", "types-boto3-ecr-public (>=1.37.0,<1.38.0)", "types-boto3-ecs (>=1.37.0,<1.38.0)", "types-boto3-efs (>=1.37.0,<1.38.0)", "types-boto3-eks (>=1.37.0,<1.38.0)", "types-boto3-eks-auth (>=1.37.0,<1.38.0)", "types-boto3-elasticache (>=1.37.0,<1.38.0)", "types-boto3-elasticbeanstalk (>=1.37.0,<1.38.0)", "types-boto3-elastictranscoder (>=1.37.0,<1.38.0)", "types-boto3-elb (>=1.37.0,<1.38.0)", "types-boto3-elbv2 (>=1.37.0,<1.38.0)", "types-boto3-emr (>=1.37.0,<1.38.0)", "types-boto3-emr-containers (>=1.37.0,<1.38.0)", "types-boto3-emr-serverless (>=1.37.0,<1.38.0)", "types-boto3-entityresolution (>=1.37.0,<1.38.0)", "types-boto3-es (>=1.37.0,<1.38.0)", "types-boto3-events (>=1.37.0,<1.38.0)", "types-boto3-evidently (>=1.37.0,<1.38.0)", "types-boto3-finspace (>=1.37.0,<1.38.0)", "types-boto3-finspace-data (>=1.37.0,<1.38.0)", "types-boto3-firehose (>=1.37.0,<1.38.0)", "types-boto3-fis (>=1.37.0,<1.38.0)", "types-boto3-fms (>=1.37.0,<1.38.0)", "types-boto3-forecast (>=1.37.0,<1.38.0)", "types-boto3-forecastquery (>=1.37.0,<1.38.0)", "types-boto3-frauddetector (>=1.37.0,<1.38.0)", "types-boto3-freetier (>=1.37.0,<1.38.0)", "types-boto3-fsx (>=1.37.0,<1.38.0)", "types-boto3-gamelift (>=1.37.0,<1.38.0)", "types-boto3-gameliftstreams (>=1.37.0,<1.38.0)", "types-boto3-geo-maps (>=1.37.0,<1.38.0)", "types-boto3-geo-places (>=1.37.0,<1.38.0)", "types-boto3-geo-routes (>=1.37.0,<1.38.0)", "types-boto3-glacier (>=1.37.0,<1.38.0)", "types-boto3-globalaccelerator (>=1.37.0,<1.38.0)", "types-boto3-glue (>=1.37.0,<1.38.0)", "types-boto3-grafana (>=1.37.0,<1.38.0)", "types-boto3-greengrass (>=1.37.0,<1.38.0)", "types-boto3-greengrassv2 (>=1.37.0,<1.38.0)", "types-boto3-groundstation (>=1.37.0,<1.38.0)", "types-boto3-guardduty (>=1.37.0,<1.38.0)", "types-boto3-health (>=1.37.0,<1.38.0)", "types-boto3-healthlake (>=1.37.0,<1.38.0)", "types-boto3-iam (>=1.37.0,<1.38.0)", "types-boto3-identitystore (>=1.37.0,<1.38.0)", "types-boto3-imagebuilder (>=1.37.0,<1.38.0)", "types-boto3-importexport (>=1.37.0,<1.38.0)", "types-boto3-inspector (>=1.37.0,<1.38.0)", "types-boto3-inspector-scan (>=1.37.0,<1.38.0)", "types-boto3-inspector2 (>=1.37.0,<1.38.0)", "types-boto3-internetmonitor (>=1.37.0,<1.38.0)", "types-boto3-invoicing (>=1.37.0,<1.38.0)", "types-boto3-iot (>=1.37.0,<1.38.0)", "types-boto3-iot-data (>=1.37.0,<1.38.0)", "types-boto3-iot-jobs-data (>=1.37.0,<1.38.0)", "types-boto3-iot-managed-integrations (>=1.37.0,<1.38.0)", "types-boto3-iotanalytics (>=1.37.0,<1.38.0)", "types-boto3-iotdeviceadvisor (>=1.37.0,<1.38.0)", "types-boto3-iotevents (>=1.37.0,<1.38.0)", "types-boto3-iotevents-data (>=1.37.0,<1.38.0)", "types-boto3-iotfleethub (>=1.37.0,<1.38.0)", "types-boto3-iotfleetwise (>=1.37.0,<1.38.0)", "types-boto3-iotsecuretunneling (>=1.37.0,<1.38.0)", "types-boto3-iotsitewise (>=1.37.0,<1.38.0)", "types-boto3-iotthingsgraph (>=1.37.0,<1.38.0)", "types-boto3-iottwinmaker (>=1.37.0,<1.38.0)", "types-boto3-iotwireless (>=1.37.0,<1.38.0)", "types-boto3-ivs (>=1.37.0,<1.38.0)", "types-boto3-ivs-realtime (>=1.37.0,<1.38.0)", "types-boto3-ivschat (>=1.37.0,<1.38.0)", "types-boto3-kafka (>=1.37.0,<1.38.0)", "types-boto3-kafkaconnect (>=1.37.0,<1.38.0)", "types-boto3-kendra (>=1.37.0,<1.38.0)", "types-boto3-kendra-ranking (>=1.37.0,<1.38.0)", "types-boto3-keyspaces (>=1.37.0,<1.38.0)", "types-boto3-kinesis (>=1.37.0,<1.38.0)", "types-boto3-kinesis-video-archived-media (>=1.37.0,<1.38.0)", "types-boto3-kinesis-video-media (>=1.37.0,<1.38.0)", "types-boto3-kinesis-video-signaling (>=1.37.0,<1.38.0)", "types-boto3-kinesis-video-webrtc-storage (>=1.37.0,<1.38.0)", "types-boto3-kinesisanalytics (>=1.37.0,<1.38.0)", "types-boto3-kinesisanalyticsv2 (>=1.37.0,<1.38.0)", "types-boto3-kinesisvideo (>=1.37.0,<1.38.0)", "types-boto3-kms (>=1.37.0,<1.38.0)", "types-boto3-lakeformation (>=1.37.0,<1.38.0)", "types-boto3-lambda (>=1.37.0,<1.38.0)", "types-boto3-launch-wizard (>=1.37.0,<1.38.0)", "types-boto3-lex-models (>=1.37.0,<1.38.0)", "types-boto3-lex-runtime (>=1.37.0,<1.38.0)", "types-boto3-lexv2-models (>=1.37.0,<1.38.0)", "types-boto3-lexv2-runtime (>=1.37.0,<1.38.0)", "types-boto3-license-manager (>=1.37.0,<1.38.0)", "types-boto3-license-manager-linux-subscriptions (>=1.37.0,<1.38.0)", "types-boto3-license-manager-user-subscriptions (>=1.37.0,<1.38.0)", "types-boto3-lightsail (>=1.37.0,<1.38.0)", "types-boto3-location (>=1.37.0,<1.38.0)", "types-boto3-logs (>=1.37.0,<1.38.0)", "types-boto3-lookoutequipment (>=1.37.0,<1.38.0)", "types-boto3-lookoutmetrics (>=1.37.0,<1.38.0)", "types-boto3-lookoutvision (>=1.37.0,<1.38.0)", "types-boto3-m2 (>=1.37.0,<1.38.0)", "types-boto3-machinelearning (>=1.37.0,<1.38.0)", "types-boto3-macie2 (>=1.37.0,<1.38.0)", "types-boto3-mailmanager (>=1.37.0,<1.38.0)", "types-boto3-managedblockchain (>=1.37.0,<1.38.0)", "types-boto3-managedblockchain-query (>=1.37.0,<1.38.0)", "types-boto3-marketplace-agreement (>=1.37.0,<1.38.0)", "types-boto3-marketplace-catalog (>=1.37.0,<1.38.0)", "types-boto3-marketplace-deployment (>=1.37.0,<1.38.0)", "types-boto3-marketplace-entitlement (>=1.37.0,<1.38.0)", "types-boto3-marketplace-reporting (>=1.37.0,<1.38.0)", "types-boto3-marketplacecommerceanalytics (>=1.37.0,<1.38.0)", "types-boto3-mediaconnect (>=1.37.0,<1.38.0)", "types-boto3-mediaconvert (>=1.37.0,<1.38.0)", "types-boto3-medialive (>=1.37.0,<1.38.0)", "types-boto3-mediapackage (>=1.37.0,<1.38.0)", "types-boto3-mediapackage-vod (>=1.37.0,<1.38.0)", "types-boto3-mediapackagev2 (>=1.37.0,<1.38.0)", "types-boto3-mediastore (>=1.37.0,<1.38.0)", "types-boto3-mediastore-data (>=1.37.0,<1.38.0)", "types-boto3-mediatailor (>=1.37.0,<1.38.0)", "types-boto3-medical-imaging (>=1.37.0,<1.38.0)", "types-boto3-memorydb (>=1.37.0,<1.38.0)", "types-boto3-meteringmarketplace (>=1.37.0,<1.38.0)", "types-boto3-mgh (>=1.37.0,<1.38.0)", "types-boto3-mgn (>=1.37.0,<1.38.0)", "types-boto3-migration-hub-refactor-spaces (>=1.37.0,<1.38.0)", "types-boto3-migrationhub-config (>=1.37.0,<1.38.0)", "types-boto3-migrationhuborchestrator (>=1.37.0,<1.38.0)", "types-boto3-migrationhubstrategy (>=1.37.0,<1.38.0)", "types-boto3-mq (>=1.37.0,<1.38.0)", "types-boto3-mturk (>=1.37.0,<1.38.0)", "types-boto3-mwaa (>=1.37.0,<1.38.0)", "types-boto3-neptune (>=1.37.0,<1.38.0)", "types-boto3-neptune-graph (>=1.37.0,<1.38.0)", "types-boto3-neptunedata (>=1.37.0,<1.38.0)", "types-boto3-network-firewall (>=1.37.0,<1.38.0)", "types-boto3-networkflowmonitor (>=1.37.0,<1.38.0)", "types-boto3-networkmanager (>=1.37.0,<1.38.0)", "types-boto3-networkmonitor (>=1.37.0,<1.38.0)", "types-boto3-notifications (>=1.37.0,<1.38.0)", "types-boto3-notificationscontacts (>=1.37.0,<1.38.0)", "types-boto3-oam (>=1.37.0,<1.38.0)", "types-boto3-observabilityadmin (>=1.37.0,<1.38.0)", "types-boto3-omics (>=1.37.0,<1.38.0)", "types-boto3-opensearch (>=1.37.0,<1.38.0)", "types-boto3-opensearchserverless (>=1.37.0,<1.38.0)", "types-boto3-opsworks (>=1.37.0,<1.38.0)", "types-boto3-opsworkscm (>=1.37.0,<1.38.0)", "types-boto3-organizations (>=1.37.0,<1.38.0)", "types-boto3-osis (>=1.37.0,<1.38.0)", "types-boto3-outposts (>=1.37.0,<1.38.0)", "types-boto3-panorama (>=1.37.0,<1.38.0)", "types-boto3-partnercentral-selling (>=1.37.0,<1.38.0)", "types-boto3-payment-cryptography (>=1.37.0,<1.38.0)", "types-boto3-payment-cryptography-data (>=1.37.0,<1.38.0)", "types-boto3-pca-connector-ad (>=1.37.0,<1.38.0)", "types-boto3-pca-connector-scep (>=1.37.0,<1.38.0)", "types-boto3-pcs (>=1.37.0,<1.38.0)", "types-boto3-personalize (>=1.37.0,<1.38.0)", "types-boto3-personalize-events (>=1.37.0,<1.38.0)", "types-boto3-personalize-runtime (>=1.37.0,<1.38.0)", "types-boto3-pi (>=1.37.0,<1.38.0)", "types-boto3-pinpoint (>=1.37.0,<1.38.0)", "types-boto3-pinpoint-email (>=1.37.0,<1.38.0)", "types-boto3-pinpoint-sms-voice (>=1.37.0,<1.38.0)", "types-boto3-pinpoint-sms-voice-v2 (>=1.37.0,<1.38.0)", "types-boto3-pipes (>=1.37.0,<1.38.0)", "types-boto3-polly (>=1.37.0,<1.38.0)", "types-boto3-pricing (>=1.37.0,<1.38.0)", "types-boto3-privatenetworks (>=1.37.0,<1.38.0)", "types-boto3-proton (>=1.37.0,<1.38.0)", "types-boto3-qapps (>=1.37.0,<1.38.0)", "types-boto3-qbusiness (>=1.37.0,<1.38.0)", "types-boto3-qconnect (>=1.37.0,<1.38.0)", "types-boto3-qldb (>=1.37.0,<1.38.0)", "types-boto3-qldb-session (>=1.37.0,<1.38.0)", "types-boto3-quicksight (>=1.37.0,<1.38.0)", "types-boto3-ram (>=1.37.0,<1.38.0)", "types-boto3-rbin (>=1.37.0,<1.38.0)", "types-boto3-rds (>=1.37.0,<1.38.0)", "types-boto3-rds-data (>=1.37.0,<1.38.0)", "types-boto3-redshift (>=1.37.0,<1.38.0)", "types-boto3-redshift-data (>=1.37.0,<1.38.0)", "types-boto3-redshift-serverless (>=1.37.0,<1.38.0)", "types-boto3-rekognition (>=1.37.0,<1.38.0)", "types-boto3-repostspace (>=1.37.0,<1.38.0)", "types-boto3-resiliencehub (>=1.37.0,<1.38.0)", "types-boto3-resource-explorer-2 (>=1.37.0,<1.38.0)", "types-boto3-resource-groups (>=1.37.0,<1.38.0)", "types-boto3-resourcegroupstaggingapi (>=1.37.0,<1.38.0)", "types-boto3-robomaker (>=1.37.0,<1.38.0)", "types-boto3-rolesanywhere (>=1.37.0,<1.38.0)", "types-boto3-route53 (>=1.37.0,<1.38.0)", "types-boto3-route53-recovery-cluster (>=1.37.0,<1.38.0)", "types-boto3-route53-recovery-control-config (>=1.37.0,<1.38.0)", "types-boto3-route53-recovery-readiness (>=1.37.0,<1.38.0)", "types-boto3-route53domains (>=1.37.0,<1.38.0)", "types-boto3-route53profiles (>=1.37.0,<1.38.0)", "types-boto3-route53resolver (>=1.37.0,<1.38.0)", "types-boto3-rum (>=1.37.0,<1.38.0)", "types-boto3-s3 (>=1.37.0,<1.38.0)", "types-boto3-s3control (>=1.37.0,<1.38.0)", "types-boto3-s3outposts (>=1.37.0,<1.38.0)", "types-boto3-s3tables (>=1.37.0,<1.38.0)", "types-boto3-sagemaker (>=1.37.0,<1.38.0)", "types-boto3-sagemaker-a2i-runtime (>=1.37.0,<1.38.0)", "types-boto3-sagemaker-edge (>=1.37.0,<1.38.0)", "types-boto3-sagemaker-featurestore-runtime (>=1.37.0,<1.38.0)", "types-boto3-sagemaker-geospatial (>=1.37.0,<1.38.0)", "types-boto3-sagemaker-metrics (>=1.37.0,<1.38.0)", "types-boto3-sagemaker-runtime (>=1.37.0,<1.38.0)", "types-boto3-savingsplans (>=1.37.0,<1.38.0)", "types-boto3-scheduler (>=1.37.0,<1.38.0)", "types-boto3-schemas (>=1.37.0,<1.38.0)", "types-boto3-sdb (>=1.37.0,<1.38.0)", "types-boto3-secretsmanager (>=1.37.0,<1.38.0)", "types-boto3-security-ir (>=1.37.0,<1.38.0)", "types-boto3-securityhub (>=1.37.0,<1.38.0)", "types-boto3-securitylake (>=1.37.0,<1.38.0)", "types-boto3-serverlessrepo (>=1.37.0,<1.38.0)", "types-boto3-service-quotas (>=1.37.0,<1.38.0)", "types-boto3-servicecatalog (>=1.37.0,<1.38.0)", "types-boto3-servicecatalog-appregistry (>=1.37.0,<1.38.0)", "types-boto3-servicediscovery (>=1.37.0,<1.38.0)", "types-boto3-ses (>=1.37.0,<1.38.0)", "types-boto3-sesv2 (>=1.37.0,<1.38.0)", "types-boto3-shield (>=1.37.0,<1.38.0)", "types-boto3-signer (>=1.37.0,<1.38.0)", "types-boto3-simspaceweaver (>=1.37.0,<1.38.0)", "types-boto3-sms (>=1.37.0,<1.38.0)", "types-boto3-sms-voice (>=1.37.0,<1.38.0)", "types-boto3-snow-device-management (>=1.37.0,<1.38.0)", "types-boto3-snowball (>=1.37.0,<1.38.0)", "types-boto3-sns (>=1.37.0,<1.38.0)", "types-boto3-socialmessaging (>=1.37.0,<1.38.0)", "types-boto3-sqs (>=1.37.0,<1.38.0)", "types-boto3-ssm (>=1.37.0,<1.38.0)", "types-boto3-ssm-contacts (>=1.37.0,<1.38.0)", "types-boto3-ssm-incidents (>=1.37.0,<1.38.0)", "types-boto3-ssm-quicksetup (>=1.37.0,<1.38.0)", "types-boto3-ssm-sap (>=1.37.0,<1.38.0)", "types-boto3-sso (>=1.37.0,<1.38.0)", "types-boto3-sso-admin (>=1.37.0,<1.38.0)", "types-boto3-sso-oidc (>=1.37.0,<1.38.0)", "types-boto3-stepfunctions (>=1.37.0,<1.38.0)", "types-boto3-storagegateway (>=1.37.0,<1.38.0)", "types-boto3-sts (>=1.37.0,<1.38.0)", "types-boto3-supplychain (>=1.37.0,<1.38.0)", "types-boto3-support (>=1.37.0,<1.38.0)", "types-boto3-support-app (>=1.37.0,<1.38.0)", "types-boto3-swf (>=1.37.0,<1.38.0)", "types-boto3-synthetics (>=1.37.0,<1.38.0)", "types-boto3-taxsettings (>=1.37.0,<1.38.0)", "types-boto3-textract (>=1.37.0,<1.38.0)", "types-boto3-timestream-influxdb (>=1.37.0,<1.38.0)", "types-boto3-timestream-query (>=1.37.0,<1.38.0)", "types-boto3-timestream-write (>=1.37.0,<1.38.0)", "types-boto3-tnb (>=1.37.0,<1.38.0)", "types-boto3-transcribe (>=1.37.0,<1.38.0)", "types-boto3-transfer (>=1.37.0,<1.38.0)", "types-boto3-translate (>=1.37.0,<1.38.0)", "types-boto3-trustedadvisor (>=1.37.0,<1.38.0)", "types-boto3-verifiedpermissions (>=1.37.0,<1.38.0)", "types-boto3-voice-id (>=1.37.0,<1.38.0)", "types-boto3-vpc-lattice (>=1.37.0,<1.38.0)", "types-boto3-waf (>=1.37.0,<1.38.0)", "types-boto3-waf-regional (>=1.37.0,<1.38.0)", "types-boto3-wafv2 (>=1.37.0,<1.38.0)", "types-boto3-wellarchitected (>=1.37.0,<1.38.0)", "types-boto3-wisdom (>=1.37.0,<1.38.0)", "types-boto3-workdocs (>=1.37.0,<1.38.0)", "types-boto3-workmail (>=1.37.0,<1.38.0)", "types-boto3-workmailmessageflow (>=1.37.0,<1.38.0)", "types-boto3-workspaces (>=1.37.0,<1.38.0)", "types-boto3-workspaces-thin-client (>=1.37.0,<1.38.0)", "types-boto3-workspaces-web (>=1.37.0,<1.38.0)", "types-boto3-xray (>=1.37.0,<1.38.0)"] +amp = ["types-boto3-amp (>=1.37.0,<1.38.0)"] +amplify = ["types-boto3-amplify (>=1.37.0,<1.38.0)"] +amplifybackend = ["types-boto3-amplifybackend (>=1.37.0,<1.38.0)"] +amplifyuibuilder = ["types-boto3-amplifyuibuilder (>=1.37.0,<1.38.0)"] +apigateway = ["types-boto3-apigateway (>=1.37.0,<1.38.0)"] +apigatewaymanagementapi = ["types-boto3-apigatewaymanagementapi (>=1.37.0,<1.38.0)"] +apigatewayv2 = ["types-boto3-apigatewayv2 (>=1.37.0,<1.38.0)"] +appconfig = ["types-boto3-appconfig (>=1.37.0,<1.38.0)"] +appconfigdata = ["types-boto3-appconfigdata (>=1.37.0,<1.38.0)"] +appfabric = ["types-boto3-appfabric (>=1.37.0,<1.38.0)"] +appflow = ["types-boto3-appflow (>=1.37.0,<1.38.0)"] +appintegrations = ["types-boto3-appintegrations (>=1.37.0,<1.38.0)"] +application-autoscaling = ["types-boto3-application-autoscaling (>=1.37.0,<1.38.0)"] +application-insights = ["types-boto3-application-insights (>=1.37.0,<1.38.0)"] +application-signals = ["types-boto3-application-signals (>=1.37.0,<1.38.0)"] +applicationcostprofiler = ["types-boto3-applicationcostprofiler (>=1.37.0,<1.38.0)"] +appmesh = ["types-boto3-appmesh (>=1.37.0,<1.38.0)"] +apprunner = ["types-boto3-apprunner (>=1.37.0,<1.38.0)"] +appstream = ["types-boto3-appstream (>=1.37.0,<1.38.0)"] +appsync = ["types-boto3-appsync (>=1.37.0,<1.38.0)"] +apptest = ["types-boto3-apptest (>=1.37.0,<1.38.0)"] +arc-zonal-shift = ["types-boto3-arc-zonal-shift (>=1.37.0,<1.38.0)"] +artifact = ["types-boto3-artifact (>=1.37.0,<1.38.0)"] +athena = ["types-boto3-athena (>=1.37.0,<1.38.0)"] +auditmanager = ["types-boto3-auditmanager (>=1.37.0,<1.38.0)"] +autoscaling = ["types-boto3-autoscaling (>=1.37.0,<1.38.0)"] +autoscaling-plans = ["types-boto3-autoscaling-plans (>=1.37.0,<1.38.0)"] +b2bi = ["types-boto3-b2bi (>=1.37.0,<1.38.0)"] +backup = ["types-boto3-backup (>=1.37.0,<1.38.0)"] +backup-gateway = ["types-boto3-backup-gateway (>=1.37.0,<1.38.0)"] +backupsearch = ["types-boto3-backupsearch (>=1.37.0,<1.38.0)"] +batch = ["types-boto3-batch (>=1.37.0,<1.38.0)"] +bcm-data-exports = ["types-boto3-bcm-data-exports (>=1.37.0,<1.38.0)"] +bcm-pricing-calculator = ["types-boto3-bcm-pricing-calculator (>=1.37.0,<1.38.0)"] +bedrock = ["types-boto3-bedrock (>=1.37.0,<1.38.0)"] +bedrock-agent = ["types-boto3-bedrock-agent (>=1.37.0,<1.38.0)"] +bedrock-agent-runtime = ["types-boto3-bedrock-agent-runtime (>=1.37.0,<1.38.0)"] +bedrock-data-automation = ["types-boto3-bedrock-data-automation (>=1.37.0,<1.38.0)"] +bedrock-data-automation-runtime = ["types-boto3-bedrock-data-automation-runtime (>=1.37.0,<1.38.0)"] +bedrock-runtime = ["types-boto3-bedrock-runtime (>=1.37.0,<1.38.0)"] +billing = ["types-boto3-billing (>=1.37.0,<1.38.0)"] +billingconductor = ["types-boto3-billingconductor (>=1.37.0,<1.38.0)"] +boto3 = ["boto3 (==1.37.11)"] +braket = ["types-boto3-braket (>=1.37.0,<1.38.0)"] +budgets = ["types-boto3-budgets (>=1.37.0,<1.38.0)"] +ce = ["types-boto3-ce (>=1.37.0,<1.38.0)"] +chatbot = ["types-boto3-chatbot (>=1.37.0,<1.38.0)"] +chime = ["types-boto3-chime (>=1.37.0,<1.38.0)"] +chime-sdk-identity = ["types-boto3-chime-sdk-identity (>=1.37.0,<1.38.0)"] +chime-sdk-media-pipelines = ["types-boto3-chime-sdk-media-pipelines (>=1.37.0,<1.38.0)"] +chime-sdk-meetings = ["types-boto3-chime-sdk-meetings (>=1.37.0,<1.38.0)"] +chime-sdk-messaging = ["types-boto3-chime-sdk-messaging (>=1.37.0,<1.38.0)"] +chime-sdk-voice = ["types-boto3-chime-sdk-voice (>=1.37.0,<1.38.0)"] +cleanrooms = ["types-boto3-cleanrooms (>=1.37.0,<1.38.0)"] +cleanroomsml = ["types-boto3-cleanroomsml (>=1.37.0,<1.38.0)"] +cloud9 = ["types-boto3-cloud9 (>=1.37.0,<1.38.0)"] +cloudcontrol = ["types-boto3-cloudcontrol (>=1.37.0,<1.38.0)"] +clouddirectory = ["types-boto3-clouddirectory (>=1.37.0,<1.38.0)"] +cloudformation = ["types-boto3-cloudformation (>=1.37.0,<1.38.0)"] +cloudfront = ["types-boto3-cloudfront (>=1.37.0,<1.38.0)"] +cloudfront-keyvaluestore = ["types-boto3-cloudfront-keyvaluestore (>=1.37.0,<1.38.0)"] +cloudhsm = ["types-boto3-cloudhsm (>=1.37.0,<1.38.0)"] +cloudhsmv2 = ["types-boto3-cloudhsmv2 (>=1.37.0,<1.38.0)"] +cloudsearch = ["types-boto3-cloudsearch (>=1.37.0,<1.38.0)"] +cloudsearchdomain = ["types-boto3-cloudsearchdomain (>=1.37.0,<1.38.0)"] +cloudtrail = ["types-boto3-cloudtrail (>=1.37.0,<1.38.0)"] +cloudtrail-data = ["types-boto3-cloudtrail-data (>=1.37.0,<1.38.0)"] +cloudwatch = ["types-boto3-cloudwatch (>=1.37.0,<1.38.0)"] +codeartifact = ["types-boto3-codeartifact (>=1.37.0,<1.38.0)"] +codebuild = ["types-boto3-codebuild (>=1.37.0,<1.38.0)"] +codecatalyst = ["types-boto3-codecatalyst (>=1.37.0,<1.38.0)"] +codecommit = ["types-boto3-codecommit (>=1.37.0,<1.38.0)"] +codeconnections = ["types-boto3-codeconnections (>=1.37.0,<1.38.0)"] +codedeploy = ["types-boto3-codedeploy (>=1.37.0,<1.38.0)"] +codeguru-reviewer = ["types-boto3-codeguru-reviewer (>=1.37.0,<1.38.0)"] +codeguru-security = ["types-boto3-codeguru-security (>=1.37.0,<1.38.0)"] +codeguruprofiler = ["types-boto3-codeguruprofiler (>=1.37.0,<1.38.0)"] +codepipeline = ["types-boto3-codepipeline (>=1.37.0,<1.38.0)"] +codestar-connections = ["types-boto3-codestar-connections (>=1.37.0,<1.38.0)"] +codestar-notifications = ["types-boto3-codestar-notifications (>=1.37.0,<1.38.0)"] +cognito-identity = ["types-boto3-cognito-identity (>=1.37.0,<1.38.0)"] +cognito-idp = ["types-boto3-cognito-idp (>=1.37.0,<1.38.0)"] +cognito-sync = ["types-boto3-cognito-sync (>=1.37.0,<1.38.0)"] +comprehend = ["types-boto3-comprehend (>=1.37.0,<1.38.0)"] +comprehendmedical = ["types-boto3-comprehendmedical (>=1.37.0,<1.38.0)"] +compute-optimizer = ["types-boto3-compute-optimizer (>=1.37.0,<1.38.0)"] +config = ["types-boto3-config (>=1.37.0,<1.38.0)"] +connect = ["types-boto3-connect (>=1.37.0,<1.38.0)"] +connect-contact-lens = ["types-boto3-connect-contact-lens (>=1.37.0,<1.38.0)"] +connectcampaigns = ["types-boto3-connectcampaigns (>=1.37.0,<1.38.0)"] +connectcampaignsv2 = ["types-boto3-connectcampaignsv2 (>=1.37.0,<1.38.0)"] +connectcases = ["types-boto3-connectcases (>=1.37.0,<1.38.0)"] +connectparticipant = ["types-boto3-connectparticipant (>=1.37.0,<1.38.0)"] +controlcatalog = ["types-boto3-controlcatalog (>=1.37.0,<1.38.0)"] +controltower = ["types-boto3-controltower (>=1.37.0,<1.38.0)"] +cost-optimization-hub = ["types-boto3-cost-optimization-hub (>=1.37.0,<1.38.0)"] +cur = ["types-boto3-cur (>=1.37.0,<1.38.0)"] +customer-profiles = ["types-boto3-customer-profiles (>=1.37.0,<1.38.0)"] +databrew = ["types-boto3-databrew (>=1.37.0,<1.38.0)"] +dataexchange = ["types-boto3-dataexchange (>=1.37.0,<1.38.0)"] +datapipeline = ["types-boto3-datapipeline (>=1.37.0,<1.38.0)"] +datasync = ["types-boto3-datasync (>=1.37.0,<1.38.0)"] +datazone = ["types-boto3-datazone (>=1.37.0,<1.38.0)"] +dax = ["types-boto3-dax (>=1.37.0,<1.38.0)"] +deadline = ["types-boto3-deadline (>=1.37.0,<1.38.0)"] +detective = ["types-boto3-detective (>=1.37.0,<1.38.0)"] +devicefarm = ["types-boto3-devicefarm (>=1.37.0,<1.38.0)"] +devops-guru = ["types-boto3-devops-guru (>=1.37.0,<1.38.0)"] +directconnect = ["types-boto3-directconnect (>=1.37.0,<1.38.0)"] +discovery = ["types-boto3-discovery (>=1.37.0,<1.38.0)"] +dlm = ["types-boto3-dlm (>=1.37.0,<1.38.0)"] +dms = ["types-boto3-dms (>=1.37.0,<1.38.0)"] +docdb = ["types-boto3-docdb (>=1.37.0,<1.38.0)"] +docdb-elastic = ["types-boto3-docdb-elastic (>=1.37.0,<1.38.0)"] +drs = ["types-boto3-drs (>=1.37.0,<1.38.0)"] +ds = ["types-boto3-ds (>=1.37.0,<1.38.0)"] +ds-data = ["types-boto3-ds-data (>=1.37.0,<1.38.0)"] +dsql = ["types-boto3-dsql (>=1.37.0,<1.38.0)"] +dynamodb = ["types-boto3-dynamodb (>=1.37.0,<1.38.0)"] +dynamodbstreams = ["types-boto3-dynamodbstreams (>=1.37.0,<1.38.0)"] +ebs = ["types-boto3-ebs (>=1.37.0,<1.38.0)"] +ec2 = ["types-boto3-ec2 (>=1.37.0,<1.38.0)"] +ec2-instance-connect = ["types-boto3-ec2-instance-connect (>=1.37.0,<1.38.0)"] +ecr = ["types-boto3-ecr (>=1.37.0,<1.38.0)"] +ecr-public = ["types-boto3-ecr-public (>=1.37.0,<1.38.0)"] +ecs = ["types-boto3-ecs (>=1.37.0,<1.38.0)"] +efs = ["types-boto3-efs (>=1.37.0,<1.38.0)"] +eks = ["types-boto3-eks (>=1.37.0,<1.38.0)"] +eks-auth = ["types-boto3-eks-auth (>=1.37.0,<1.38.0)"] +elasticache = ["types-boto3-elasticache (>=1.37.0,<1.38.0)"] +elasticbeanstalk = ["types-boto3-elasticbeanstalk (>=1.37.0,<1.38.0)"] +elastictranscoder = ["types-boto3-elastictranscoder (>=1.37.0,<1.38.0)"] +elb = ["types-boto3-elb (>=1.37.0,<1.38.0)"] +elbv2 = ["types-boto3-elbv2 (>=1.37.0,<1.38.0)"] +emr = ["types-boto3-emr (>=1.37.0,<1.38.0)"] +emr-containers = ["types-boto3-emr-containers (>=1.37.0,<1.38.0)"] +emr-serverless = ["types-boto3-emr-serverless (>=1.37.0,<1.38.0)"] +entityresolution = ["types-boto3-entityresolution (>=1.37.0,<1.38.0)"] +es = ["types-boto3-es (>=1.37.0,<1.38.0)"] +essential = ["types-boto3-cloudformation (>=1.37.0,<1.38.0)", "types-boto3-dynamodb (>=1.37.0,<1.38.0)", "types-boto3-ec2 (>=1.37.0,<1.38.0)", "types-boto3-lambda (>=1.37.0,<1.38.0)", "types-boto3-rds (>=1.37.0,<1.38.0)", "types-boto3-s3 (>=1.37.0,<1.38.0)", "types-boto3-sqs (>=1.37.0,<1.38.0)"] +events = ["types-boto3-events (>=1.37.0,<1.38.0)"] +evidently = ["types-boto3-evidently (>=1.37.0,<1.38.0)"] +finspace = ["types-boto3-finspace (>=1.37.0,<1.38.0)"] +finspace-data = ["types-boto3-finspace-data (>=1.37.0,<1.38.0)"] +firehose = ["types-boto3-firehose (>=1.37.0,<1.38.0)"] +fis = ["types-boto3-fis (>=1.37.0,<1.38.0)"] +fms = ["types-boto3-fms (>=1.37.0,<1.38.0)"] +forecast = ["types-boto3-forecast (>=1.37.0,<1.38.0)"] +forecastquery = ["types-boto3-forecastquery (>=1.37.0,<1.38.0)"] +frauddetector = ["types-boto3-frauddetector (>=1.37.0,<1.38.0)"] +freetier = ["types-boto3-freetier (>=1.37.0,<1.38.0)"] +fsx = ["types-boto3-fsx (>=1.37.0,<1.38.0)"] +full = ["types-boto3-full (>=1.37.0,<1.38.0)"] +gamelift = ["types-boto3-gamelift (>=1.37.0,<1.38.0)"] +gameliftstreams = ["types-boto3-gameliftstreams (>=1.37.0,<1.38.0)"] +geo-maps = ["types-boto3-geo-maps (>=1.37.0,<1.38.0)"] +geo-places = ["types-boto3-geo-places (>=1.37.0,<1.38.0)"] +geo-routes = ["types-boto3-geo-routes (>=1.37.0,<1.38.0)"] +glacier = ["types-boto3-glacier (>=1.37.0,<1.38.0)"] +globalaccelerator = ["types-boto3-globalaccelerator (>=1.37.0,<1.38.0)"] +glue = ["types-boto3-glue (>=1.37.0,<1.38.0)"] +grafana = ["types-boto3-grafana (>=1.37.0,<1.38.0)"] +greengrass = ["types-boto3-greengrass (>=1.37.0,<1.38.0)"] +greengrassv2 = ["types-boto3-greengrassv2 (>=1.37.0,<1.38.0)"] +groundstation = ["types-boto3-groundstation (>=1.37.0,<1.38.0)"] +guardduty = ["types-boto3-guardduty (>=1.37.0,<1.38.0)"] +health = ["types-boto3-health (>=1.37.0,<1.38.0)"] +healthlake = ["types-boto3-healthlake (>=1.37.0,<1.38.0)"] +iam = ["types-boto3-iam (>=1.37.0,<1.38.0)"] +identitystore = ["types-boto3-identitystore (>=1.37.0,<1.38.0)"] +imagebuilder = ["types-boto3-imagebuilder (>=1.37.0,<1.38.0)"] +importexport = ["types-boto3-importexport (>=1.37.0,<1.38.0)"] +inspector = ["types-boto3-inspector (>=1.37.0,<1.38.0)"] +inspector-scan = ["types-boto3-inspector-scan (>=1.37.0,<1.38.0)"] +inspector2 = ["types-boto3-inspector2 (>=1.37.0,<1.38.0)"] +internetmonitor = ["types-boto3-internetmonitor (>=1.37.0,<1.38.0)"] +invoicing = ["types-boto3-invoicing (>=1.37.0,<1.38.0)"] +iot = ["types-boto3-iot (>=1.37.0,<1.38.0)"] +iot-data = ["types-boto3-iot-data (>=1.37.0,<1.38.0)"] +iot-jobs-data = ["types-boto3-iot-jobs-data (>=1.37.0,<1.38.0)"] +iot-managed-integrations = ["types-boto3-iot-managed-integrations (>=1.37.0,<1.38.0)"] +iotanalytics = ["types-boto3-iotanalytics (>=1.37.0,<1.38.0)"] +iotdeviceadvisor = ["types-boto3-iotdeviceadvisor (>=1.37.0,<1.38.0)"] +iotevents = ["types-boto3-iotevents (>=1.37.0,<1.38.0)"] +iotevents-data = ["types-boto3-iotevents-data (>=1.37.0,<1.38.0)"] +iotfleethub = ["types-boto3-iotfleethub (>=1.37.0,<1.38.0)"] +iotfleetwise = ["types-boto3-iotfleetwise (>=1.37.0,<1.38.0)"] +iotsecuretunneling = ["types-boto3-iotsecuretunneling (>=1.37.0,<1.38.0)"] +iotsitewise = ["types-boto3-iotsitewise (>=1.37.0,<1.38.0)"] +iotthingsgraph = ["types-boto3-iotthingsgraph (>=1.37.0,<1.38.0)"] +iottwinmaker = ["types-boto3-iottwinmaker (>=1.37.0,<1.38.0)"] +iotwireless = ["types-boto3-iotwireless (>=1.37.0,<1.38.0)"] +ivs = ["types-boto3-ivs (>=1.37.0,<1.38.0)"] +ivs-realtime = ["types-boto3-ivs-realtime (>=1.37.0,<1.38.0)"] +ivschat = ["types-boto3-ivschat (>=1.37.0,<1.38.0)"] +kafka = ["types-boto3-kafka (>=1.37.0,<1.38.0)"] +kafkaconnect = ["types-boto3-kafkaconnect (>=1.37.0,<1.38.0)"] +kendra = ["types-boto3-kendra (>=1.37.0,<1.38.0)"] +kendra-ranking = ["types-boto3-kendra-ranking (>=1.37.0,<1.38.0)"] +keyspaces = ["types-boto3-keyspaces (>=1.37.0,<1.38.0)"] +kinesis = ["types-boto3-kinesis (>=1.37.0,<1.38.0)"] +kinesis-video-archived-media = ["types-boto3-kinesis-video-archived-media (>=1.37.0,<1.38.0)"] +kinesis-video-media = ["types-boto3-kinesis-video-media (>=1.37.0,<1.38.0)"] +kinesis-video-signaling = ["types-boto3-kinesis-video-signaling (>=1.37.0,<1.38.0)"] +kinesis-video-webrtc-storage = ["types-boto3-kinesis-video-webrtc-storage (>=1.37.0,<1.38.0)"] +kinesisanalytics = ["types-boto3-kinesisanalytics (>=1.37.0,<1.38.0)"] +kinesisanalyticsv2 = ["types-boto3-kinesisanalyticsv2 (>=1.37.0,<1.38.0)"] +kinesisvideo = ["types-boto3-kinesisvideo (>=1.37.0,<1.38.0)"] +kms = ["types-boto3-kms (>=1.37.0,<1.38.0)"] +lakeformation = ["types-boto3-lakeformation (>=1.37.0,<1.38.0)"] +lambda = ["types-boto3-lambda (>=1.37.0,<1.38.0)"] +launch-wizard = ["types-boto3-launch-wizard (>=1.37.0,<1.38.0)"] +lex-models = ["types-boto3-lex-models (>=1.37.0,<1.38.0)"] +lex-runtime = ["types-boto3-lex-runtime (>=1.37.0,<1.38.0)"] +lexv2-models = ["types-boto3-lexv2-models (>=1.37.0,<1.38.0)"] +lexv2-runtime = ["types-boto3-lexv2-runtime (>=1.37.0,<1.38.0)"] +license-manager = ["types-boto3-license-manager (>=1.37.0,<1.38.0)"] +license-manager-linux-subscriptions = ["types-boto3-license-manager-linux-subscriptions (>=1.37.0,<1.38.0)"] +license-manager-user-subscriptions = ["types-boto3-license-manager-user-subscriptions (>=1.37.0,<1.38.0)"] +lightsail = ["types-boto3-lightsail (>=1.37.0,<1.38.0)"] +location = ["types-boto3-location (>=1.37.0,<1.38.0)"] +logs = ["types-boto3-logs (>=1.37.0,<1.38.0)"] +lookoutequipment = ["types-boto3-lookoutequipment (>=1.37.0,<1.38.0)"] +lookoutmetrics = ["types-boto3-lookoutmetrics (>=1.37.0,<1.38.0)"] +lookoutvision = ["types-boto3-lookoutvision (>=1.37.0,<1.38.0)"] +m2 = ["types-boto3-m2 (>=1.37.0,<1.38.0)"] +machinelearning = ["types-boto3-machinelearning (>=1.37.0,<1.38.0)"] +macie2 = ["types-boto3-macie2 (>=1.37.0,<1.38.0)"] +mailmanager = ["types-boto3-mailmanager (>=1.37.0,<1.38.0)"] +managedblockchain = ["types-boto3-managedblockchain (>=1.37.0,<1.38.0)"] +managedblockchain-query = ["types-boto3-managedblockchain-query (>=1.37.0,<1.38.0)"] +marketplace-agreement = ["types-boto3-marketplace-agreement (>=1.37.0,<1.38.0)"] +marketplace-catalog = ["types-boto3-marketplace-catalog (>=1.37.0,<1.38.0)"] +marketplace-deployment = ["types-boto3-marketplace-deployment (>=1.37.0,<1.38.0)"] +marketplace-entitlement = ["types-boto3-marketplace-entitlement (>=1.37.0,<1.38.0)"] +marketplace-reporting = ["types-boto3-marketplace-reporting (>=1.37.0,<1.38.0)"] +marketplacecommerceanalytics = ["types-boto3-marketplacecommerceanalytics (>=1.37.0,<1.38.0)"] +mediaconnect = ["types-boto3-mediaconnect (>=1.37.0,<1.38.0)"] +mediaconvert = ["types-boto3-mediaconvert (>=1.37.0,<1.38.0)"] +medialive = ["types-boto3-medialive (>=1.37.0,<1.38.0)"] +mediapackage = ["types-boto3-mediapackage (>=1.37.0,<1.38.0)"] +mediapackage-vod = ["types-boto3-mediapackage-vod (>=1.37.0,<1.38.0)"] +mediapackagev2 = ["types-boto3-mediapackagev2 (>=1.37.0,<1.38.0)"] +mediastore = ["types-boto3-mediastore (>=1.37.0,<1.38.0)"] +mediastore-data = ["types-boto3-mediastore-data (>=1.37.0,<1.38.0)"] +mediatailor = ["types-boto3-mediatailor (>=1.37.0,<1.38.0)"] +medical-imaging = ["types-boto3-medical-imaging (>=1.37.0,<1.38.0)"] +memorydb = ["types-boto3-memorydb (>=1.37.0,<1.38.0)"] +meteringmarketplace = ["types-boto3-meteringmarketplace (>=1.37.0,<1.38.0)"] +mgh = ["types-boto3-mgh (>=1.37.0,<1.38.0)"] +mgn = ["types-boto3-mgn (>=1.37.0,<1.38.0)"] +migration-hub-refactor-spaces = ["types-boto3-migration-hub-refactor-spaces (>=1.37.0,<1.38.0)"] +migrationhub-config = ["types-boto3-migrationhub-config (>=1.37.0,<1.38.0)"] +migrationhuborchestrator = ["types-boto3-migrationhuborchestrator (>=1.37.0,<1.38.0)"] +migrationhubstrategy = ["types-boto3-migrationhubstrategy (>=1.37.0,<1.38.0)"] +mq = ["types-boto3-mq (>=1.37.0,<1.38.0)"] +mturk = ["types-boto3-mturk (>=1.37.0,<1.38.0)"] +mwaa = ["types-boto3-mwaa (>=1.37.0,<1.38.0)"] +neptune = ["types-boto3-neptune (>=1.37.0,<1.38.0)"] +neptune-graph = ["types-boto3-neptune-graph (>=1.37.0,<1.38.0)"] +neptunedata = ["types-boto3-neptunedata (>=1.37.0,<1.38.0)"] +network-firewall = ["types-boto3-network-firewall (>=1.37.0,<1.38.0)"] +networkflowmonitor = ["types-boto3-networkflowmonitor (>=1.37.0,<1.38.0)"] +networkmanager = ["types-boto3-networkmanager (>=1.37.0,<1.38.0)"] +networkmonitor = ["types-boto3-networkmonitor (>=1.37.0,<1.38.0)"] +notifications = ["types-boto3-notifications (>=1.37.0,<1.38.0)"] +notificationscontacts = ["types-boto3-notificationscontacts (>=1.37.0,<1.38.0)"] +oam = ["types-boto3-oam (>=1.37.0,<1.38.0)"] +observabilityadmin = ["types-boto3-observabilityadmin (>=1.37.0,<1.38.0)"] +omics = ["types-boto3-omics (>=1.37.0,<1.38.0)"] +opensearch = ["types-boto3-opensearch (>=1.37.0,<1.38.0)"] +opensearchserverless = ["types-boto3-opensearchserverless (>=1.37.0,<1.38.0)"] +opsworks = ["types-boto3-opsworks (>=1.37.0,<1.38.0)"] +opsworkscm = ["types-boto3-opsworkscm (>=1.37.0,<1.38.0)"] +organizations = ["types-boto3-organizations (>=1.37.0,<1.38.0)"] +osis = ["types-boto3-osis (>=1.37.0,<1.38.0)"] +outposts = ["types-boto3-outposts (>=1.37.0,<1.38.0)"] +panorama = ["types-boto3-panorama (>=1.37.0,<1.38.0)"] +partnercentral-selling = ["types-boto3-partnercentral-selling (>=1.37.0,<1.38.0)"] +payment-cryptography = ["types-boto3-payment-cryptography (>=1.37.0,<1.38.0)"] +payment-cryptography-data = ["types-boto3-payment-cryptography-data (>=1.37.0,<1.38.0)"] +pca-connector-ad = ["types-boto3-pca-connector-ad (>=1.37.0,<1.38.0)"] +pca-connector-scep = ["types-boto3-pca-connector-scep (>=1.37.0,<1.38.0)"] +pcs = ["types-boto3-pcs (>=1.37.0,<1.38.0)"] +personalize = ["types-boto3-personalize (>=1.37.0,<1.38.0)"] +personalize-events = ["types-boto3-personalize-events (>=1.37.0,<1.38.0)"] +personalize-runtime = ["types-boto3-personalize-runtime (>=1.37.0,<1.38.0)"] +pi = ["types-boto3-pi (>=1.37.0,<1.38.0)"] +pinpoint = ["types-boto3-pinpoint (>=1.37.0,<1.38.0)"] +pinpoint-email = ["types-boto3-pinpoint-email (>=1.37.0,<1.38.0)"] +pinpoint-sms-voice = ["types-boto3-pinpoint-sms-voice (>=1.37.0,<1.38.0)"] +pinpoint-sms-voice-v2 = ["types-boto3-pinpoint-sms-voice-v2 (>=1.37.0,<1.38.0)"] +pipes = ["types-boto3-pipes (>=1.37.0,<1.38.0)"] +polly = ["types-boto3-polly (>=1.37.0,<1.38.0)"] +pricing = ["types-boto3-pricing (>=1.37.0,<1.38.0)"] +privatenetworks = ["types-boto3-privatenetworks (>=1.37.0,<1.38.0)"] +proton = ["types-boto3-proton (>=1.37.0,<1.38.0)"] +qapps = ["types-boto3-qapps (>=1.37.0,<1.38.0)"] +qbusiness = ["types-boto3-qbusiness (>=1.37.0,<1.38.0)"] +qconnect = ["types-boto3-qconnect (>=1.37.0,<1.38.0)"] +qldb = ["types-boto3-qldb (>=1.37.0,<1.38.0)"] +qldb-session = ["types-boto3-qldb-session (>=1.37.0,<1.38.0)"] +quicksight = ["types-boto3-quicksight (>=1.37.0,<1.38.0)"] +ram = ["types-boto3-ram (>=1.37.0,<1.38.0)"] +rbin = ["types-boto3-rbin (>=1.37.0,<1.38.0)"] +rds = ["types-boto3-rds (>=1.37.0,<1.38.0)"] +rds-data = ["types-boto3-rds-data (>=1.37.0,<1.38.0)"] +redshift = ["types-boto3-redshift (>=1.37.0,<1.38.0)"] +redshift-data = ["types-boto3-redshift-data (>=1.37.0,<1.38.0)"] +redshift-serverless = ["types-boto3-redshift-serverless (>=1.37.0,<1.38.0)"] +rekognition = ["types-boto3-rekognition (>=1.37.0,<1.38.0)"] +repostspace = ["types-boto3-repostspace (>=1.37.0,<1.38.0)"] +resiliencehub = ["types-boto3-resiliencehub (>=1.37.0,<1.38.0)"] +resource-explorer-2 = ["types-boto3-resource-explorer-2 (>=1.37.0,<1.38.0)"] +resource-groups = ["types-boto3-resource-groups (>=1.37.0,<1.38.0)"] +resourcegroupstaggingapi = ["types-boto3-resourcegroupstaggingapi (>=1.37.0,<1.38.0)"] +robomaker = ["types-boto3-robomaker (>=1.37.0,<1.38.0)"] +rolesanywhere = ["types-boto3-rolesanywhere (>=1.37.0,<1.38.0)"] +route53 = ["types-boto3-route53 (>=1.37.0,<1.38.0)"] +route53-recovery-cluster = ["types-boto3-route53-recovery-cluster (>=1.37.0,<1.38.0)"] +route53-recovery-control-config = ["types-boto3-route53-recovery-control-config (>=1.37.0,<1.38.0)"] +route53-recovery-readiness = ["types-boto3-route53-recovery-readiness (>=1.37.0,<1.38.0)"] +route53domains = ["types-boto3-route53domains (>=1.37.0,<1.38.0)"] +route53profiles = ["types-boto3-route53profiles (>=1.37.0,<1.38.0)"] +route53resolver = ["types-boto3-route53resolver (>=1.37.0,<1.38.0)"] +rum = ["types-boto3-rum (>=1.37.0,<1.38.0)"] +s3 = ["types-boto3-s3 (>=1.37.0,<1.38.0)"] +s3control = ["types-boto3-s3control (>=1.37.0,<1.38.0)"] +s3outposts = ["types-boto3-s3outposts (>=1.37.0,<1.38.0)"] +s3tables = ["types-boto3-s3tables (>=1.37.0,<1.38.0)"] +sagemaker = ["types-boto3-sagemaker (>=1.37.0,<1.38.0)"] +sagemaker-a2i-runtime = ["types-boto3-sagemaker-a2i-runtime (>=1.37.0,<1.38.0)"] +sagemaker-edge = ["types-boto3-sagemaker-edge (>=1.37.0,<1.38.0)"] +sagemaker-featurestore-runtime = ["types-boto3-sagemaker-featurestore-runtime (>=1.37.0,<1.38.0)"] +sagemaker-geospatial = ["types-boto3-sagemaker-geospatial (>=1.37.0,<1.38.0)"] +sagemaker-metrics = ["types-boto3-sagemaker-metrics (>=1.37.0,<1.38.0)"] +sagemaker-runtime = ["types-boto3-sagemaker-runtime (>=1.37.0,<1.38.0)"] +savingsplans = ["types-boto3-savingsplans (>=1.37.0,<1.38.0)"] +scheduler = ["types-boto3-scheduler (>=1.37.0,<1.38.0)"] +schemas = ["types-boto3-schemas (>=1.37.0,<1.38.0)"] +sdb = ["types-boto3-sdb (>=1.37.0,<1.38.0)"] +secretsmanager = ["types-boto3-secretsmanager (>=1.37.0,<1.38.0)"] +security-ir = ["types-boto3-security-ir (>=1.37.0,<1.38.0)"] +securityhub = ["types-boto3-securityhub (>=1.37.0,<1.38.0)"] +securitylake = ["types-boto3-securitylake (>=1.37.0,<1.38.0)"] +serverlessrepo = ["types-boto3-serverlessrepo (>=1.37.0,<1.38.0)"] +service-quotas = ["types-boto3-service-quotas (>=1.37.0,<1.38.0)"] +servicecatalog = ["types-boto3-servicecatalog (>=1.37.0,<1.38.0)"] +servicecatalog-appregistry = ["types-boto3-servicecatalog-appregistry (>=1.37.0,<1.38.0)"] +servicediscovery = ["types-boto3-servicediscovery (>=1.37.0,<1.38.0)"] +ses = ["types-boto3-ses (>=1.37.0,<1.38.0)"] +sesv2 = ["types-boto3-sesv2 (>=1.37.0,<1.38.0)"] +shield = ["types-boto3-shield (>=1.37.0,<1.38.0)"] +signer = ["types-boto3-signer (>=1.37.0,<1.38.0)"] +simspaceweaver = ["types-boto3-simspaceweaver (>=1.37.0,<1.38.0)"] +sms = ["types-boto3-sms (>=1.37.0,<1.38.0)"] +sms-voice = ["types-boto3-sms-voice (>=1.37.0,<1.38.0)"] +snow-device-management = ["types-boto3-snow-device-management (>=1.37.0,<1.38.0)"] +snowball = ["types-boto3-snowball (>=1.37.0,<1.38.0)"] +sns = ["types-boto3-sns (>=1.37.0,<1.38.0)"] +socialmessaging = ["types-boto3-socialmessaging (>=1.37.0,<1.38.0)"] +sqs = ["types-boto3-sqs (>=1.37.0,<1.38.0)"] +ssm = ["types-boto3-ssm (>=1.37.0,<1.38.0)"] +ssm-contacts = ["types-boto3-ssm-contacts (>=1.37.0,<1.38.0)"] +ssm-incidents = ["types-boto3-ssm-incidents (>=1.37.0,<1.38.0)"] +ssm-quicksetup = ["types-boto3-ssm-quicksetup (>=1.37.0,<1.38.0)"] +ssm-sap = ["types-boto3-ssm-sap (>=1.37.0,<1.38.0)"] +sso = ["types-boto3-sso (>=1.37.0,<1.38.0)"] +sso-admin = ["types-boto3-sso-admin (>=1.37.0,<1.38.0)"] +sso-oidc = ["types-boto3-sso-oidc (>=1.37.0,<1.38.0)"] +stepfunctions = ["types-boto3-stepfunctions (>=1.37.0,<1.38.0)"] +storagegateway = ["types-boto3-storagegateway (>=1.37.0,<1.38.0)"] +sts = ["types-boto3-sts (>=1.37.0,<1.38.0)"] +supplychain = ["types-boto3-supplychain (>=1.37.0,<1.38.0)"] +support = ["types-boto3-support (>=1.37.0,<1.38.0)"] +support-app = ["types-boto3-support-app (>=1.37.0,<1.38.0)"] +swf = ["types-boto3-swf (>=1.37.0,<1.38.0)"] +synthetics = ["types-boto3-synthetics (>=1.37.0,<1.38.0)"] +taxsettings = ["types-boto3-taxsettings (>=1.37.0,<1.38.0)"] +textract = ["types-boto3-textract (>=1.37.0,<1.38.0)"] +timestream-influxdb = ["types-boto3-timestream-influxdb (>=1.37.0,<1.38.0)"] +timestream-query = ["types-boto3-timestream-query (>=1.37.0,<1.38.0)"] +timestream-write = ["types-boto3-timestream-write (>=1.37.0,<1.38.0)"] +tnb = ["types-boto3-tnb (>=1.37.0,<1.38.0)"] +transcribe = ["types-boto3-transcribe (>=1.37.0,<1.38.0)"] +transfer = ["types-boto3-transfer (>=1.37.0,<1.38.0)"] +translate = ["types-boto3-translate (>=1.37.0,<1.38.0)"] +trustedadvisor = ["types-boto3-trustedadvisor (>=1.37.0,<1.38.0)"] +verifiedpermissions = ["types-boto3-verifiedpermissions (>=1.37.0,<1.38.0)"] +voice-id = ["types-boto3-voice-id (>=1.37.0,<1.38.0)"] +vpc-lattice = ["types-boto3-vpc-lattice (>=1.37.0,<1.38.0)"] +waf = ["types-boto3-waf (>=1.37.0,<1.38.0)"] +waf-regional = ["types-boto3-waf-regional (>=1.37.0,<1.38.0)"] +wafv2 = ["types-boto3-wafv2 (>=1.37.0,<1.38.0)"] +wellarchitected = ["types-boto3-wellarchitected (>=1.37.0,<1.38.0)"] +wisdom = ["types-boto3-wisdom (>=1.37.0,<1.38.0)"] +workdocs = ["types-boto3-workdocs (>=1.37.0,<1.38.0)"] +workmail = ["types-boto3-workmail (>=1.37.0,<1.38.0)"] +workmailmessageflow = ["types-boto3-workmailmessageflow (>=1.37.0,<1.38.0)"] +workspaces = ["types-boto3-workspaces (>=1.37.0,<1.38.0)"] +workspaces-thin-client = ["types-boto3-workspaces-thin-client (>=1.37.0,<1.38.0)"] +workspaces-web = ["types-boto3-workspaces-web (>=1.37.0,<1.38.0)"] +xray = ["types-boto3-xray (>=1.37.0,<1.38.0)"] + +[[package]] +name = "types-boto3-cognito-idp" +version = "1.37.5" +description = "Type annotations for boto3 CognitoIdentityProvider 1.37.5 service generated with mypy-boto3-builder 8.10.0" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "types_boto3_cognito_idp-1.37.5-py3-none-any.whl", hash = "sha256:909004c296c563fbaa4c4c230d6680b8d47b02416572d962d46a286f858e3495"}, + {file = "types_boto3_cognito_idp-1.37.5.tar.gz", hash = "sha256:aeda0e907a26529f7431b1d1a20a5c0245427fee5da9e097b8fb38dda1a7b8d3"}, +] + +[package.dependencies] +typing-extensions = {version = "*", markers = "python_version < \"3.12\""} + +[[package]] +name = "types-s3transfer" +version = "0.11.4" +description = "Type annotations and code completion for s3transfer" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "types_s3transfer-0.11.4-py3-none-any.whl", hash = "sha256:2a76d92c07d4a3cb469e5343b2e7560e0b8078b2e03696a65407b8c44c861b61"}, + {file = "types_s3transfer-0.11.4.tar.gz", hash = "sha256:05fde593c84270f19fd053f0b1e08f5a057d7c5f036b9884e68fb8cd3041ac30"}, +] + +[[package]] +name = "typing-extensions" +version = "4.12.2" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +markers = "python_version < \"3.12\"" +files = [ + {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, + {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, +] + +[[package]] +name = "urllib3" +version = "2.3.0" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=3.9" +groups = ["main", "dev"] +files = [ + {file = "urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df"}, + {file = "urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +h2 = ["h2 (>=4,<5)"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + +[metadata] +lock-version = "2.1" +python-versions = ">=3.11" +content-hash = "21517220dbb3c9d4d6652b73e00c603ac605fa5a6a9ea639cc70d6fbc8158589" diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..2955a15 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,35 @@ +[project] +name = "scribeauth" +version = "1.2.0" +description = "Library to authenticate to Scribe's platform" +readme = "README.md" +license = "LICENSE.md" +requires-python = ">=3.11" +dependencies = [ + "boto3[cognito-idp] (>=1.37.11,<2.0.0)" +] +keywords = [ + 'Development Status :: 4 - Beta', + 'Intended Audience :: Developers', + 'Operating System :: OS Independent', + 'License :: OSI Approved :: MIT License', + 'Natural Language :: English', + 'Programming Language :: Python :: 3.11', + 'Topic :: Security', + 'Typing :: Typed' +] +url = 'https://github.com/ScribeLabsAI/ScribeAuth' + + +[build-system] +requires = ["poetry-core>=2.0.0,<3.0.0"] +build-backend = "poetry.core.masonry.api" + +[tool.poetry.group.dev.dependencies] +types-boto3 = {extras = ["cognito-idp"], version = "^1.37.11"} +pytest = "^8.3.5" +sphinx = "^8.2.3" +pyotp = "^2.9.0" +dotenv = "^0.9.9" +sphinx-markdown-builder = "^0.6.8" + diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index eda9337..0000000 --- a/requirements.txt +++ /dev/null @@ -1,62 +0,0 @@ -alabaster==0.7.16 -Babel==2.14.0 -boto3==1.34.93 -boto3-stubs==1.34.93 -botocore==1.34.93 -botocore-stubs==1.34.93 -build==1.2.1 -certifi==2024.2.2 -charset-normalizer==3.3.2 -coverage==7.5.0 -docutils==0.21.2 -execnet==2.1.1 -idna==3.7 -imagesize==1.4.1 -importlib-metadata==7.1.0 -iniconfig==2.0.0 -jaraco.classes==3.4.0 -Jinja2==3.1.3 -jmespath==1.0.1 -keyring==25.2.0 -markdown-it-py==3.0.0 -MarkupSafe==2.1.5 -mdurl==0.1.2 -more-itertools==10.2.0 -mypy-boto3-cognito-identity==1.34.0 -mypy-boto3-cognito-idp==1.34.93 -nh3==0.2.17 -packaging==24.0 -pkginfo==1.10.0 -pluggy==1.5.0 -Pygments==2.17.2 -pyotp==2.9.0 -pyproject_hooks==1.0.0 -pytest==8.2.0 -pytest-cov==5.0.0 -pytest-xdist==3.6.1 -python-dateutil==2.9.0.post0 -python-dotenv==1.0.1 -readme-renderer==43.0 -requests==2.31.0 -requests-toolbelt==1.0.0 -rfc3986==2.0.0 -rich==13.7.1 -s3transfer==0.10.1 -six==1.16.0 -snowballstemmer==2.2.0 -Sphinx==7.3.7 -sphinx-markdown-builder==0.6.6 -sphinxcontrib-applehelp==1.0.8 -sphinxcontrib-devhelp==1.0.6 -sphinxcontrib-htmlhelp==2.0.5 -sphinxcontrib-jsmath==1.0.1 -sphinxcontrib-qthelp==1.0.7 -sphinxcontrib-serializinghtml==1.1.10 -tabulate==0.9.0 -twine==5.0.0 -types-awscrt==0.20.9 -types-s3transfer==0.10.1 -typing==3.7.4.3 -typing_extensions==4.11.0 -urllib3<2.3 -zipp==3.18.1 diff --git a/scribeauth/__init__.py b/scribeauth/__init__.py index 1e79d45..a29731b 100644 --- a/scribeauth/__init__.py +++ b/scribeauth/__init__.py @@ -1,7 +1,9 @@ from .scribeauth import ( + Challenge, MissingIdException, ResourceNotFoundException, ScribeAuth, Tokens, + TooManyRequestsException, UnauthorizedException, ) diff --git a/scribeauth/__main__.py b/scribeauth/__main__.py index 3c767a8..42b71c8 100644 --- a/scribeauth/__main__.py +++ b/scribeauth/__main__.py @@ -1,6 +1,7 @@ import argparse from scribeauth import ScribeAuth +from scribeauth.scribeauth import Challenge if __name__ == "__main__": parser = argparse.ArgumentParser("scribeauth") @@ -12,17 +13,17 @@ parser.add_argument("--password", help="Password", type=str) parser.add_argument("--refresh_token", help="Refresh Token", type=str) args = parser.parse_args() - auth = ScribeAuth({"client_id": args.client_id, "user_pool_id": args.user_pool_id}) + auth = ScribeAuth(client_id=args.client_id, user_pool_id=args.user_pool_id) if args.refresh_token: tokens = auth.get_tokens(refresh_token=args.refresh_token) else: tokens = auth.get_tokens(username=args.username, password=args.password) if ( - "challenge_name" in tokens - and tokens["challenge_name"] == "SOFTWARE_TOKEN_MFA" + isinstance(tokens, Challenge) + and tokens.challenge_name == "SOFTWARE_TOKEN_MFA" ): code = input("Enter MFA code: ") tokens = auth.respond_to_auth_challenge_mfa( - args.username, tokens["session"], code + username=args.username, session=tokens.session, code=code ) print(tokens) diff --git a/scribeauth/scribeauth.py b/scribeauth/scribeauth.py index 2d41a4f..aaa3910 100644 --- a/scribeauth/scribeauth.py +++ b/scribeauth/scribeauth.py @@ -1,49 +1,26 @@ -from datetime import datetime +from dataclasses import dataclass from typing import overload import boto3 import botocore import botocore.session -from botocore.auth import SigV4Auth -from botocore.awsrequest import AWSRequest from botocore.config import Config from botocore.exceptions import NoAuthTokenError -from typing_extensions import NotRequired, TypedDict, Unpack -class Tokens(TypedDict): +@dataclass +class Tokens: refresh_token: str access_token: str id_token: str -class Challenge(TypedDict): +@dataclass +class Challenge: challenge_name: str session: str -class RefreshToken(TypedDict): - refresh_token: str - - -class UsernamePassword(TypedDict): - username: str - password: str - - -class Credentials(TypedDict): - AccessKeyId: str - SecretKey: str - SessionToken: str - Expiration: datetime - - -class PoolConfiguration(TypedDict): - client_id: str - user_pool_id: str - identity_pool_id: NotRequired[str | None] - - class UnauthorizedException(Exception): """ Exception raised when a user cannot perform an action. @@ -81,32 +58,21 @@ class UnknownException(Exception): pass -def is_complete_credentials(cred: Credentials) -> bool: - return "AccessKeyId" in cred and "SecretKey" in cred and "SessionToken" in cred - - class ScribeAuth: - def __init__(self, param: PoolConfiguration): + def __init__(self, client_id: str, user_pool_id: str): """Constructs an authorisation client. - PoolConfiguration: - :param client_id: The client ID of the application provided by Scribe. :param user_pool_id: The user pool ID provided by Scribe. - - :param identity_pool_id: The identity pool ID provided by Scribe. (Optional) """ config = Config(signature_version=botocore.UNSIGNED) self.client_unsigned = boto3.client( "cognito-idp", config=config, region_name="eu-west-2" ) self.client_signed = boto3.client("cognito-idp", region_name="eu-west-2") - self.client_id = param.get("client_id") - self.user_pool_id = param.get("user_pool_id") - self.identity_pool_id = param.get("identity_pool_id") - if param.get("identity_pool_id"): - self.fed_client = boto3.client("cognito-identity", region_name="eu-west-2") + self.client_id = client_id + self.user_pool_id = user_pool_id def change_password( self, username: str, password: str, new_password: str @@ -198,17 +164,19 @@ def forgot_password( raise err @overload - def get_tokens(self, **param: Unpack[UsernamePassword]) -> Tokens | Challenge: - ... + def get_tokens( + self, *, username: str = "", password: str = "" + ) -> Tokens | Challenge: ... @overload - def get_tokens(self, **param: Unpack[RefreshToken]) -> Tokens | Challenge: - ... + def get_tokens(self, *, refresh_token: str = "") -> Tokens | Challenge: ... - def get_tokens(self, **param) -> Tokens | Challenge: + def get_tokens( + self, *, username: str = "", refresh_token: str = "", password: str = "" + ) -> Tokens | Challenge: """A user gets their tokens (refresh_token, access_token and id_token). - It is possible to pass a UsernamePassword or a RefreshToken: + It is possible to pass a username/password pair or a refresh token: :param username: Username (usually an email address). :type username: str @@ -222,18 +190,13 @@ def get_tokens(self, **param) -> Tokens | Challenge: It returns Tokens or a Challenge: - :return: Tokens -- Dictionary {"refresh_token": "str", "access_token": "str", "id_token": "str"} - - :return: Challenge -- Dictionary { "challenge_name": "str", "session": "str"} + :return: Tokens or Challenge + :rtype: Tokens | Challenge """ - refresh_token = param.get("refresh_token") - username = param.get("username") - password = param.get("password") - if refresh_token == None: - if isinstance(username, str) and isinstance(password, str): - return self.__get_tokens_with_pair(username, password) - elif isinstance(refresh_token, str): + if refresh_token: return self.__get_tokens_with_refresh(refresh_token) + elif username and password: + return self.__get_tokens_with_pair(username, password) raise UnauthorizedException( "Username and/or Password are missing or refresh_token is missing" ) @@ -252,16 +215,17 @@ def respond_to_auth_challenge_mfa( :param code: Code generated from the auth app. :type code: str - :return: Tokens -- Dictionary {"refresh_token": "str", "access_token": "str", "id_token": "str"} + :return: Tokens + :rtype: Tokens """ try: response = self.__respond_to_mfa_challenge(username, session, code) result = response.get("AuthenticationResult") - return { - "refresh_token": result.get("RefreshToken", ""), - "access_token": result.get("AccessToken", ""), - "id_token": result.get("IdToken", ""), - } + return Tokens( + refresh_token=result.get("RefreshToken", ""), + access_token=result.get("AccessToken", ""), + id_token=result.get("IdToken", ""), + ) except self.client_signed.exceptions.CodeMismatchException: raise UnauthorizedException("Wrong MFA code") except self.client_signed.exceptions.ExpiredCodeException: @@ -288,144 +252,27 @@ def revoke_refresh_token(self, refresh_token: str) -> bool: except Exception: raise Exception("InternalServerError: Try again later") - def get_federated_id(self, id_token: str) -> str: - """A user gets their federated id. - - :param id_token: Id token to use. - - :return: str - """ - if not hasattr(self, "user_pool_id"): - raise MissingIdException("Missing user pool ID") - if not hasattr(self, "fed_client"): - raise MissingIdException( - "Federated pool ID is not provided. Create a new ScribeAuth object using identity_pool_id" - ) - if self.identity_pool_id is not None: - try: - response = self.fed_client.get_id( - IdentityPoolId=self.identity_pool_id, - Logins={ - f"cognito-idp.eu-west-2.amazonaws.com/{self.user_pool_id}": id_token - }, - ) - if not response.get("IdentityId"): - raise UnknownException("Could not retrieve federated id") - return response.get("IdentityId") - except self.fed_client.exceptions.NotAuthorizedException: - raise UnauthorizedException("Could not retrieve federated id") - except self.fed_client.exceptions.TooManyRequestsException: - raise TooManyRequestsException("Too many requests. Try again later") - except Exception as err: - raise err - else: - raise Exception( - "Federated pool ID is not provided. Create a new ScribeAuth object using identity_pool_id" - ) - - def get_federated_credentials(self, id: str, id_token: str) -> Credentials: - """A user gets their federated credentials (AccessKeyId, SecretKey and SessionToken). - - :param id: Federated id. - - :param id_token: Id token to use. - - :return: Credentials -- Dictionary {"AccessKeyId": "str", "SecretKey": "str", "SessionToken": "str", "Expiration": "str"} - """ - if not hasattr(self, "user_pool_id"): - raise MissingIdException("Missing user pool ID") - if not hasattr(self, "fed_client"): - raise MissingIdException( - "Federated pool ID is not provided. Create a new ScribeAuth object using identity_pool_id" - ) - try: - response = self.fed_client.get_credentials_for_identity( - IdentityId=id, - Logins={ - f"cognito-idp.eu-west-2.amazonaws.com/{self.user_pool_id}": id_token - }, - ) - all_credentials = response.get("Credentials") - accessKeyId = all_credentials.get("AccessKeyId") - secretKey = all_credentials.get("SecretKey") - sessionToken = all_credentials.get("SessionToken") - expiration = all_credentials.get("Expiration") - if ( - accessKeyId != None - and secretKey != None - and sessionToken != None - and expiration != None - ): - credentials = Credentials( - AccessKeyId=accessKeyId, - SecretKey=secretKey, - SessionToken=sessionToken, - Expiration=expiration, - ) - - if not is_complete_credentials(credentials): - raise UnknownException("Could not retrieve tokens") - return credentials - else: - raise UnknownException("Could not retrieve federated credentials") - except self.fed_client.exceptions.NotAuthorizedException: - raise UnauthorizedException("Could not retrieve federated credentials") - except self.fed_client.exceptions.TooManyRequestsException: - raise TooManyRequestsException("Too many requests. Try again later") - except self.fed_client.exceptions.ResourceNotFoundException: - raise ResourceNotFoundException("Invalid federated_id") - except Exception as err: - raise err - - def get_signature_for_request(self, request: AWSRequest, credentials: Credentials): - """A user gets a signature for a request. - - :param request: Request to send. - - :param credentials: Credentials for the signature creation. - - :return: Headers -- Headers containing the signature for the request. - """ - try: - session = botocore.session.Session() - session.set_credentials( - access_key=credentials["AccessKeyId"], - secret_key=credentials["SecretKey"], - token=credentials["SessionToken"], - ) - signer = SigV4Auth( - credentials=session.get_credentials(), - service_name="execute-api", - region_name="eu-west-2", - ) - request.context["payload_signing_enabled"] = False - signer.add_auth(request=request) - prepped = request.prepare() - return prepped.headers - except Exception as err: - raise err - def __get_tokens_with_pair( self, username: str, password: str ) -> Tokens | Challenge: auth_result = "AuthenticationResult" - if username != None and password != None: + if username is not None and password is not None: try: response = self.__initiate_auth(username, password) result = response.get(auth_result) if "ChallengeName" in response: - return { - "challenge_name": response.get("ChallengeName"), - "session": response.get("Session"), - } + return Challenge( + challenge_name=response.get("ChallengeName"), + session=response.get("Session"), + ) else: refresh_token_resp = result.get("RefreshToken") access_token_resp = result.get("AccessToken") id_token_resp = result.get("IdToken") if ( - refresh_token_resp != None - and access_token_resp != None - and id_token_resp != None + refresh_token_resp is not None + and access_token_resp is not None + and id_token_resp is not None ): return Tokens( refresh_token=refresh_token_resp, @@ -454,7 +301,7 @@ def __get_tokens_with_refresh(self, refresh_token: str) -> Tokens: result = response.get(auth_result) access_token_resp = result.get("AccessToken") id_token_resp = result.get("IdToken") - if access_token_resp != None and id_token_resp != None: + if access_token_resp is not None and id_token_resp is not None: return Tokens( refresh_token=refresh_token, access_token=access_token_resp, diff --git a/setup.py b/setup.py deleted file mode 100644 index d37f968..0000000 --- a/setup.py +++ /dev/null @@ -1,29 +0,0 @@ -from setuptools import setup - -def readme(): - with open('README.md') as f: - return f.read() - -setup( - name='scribeauth', - python_requires='>=3.10.0', - version='1.2.0', - description="Library to authenticate to Scribe's platform", - long_description=readme(), - url='https://github.com/ScribeLabsAI/ScribeAuth', - long_description_content_type='text/markdown', - author='Ailin Venerus', - author_email='ailin@scribelabs.ai', - packages=['scribeauth'], - install_requires=['boto3', 'typing-extensions'], - classifiers=[ - 'Development Status :: 4 - Beta', - 'Intended Audience :: Developers', - 'Operating System :: OS Independent', - 'License :: OSI Approved :: MIT License', - 'Natural Language :: English', - 'Programming Language :: Python :: 3.10', - 'Topic :: Security', - 'Typing :: Typed' - ], -) diff --git a/tests/test_scribeauth.py b/tests/test_scribeauth.py index 3ad855d..cf3bdeb 100644 --- a/tests/test_scribeauth.py +++ b/tests/test_scribeauth.py @@ -1,8 +1,10 @@ import os +import re import unittest from time import sleep import pyotp +import pytest from botocore.awsrequest import AWSRequest from dotenv import load_dotenv @@ -12,6 +14,7 @@ ScribeAuth, UnauthorizedException, ) +from scribeauth.scribeauth import Challenge, Tokens load_dotenv(override=True) @@ -20,62 +23,56 @@ username2: str = os.environ.get("USERNAME2", "") password: str = os.environ.get("PASSWORD", "") user_pool_id: str = os.environ.get("USER_POOL_ID", "") -federated_pool_id: str = os.environ.get("FEDERATED_POOL_ID", "") otp = pyotp.TOTP(os.environ.get("OTPCODE", "")) -access = ScribeAuth({"client_id": client_id, "user_pool_id": user_pool_id}) -pool_access = ScribeAuth( - { - "client_id": client_id, - "user_pool_id": user_pool_id, - "identity_pool_id": federated_pool_id, - } -) +access = ScribeAuth(client_id=client_id, user_pool_id=user_pool_id) -class TestScribeAuthGetTokensNoMFA(unittest.TestCase): +class TestScribeAuthGetTokensNoMFA: def test_get_tokens_username_password_successfully(self): user_tokens = access.get_tokens(username=username, password=password) assert_tokens(self, user_tokens) def test_get_tokens_wrong_username_fails(self): - with self.assertRaises(UnauthorizedException): + with pytest.raises(UnauthorizedException): access.get_tokens(username="username", password=password) def test_get_tokens_wrong_password_fails(self): - with self.assertRaises(UnauthorizedException): + with pytest.raises(UnauthorizedException): access.get_tokens(username=username, password="password") def test_get_tokens_refresh_token_successfully(self): refresh_token = generate_refresh_token_for_test() user_tokens = access.get_tokens(refresh_token=refresh_token) - assert_tokens(self, user_tokens) - self.assertEqual(refresh_token, user_tokens.get("refresh_token")) + user_tokens = assert_tokens(self, user_tokens) + assert refresh_token == user_tokens.refresh_token def test_get_tokens_refresh_token_fails(self): - with self.assertRaises(UnauthorizedException): + with pytest.raises(UnauthorizedException): access.get_tokens(refresh_token="refresh_token") def test_get_tokens_refresh_token_multiple_params_successfully(self): refresh_token = generate_refresh_token_for_test() - user_tokens = access.get_tokens(**{"refresh_token": refresh_token}) - assert_tokens(self, user_tokens) - self.assertEqual(refresh_token, user_tokens.get("refresh_token")) + user_tokens = access.get_tokens(refresh_token=refresh_token) + user_tokens = assert_tokens(self, user_tokens) + assert refresh_token == user_tokens.refresh_token def test_get_tokens_refresh_token_multiple_params_fails(self): - with self.assertRaises(UnauthorizedException): - access.get_tokens(**{"refresh_token": "refresh_token"}) + with pytest.raises(UnauthorizedException): + access.get_tokens(refresh_token="refresh_token") class TestScribeAuthGetTokensMFA(unittest.TestCase): def test_get_tokens_asks_mfa(self): challenge = access.get_tokens(username=username2, password=password) - self.assertEqual(challenge.get("challenge_name"), "SOFTWARE_TOKEN_MFA") + assert isinstance(challenge, Challenge) + assert challenge.challenge_name == "SOFTWARE_TOKEN_MFA" def test_get_tokens_username_password_successfully(self): challenge = access.get_tokens(username=username2, password=password) + assert isinstance(challenge, Challenge) user_tokens = access.respond_to_auth_challenge_mfa( - username=username2, session=challenge.get("session", ""), code=otp.now() + username=username2, session=challenge.session, code=otp.now() ) sleep(61) assert_tokens(self, user_tokens) @@ -84,14 +81,15 @@ def test_get_tokens_refresh_token_successfully(self): refresh_token = generate_refresh_token_for_test_with_mfa() sleep(61) user_tokens = access.get_tokens(refresh_token=refresh_token) - assert_tokens(self, user_tokens) - self.assertEqual(refresh_token, user_tokens.get("refresh_token")) + user_tokens = assert_tokens(self, user_tokens) + self.assertEqual(refresh_token, user_tokens.refresh_token) def test_get_tokens_fails_with_wrong_mfa_code(self): challenge = access.get_tokens(username=username2, password=password) with self.assertRaises(UnauthorizedException): + assert isinstance(challenge, Challenge) access.respond_to_auth_challenge_mfa( - username=username2, session=challenge.get("session", ""), code="000000" + username=username2, session=challenge.session, code="000000" ) def test_get_tokens_fails_with_expired_mfa_code(self): @@ -99,8 +97,9 @@ def test_get_tokens_fails_with_expired_mfa_code(self): code = otp.now() sleep(61) with self.assertRaises(UnauthorizedException): + assert isinstance(challenge, Challenge) access.respond_to_auth_challenge_mfa( - username=username2, session=challenge.get("session", ""), code=code + username=username2, session=challenge.session, code=code ) @@ -124,85 +123,39 @@ def test_revoke_refresh_token_invalid_and_use_valid_refresh_token_successfully( refresh_token = generate_refresh_token_for_test() self.assertTrue(access.revoke_refresh_token("refresh_token")) user_tokens = access.get_tokens(refresh_token=refresh_token) - assert_tokens(self, user_tokens) - self.assertEqual(refresh_token, user_tokens.get("refresh_token")) - - -class TestScribeAuthFederatedCredentials(unittest.TestCase): - def test_get_federated_id_successfully(self): - id_token = generate_id_token_for_test() - federated_id = pool_access.get_federated_id(id_token) - self.assertTrue(federated_id) - - def test_get_federated_id_fails(self): - with self.assertRaises(UnauthorizedException): - pool_access.get_federated_id("id_token") - - def test_get_federated_id_with_NO_identityPoolId_fails(self): - id_token = generate_id_token_for_test() - with self.assertRaises(MissingIdException): - access.get_federated_id(id_token) - - def test_get_federated_credentials_successfully(self): - id_token = generate_id_token_for_test() - federated_id = pool_access.get_federated_id(id_token) - federated_credentials = pool_access.get_federated_credentials( - federated_id, id_token - ) - self.assertTrue(federated_credentials.get("AccessKeyId")) - self.assertTrue(federated_credentials.get("SecretKey")) - self.assertTrue(federated_credentials.get("SessionToken")) - self.assertTrue(federated_credentials.get("Expiration")) - - def test_get_federated_credentials_fails(self): - id_token = generate_id_token_for_test() - id = "eu-west-2:00000000-1111-2abc-3def-4444aaaa5555" - with self.assertRaises(ResourceNotFoundException): - pool_access.get_federated_credentials(id, id_token) - - -class TestScribeAuthGetSignatureForRequest(unittest.TestCase): - def test_get_signature_for_request_successfully(self): - id_token = generate_id_token_for_test() - federated_id = pool_access.get_federated_id(id_token) - federated_credentials = pool_access.get_federated_credentials( - federated_id, id_token - ) - request = AWSRequest("GET", url="http://google.com") - signature = pool_access.get_signature_for_request( - request=request, credentials=federated_credentials - ) - self.assertTrue(signature) + user_tokens = assert_tokens(self, user_tokens) + self.assertEqual(refresh_token, user_tokens.refresh_token) def generate_refresh_token_for_test(): tokens_or_challenge = access.get_tokens(username=username, password=password) - if "refresh_token" in tokens_or_challenge: - return tokens_or_challenge.get("refresh_token") + if isinstance(tokens_or_challenge, Tokens): + return tokens_or_challenge.refresh_token raise Exception("Could not get refresh_token") def generate_id_token_for_test(): tokens_or_challenge = access.get_tokens(username=username, password=password) - if "id_token" in tokens_or_challenge: - return tokens_or_challenge.get("id_token") + if isinstance(tokens_or_challenge, Tokens): + return tokens_or_challenge.id_token raise Exception("Could not get id_token") def generate_refresh_token_for_test_with_mfa(): challenge = access.get_tokens(username=username2, password=password) + assert isinstance(challenge, Challenge) return access.respond_to_auth_challenge_mfa( - username=username2, session=challenge.get("session", ""), code=otp.now() - ).get("refresh_token") - - -def assert_tokens(self, user_tokens): - self.assertIsNone(user_tokens.get("challenge_name")) - self.assertIsNotNone(user_tokens.get("refresh_token")) - self.assertIsNotNone(user_tokens.get("access_token")) - self.assertIsNotNone(user_tokens.get("id_token")) - self.assertNotEqual( - user_tokens.get("refresh_token"), user_tokens.get("access_token") - ) - self.assertNotEqual(user_tokens.get("refresh_token"), user_tokens.get("id_token")) - self.assertNotEqual(user_tokens.get("id_token"), user_tokens.get("access_token")) + username=username2, session=challenge.session, code=otp.now() + ).refresh_token + + +def assert_tokens(self, user_tokens: Tokens | Challenge) -> Tokens: + if isinstance(user_tokens, Challenge): + pytest.fail() + assert user_tokens is not None + assert user_tokens.access_token is not None + assert user_tokens.id_token is not None + assert user_tokens.refresh_token != user_tokens.access_token + assert user_tokens.refresh_token != user_tokens.id_token + assert user_tokens.id_token != user_tokens.access_token + return user_tokens From 72064543bb8798346bace523ae1eddc648b16ac8 Mon Sep 17 00:00:00 2001 From: Emmanuel Hadoux Date: Wed, 12 Mar 2025 17:30:47 +0000 Subject: [PATCH 2/9] update README --- README.md | 30 +----------------------------- 1 file changed, 1 insertion(+), 29 deletions(-) diff --git a/README.md b/README.md index 566b2c2..1cf28d1 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ This library interacts directly with our authentication provider [AWS Cognito](h pip install scribeauth ``` -This library requires Python >= 3.10 that supports typing. +This library requires Python >= 3.11 that supports typing. ## Methods @@ -58,30 +58,6 @@ access = ScribeAuth(client_id) access.revoke_refresh_token('refresh_token') ``` -### 5. Getting federated id - -```python -from scribeauth import ScribeAuth -access = ScribeAuth({'client_id': your_client_id, 'user_pool_id': your_user_pool_id, 'identity_pool_id': your_identity_pool_id}) -access.get_federated_id('your_id_token') -``` - -### 6. Getting federated credentials - -```python -from scribeauth import ScribeAuth -access = ScribeAuth({'client_id': your_client_id, 'user_pool_id': your_user_pool_id, 'identity_pool_id': your_identity_pool_id}) -access.get_federated_credentials('your_federated_id', 'your_id_token') -``` - -### 7. Getting signature for request - -```python -from scribeauth import ScribeAuth -access = ScribeAuth({'client_id': your_client_id, 'user_pool_id': your_user_pool_id, 'identity_pool_id': your_identity_pool_id}) -access.get_signature_for_request(request='your_request', credentials='your_federated_credentials') -``` - ## Flow - If you never have accessed your Scribe account, it probably still contains the temporary password we generated for you. You can change it directly on the [platform](https://platform.scribelabs.ai) or with the `change_password` method. You won't be able to access anything else until the temporary password has been changed. @@ -92,10 +68,6 @@ access.get_signature_for_request(request='your_request', credentials='your_feder - In case you suspect that your refresh token has been leaked, you can revoke it with `revoke_token`. This will also invalidate any access/id token that has been issued with it. In order to get a new one, you'll need to use your username and password again. -- You can get your federated id by using `get_federated_id` and providing your id token. The federated id will allow you to use `get_federated_credentials` to get an access key id, secret key and session token. - -- Every API call to be made to Scribe's API Gateway needs to have a signature. You can get the signature for your request by using `get_signature_for_request`. Provide the request you'll be using and your credentials (use `get_federated_credentials` to get them). - ## Command line You can also use the package as follows for quick access to tokens: From 05c910f67b398b341c4c25fe6053eb18bcdbbad8 Mon Sep 17 00:00:00 2001 From: Emmanuel Hadoux Date: Wed, 12 Mar 2025 17:34:55 +0000 Subject: [PATCH 3/9] update README --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 1cf28d1..3538428 100644 --- a/README.md +++ b/README.md @@ -76,6 +76,12 @@ You can also use the package as follows for quick access to tokens: python -m scribeauth --client_id clientid --user_pool_id user_pool_id --username username --password password ``` +## Development + +First step is to install poetry https://python-poetry.org/docs/. Then `poetry install` will install all the dependencies. Might require setting a virtualenv through poetry itself, or manually. + +Run the tests with `poetry run pytest`. + --- To flag an issue, open a ticket on [Github](https://github.com/ScribeLabsAI/ScribeAuth/issues) and contact us on Intercom through the platform. From cd13319d78640d2ec9573fa776d92e4b741b385f Mon Sep 17 00:00:00 2001 From: Emmanuel Hadoux Date: Wed, 12 Mar 2025 17:35:56 +0000 Subject: [PATCH 4/9] add missing coverage dev deps --- poetry.lock | 78 +++++++++++++++++++++++++++++++++++++++++++++++++- pyproject.toml | 1 + 2 files changed, 78 insertions(+), 1 deletion(-) diff --git a/poetry.lock b/poetry.lock index d2d45b1..46b241c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -212,6 +212,82 @@ files = [ {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] +[[package]] +name = "coverage" +version = "7.6.12" +description = "Code coverage measurement for Python" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "coverage-7.6.12-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:704c8c8c6ce6569286ae9622e534b4f5b9759b6f2cd643f1c1a61f666d534fe8"}, + {file = "coverage-7.6.12-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ad7525bf0241e5502168ae9c643a2f6c219fa0a283001cee4cf23a9b7da75879"}, + {file = "coverage-7.6.12-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06097c7abfa611c91edb9e6920264e5be1d6ceb374efb4986f38b09eed4cb2fe"}, + {file = "coverage-7.6.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:220fa6c0ad7d9caef57f2c8771918324563ef0d8272c94974717c3909664e674"}, + {file = "coverage-7.6.12-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3688b99604a24492bcfe1c106278c45586eb819bf66a654d8a9a1433022fb2eb"}, + {file = "coverage-7.6.12-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d1a987778b9c71da2fc8948e6f2656da6ef68f59298b7e9786849634c35d2c3c"}, + {file = "coverage-7.6.12-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:cec6b9ce3bd2b7853d4a4563801292bfee40b030c05a3d29555fd2a8ee9bd68c"}, + {file = "coverage-7.6.12-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ace9048de91293e467b44bce0f0381345078389814ff6e18dbac8fdbf896360e"}, + {file = "coverage-7.6.12-cp310-cp310-win32.whl", hash = "sha256:ea31689f05043d520113e0552f039603c4dd71fa4c287b64cb3606140c66f425"}, + {file = "coverage-7.6.12-cp310-cp310-win_amd64.whl", hash = "sha256:676f92141e3c5492d2a1596d52287d0d963df21bf5e55c8b03075a60e1ddf8aa"}, + {file = "coverage-7.6.12-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e18aafdfb3e9ec0d261c942d35bd7c28d031c5855dadb491d2723ba54f4c3015"}, + {file = "coverage-7.6.12-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:66fe626fd7aa5982cdebad23e49e78ef7dbb3e3c2a5960a2b53632f1f703ea45"}, + {file = "coverage-7.6.12-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ef01d70198431719af0b1f5dcbefc557d44a190e749004042927b2a3fed0702"}, + {file = "coverage-7.6.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07e92ae5a289a4bc4c0aae710c0948d3c7892e20fd3588224ebe242039573bf0"}, + {file = "coverage-7.6.12-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e695df2c58ce526eeab11a2e915448d3eb76f75dffe338ea613c1201b33bab2f"}, + {file = "coverage-7.6.12-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d74c08e9aaef995f8c4ef6d202dbd219c318450fe2a76da624f2ebb9c8ec5d9f"}, + {file = "coverage-7.6.12-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e995b3b76ccedc27fe4f477b349b7d64597e53a43fc2961db9d3fbace085d69d"}, + {file = "coverage-7.6.12-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b1f097878d74fe51e1ddd1be62d8e3682748875b461232cf4b52ddc6e6db0bba"}, + {file = "coverage-7.6.12-cp311-cp311-win32.whl", hash = "sha256:1f7ffa05da41754e20512202c866d0ebfc440bba3b0ed15133070e20bf5aeb5f"}, + {file = "coverage-7.6.12-cp311-cp311-win_amd64.whl", hash = "sha256:e216c5c45f89ef8971373fd1c5d8d1164b81f7f5f06bbf23c37e7908d19e8558"}, + {file = "coverage-7.6.12-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b172f8e030e8ef247b3104902cc671e20df80163b60a203653150d2fc204d1ad"}, + {file = "coverage-7.6.12-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:641dfe0ab73deb7069fb972d4d9725bf11c239c309ce694dd50b1473c0f641c3"}, + {file = "coverage-7.6.12-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e549f54ac5f301e8e04c569dfdb907f7be71b06b88b5063ce9d6953d2d58574"}, + {file = "coverage-7.6.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:959244a17184515f8c52dcb65fb662808767c0bd233c1d8a166e7cf74c9ea985"}, + {file = "coverage-7.6.12-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bda1c5f347550c359f841d6614fb8ca42ae5cb0b74d39f8a1e204815ebe25750"}, + {file = "coverage-7.6.12-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1ceeb90c3eda1f2d8c4c578c14167dbd8c674ecd7d38e45647543f19839dd6ea"}, + {file = "coverage-7.6.12-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f16f44025c06792e0fb09571ae454bcc7a3ec75eeb3c36b025eccf501b1a4c3"}, + {file = "coverage-7.6.12-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b076e625396e787448d27a411aefff867db2bffac8ed04e8f7056b07024eed5a"}, + {file = "coverage-7.6.12-cp312-cp312-win32.whl", hash = "sha256:00b2086892cf06c7c2d74983c9595dc511acca00665480b3ddff749ec4fb2a95"}, + {file = "coverage-7.6.12-cp312-cp312-win_amd64.whl", hash = "sha256:7ae6eabf519bc7871ce117fb18bf14e0e343eeb96c377667e3e5dd12095e0288"}, + {file = "coverage-7.6.12-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:488c27b3db0ebee97a830e6b5a3ea930c4a6e2c07f27a5e67e1b3532e76b9ef1"}, + {file = "coverage-7.6.12-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5d1095bbee1851269f79fd8e0c9b5544e4c00c0c24965e66d8cba2eb5bb535fd"}, + {file = "coverage-7.6.12-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0533adc29adf6a69c1baa88c3d7dbcaadcffa21afbed3ca7a225a440e4744bf9"}, + {file = "coverage-7.6.12-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:53c56358d470fa507a2b6e67a68fd002364d23c83741dbc4c2e0680d80ca227e"}, + {file = "coverage-7.6.12-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64cbb1a3027c79ca6310bf101014614f6e6e18c226474606cf725238cf5bc2d4"}, + {file = "coverage-7.6.12-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:79cac3390bfa9836bb795be377395f28410811c9066bc4eefd8015258a7578c6"}, + {file = "coverage-7.6.12-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:9b148068e881faa26d878ff63e79650e208e95cf1c22bd3f77c3ca7b1d9821a3"}, + {file = "coverage-7.6.12-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8bec2ac5da793c2685ce5319ca9bcf4eee683b8a1679051f8e6ec04c4f2fd7dc"}, + {file = "coverage-7.6.12-cp313-cp313-win32.whl", hash = "sha256:200e10beb6ddd7c3ded322a4186313d5ca9e63e33d8fab4faa67ef46d3460af3"}, + {file = "coverage-7.6.12-cp313-cp313-win_amd64.whl", hash = "sha256:2b996819ced9f7dbb812c701485d58f261bef08f9b85304d41219b1496b591ef"}, + {file = "coverage-7.6.12-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:299cf973a7abff87a30609879c10df0b3bfc33d021e1adabc29138a48888841e"}, + {file = "coverage-7.6.12-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4b467a8c56974bf06e543e69ad803c6865249d7a5ccf6980457ed2bc50312703"}, + {file = "coverage-7.6.12-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2458f275944db8129f95d91aee32c828a408481ecde3b30af31d552c2ce284a0"}, + {file = "coverage-7.6.12-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a9d8be07fb0832636a0f72b80d2a652fe665e80e720301fb22b191c3434d924"}, + {file = "coverage-7.6.12-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14d47376a4f445e9743f6c83291e60adb1b127607a3618e3185bbc8091f0467b"}, + {file = "coverage-7.6.12-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b95574d06aa9d2bd6e5cc35a5bbe35696342c96760b69dc4287dbd5abd4ad51d"}, + {file = "coverage-7.6.12-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:ecea0c38c9079570163d663c0433a9af4094a60aafdca491c6a3d248c7432827"}, + {file = "coverage-7.6.12-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:2251fabcfee0a55a8578a9d29cecfee5f2de02f11530e7d5c5a05859aa85aee9"}, + {file = "coverage-7.6.12-cp313-cp313t-win32.whl", hash = "sha256:eb5507795caabd9b2ae3f1adc95f67b1104971c22c624bb354232d65c4fc90b3"}, + {file = "coverage-7.6.12-cp313-cp313t-win_amd64.whl", hash = "sha256:f60a297c3987c6c02ffb29effc70eadcbb412fe76947d394a1091a3615948e2f"}, + {file = "coverage-7.6.12-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e7575ab65ca8399c8c4f9a7d61bbd2d204c8b8e447aab9d355682205c9dd948d"}, + {file = "coverage-7.6.12-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8161d9fbc7e9fe2326de89cd0abb9f3599bccc1287db0aba285cb68d204ce929"}, + {file = "coverage-7.6.12-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a1e465f398c713f1b212400b4e79a09829cd42aebd360362cd89c5bdc44eb87"}, + {file = "coverage-7.6.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f25d8b92a4e31ff1bd873654ec367ae811b3a943583e05432ea29264782dc32c"}, + {file = "coverage-7.6.12-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a936309a65cc5ca80fa9f20a442ff9e2d06927ec9a4f54bcba9c14c066323f2"}, + {file = "coverage-7.6.12-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:aa6f302a3a0b5f240ee201297fff0bbfe2fa0d415a94aeb257d8b461032389bd"}, + {file = "coverage-7.6.12-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:f973643ef532d4f9be71dd88cf7588936685fdb576d93a79fe9f65bc337d9d73"}, + {file = "coverage-7.6.12-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:78f5243bb6b1060aed6213d5107744c19f9571ec76d54c99cc15938eb69e0e86"}, + {file = "coverage-7.6.12-cp39-cp39-win32.whl", hash = "sha256:69e62c5034291c845fc4df7f8155e8544178b6c774f97a99e2734b05eb5bed31"}, + {file = "coverage-7.6.12-cp39-cp39-win_amd64.whl", hash = "sha256:b01a840ecc25dce235ae4c1b6a0daefb2a203dba0e6e980637ee9c2f6ee0df57"}, + {file = "coverage-7.6.12-pp39.pp310-none-any.whl", hash = "sha256:7e39e845c4d764208e7b8f6a21c541ade741e2c41afabdfa1caa28687a3c98cf"}, + {file = "coverage-7.6.12-py3-none-any.whl", hash = "sha256:eb8668cfbc279a536c633137deeb9435d2962caec279c3f8cf8b91fff6ff8953"}, + {file = "coverage-7.6.12.tar.gz", hash = "sha256:48cfc4641d95d34766ad41d9573cc0f22a48aa88d22657a1fe01dca0dbae4de2"}, +] + +[package.extras] +toml = ["tomli"] + [[package]] name = "docutils" version = "0.21.2" @@ -1239,4 +1315,4 @@ zstd = ["zstandard (>=0.18.0)"] [metadata] lock-version = "2.1" python-versions = ">=3.11" -content-hash = "21517220dbb3c9d4d6652b73e00c603ac605fa5a6a9ea639cc70d6fbc8158589" +content-hash = "6720b46d07aef25a658bdec366d5dc177427cc001c4edd453fa92d5ce0b044f5" diff --git a/pyproject.toml b/pyproject.toml index 2955a15..504a8e0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -32,4 +32,5 @@ sphinx = "^8.2.3" pyotp = "^2.9.0" dotenv = "^0.9.9" sphinx-markdown-builder = "^0.6.8" +coverage = "^7.6.12" From c44fb0f7ad8a11d8b2cbbb971266d3909870c18c Mon Sep 17 00:00:00 2001 From: Emmanuel Hadoux Date: Wed, 12 Mar 2025 17:38:30 +0000 Subject: [PATCH 5/9] clean test classes --- tests/test_scribeauth.py | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/tests/test_scribeauth.py b/tests/test_scribeauth.py index cf3bdeb..dfb8ba5 100644 --- a/tests/test_scribeauth.py +++ b/tests/test_scribeauth.py @@ -8,12 +8,7 @@ from botocore.awsrequest import AWSRequest from dotenv import load_dotenv -from scribeauth import ( - MissingIdException, - ResourceNotFoundException, - ScribeAuth, - UnauthorizedException, -) +from scribeauth import ScribeAuth, UnauthorizedException from scribeauth.scribeauth import Challenge, Tokens load_dotenv(override=True) @@ -62,7 +57,7 @@ def test_get_tokens_refresh_token_multiple_params_fails(self): access.get_tokens(refresh_token="refresh_token") -class TestScribeAuthGetTokensMFA(unittest.TestCase): +class TestScribeAuthGetTokensMFA: def test_get_tokens_asks_mfa(self): challenge = access.get_tokens(username=username2, password=password) assert isinstance(challenge, Challenge) @@ -82,11 +77,11 @@ def test_get_tokens_refresh_token_successfully(self): sleep(61) user_tokens = access.get_tokens(refresh_token=refresh_token) user_tokens = assert_tokens(self, user_tokens) - self.assertEqual(refresh_token, user_tokens.refresh_token) + assert refresh_token == user_tokens.refresh_token def test_get_tokens_fails_with_wrong_mfa_code(self): challenge = access.get_tokens(username=username2, password=password) - with self.assertRaises(UnauthorizedException): + with pytest.raises(UnauthorizedException): assert isinstance(challenge, Challenge) access.respond_to_auth_challenge_mfa( username=username2, session=challenge.session, code="000000" @@ -96,35 +91,36 @@ def test_get_tokens_fails_with_expired_mfa_code(self): challenge = access.get_tokens(username=username2, password=password) code = otp.now() sleep(61) - with self.assertRaises(UnauthorizedException): + with pytest.raises(UnauthorizedException): assert isinstance(challenge, Challenge) access.respond_to_auth_challenge_mfa( username=username2, session=challenge.session, code=code ) -class TestScribeAuthRevokeRefreshTokens(unittest.TestCase): +class TestScribeAuthRevokeRefreshTokens: def test_revoke_refresh_token_successfully(self): refresh_token = generate_refresh_token_for_test() - self.assertTrue(access.revoke_refresh_token(refresh_token)) + + assert access.revoke_refresh_token(refresh_token) def test_revoke_refresh_token_unexistent_successfully(self): - self.assertTrue(access.revoke_refresh_token("refresh_token")) + assert access.revoke_refresh_token("refresh_token") def test_revoke_refresh_token_and_use_old_refresh_token_fails(self): refresh_token = generate_refresh_token_for_test() - self.assertTrue(access.revoke_refresh_token(refresh_token)) - with self.assertRaises(UnauthorizedException): + assert access.revoke_refresh_token(refresh_token) + with pytest.raises(UnauthorizedException): access.get_tokens(refresh_token=refresh_token) def test_revoke_refresh_token_invalid_and_use_valid_refresh_token_successfully( self, ): refresh_token = generate_refresh_token_for_test() - self.assertTrue(access.revoke_refresh_token("refresh_token")) + assert access.revoke_refresh_token("refresh_token") user_tokens = access.get_tokens(refresh_token=refresh_token) user_tokens = assert_tokens(self, user_tokens) - self.assertEqual(refresh_token, user_tokens.refresh_token) + assert user_tokens.refresh_token == refresh_token def generate_refresh_token_for_test(): From c90785fe61042d7db814c22306bc3063e7ae9f92 Mon Sep 17 00:00:00 2001 From: Emmanuel Hadoux Date: Wed, 12 Mar 2025 17:40:50 +0000 Subject: [PATCH 6/9] remove lockfile --- .gitignore | 1 + poetry.lock | 1318 --------------------------------------------------- 2 files changed, 1 insertion(+), 1318 deletions(-) delete mode 100644 poetry.lock diff --git a/.gitignore b/.gitignore index 3797236..4ad52d2 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,4 @@ auth venv .env docs +poetry.lock \ No newline at end of file diff --git a/poetry.lock b/poetry.lock deleted file mode 100644 index 46b241c..0000000 --- a/poetry.lock +++ /dev/null @@ -1,1318 +0,0 @@ -# This file is automatically @generated by Poetry 2.0.1 and should not be changed by hand. - -[[package]] -name = "alabaster" -version = "1.0.0" -description = "A light, configurable Sphinx theme" -optional = false -python-versions = ">=3.10" -groups = ["dev"] -files = [ - {file = "alabaster-1.0.0-py3-none-any.whl", hash = "sha256:fc6786402dc3fcb2de3cabd5fe455a2db534b371124f1f21de8731783dec828b"}, - {file = "alabaster-1.0.0.tar.gz", hash = "sha256:c00dca57bca26fa62a6d7d0a9fcce65f3e026e9bfe33e9c538fd3fbb2144fd9e"}, -] - -[[package]] -name = "babel" -version = "2.17.0" -description = "Internationalization utilities" -optional = false -python-versions = ">=3.8" -groups = ["dev"] -files = [ - {file = "babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2"}, - {file = "babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d"}, -] - -[package.extras] -dev = ["backports.zoneinfo", "freezegun (>=1.0,<2.0)", "jinja2 (>=3.0)", "pytest (>=6.0)", "pytest-cov", "pytz", "setuptools", "tzdata"] - -[[package]] -name = "boto3" -version = "1.37.11" -description = "The AWS SDK for Python" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "boto3-1.37.11-py3-none-any.whl", hash = "sha256:da6c22fc8a7e9bca5d7fc465a877ac3d45b6b086d776bd1a6c55bdde60523741"}, - {file = "boto3-1.37.11.tar.gz", hash = "sha256:8eec08363ef5db05c2fbf58e89f0c0de6276cda2fdce01e76b3b5f423cd5c0f4"}, -] - -[package.dependencies] -botocore = ">=1.37.11,<1.38.0" -jmespath = ">=0.7.1,<2.0.0" -s3transfer = ">=0.11.0,<0.12.0" - -[package.extras] -crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] - -[[package]] -name = "botocore" -version = "1.37.11" -description = "Low-level, data-driven core of boto 3." -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "botocore-1.37.11-py3-none-any.whl", hash = "sha256:02505309b1235f9f15a6da79103ca224b3f3dc5f6a62f8630fbb2c6ed05e2da8"}, - {file = "botocore-1.37.11.tar.gz", hash = "sha256:72eb3a9a58b064be26ba154e5e56373633b58f951941c340ace0d379590d98b5"}, -] - -[package.dependencies] -jmespath = ">=0.7.1,<2.0.0" -python-dateutil = ">=2.1,<3.0.0" -urllib3 = {version = ">=1.25.4,<2.2.0 || >2.2.0,<3", markers = "python_version >= \"3.10\""} - -[package.extras] -crt = ["awscrt (==0.23.8)"] - -[[package]] -name = "botocore-stubs" -version = "1.37.11" -description = "Type annotations and code completion for botocore" -optional = false -python-versions = ">=3.8" -groups = ["dev"] -files = [ - {file = "botocore_stubs-1.37.11-py3-none-any.whl", hash = "sha256:bec458a0d054892cdf82466b4d075f30a36fa03ce34f9becbcace5f36ec674bf"}, - {file = "botocore_stubs-1.37.11.tar.gz", hash = "sha256:9b89ba9a98eb9f088a5f82c52488013858092777c17b56265574bbf2d21da422"}, -] - -[package.dependencies] -types-awscrt = "*" - -[package.extras] -botocore = ["botocore"] - -[[package]] -name = "certifi" -version = "2025.1.31" -description = "Python package for providing Mozilla's CA Bundle." -optional = false -python-versions = ">=3.6" -groups = ["dev"] -files = [ - {file = "certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe"}, - {file = "certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651"}, -] - -[[package]] -name = "charset-normalizer" -version = "3.4.1" -description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -optional = false -python-versions = ">=3.7" -groups = ["dev"] -files = [ - {file = "charset_normalizer-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-win32.whl", hash = "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-win32.whl", hash = "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-win32.whl", hash = "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-win32.whl", hash = "sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-win32.whl", hash = "sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-win32.whl", hash = "sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765"}, - {file = "charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85"}, - {file = "charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3"}, -] - -[[package]] -name = "colorama" -version = "0.4.6" -description = "Cross-platform colored terminal text." -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -groups = ["dev"] -markers = "sys_platform == \"win32\"" -files = [ - {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, - {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, -] - -[[package]] -name = "coverage" -version = "7.6.12" -description = "Code coverage measurement for Python" -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "coverage-7.6.12-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:704c8c8c6ce6569286ae9622e534b4f5b9759b6f2cd643f1c1a61f666d534fe8"}, - {file = "coverage-7.6.12-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ad7525bf0241e5502168ae9c643a2f6c219fa0a283001cee4cf23a9b7da75879"}, - {file = "coverage-7.6.12-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06097c7abfa611c91edb9e6920264e5be1d6ceb374efb4986f38b09eed4cb2fe"}, - {file = "coverage-7.6.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:220fa6c0ad7d9caef57f2c8771918324563ef0d8272c94974717c3909664e674"}, - {file = "coverage-7.6.12-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3688b99604a24492bcfe1c106278c45586eb819bf66a654d8a9a1433022fb2eb"}, - {file = "coverage-7.6.12-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d1a987778b9c71da2fc8948e6f2656da6ef68f59298b7e9786849634c35d2c3c"}, - {file = "coverage-7.6.12-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:cec6b9ce3bd2b7853d4a4563801292bfee40b030c05a3d29555fd2a8ee9bd68c"}, - {file = "coverage-7.6.12-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ace9048de91293e467b44bce0f0381345078389814ff6e18dbac8fdbf896360e"}, - {file = "coverage-7.6.12-cp310-cp310-win32.whl", hash = "sha256:ea31689f05043d520113e0552f039603c4dd71fa4c287b64cb3606140c66f425"}, - {file = "coverage-7.6.12-cp310-cp310-win_amd64.whl", hash = "sha256:676f92141e3c5492d2a1596d52287d0d963df21bf5e55c8b03075a60e1ddf8aa"}, - {file = "coverage-7.6.12-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e18aafdfb3e9ec0d261c942d35bd7c28d031c5855dadb491d2723ba54f4c3015"}, - {file = "coverage-7.6.12-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:66fe626fd7aa5982cdebad23e49e78ef7dbb3e3c2a5960a2b53632f1f703ea45"}, - {file = "coverage-7.6.12-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ef01d70198431719af0b1f5dcbefc557d44a190e749004042927b2a3fed0702"}, - {file = "coverage-7.6.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07e92ae5a289a4bc4c0aae710c0948d3c7892e20fd3588224ebe242039573bf0"}, - {file = "coverage-7.6.12-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e695df2c58ce526eeab11a2e915448d3eb76f75dffe338ea613c1201b33bab2f"}, - {file = "coverage-7.6.12-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d74c08e9aaef995f8c4ef6d202dbd219c318450fe2a76da624f2ebb9c8ec5d9f"}, - {file = "coverage-7.6.12-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e995b3b76ccedc27fe4f477b349b7d64597e53a43fc2961db9d3fbace085d69d"}, - {file = "coverage-7.6.12-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b1f097878d74fe51e1ddd1be62d8e3682748875b461232cf4b52ddc6e6db0bba"}, - {file = "coverage-7.6.12-cp311-cp311-win32.whl", hash = "sha256:1f7ffa05da41754e20512202c866d0ebfc440bba3b0ed15133070e20bf5aeb5f"}, - {file = "coverage-7.6.12-cp311-cp311-win_amd64.whl", hash = "sha256:e216c5c45f89ef8971373fd1c5d8d1164b81f7f5f06bbf23c37e7908d19e8558"}, - {file = "coverage-7.6.12-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b172f8e030e8ef247b3104902cc671e20df80163b60a203653150d2fc204d1ad"}, - {file = "coverage-7.6.12-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:641dfe0ab73deb7069fb972d4d9725bf11c239c309ce694dd50b1473c0f641c3"}, - {file = "coverage-7.6.12-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e549f54ac5f301e8e04c569dfdb907f7be71b06b88b5063ce9d6953d2d58574"}, - {file = "coverage-7.6.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:959244a17184515f8c52dcb65fb662808767c0bd233c1d8a166e7cf74c9ea985"}, - {file = "coverage-7.6.12-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bda1c5f347550c359f841d6614fb8ca42ae5cb0b74d39f8a1e204815ebe25750"}, - {file = "coverage-7.6.12-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1ceeb90c3eda1f2d8c4c578c14167dbd8c674ecd7d38e45647543f19839dd6ea"}, - {file = "coverage-7.6.12-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f16f44025c06792e0fb09571ae454bcc7a3ec75eeb3c36b025eccf501b1a4c3"}, - {file = "coverage-7.6.12-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b076e625396e787448d27a411aefff867db2bffac8ed04e8f7056b07024eed5a"}, - {file = "coverage-7.6.12-cp312-cp312-win32.whl", hash = "sha256:00b2086892cf06c7c2d74983c9595dc511acca00665480b3ddff749ec4fb2a95"}, - {file = "coverage-7.6.12-cp312-cp312-win_amd64.whl", hash = "sha256:7ae6eabf519bc7871ce117fb18bf14e0e343eeb96c377667e3e5dd12095e0288"}, - {file = "coverage-7.6.12-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:488c27b3db0ebee97a830e6b5a3ea930c4a6e2c07f27a5e67e1b3532e76b9ef1"}, - {file = "coverage-7.6.12-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5d1095bbee1851269f79fd8e0c9b5544e4c00c0c24965e66d8cba2eb5bb535fd"}, - {file = "coverage-7.6.12-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0533adc29adf6a69c1baa88c3d7dbcaadcffa21afbed3ca7a225a440e4744bf9"}, - {file = "coverage-7.6.12-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:53c56358d470fa507a2b6e67a68fd002364d23c83741dbc4c2e0680d80ca227e"}, - {file = "coverage-7.6.12-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64cbb1a3027c79ca6310bf101014614f6e6e18c226474606cf725238cf5bc2d4"}, - {file = "coverage-7.6.12-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:79cac3390bfa9836bb795be377395f28410811c9066bc4eefd8015258a7578c6"}, - {file = "coverage-7.6.12-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:9b148068e881faa26d878ff63e79650e208e95cf1c22bd3f77c3ca7b1d9821a3"}, - {file = "coverage-7.6.12-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8bec2ac5da793c2685ce5319ca9bcf4eee683b8a1679051f8e6ec04c4f2fd7dc"}, - {file = "coverage-7.6.12-cp313-cp313-win32.whl", hash = "sha256:200e10beb6ddd7c3ded322a4186313d5ca9e63e33d8fab4faa67ef46d3460af3"}, - {file = "coverage-7.6.12-cp313-cp313-win_amd64.whl", hash = "sha256:2b996819ced9f7dbb812c701485d58f261bef08f9b85304d41219b1496b591ef"}, - {file = "coverage-7.6.12-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:299cf973a7abff87a30609879c10df0b3bfc33d021e1adabc29138a48888841e"}, - {file = "coverage-7.6.12-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4b467a8c56974bf06e543e69ad803c6865249d7a5ccf6980457ed2bc50312703"}, - {file = "coverage-7.6.12-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2458f275944db8129f95d91aee32c828a408481ecde3b30af31d552c2ce284a0"}, - {file = "coverage-7.6.12-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a9d8be07fb0832636a0f72b80d2a652fe665e80e720301fb22b191c3434d924"}, - {file = "coverage-7.6.12-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14d47376a4f445e9743f6c83291e60adb1b127607a3618e3185bbc8091f0467b"}, - {file = "coverage-7.6.12-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b95574d06aa9d2bd6e5cc35a5bbe35696342c96760b69dc4287dbd5abd4ad51d"}, - {file = "coverage-7.6.12-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:ecea0c38c9079570163d663c0433a9af4094a60aafdca491c6a3d248c7432827"}, - {file = "coverage-7.6.12-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:2251fabcfee0a55a8578a9d29cecfee5f2de02f11530e7d5c5a05859aa85aee9"}, - {file = "coverage-7.6.12-cp313-cp313t-win32.whl", hash = "sha256:eb5507795caabd9b2ae3f1adc95f67b1104971c22c624bb354232d65c4fc90b3"}, - {file = "coverage-7.6.12-cp313-cp313t-win_amd64.whl", hash = "sha256:f60a297c3987c6c02ffb29effc70eadcbb412fe76947d394a1091a3615948e2f"}, - {file = "coverage-7.6.12-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e7575ab65ca8399c8c4f9a7d61bbd2d204c8b8e447aab9d355682205c9dd948d"}, - {file = "coverage-7.6.12-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8161d9fbc7e9fe2326de89cd0abb9f3599bccc1287db0aba285cb68d204ce929"}, - {file = "coverage-7.6.12-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a1e465f398c713f1b212400b4e79a09829cd42aebd360362cd89c5bdc44eb87"}, - {file = "coverage-7.6.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f25d8b92a4e31ff1bd873654ec367ae811b3a943583e05432ea29264782dc32c"}, - {file = "coverage-7.6.12-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a936309a65cc5ca80fa9f20a442ff9e2d06927ec9a4f54bcba9c14c066323f2"}, - {file = "coverage-7.6.12-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:aa6f302a3a0b5f240ee201297fff0bbfe2fa0d415a94aeb257d8b461032389bd"}, - {file = "coverage-7.6.12-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:f973643ef532d4f9be71dd88cf7588936685fdb576d93a79fe9f65bc337d9d73"}, - {file = "coverage-7.6.12-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:78f5243bb6b1060aed6213d5107744c19f9571ec76d54c99cc15938eb69e0e86"}, - {file = "coverage-7.6.12-cp39-cp39-win32.whl", hash = "sha256:69e62c5034291c845fc4df7f8155e8544178b6c774f97a99e2734b05eb5bed31"}, - {file = "coverage-7.6.12-cp39-cp39-win_amd64.whl", hash = "sha256:b01a840ecc25dce235ae4c1b6a0daefb2a203dba0e6e980637ee9c2f6ee0df57"}, - {file = "coverage-7.6.12-pp39.pp310-none-any.whl", hash = "sha256:7e39e845c4d764208e7b8f6a21c541ade741e2c41afabdfa1caa28687a3c98cf"}, - {file = "coverage-7.6.12-py3-none-any.whl", hash = "sha256:eb8668cfbc279a536c633137deeb9435d2962caec279c3f8cf8b91fff6ff8953"}, - {file = "coverage-7.6.12.tar.gz", hash = "sha256:48cfc4641d95d34766ad41d9573cc0f22a48aa88d22657a1fe01dca0dbae4de2"}, -] - -[package.extras] -toml = ["tomli"] - -[[package]] -name = "docutils" -version = "0.21.2" -description = "Docutils -- Python Documentation Utilities" -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "docutils-0.21.2-py3-none-any.whl", hash = "sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2"}, - {file = "docutils-0.21.2.tar.gz", hash = "sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f"}, -] - -[[package]] -name = "dotenv" -version = "0.9.9" -description = "Deprecated package" -optional = false -python-versions = "*" -groups = ["dev"] -files = [ - {file = "dotenv-0.9.9-py2.py3-none-any.whl", hash = "sha256:29cf74a087b31dafdb5a446b6d7e11cbce8ed2741540e2339c69fbef92c94ce9"}, -] - -[package.dependencies] -python-dotenv = "*" - -[[package]] -name = "idna" -version = "3.10" -description = "Internationalized Domain Names in Applications (IDNA)" -optional = false -python-versions = ">=3.6" -groups = ["dev"] -files = [ - {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, - {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, -] - -[package.extras] -all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] - -[[package]] -name = "imagesize" -version = "1.4.1" -description = "Getting image size from png/jpeg/jpeg2000/gif file" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -groups = ["dev"] -files = [ - {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, - {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, -] - -[[package]] -name = "iniconfig" -version = "2.0.0" -description = "brain-dead simple config-ini parsing" -optional = false -python-versions = ">=3.7" -groups = ["dev"] -files = [ - {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, - {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, -] - -[[package]] -name = "jinja2" -version = "3.1.6" -description = "A very fast and expressive template engine." -optional = false -python-versions = ">=3.7" -groups = ["dev"] -files = [ - {file = "jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"}, - {file = "jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d"}, -] - -[package.dependencies] -MarkupSafe = ">=2.0" - -[package.extras] -i18n = ["Babel (>=2.7)"] - -[[package]] -name = "jmespath" -version = "1.0.1" -description = "JSON Matching Expressions" -optional = false -python-versions = ">=3.7" -groups = ["main"] -files = [ - {file = "jmespath-1.0.1-py3-none-any.whl", hash = "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980"}, - {file = "jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe"}, -] - -[[package]] -name = "markupsafe" -version = "3.0.2" -description = "Safely add untrusted strings to HTML/XML markup." -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-win32.whl", hash = "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a"}, - {file = "markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0"}, -] - -[[package]] -name = "packaging" -version = "24.2" -description = "Core utilities for Python packages" -optional = false -python-versions = ">=3.8" -groups = ["dev"] -files = [ - {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, - {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, -] - -[[package]] -name = "pluggy" -version = "1.5.0" -description = "plugin and hook calling mechanisms for python" -optional = false -python-versions = ">=3.8" -groups = ["dev"] -files = [ - {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, - {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, -] - -[package.extras] -dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] - -[[package]] -name = "pygments" -version = "2.19.1" -description = "Pygments is a syntax highlighting package written in Python." -optional = false -python-versions = ">=3.8" -groups = ["dev"] -files = [ - {file = "pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c"}, - {file = "pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f"}, -] - -[package.extras] -windows-terminal = ["colorama (>=0.4.6)"] - -[[package]] -name = "pyotp" -version = "2.9.0" -description = "Python One Time Password Library" -optional = false -python-versions = ">=3.7" -groups = ["dev"] -files = [ - {file = "pyotp-2.9.0-py3-none-any.whl", hash = "sha256:81c2e5865b8ac55e825b0358e496e1d9387c811e85bb40e71a3b29b288963612"}, - {file = "pyotp-2.9.0.tar.gz", hash = "sha256:346b6642e0dbdde3b4ff5a930b664ca82abfa116356ed48cc42c7d6590d36f63"}, -] - -[package.extras] -test = ["coverage", "mypy", "ruff", "wheel"] - -[[package]] -name = "pytest" -version = "8.3.5" -description = "pytest: simple powerful testing with Python" -optional = false -python-versions = ">=3.8" -groups = ["dev"] -files = [ - {file = "pytest-8.3.5-py3-none-any.whl", hash = "sha256:c69214aa47deac29fad6c2a4f590b9c4a9fdb16a403176fe154b79c0b4d4d820"}, - {file = "pytest-8.3.5.tar.gz", hash = "sha256:f4efe70cc14e511565ac476b57c279e12a855b11f48f212af1080ef2263d3845"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "sys_platform == \"win32\""} -iniconfig = "*" -packaging = "*" -pluggy = ">=1.5,<2" - -[package.extras] -dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] - -[[package]] -name = "python-dateutil" -version = "2.9.0.post0" -description = "Extensions to the standard Python datetime module" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -groups = ["main"] -files = [ - {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, - {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, -] - -[package.dependencies] -six = ">=1.5" - -[[package]] -name = "python-dotenv" -version = "1.0.1" -description = "Read key-value pairs from a .env file and set them as environment variables" -optional = false -python-versions = ">=3.8" -groups = ["dev"] -files = [ - {file = "python-dotenv-1.0.1.tar.gz", hash = "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca"}, - {file = "python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a"}, -] - -[package.extras] -cli = ["click (>=5.0)"] - -[[package]] -name = "requests" -version = "2.32.3" -description = "Python HTTP for Humans." -optional = false -python-versions = ">=3.8" -groups = ["dev"] -files = [ - {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, - {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, -] - -[package.dependencies] -certifi = ">=2017.4.17" -charset-normalizer = ">=2,<4" -idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<3" - -[package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] - -[[package]] -name = "roman-numerals-py" -version = "3.1.0" -description = "Manipulate well-formed Roman numerals" -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "roman_numerals_py-3.1.0-py3-none-any.whl", hash = "sha256:9da2ad2fb670bcf24e81070ceb3be72f6c11c440d73bd579fbeca1e9f330954c"}, - {file = "roman_numerals_py-3.1.0.tar.gz", hash = "sha256:be4bf804f083a4ce001b5eb7e3c0862479d10f94c936f6c4e5f250aa5ff5bd2d"}, -] - -[package.extras] -lint = ["mypy (==1.15.0)", "pyright (==1.1.394)", "ruff (==0.9.7)"] -test = ["pytest (>=8)"] - -[[package]] -name = "s3transfer" -version = "0.11.4" -description = "An Amazon S3 Transfer Manager" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "s3transfer-0.11.4-py3-none-any.whl", hash = "sha256:ac265fa68318763a03bf2dc4f39d5cbd6a9e178d81cc9483ad27da33637e320d"}, - {file = "s3transfer-0.11.4.tar.gz", hash = "sha256:559f161658e1cf0a911f45940552c696735f5c74e64362e515f333ebed87d679"}, -] - -[package.dependencies] -botocore = ">=1.37.4,<2.0a.0" - -[package.extras] -crt = ["botocore[crt] (>=1.37.4,<2.0a.0)"] - -[[package]] -name = "six" -version = "1.17.0" -description = "Python 2 and 3 compatibility utilities" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -groups = ["main"] -files = [ - {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, - {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, -] - -[[package]] -name = "snowballstemmer" -version = "2.2.0" -description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." -optional = false -python-versions = "*" -groups = ["dev"] -files = [ - {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, - {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, -] - -[[package]] -name = "sphinx" -version = "8.2.3" -description = "Python documentation generator" -optional = false -python-versions = ">=3.11" -groups = ["dev"] -files = [ - {file = "sphinx-8.2.3-py3-none-any.whl", hash = "sha256:4405915165f13521d875a8c29c8970800a0141c14cc5416a38feca4ea5d9b9c3"}, - {file = "sphinx-8.2.3.tar.gz", hash = "sha256:398ad29dee7f63a75888314e9424d40f52ce5a6a87ae88e7071e80af296ec348"}, -] - -[package.dependencies] -alabaster = ">=0.7.14" -babel = ">=2.13" -colorama = {version = ">=0.4.6", markers = "sys_platform == \"win32\""} -docutils = ">=0.20,<0.22" -imagesize = ">=1.3" -Jinja2 = ">=3.1" -packaging = ">=23.0" -Pygments = ">=2.17" -requests = ">=2.30.0" -roman-numerals-py = ">=1.0.0" -snowballstemmer = ">=2.2" -sphinxcontrib-applehelp = ">=1.0.7" -sphinxcontrib-devhelp = ">=1.0.6" -sphinxcontrib-htmlhelp = ">=2.0.6" -sphinxcontrib-jsmath = ">=1.0.1" -sphinxcontrib-qthelp = ">=1.0.6" -sphinxcontrib-serializinghtml = ">=1.1.9" - -[package.extras] -docs = ["sphinxcontrib-websupport"] -lint = ["betterproto (==2.0.0b6)", "mypy (==1.15.0)", "pypi-attestations (==0.0.21)", "pyright (==1.1.395)", "pytest (>=8.0)", "ruff (==0.9.9)", "sphinx-lint (>=0.9)", "types-Pillow (==10.2.0.20240822)", "types-Pygments (==2.19.0.20250219)", "types-colorama (==0.4.15.20240311)", "types-defusedxml (==0.7.0.20240218)", "types-docutils (==0.21.0.20241128)", "types-requests (==2.32.0.20241016)", "types-urllib3 (==1.26.25.14)"] -test = ["cython (>=3.0)", "defusedxml (>=0.7.1)", "pytest (>=8.0)", "pytest-xdist[psutil] (>=3.4)", "setuptools (>=70.0)", "typing_extensions (>=4.9)"] - -[[package]] -name = "sphinx-markdown-builder" -version = "0.6.8" -description = "A Sphinx extension to add markdown generation support." -optional = false -python-versions = ">=3.7" -groups = ["dev"] -files = [ - {file = "sphinx_markdown_builder-0.6.8-py3-none-any.whl", hash = "sha256:f04ab42d52449363228b9104569c56b778534f9c41a168af8cfc721a1e0e3edc"}, - {file = "sphinx_markdown_builder-0.6.8.tar.gz", hash = "sha256:6141b566bf18dd1cd515a0a90efd91c6c4d10fc638554fab2fd19cba66543dd7"}, -] - -[package.dependencies] -docutils = "*" -sphinx = ">=5.1.0" -tabulate = "*" - -[package.extras] -dev = ["black", "bumpver", "coveralls", "flake8", "isort", "pip-tools", "pylint", "pytest", "pytest-cov", "sphinx (>=5.3.0)", "sphinxcontrib-plantuml", "sphinxcontrib.httpdomain"] - -[[package]] -name = "sphinxcontrib-applehelp" -version = "2.0.0" -description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "sphinxcontrib_applehelp-2.0.0-py3-none-any.whl", hash = "sha256:4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5"}, - {file = "sphinxcontrib_applehelp-2.0.0.tar.gz", hash = "sha256:2f29ef331735ce958efa4734873f084941970894c6090408b079c61b2e1c06d1"}, -] - -[package.extras] -lint = ["mypy", "ruff (==0.5.5)", "types-docutils"] -standalone = ["Sphinx (>=5)"] -test = ["pytest"] - -[[package]] -name = "sphinxcontrib-devhelp" -version = "2.0.0" -description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents" -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "sphinxcontrib_devhelp-2.0.0-py3-none-any.whl", hash = "sha256:aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2"}, - {file = "sphinxcontrib_devhelp-2.0.0.tar.gz", hash = "sha256:411f5d96d445d1d73bb5d52133377b4248ec79db5c793ce7dbe59e074b4dd1ad"}, -] - -[package.extras] -lint = ["mypy", "ruff (==0.5.5)", "types-docutils"] -standalone = ["Sphinx (>=5)"] -test = ["pytest"] - -[[package]] -name = "sphinxcontrib-htmlhelp" -version = "2.1.0" -description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl", hash = "sha256:166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8"}, - {file = "sphinxcontrib_htmlhelp-2.1.0.tar.gz", hash = "sha256:c9e2916ace8aad64cc13a0d233ee22317f2b9025b9cf3295249fa985cc7082e9"}, -] - -[package.extras] -lint = ["mypy", "ruff (==0.5.5)", "types-docutils"] -standalone = ["Sphinx (>=5)"] -test = ["html5lib", "pytest"] - -[[package]] -name = "sphinxcontrib-jsmath" -version = "1.0.1" -description = "A sphinx extension which renders display math in HTML via JavaScript" -optional = false -python-versions = ">=3.5" -groups = ["dev"] -files = [ - {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, - {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, -] - -[package.extras] -test = ["flake8", "mypy", "pytest"] - -[[package]] -name = "sphinxcontrib-qthelp" -version = "2.0.0" -description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents" -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "sphinxcontrib_qthelp-2.0.0-py3-none-any.whl", hash = "sha256:b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb"}, - {file = "sphinxcontrib_qthelp-2.0.0.tar.gz", hash = "sha256:4fe7d0ac8fc171045be623aba3e2a8f613f8682731f9153bb2e40ece16b9bbab"}, -] - -[package.extras] -lint = ["mypy", "ruff (==0.5.5)", "types-docutils"] -standalone = ["Sphinx (>=5)"] -test = ["defusedxml (>=0.7.1)", "pytest"] - -[[package]] -name = "sphinxcontrib-serializinghtml" -version = "2.0.0" -description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)" -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl", hash = "sha256:6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331"}, - {file = "sphinxcontrib_serializinghtml-2.0.0.tar.gz", hash = "sha256:e9d912827f872c029017a53f0ef2180b327c3f7fd23c87229f7a8e8b70031d4d"}, -] - -[package.extras] -lint = ["mypy", "ruff (==0.5.5)", "types-docutils"] -standalone = ["Sphinx (>=5)"] -test = ["pytest"] - -[[package]] -name = "tabulate" -version = "0.9.0" -description = "Pretty-print tabular data" -optional = false -python-versions = ">=3.7" -groups = ["dev"] -files = [ - {file = "tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f"}, - {file = "tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c"}, -] - -[package.extras] -widechars = ["wcwidth"] - -[[package]] -name = "types-awscrt" -version = "0.24.1" -description = "Type annotations and code completion for awscrt" -optional = false -python-versions = ">=3.8" -groups = ["dev"] -files = [ - {file = "types_awscrt-0.24.1-py3-none-any.whl", hash = "sha256:f3f2578ff74a254a79882b95961fb493ba217cebc350b3eb239d1cd948d4d7fa"}, - {file = "types_awscrt-0.24.1.tar.gz", hash = "sha256:fc6eae56f8dc5a3f8cc93cc2c7c332fa82909f8284fbe25e014c575757af397d"}, -] - -[[package]] -name = "types-boto3" -version = "1.37.11" -description = "Type annotations for boto3 1.37.11 generated with mypy-boto3-builder 8.10.0" -optional = false -python-versions = ">=3.8" -groups = ["dev"] -files = [ - {file = "types_boto3-1.37.11-py3-none-any.whl", hash = "sha256:9198951239fce107d1b868ac450dcafe4b22f8212a8ce6ccdccc9856811b1ef7"}, - {file = "types_boto3-1.37.11.tar.gz", hash = "sha256:cb76c347264f72f9e870a01dbc5034e8caad87aa7edce5fe1360e7cc125e33fd"}, -] - -[package.dependencies] -botocore-stubs = "*" -types-boto3-cognito-idp = {version = ">=1.37.0,<1.38.0", optional = true, markers = "extra == \"cognito-idp\""} -types-s3transfer = "*" -typing-extensions = {version = ">=4.1.0", markers = "python_version < \"3.12\""} - -[package.extras] -accessanalyzer = ["types-boto3-accessanalyzer (>=1.37.0,<1.38.0)"] -account = ["types-boto3-account (>=1.37.0,<1.38.0)"] -acm = ["types-boto3-acm (>=1.37.0,<1.38.0)"] -acm-pca = ["types-boto3-acm-pca (>=1.37.0,<1.38.0)"] -all = ["types-boto3-accessanalyzer (>=1.37.0,<1.38.0)", "types-boto3-account (>=1.37.0,<1.38.0)", "types-boto3-acm (>=1.37.0,<1.38.0)", "types-boto3-acm-pca (>=1.37.0,<1.38.0)", "types-boto3-amp (>=1.37.0,<1.38.0)", "types-boto3-amplify (>=1.37.0,<1.38.0)", "types-boto3-amplifybackend (>=1.37.0,<1.38.0)", "types-boto3-amplifyuibuilder (>=1.37.0,<1.38.0)", "types-boto3-apigateway (>=1.37.0,<1.38.0)", "types-boto3-apigatewaymanagementapi (>=1.37.0,<1.38.0)", "types-boto3-apigatewayv2 (>=1.37.0,<1.38.0)", "types-boto3-appconfig (>=1.37.0,<1.38.0)", "types-boto3-appconfigdata (>=1.37.0,<1.38.0)", "types-boto3-appfabric (>=1.37.0,<1.38.0)", "types-boto3-appflow (>=1.37.0,<1.38.0)", "types-boto3-appintegrations (>=1.37.0,<1.38.0)", "types-boto3-application-autoscaling (>=1.37.0,<1.38.0)", "types-boto3-application-insights (>=1.37.0,<1.38.0)", "types-boto3-application-signals (>=1.37.0,<1.38.0)", "types-boto3-applicationcostprofiler (>=1.37.0,<1.38.0)", "types-boto3-appmesh (>=1.37.0,<1.38.0)", "types-boto3-apprunner (>=1.37.0,<1.38.0)", "types-boto3-appstream (>=1.37.0,<1.38.0)", "types-boto3-appsync (>=1.37.0,<1.38.0)", "types-boto3-apptest (>=1.37.0,<1.38.0)", "types-boto3-arc-zonal-shift (>=1.37.0,<1.38.0)", "types-boto3-artifact (>=1.37.0,<1.38.0)", "types-boto3-athena (>=1.37.0,<1.38.0)", "types-boto3-auditmanager (>=1.37.0,<1.38.0)", "types-boto3-autoscaling (>=1.37.0,<1.38.0)", "types-boto3-autoscaling-plans (>=1.37.0,<1.38.0)", "types-boto3-b2bi (>=1.37.0,<1.38.0)", "types-boto3-backup (>=1.37.0,<1.38.0)", "types-boto3-backup-gateway (>=1.37.0,<1.38.0)", "types-boto3-backupsearch (>=1.37.0,<1.38.0)", "types-boto3-batch (>=1.37.0,<1.38.0)", "types-boto3-bcm-data-exports (>=1.37.0,<1.38.0)", "types-boto3-bcm-pricing-calculator (>=1.37.0,<1.38.0)", "types-boto3-bedrock (>=1.37.0,<1.38.0)", "types-boto3-bedrock-agent (>=1.37.0,<1.38.0)", "types-boto3-bedrock-agent-runtime (>=1.37.0,<1.38.0)", "types-boto3-bedrock-data-automation (>=1.37.0,<1.38.0)", "types-boto3-bedrock-data-automation-runtime (>=1.37.0,<1.38.0)", "types-boto3-bedrock-runtime (>=1.37.0,<1.38.0)", "types-boto3-billing (>=1.37.0,<1.38.0)", "types-boto3-billingconductor (>=1.37.0,<1.38.0)", "types-boto3-braket (>=1.37.0,<1.38.0)", "types-boto3-budgets (>=1.37.0,<1.38.0)", "types-boto3-ce (>=1.37.0,<1.38.0)", "types-boto3-chatbot (>=1.37.0,<1.38.0)", "types-boto3-chime (>=1.37.0,<1.38.0)", "types-boto3-chime-sdk-identity (>=1.37.0,<1.38.0)", "types-boto3-chime-sdk-media-pipelines (>=1.37.0,<1.38.0)", "types-boto3-chime-sdk-meetings (>=1.37.0,<1.38.0)", "types-boto3-chime-sdk-messaging (>=1.37.0,<1.38.0)", "types-boto3-chime-sdk-voice (>=1.37.0,<1.38.0)", "types-boto3-cleanrooms (>=1.37.0,<1.38.0)", "types-boto3-cleanroomsml (>=1.37.0,<1.38.0)", "types-boto3-cloud9 (>=1.37.0,<1.38.0)", "types-boto3-cloudcontrol (>=1.37.0,<1.38.0)", "types-boto3-clouddirectory (>=1.37.0,<1.38.0)", "types-boto3-cloudformation (>=1.37.0,<1.38.0)", "types-boto3-cloudfront (>=1.37.0,<1.38.0)", "types-boto3-cloudfront-keyvaluestore (>=1.37.0,<1.38.0)", "types-boto3-cloudhsm (>=1.37.0,<1.38.0)", "types-boto3-cloudhsmv2 (>=1.37.0,<1.38.0)", "types-boto3-cloudsearch (>=1.37.0,<1.38.0)", "types-boto3-cloudsearchdomain (>=1.37.0,<1.38.0)", "types-boto3-cloudtrail (>=1.37.0,<1.38.0)", "types-boto3-cloudtrail-data (>=1.37.0,<1.38.0)", "types-boto3-cloudwatch (>=1.37.0,<1.38.0)", "types-boto3-codeartifact (>=1.37.0,<1.38.0)", "types-boto3-codebuild (>=1.37.0,<1.38.0)", "types-boto3-codecatalyst (>=1.37.0,<1.38.0)", "types-boto3-codecommit (>=1.37.0,<1.38.0)", "types-boto3-codeconnections (>=1.37.0,<1.38.0)", "types-boto3-codedeploy (>=1.37.0,<1.38.0)", "types-boto3-codeguru-reviewer (>=1.37.0,<1.38.0)", "types-boto3-codeguru-security (>=1.37.0,<1.38.0)", "types-boto3-codeguruprofiler (>=1.37.0,<1.38.0)", "types-boto3-codepipeline (>=1.37.0,<1.38.0)", "types-boto3-codestar-connections (>=1.37.0,<1.38.0)", "types-boto3-codestar-notifications (>=1.37.0,<1.38.0)", "types-boto3-cognito-identity (>=1.37.0,<1.38.0)", "types-boto3-cognito-idp (>=1.37.0,<1.38.0)", "types-boto3-cognito-sync (>=1.37.0,<1.38.0)", "types-boto3-comprehend (>=1.37.0,<1.38.0)", "types-boto3-comprehendmedical (>=1.37.0,<1.38.0)", "types-boto3-compute-optimizer (>=1.37.0,<1.38.0)", "types-boto3-config (>=1.37.0,<1.38.0)", "types-boto3-connect (>=1.37.0,<1.38.0)", "types-boto3-connect-contact-lens (>=1.37.0,<1.38.0)", "types-boto3-connectcampaigns (>=1.37.0,<1.38.0)", "types-boto3-connectcampaignsv2 (>=1.37.0,<1.38.0)", "types-boto3-connectcases (>=1.37.0,<1.38.0)", "types-boto3-connectparticipant (>=1.37.0,<1.38.0)", "types-boto3-controlcatalog (>=1.37.0,<1.38.0)", "types-boto3-controltower (>=1.37.0,<1.38.0)", "types-boto3-cost-optimization-hub (>=1.37.0,<1.38.0)", "types-boto3-cur (>=1.37.0,<1.38.0)", "types-boto3-customer-profiles (>=1.37.0,<1.38.0)", "types-boto3-databrew (>=1.37.0,<1.38.0)", "types-boto3-dataexchange (>=1.37.0,<1.38.0)", "types-boto3-datapipeline (>=1.37.0,<1.38.0)", "types-boto3-datasync (>=1.37.0,<1.38.0)", "types-boto3-datazone (>=1.37.0,<1.38.0)", "types-boto3-dax (>=1.37.0,<1.38.0)", "types-boto3-deadline (>=1.37.0,<1.38.0)", "types-boto3-detective (>=1.37.0,<1.38.0)", "types-boto3-devicefarm (>=1.37.0,<1.38.0)", "types-boto3-devops-guru (>=1.37.0,<1.38.0)", "types-boto3-directconnect (>=1.37.0,<1.38.0)", "types-boto3-discovery (>=1.37.0,<1.38.0)", "types-boto3-dlm (>=1.37.0,<1.38.0)", "types-boto3-dms (>=1.37.0,<1.38.0)", "types-boto3-docdb (>=1.37.0,<1.38.0)", "types-boto3-docdb-elastic (>=1.37.0,<1.38.0)", "types-boto3-drs (>=1.37.0,<1.38.0)", "types-boto3-ds (>=1.37.0,<1.38.0)", "types-boto3-ds-data (>=1.37.0,<1.38.0)", "types-boto3-dsql (>=1.37.0,<1.38.0)", "types-boto3-dynamodb (>=1.37.0,<1.38.0)", "types-boto3-dynamodbstreams (>=1.37.0,<1.38.0)", "types-boto3-ebs (>=1.37.0,<1.38.0)", "types-boto3-ec2 (>=1.37.0,<1.38.0)", "types-boto3-ec2-instance-connect (>=1.37.0,<1.38.0)", "types-boto3-ecr (>=1.37.0,<1.38.0)", "types-boto3-ecr-public (>=1.37.0,<1.38.0)", "types-boto3-ecs (>=1.37.0,<1.38.0)", "types-boto3-efs (>=1.37.0,<1.38.0)", "types-boto3-eks (>=1.37.0,<1.38.0)", "types-boto3-eks-auth (>=1.37.0,<1.38.0)", "types-boto3-elasticache (>=1.37.0,<1.38.0)", "types-boto3-elasticbeanstalk (>=1.37.0,<1.38.0)", "types-boto3-elastictranscoder (>=1.37.0,<1.38.0)", "types-boto3-elb (>=1.37.0,<1.38.0)", "types-boto3-elbv2 (>=1.37.0,<1.38.0)", "types-boto3-emr (>=1.37.0,<1.38.0)", "types-boto3-emr-containers (>=1.37.0,<1.38.0)", "types-boto3-emr-serverless (>=1.37.0,<1.38.0)", "types-boto3-entityresolution (>=1.37.0,<1.38.0)", "types-boto3-es (>=1.37.0,<1.38.0)", "types-boto3-events (>=1.37.0,<1.38.0)", "types-boto3-evidently (>=1.37.0,<1.38.0)", "types-boto3-finspace (>=1.37.0,<1.38.0)", "types-boto3-finspace-data (>=1.37.0,<1.38.0)", "types-boto3-firehose (>=1.37.0,<1.38.0)", "types-boto3-fis (>=1.37.0,<1.38.0)", "types-boto3-fms (>=1.37.0,<1.38.0)", "types-boto3-forecast (>=1.37.0,<1.38.0)", "types-boto3-forecastquery (>=1.37.0,<1.38.0)", "types-boto3-frauddetector (>=1.37.0,<1.38.0)", "types-boto3-freetier (>=1.37.0,<1.38.0)", "types-boto3-fsx (>=1.37.0,<1.38.0)", "types-boto3-gamelift (>=1.37.0,<1.38.0)", "types-boto3-gameliftstreams (>=1.37.0,<1.38.0)", "types-boto3-geo-maps (>=1.37.0,<1.38.0)", "types-boto3-geo-places (>=1.37.0,<1.38.0)", "types-boto3-geo-routes (>=1.37.0,<1.38.0)", "types-boto3-glacier (>=1.37.0,<1.38.0)", "types-boto3-globalaccelerator (>=1.37.0,<1.38.0)", "types-boto3-glue (>=1.37.0,<1.38.0)", "types-boto3-grafana (>=1.37.0,<1.38.0)", "types-boto3-greengrass (>=1.37.0,<1.38.0)", "types-boto3-greengrassv2 (>=1.37.0,<1.38.0)", "types-boto3-groundstation (>=1.37.0,<1.38.0)", "types-boto3-guardduty (>=1.37.0,<1.38.0)", "types-boto3-health (>=1.37.0,<1.38.0)", "types-boto3-healthlake (>=1.37.0,<1.38.0)", "types-boto3-iam (>=1.37.0,<1.38.0)", "types-boto3-identitystore (>=1.37.0,<1.38.0)", "types-boto3-imagebuilder (>=1.37.0,<1.38.0)", "types-boto3-importexport (>=1.37.0,<1.38.0)", "types-boto3-inspector (>=1.37.0,<1.38.0)", "types-boto3-inspector-scan (>=1.37.0,<1.38.0)", "types-boto3-inspector2 (>=1.37.0,<1.38.0)", "types-boto3-internetmonitor (>=1.37.0,<1.38.0)", "types-boto3-invoicing (>=1.37.0,<1.38.0)", "types-boto3-iot (>=1.37.0,<1.38.0)", "types-boto3-iot-data (>=1.37.0,<1.38.0)", "types-boto3-iot-jobs-data (>=1.37.0,<1.38.0)", "types-boto3-iot-managed-integrations (>=1.37.0,<1.38.0)", "types-boto3-iotanalytics (>=1.37.0,<1.38.0)", "types-boto3-iotdeviceadvisor (>=1.37.0,<1.38.0)", "types-boto3-iotevents (>=1.37.0,<1.38.0)", "types-boto3-iotevents-data (>=1.37.0,<1.38.0)", "types-boto3-iotfleethub (>=1.37.0,<1.38.0)", "types-boto3-iotfleetwise (>=1.37.0,<1.38.0)", "types-boto3-iotsecuretunneling (>=1.37.0,<1.38.0)", "types-boto3-iotsitewise (>=1.37.0,<1.38.0)", "types-boto3-iotthingsgraph (>=1.37.0,<1.38.0)", "types-boto3-iottwinmaker (>=1.37.0,<1.38.0)", "types-boto3-iotwireless (>=1.37.0,<1.38.0)", "types-boto3-ivs (>=1.37.0,<1.38.0)", "types-boto3-ivs-realtime (>=1.37.0,<1.38.0)", "types-boto3-ivschat (>=1.37.0,<1.38.0)", "types-boto3-kafka (>=1.37.0,<1.38.0)", "types-boto3-kafkaconnect (>=1.37.0,<1.38.0)", "types-boto3-kendra (>=1.37.0,<1.38.0)", "types-boto3-kendra-ranking (>=1.37.0,<1.38.0)", "types-boto3-keyspaces (>=1.37.0,<1.38.0)", "types-boto3-kinesis (>=1.37.0,<1.38.0)", "types-boto3-kinesis-video-archived-media (>=1.37.0,<1.38.0)", "types-boto3-kinesis-video-media (>=1.37.0,<1.38.0)", "types-boto3-kinesis-video-signaling (>=1.37.0,<1.38.0)", "types-boto3-kinesis-video-webrtc-storage (>=1.37.0,<1.38.0)", "types-boto3-kinesisanalytics (>=1.37.0,<1.38.0)", "types-boto3-kinesisanalyticsv2 (>=1.37.0,<1.38.0)", "types-boto3-kinesisvideo (>=1.37.0,<1.38.0)", "types-boto3-kms (>=1.37.0,<1.38.0)", "types-boto3-lakeformation (>=1.37.0,<1.38.0)", "types-boto3-lambda (>=1.37.0,<1.38.0)", "types-boto3-launch-wizard (>=1.37.0,<1.38.0)", "types-boto3-lex-models (>=1.37.0,<1.38.0)", "types-boto3-lex-runtime (>=1.37.0,<1.38.0)", "types-boto3-lexv2-models (>=1.37.0,<1.38.0)", "types-boto3-lexv2-runtime (>=1.37.0,<1.38.0)", "types-boto3-license-manager (>=1.37.0,<1.38.0)", "types-boto3-license-manager-linux-subscriptions (>=1.37.0,<1.38.0)", "types-boto3-license-manager-user-subscriptions (>=1.37.0,<1.38.0)", "types-boto3-lightsail (>=1.37.0,<1.38.0)", "types-boto3-location (>=1.37.0,<1.38.0)", "types-boto3-logs (>=1.37.0,<1.38.0)", "types-boto3-lookoutequipment (>=1.37.0,<1.38.0)", "types-boto3-lookoutmetrics (>=1.37.0,<1.38.0)", "types-boto3-lookoutvision (>=1.37.0,<1.38.0)", "types-boto3-m2 (>=1.37.0,<1.38.0)", "types-boto3-machinelearning (>=1.37.0,<1.38.0)", "types-boto3-macie2 (>=1.37.0,<1.38.0)", "types-boto3-mailmanager (>=1.37.0,<1.38.0)", "types-boto3-managedblockchain (>=1.37.0,<1.38.0)", "types-boto3-managedblockchain-query (>=1.37.0,<1.38.0)", "types-boto3-marketplace-agreement (>=1.37.0,<1.38.0)", "types-boto3-marketplace-catalog (>=1.37.0,<1.38.0)", "types-boto3-marketplace-deployment (>=1.37.0,<1.38.0)", "types-boto3-marketplace-entitlement (>=1.37.0,<1.38.0)", "types-boto3-marketplace-reporting (>=1.37.0,<1.38.0)", "types-boto3-marketplacecommerceanalytics (>=1.37.0,<1.38.0)", "types-boto3-mediaconnect (>=1.37.0,<1.38.0)", "types-boto3-mediaconvert (>=1.37.0,<1.38.0)", "types-boto3-medialive (>=1.37.0,<1.38.0)", "types-boto3-mediapackage (>=1.37.0,<1.38.0)", "types-boto3-mediapackage-vod (>=1.37.0,<1.38.0)", "types-boto3-mediapackagev2 (>=1.37.0,<1.38.0)", "types-boto3-mediastore (>=1.37.0,<1.38.0)", "types-boto3-mediastore-data (>=1.37.0,<1.38.0)", "types-boto3-mediatailor (>=1.37.0,<1.38.0)", "types-boto3-medical-imaging (>=1.37.0,<1.38.0)", "types-boto3-memorydb (>=1.37.0,<1.38.0)", "types-boto3-meteringmarketplace (>=1.37.0,<1.38.0)", "types-boto3-mgh (>=1.37.0,<1.38.0)", "types-boto3-mgn (>=1.37.0,<1.38.0)", "types-boto3-migration-hub-refactor-spaces (>=1.37.0,<1.38.0)", "types-boto3-migrationhub-config (>=1.37.0,<1.38.0)", "types-boto3-migrationhuborchestrator (>=1.37.0,<1.38.0)", "types-boto3-migrationhubstrategy (>=1.37.0,<1.38.0)", "types-boto3-mq (>=1.37.0,<1.38.0)", "types-boto3-mturk (>=1.37.0,<1.38.0)", "types-boto3-mwaa (>=1.37.0,<1.38.0)", "types-boto3-neptune (>=1.37.0,<1.38.0)", "types-boto3-neptune-graph (>=1.37.0,<1.38.0)", "types-boto3-neptunedata (>=1.37.0,<1.38.0)", "types-boto3-network-firewall (>=1.37.0,<1.38.0)", "types-boto3-networkflowmonitor (>=1.37.0,<1.38.0)", "types-boto3-networkmanager (>=1.37.0,<1.38.0)", "types-boto3-networkmonitor (>=1.37.0,<1.38.0)", "types-boto3-notifications (>=1.37.0,<1.38.0)", "types-boto3-notificationscontacts (>=1.37.0,<1.38.0)", "types-boto3-oam (>=1.37.0,<1.38.0)", "types-boto3-observabilityadmin (>=1.37.0,<1.38.0)", "types-boto3-omics (>=1.37.0,<1.38.0)", "types-boto3-opensearch (>=1.37.0,<1.38.0)", "types-boto3-opensearchserverless (>=1.37.0,<1.38.0)", "types-boto3-opsworks (>=1.37.0,<1.38.0)", "types-boto3-opsworkscm (>=1.37.0,<1.38.0)", "types-boto3-organizations (>=1.37.0,<1.38.0)", "types-boto3-osis (>=1.37.0,<1.38.0)", "types-boto3-outposts (>=1.37.0,<1.38.0)", "types-boto3-panorama (>=1.37.0,<1.38.0)", "types-boto3-partnercentral-selling (>=1.37.0,<1.38.0)", "types-boto3-payment-cryptography (>=1.37.0,<1.38.0)", "types-boto3-payment-cryptography-data (>=1.37.0,<1.38.0)", "types-boto3-pca-connector-ad (>=1.37.0,<1.38.0)", "types-boto3-pca-connector-scep (>=1.37.0,<1.38.0)", "types-boto3-pcs (>=1.37.0,<1.38.0)", "types-boto3-personalize (>=1.37.0,<1.38.0)", "types-boto3-personalize-events (>=1.37.0,<1.38.0)", "types-boto3-personalize-runtime (>=1.37.0,<1.38.0)", "types-boto3-pi (>=1.37.0,<1.38.0)", "types-boto3-pinpoint (>=1.37.0,<1.38.0)", "types-boto3-pinpoint-email (>=1.37.0,<1.38.0)", "types-boto3-pinpoint-sms-voice (>=1.37.0,<1.38.0)", "types-boto3-pinpoint-sms-voice-v2 (>=1.37.0,<1.38.0)", "types-boto3-pipes (>=1.37.0,<1.38.0)", "types-boto3-polly (>=1.37.0,<1.38.0)", "types-boto3-pricing (>=1.37.0,<1.38.0)", "types-boto3-privatenetworks (>=1.37.0,<1.38.0)", "types-boto3-proton (>=1.37.0,<1.38.0)", "types-boto3-qapps (>=1.37.0,<1.38.0)", "types-boto3-qbusiness (>=1.37.0,<1.38.0)", "types-boto3-qconnect (>=1.37.0,<1.38.0)", "types-boto3-qldb (>=1.37.0,<1.38.0)", "types-boto3-qldb-session (>=1.37.0,<1.38.0)", "types-boto3-quicksight (>=1.37.0,<1.38.0)", "types-boto3-ram (>=1.37.0,<1.38.0)", "types-boto3-rbin (>=1.37.0,<1.38.0)", "types-boto3-rds (>=1.37.0,<1.38.0)", "types-boto3-rds-data (>=1.37.0,<1.38.0)", "types-boto3-redshift (>=1.37.0,<1.38.0)", "types-boto3-redshift-data (>=1.37.0,<1.38.0)", "types-boto3-redshift-serverless (>=1.37.0,<1.38.0)", "types-boto3-rekognition (>=1.37.0,<1.38.0)", "types-boto3-repostspace (>=1.37.0,<1.38.0)", "types-boto3-resiliencehub (>=1.37.0,<1.38.0)", "types-boto3-resource-explorer-2 (>=1.37.0,<1.38.0)", "types-boto3-resource-groups (>=1.37.0,<1.38.0)", "types-boto3-resourcegroupstaggingapi (>=1.37.0,<1.38.0)", "types-boto3-robomaker (>=1.37.0,<1.38.0)", "types-boto3-rolesanywhere (>=1.37.0,<1.38.0)", "types-boto3-route53 (>=1.37.0,<1.38.0)", "types-boto3-route53-recovery-cluster (>=1.37.0,<1.38.0)", "types-boto3-route53-recovery-control-config (>=1.37.0,<1.38.0)", "types-boto3-route53-recovery-readiness (>=1.37.0,<1.38.0)", "types-boto3-route53domains (>=1.37.0,<1.38.0)", "types-boto3-route53profiles (>=1.37.0,<1.38.0)", "types-boto3-route53resolver (>=1.37.0,<1.38.0)", "types-boto3-rum (>=1.37.0,<1.38.0)", "types-boto3-s3 (>=1.37.0,<1.38.0)", "types-boto3-s3control (>=1.37.0,<1.38.0)", "types-boto3-s3outposts (>=1.37.0,<1.38.0)", "types-boto3-s3tables (>=1.37.0,<1.38.0)", "types-boto3-sagemaker (>=1.37.0,<1.38.0)", "types-boto3-sagemaker-a2i-runtime (>=1.37.0,<1.38.0)", "types-boto3-sagemaker-edge (>=1.37.0,<1.38.0)", "types-boto3-sagemaker-featurestore-runtime (>=1.37.0,<1.38.0)", "types-boto3-sagemaker-geospatial (>=1.37.0,<1.38.0)", "types-boto3-sagemaker-metrics (>=1.37.0,<1.38.0)", "types-boto3-sagemaker-runtime (>=1.37.0,<1.38.0)", "types-boto3-savingsplans (>=1.37.0,<1.38.0)", "types-boto3-scheduler (>=1.37.0,<1.38.0)", "types-boto3-schemas (>=1.37.0,<1.38.0)", "types-boto3-sdb (>=1.37.0,<1.38.0)", "types-boto3-secretsmanager (>=1.37.0,<1.38.0)", "types-boto3-security-ir (>=1.37.0,<1.38.0)", "types-boto3-securityhub (>=1.37.0,<1.38.0)", "types-boto3-securitylake (>=1.37.0,<1.38.0)", "types-boto3-serverlessrepo (>=1.37.0,<1.38.0)", "types-boto3-service-quotas (>=1.37.0,<1.38.0)", "types-boto3-servicecatalog (>=1.37.0,<1.38.0)", "types-boto3-servicecatalog-appregistry (>=1.37.0,<1.38.0)", "types-boto3-servicediscovery (>=1.37.0,<1.38.0)", "types-boto3-ses (>=1.37.0,<1.38.0)", "types-boto3-sesv2 (>=1.37.0,<1.38.0)", "types-boto3-shield (>=1.37.0,<1.38.0)", "types-boto3-signer (>=1.37.0,<1.38.0)", "types-boto3-simspaceweaver (>=1.37.0,<1.38.0)", "types-boto3-sms (>=1.37.0,<1.38.0)", "types-boto3-sms-voice (>=1.37.0,<1.38.0)", "types-boto3-snow-device-management (>=1.37.0,<1.38.0)", "types-boto3-snowball (>=1.37.0,<1.38.0)", "types-boto3-sns (>=1.37.0,<1.38.0)", "types-boto3-socialmessaging (>=1.37.0,<1.38.0)", "types-boto3-sqs (>=1.37.0,<1.38.0)", "types-boto3-ssm (>=1.37.0,<1.38.0)", "types-boto3-ssm-contacts (>=1.37.0,<1.38.0)", "types-boto3-ssm-incidents (>=1.37.0,<1.38.0)", "types-boto3-ssm-quicksetup (>=1.37.0,<1.38.0)", "types-boto3-ssm-sap (>=1.37.0,<1.38.0)", "types-boto3-sso (>=1.37.0,<1.38.0)", "types-boto3-sso-admin (>=1.37.0,<1.38.0)", "types-boto3-sso-oidc (>=1.37.0,<1.38.0)", "types-boto3-stepfunctions (>=1.37.0,<1.38.0)", "types-boto3-storagegateway (>=1.37.0,<1.38.0)", "types-boto3-sts (>=1.37.0,<1.38.0)", "types-boto3-supplychain (>=1.37.0,<1.38.0)", "types-boto3-support (>=1.37.0,<1.38.0)", "types-boto3-support-app (>=1.37.0,<1.38.0)", "types-boto3-swf (>=1.37.0,<1.38.0)", "types-boto3-synthetics (>=1.37.0,<1.38.0)", "types-boto3-taxsettings (>=1.37.0,<1.38.0)", "types-boto3-textract (>=1.37.0,<1.38.0)", "types-boto3-timestream-influxdb (>=1.37.0,<1.38.0)", "types-boto3-timestream-query (>=1.37.0,<1.38.0)", "types-boto3-timestream-write (>=1.37.0,<1.38.0)", "types-boto3-tnb (>=1.37.0,<1.38.0)", "types-boto3-transcribe (>=1.37.0,<1.38.0)", "types-boto3-transfer (>=1.37.0,<1.38.0)", "types-boto3-translate (>=1.37.0,<1.38.0)", "types-boto3-trustedadvisor (>=1.37.0,<1.38.0)", "types-boto3-verifiedpermissions (>=1.37.0,<1.38.0)", "types-boto3-voice-id (>=1.37.0,<1.38.0)", "types-boto3-vpc-lattice (>=1.37.0,<1.38.0)", "types-boto3-waf (>=1.37.0,<1.38.0)", "types-boto3-waf-regional (>=1.37.0,<1.38.0)", "types-boto3-wafv2 (>=1.37.0,<1.38.0)", "types-boto3-wellarchitected (>=1.37.0,<1.38.0)", "types-boto3-wisdom (>=1.37.0,<1.38.0)", "types-boto3-workdocs (>=1.37.0,<1.38.0)", "types-boto3-workmail (>=1.37.0,<1.38.0)", "types-boto3-workmailmessageflow (>=1.37.0,<1.38.0)", "types-boto3-workspaces (>=1.37.0,<1.38.0)", "types-boto3-workspaces-thin-client (>=1.37.0,<1.38.0)", "types-boto3-workspaces-web (>=1.37.0,<1.38.0)", "types-boto3-xray (>=1.37.0,<1.38.0)"] -amp = ["types-boto3-amp (>=1.37.0,<1.38.0)"] -amplify = ["types-boto3-amplify (>=1.37.0,<1.38.0)"] -amplifybackend = ["types-boto3-amplifybackend (>=1.37.0,<1.38.0)"] -amplifyuibuilder = ["types-boto3-amplifyuibuilder (>=1.37.0,<1.38.0)"] -apigateway = ["types-boto3-apigateway (>=1.37.0,<1.38.0)"] -apigatewaymanagementapi = ["types-boto3-apigatewaymanagementapi (>=1.37.0,<1.38.0)"] -apigatewayv2 = ["types-boto3-apigatewayv2 (>=1.37.0,<1.38.0)"] -appconfig = ["types-boto3-appconfig (>=1.37.0,<1.38.0)"] -appconfigdata = ["types-boto3-appconfigdata (>=1.37.0,<1.38.0)"] -appfabric = ["types-boto3-appfabric (>=1.37.0,<1.38.0)"] -appflow = ["types-boto3-appflow (>=1.37.0,<1.38.0)"] -appintegrations = ["types-boto3-appintegrations (>=1.37.0,<1.38.0)"] -application-autoscaling = ["types-boto3-application-autoscaling (>=1.37.0,<1.38.0)"] -application-insights = ["types-boto3-application-insights (>=1.37.0,<1.38.0)"] -application-signals = ["types-boto3-application-signals (>=1.37.0,<1.38.0)"] -applicationcostprofiler = ["types-boto3-applicationcostprofiler (>=1.37.0,<1.38.0)"] -appmesh = ["types-boto3-appmesh (>=1.37.0,<1.38.0)"] -apprunner = ["types-boto3-apprunner (>=1.37.0,<1.38.0)"] -appstream = ["types-boto3-appstream (>=1.37.0,<1.38.0)"] -appsync = ["types-boto3-appsync (>=1.37.0,<1.38.0)"] -apptest = ["types-boto3-apptest (>=1.37.0,<1.38.0)"] -arc-zonal-shift = ["types-boto3-arc-zonal-shift (>=1.37.0,<1.38.0)"] -artifact = ["types-boto3-artifact (>=1.37.0,<1.38.0)"] -athena = ["types-boto3-athena (>=1.37.0,<1.38.0)"] -auditmanager = ["types-boto3-auditmanager (>=1.37.0,<1.38.0)"] -autoscaling = ["types-boto3-autoscaling (>=1.37.0,<1.38.0)"] -autoscaling-plans = ["types-boto3-autoscaling-plans (>=1.37.0,<1.38.0)"] -b2bi = ["types-boto3-b2bi (>=1.37.0,<1.38.0)"] -backup = ["types-boto3-backup (>=1.37.0,<1.38.0)"] -backup-gateway = ["types-boto3-backup-gateway (>=1.37.0,<1.38.0)"] -backupsearch = ["types-boto3-backupsearch (>=1.37.0,<1.38.0)"] -batch = ["types-boto3-batch (>=1.37.0,<1.38.0)"] -bcm-data-exports = ["types-boto3-bcm-data-exports (>=1.37.0,<1.38.0)"] -bcm-pricing-calculator = ["types-boto3-bcm-pricing-calculator (>=1.37.0,<1.38.0)"] -bedrock = ["types-boto3-bedrock (>=1.37.0,<1.38.0)"] -bedrock-agent = ["types-boto3-bedrock-agent (>=1.37.0,<1.38.0)"] -bedrock-agent-runtime = ["types-boto3-bedrock-agent-runtime (>=1.37.0,<1.38.0)"] -bedrock-data-automation = ["types-boto3-bedrock-data-automation (>=1.37.0,<1.38.0)"] -bedrock-data-automation-runtime = ["types-boto3-bedrock-data-automation-runtime (>=1.37.0,<1.38.0)"] -bedrock-runtime = ["types-boto3-bedrock-runtime (>=1.37.0,<1.38.0)"] -billing = ["types-boto3-billing (>=1.37.0,<1.38.0)"] -billingconductor = ["types-boto3-billingconductor (>=1.37.0,<1.38.0)"] -boto3 = ["boto3 (==1.37.11)"] -braket = ["types-boto3-braket (>=1.37.0,<1.38.0)"] -budgets = ["types-boto3-budgets (>=1.37.0,<1.38.0)"] -ce = ["types-boto3-ce (>=1.37.0,<1.38.0)"] -chatbot = ["types-boto3-chatbot (>=1.37.0,<1.38.0)"] -chime = ["types-boto3-chime (>=1.37.0,<1.38.0)"] -chime-sdk-identity = ["types-boto3-chime-sdk-identity (>=1.37.0,<1.38.0)"] -chime-sdk-media-pipelines = ["types-boto3-chime-sdk-media-pipelines (>=1.37.0,<1.38.0)"] -chime-sdk-meetings = ["types-boto3-chime-sdk-meetings (>=1.37.0,<1.38.0)"] -chime-sdk-messaging = ["types-boto3-chime-sdk-messaging (>=1.37.0,<1.38.0)"] -chime-sdk-voice = ["types-boto3-chime-sdk-voice (>=1.37.0,<1.38.0)"] -cleanrooms = ["types-boto3-cleanrooms (>=1.37.0,<1.38.0)"] -cleanroomsml = ["types-boto3-cleanroomsml (>=1.37.0,<1.38.0)"] -cloud9 = ["types-boto3-cloud9 (>=1.37.0,<1.38.0)"] -cloudcontrol = ["types-boto3-cloudcontrol (>=1.37.0,<1.38.0)"] -clouddirectory = ["types-boto3-clouddirectory (>=1.37.0,<1.38.0)"] -cloudformation = ["types-boto3-cloudformation (>=1.37.0,<1.38.0)"] -cloudfront = ["types-boto3-cloudfront (>=1.37.0,<1.38.0)"] -cloudfront-keyvaluestore = ["types-boto3-cloudfront-keyvaluestore (>=1.37.0,<1.38.0)"] -cloudhsm = ["types-boto3-cloudhsm (>=1.37.0,<1.38.0)"] -cloudhsmv2 = ["types-boto3-cloudhsmv2 (>=1.37.0,<1.38.0)"] -cloudsearch = ["types-boto3-cloudsearch (>=1.37.0,<1.38.0)"] -cloudsearchdomain = ["types-boto3-cloudsearchdomain (>=1.37.0,<1.38.0)"] -cloudtrail = ["types-boto3-cloudtrail (>=1.37.0,<1.38.0)"] -cloudtrail-data = ["types-boto3-cloudtrail-data (>=1.37.0,<1.38.0)"] -cloudwatch = ["types-boto3-cloudwatch (>=1.37.0,<1.38.0)"] -codeartifact = ["types-boto3-codeartifact (>=1.37.0,<1.38.0)"] -codebuild = ["types-boto3-codebuild (>=1.37.0,<1.38.0)"] -codecatalyst = ["types-boto3-codecatalyst (>=1.37.0,<1.38.0)"] -codecommit = ["types-boto3-codecommit (>=1.37.0,<1.38.0)"] -codeconnections = ["types-boto3-codeconnections (>=1.37.0,<1.38.0)"] -codedeploy = ["types-boto3-codedeploy (>=1.37.0,<1.38.0)"] -codeguru-reviewer = ["types-boto3-codeguru-reviewer (>=1.37.0,<1.38.0)"] -codeguru-security = ["types-boto3-codeguru-security (>=1.37.0,<1.38.0)"] -codeguruprofiler = ["types-boto3-codeguruprofiler (>=1.37.0,<1.38.0)"] -codepipeline = ["types-boto3-codepipeline (>=1.37.0,<1.38.0)"] -codestar-connections = ["types-boto3-codestar-connections (>=1.37.0,<1.38.0)"] -codestar-notifications = ["types-boto3-codestar-notifications (>=1.37.0,<1.38.0)"] -cognito-identity = ["types-boto3-cognito-identity (>=1.37.0,<1.38.0)"] -cognito-idp = ["types-boto3-cognito-idp (>=1.37.0,<1.38.0)"] -cognito-sync = ["types-boto3-cognito-sync (>=1.37.0,<1.38.0)"] -comprehend = ["types-boto3-comprehend (>=1.37.0,<1.38.0)"] -comprehendmedical = ["types-boto3-comprehendmedical (>=1.37.0,<1.38.0)"] -compute-optimizer = ["types-boto3-compute-optimizer (>=1.37.0,<1.38.0)"] -config = ["types-boto3-config (>=1.37.0,<1.38.0)"] -connect = ["types-boto3-connect (>=1.37.0,<1.38.0)"] -connect-contact-lens = ["types-boto3-connect-contact-lens (>=1.37.0,<1.38.0)"] -connectcampaigns = ["types-boto3-connectcampaigns (>=1.37.0,<1.38.0)"] -connectcampaignsv2 = ["types-boto3-connectcampaignsv2 (>=1.37.0,<1.38.0)"] -connectcases = ["types-boto3-connectcases (>=1.37.0,<1.38.0)"] -connectparticipant = ["types-boto3-connectparticipant (>=1.37.0,<1.38.0)"] -controlcatalog = ["types-boto3-controlcatalog (>=1.37.0,<1.38.0)"] -controltower = ["types-boto3-controltower (>=1.37.0,<1.38.0)"] -cost-optimization-hub = ["types-boto3-cost-optimization-hub (>=1.37.0,<1.38.0)"] -cur = ["types-boto3-cur (>=1.37.0,<1.38.0)"] -customer-profiles = ["types-boto3-customer-profiles (>=1.37.0,<1.38.0)"] -databrew = ["types-boto3-databrew (>=1.37.0,<1.38.0)"] -dataexchange = ["types-boto3-dataexchange (>=1.37.0,<1.38.0)"] -datapipeline = ["types-boto3-datapipeline (>=1.37.0,<1.38.0)"] -datasync = ["types-boto3-datasync (>=1.37.0,<1.38.0)"] -datazone = ["types-boto3-datazone (>=1.37.0,<1.38.0)"] -dax = ["types-boto3-dax (>=1.37.0,<1.38.0)"] -deadline = ["types-boto3-deadline (>=1.37.0,<1.38.0)"] -detective = ["types-boto3-detective (>=1.37.0,<1.38.0)"] -devicefarm = ["types-boto3-devicefarm (>=1.37.0,<1.38.0)"] -devops-guru = ["types-boto3-devops-guru (>=1.37.0,<1.38.0)"] -directconnect = ["types-boto3-directconnect (>=1.37.0,<1.38.0)"] -discovery = ["types-boto3-discovery (>=1.37.0,<1.38.0)"] -dlm = ["types-boto3-dlm (>=1.37.0,<1.38.0)"] -dms = ["types-boto3-dms (>=1.37.0,<1.38.0)"] -docdb = ["types-boto3-docdb (>=1.37.0,<1.38.0)"] -docdb-elastic = ["types-boto3-docdb-elastic (>=1.37.0,<1.38.0)"] -drs = ["types-boto3-drs (>=1.37.0,<1.38.0)"] -ds = ["types-boto3-ds (>=1.37.0,<1.38.0)"] -ds-data = ["types-boto3-ds-data (>=1.37.0,<1.38.0)"] -dsql = ["types-boto3-dsql (>=1.37.0,<1.38.0)"] -dynamodb = ["types-boto3-dynamodb (>=1.37.0,<1.38.0)"] -dynamodbstreams = ["types-boto3-dynamodbstreams (>=1.37.0,<1.38.0)"] -ebs = ["types-boto3-ebs (>=1.37.0,<1.38.0)"] -ec2 = ["types-boto3-ec2 (>=1.37.0,<1.38.0)"] -ec2-instance-connect = ["types-boto3-ec2-instance-connect (>=1.37.0,<1.38.0)"] -ecr = ["types-boto3-ecr (>=1.37.0,<1.38.0)"] -ecr-public = ["types-boto3-ecr-public (>=1.37.0,<1.38.0)"] -ecs = ["types-boto3-ecs (>=1.37.0,<1.38.0)"] -efs = ["types-boto3-efs (>=1.37.0,<1.38.0)"] -eks = ["types-boto3-eks (>=1.37.0,<1.38.0)"] -eks-auth = ["types-boto3-eks-auth (>=1.37.0,<1.38.0)"] -elasticache = ["types-boto3-elasticache (>=1.37.0,<1.38.0)"] -elasticbeanstalk = ["types-boto3-elasticbeanstalk (>=1.37.0,<1.38.0)"] -elastictranscoder = ["types-boto3-elastictranscoder (>=1.37.0,<1.38.0)"] -elb = ["types-boto3-elb (>=1.37.0,<1.38.0)"] -elbv2 = ["types-boto3-elbv2 (>=1.37.0,<1.38.0)"] -emr = ["types-boto3-emr (>=1.37.0,<1.38.0)"] -emr-containers = ["types-boto3-emr-containers (>=1.37.0,<1.38.0)"] -emr-serverless = ["types-boto3-emr-serverless (>=1.37.0,<1.38.0)"] -entityresolution = ["types-boto3-entityresolution (>=1.37.0,<1.38.0)"] -es = ["types-boto3-es (>=1.37.0,<1.38.0)"] -essential = ["types-boto3-cloudformation (>=1.37.0,<1.38.0)", "types-boto3-dynamodb (>=1.37.0,<1.38.0)", "types-boto3-ec2 (>=1.37.0,<1.38.0)", "types-boto3-lambda (>=1.37.0,<1.38.0)", "types-boto3-rds (>=1.37.0,<1.38.0)", "types-boto3-s3 (>=1.37.0,<1.38.0)", "types-boto3-sqs (>=1.37.0,<1.38.0)"] -events = ["types-boto3-events (>=1.37.0,<1.38.0)"] -evidently = ["types-boto3-evidently (>=1.37.0,<1.38.0)"] -finspace = ["types-boto3-finspace (>=1.37.0,<1.38.0)"] -finspace-data = ["types-boto3-finspace-data (>=1.37.0,<1.38.0)"] -firehose = ["types-boto3-firehose (>=1.37.0,<1.38.0)"] -fis = ["types-boto3-fis (>=1.37.0,<1.38.0)"] -fms = ["types-boto3-fms (>=1.37.0,<1.38.0)"] -forecast = ["types-boto3-forecast (>=1.37.0,<1.38.0)"] -forecastquery = ["types-boto3-forecastquery (>=1.37.0,<1.38.0)"] -frauddetector = ["types-boto3-frauddetector (>=1.37.0,<1.38.0)"] -freetier = ["types-boto3-freetier (>=1.37.0,<1.38.0)"] -fsx = ["types-boto3-fsx (>=1.37.0,<1.38.0)"] -full = ["types-boto3-full (>=1.37.0,<1.38.0)"] -gamelift = ["types-boto3-gamelift (>=1.37.0,<1.38.0)"] -gameliftstreams = ["types-boto3-gameliftstreams (>=1.37.0,<1.38.0)"] -geo-maps = ["types-boto3-geo-maps (>=1.37.0,<1.38.0)"] -geo-places = ["types-boto3-geo-places (>=1.37.0,<1.38.0)"] -geo-routes = ["types-boto3-geo-routes (>=1.37.0,<1.38.0)"] -glacier = ["types-boto3-glacier (>=1.37.0,<1.38.0)"] -globalaccelerator = ["types-boto3-globalaccelerator (>=1.37.0,<1.38.0)"] -glue = ["types-boto3-glue (>=1.37.0,<1.38.0)"] -grafana = ["types-boto3-grafana (>=1.37.0,<1.38.0)"] -greengrass = ["types-boto3-greengrass (>=1.37.0,<1.38.0)"] -greengrassv2 = ["types-boto3-greengrassv2 (>=1.37.0,<1.38.0)"] -groundstation = ["types-boto3-groundstation (>=1.37.0,<1.38.0)"] -guardduty = ["types-boto3-guardduty (>=1.37.0,<1.38.0)"] -health = ["types-boto3-health (>=1.37.0,<1.38.0)"] -healthlake = ["types-boto3-healthlake (>=1.37.0,<1.38.0)"] -iam = ["types-boto3-iam (>=1.37.0,<1.38.0)"] -identitystore = ["types-boto3-identitystore (>=1.37.0,<1.38.0)"] -imagebuilder = ["types-boto3-imagebuilder (>=1.37.0,<1.38.0)"] -importexport = ["types-boto3-importexport (>=1.37.0,<1.38.0)"] -inspector = ["types-boto3-inspector (>=1.37.0,<1.38.0)"] -inspector-scan = ["types-boto3-inspector-scan (>=1.37.0,<1.38.0)"] -inspector2 = ["types-boto3-inspector2 (>=1.37.0,<1.38.0)"] -internetmonitor = ["types-boto3-internetmonitor (>=1.37.0,<1.38.0)"] -invoicing = ["types-boto3-invoicing (>=1.37.0,<1.38.0)"] -iot = ["types-boto3-iot (>=1.37.0,<1.38.0)"] -iot-data = ["types-boto3-iot-data (>=1.37.0,<1.38.0)"] -iot-jobs-data = ["types-boto3-iot-jobs-data (>=1.37.0,<1.38.0)"] -iot-managed-integrations = ["types-boto3-iot-managed-integrations (>=1.37.0,<1.38.0)"] -iotanalytics = ["types-boto3-iotanalytics (>=1.37.0,<1.38.0)"] -iotdeviceadvisor = ["types-boto3-iotdeviceadvisor (>=1.37.0,<1.38.0)"] -iotevents = ["types-boto3-iotevents (>=1.37.0,<1.38.0)"] -iotevents-data = ["types-boto3-iotevents-data (>=1.37.0,<1.38.0)"] -iotfleethub = ["types-boto3-iotfleethub (>=1.37.0,<1.38.0)"] -iotfleetwise = ["types-boto3-iotfleetwise (>=1.37.0,<1.38.0)"] -iotsecuretunneling = ["types-boto3-iotsecuretunneling (>=1.37.0,<1.38.0)"] -iotsitewise = ["types-boto3-iotsitewise (>=1.37.0,<1.38.0)"] -iotthingsgraph = ["types-boto3-iotthingsgraph (>=1.37.0,<1.38.0)"] -iottwinmaker = ["types-boto3-iottwinmaker (>=1.37.0,<1.38.0)"] -iotwireless = ["types-boto3-iotwireless (>=1.37.0,<1.38.0)"] -ivs = ["types-boto3-ivs (>=1.37.0,<1.38.0)"] -ivs-realtime = ["types-boto3-ivs-realtime (>=1.37.0,<1.38.0)"] -ivschat = ["types-boto3-ivschat (>=1.37.0,<1.38.0)"] -kafka = ["types-boto3-kafka (>=1.37.0,<1.38.0)"] -kafkaconnect = ["types-boto3-kafkaconnect (>=1.37.0,<1.38.0)"] -kendra = ["types-boto3-kendra (>=1.37.0,<1.38.0)"] -kendra-ranking = ["types-boto3-kendra-ranking (>=1.37.0,<1.38.0)"] -keyspaces = ["types-boto3-keyspaces (>=1.37.0,<1.38.0)"] -kinesis = ["types-boto3-kinesis (>=1.37.0,<1.38.0)"] -kinesis-video-archived-media = ["types-boto3-kinesis-video-archived-media (>=1.37.0,<1.38.0)"] -kinesis-video-media = ["types-boto3-kinesis-video-media (>=1.37.0,<1.38.0)"] -kinesis-video-signaling = ["types-boto3-kinesis-video-signaling (>=1.37.0,<1.38.0)"] -kinesis-video-webrtc-storage = ["types-boto3-kinesis-video-webrtc-storage (>=1.37.0,<1.38.0)"] -kinesisanalytics = ["types-boto3-kinesisanalytics (>=1.37.0,<1.38.0)"] -kinesisanalyticsv2 = ["types-boto3-kinesisanalyticsv2 (>=1.37.0,<1.38.0)"] -kinesisvideo = ["types-boto3-kinesisvideo (>=1.37.0,<1.38.0)"] -kms = ["types-boto3-kms (>=1.37.0,<1.38.0)"] -lakeformation = ["types-boto3-lakeformation (>=1.37.0,<1.38.0)"] -lambda = ["types-boto3-lambda (>=1.37.0,<1.38.0)"] -launch-wizard = ["types-boto3-launch-wizard (>=1.37.0,<1.38.0)"] -lex-models = ["types-boto3-lex-models (>=1.37.0,<1.38.0)"] -lex-runtime = ["types-boto3-lex-runtime (>=1.37.0,<1.38.0)"] -lexv2-models = ["types-boto3-lexv2-models (>=1.37.0,<1.38.0)"] -lexv2-runtime = ["types-boto3-lexv2-runtime (>=1.37.0,<1.38.0)"] -license-manager = ["types-boto3-license-manager (>=1.37.0,<1.38.0)"] -license-manager-linux-subscriptions = ["types-boto3-license-manager-linux-subscriptions (>=1.37.0,<1.38.0)"] -license-manager-user-subscriptions = ["types-boto3-license-manager-user-subscriptions (>=1.37.0,<1.38.0)"] -lightsail = ["types-boto3-lightsail (>=1.37.0,<1.38.0)"] -location = ["types-boto3-location (>=1.37.0,<1.38.0)"] -logs = ["types-boto3-logs (>=1.37.0,<1.38.0)"] -lookoutequipment = ["types-boto3-lookoutequipment (>=1.37.0,<1.38.0)"] -lookoutmetrics = ["types-boto3-lookoutmetrics (>=1.37.0,<1.38.0)"] -lookoutvision = ["types-boto3-lookoutvision (>=1.37.0,<1.38.0)"] -m2 = ["types-boto3-m2 (>=1.37.0,<1.38.0)"] -machinelearning = ["types-boto3-machinelearning (>=1.37.0,<1.38.0)"] -macie2 = ["types-boto3-macie2 (>=1.37.0,<1.38.0)"] -mailmanager = ["types-boto3-mailmanager (>=1.37.0,<1.38.0)"] -managedblockchain = ["types-boto3-managedblockchain (>=1.37.0,<1.38.0)"] -managedblockchain-query = ["types-boto3-managedblockchain-query (>=1.37.0,<1.38.0)"] -marketplace-agreement = ["types-boto3-marketplace-agreement (>=1.37.0,<1.38.0)"] -marketplace-catalog = ["types-boto3-marketplace-catalog (>=1.37.0,<1.38.0)"] -marketplace-deployment = ["types-boto3-marketplace-deployment (>=1.37.0,<1.38.0)"] -marketplace-entitlement = ["types-boto3-marketplace-entitlement (>=1.37.0,<1.38.0)"] -marketplace-reporting = ["types-boto3-marketplace-reporting (>=1.37.0,<1.38.0)"] -marketplacecommerceanalytics = ["types-boto3-marketplacecommerceanalytics (>=1.37.0,<1.38.0)"] -mediaconnect = ["types-boto3-mediaconnect (>=1.37.0,<1.38.0)"] -mediaconvert = ["types-boto3-mediaconvert (>=1.37.0,<1.38.0)"] -medialive = ["types-boto3-medialive (>=1.37.0,<1.38.0)"] -mediapackage = ["types-boto3-mediapackage (>=1.37.0,<1.38.0)"] -mediapackage-vod = ["types-boto3-mediapackage-vod (>=1.37.0,<1.38.0)"] -mediapackagev2 = ["types-boto3-mediapackagev2 (>=1.37.0,<1.38.0)"] -mediastore = ["types-boto3-mediastore (>=1.37.0,<1.38.0)"] -mediastore-data = ["types-boto3-mediastore-data (>=1.37.0,<1.38.0)"] -mediatailor = ["types-boto3-mediatailor (>=1.37.0,<1.38.0)"] -medical-imaging = ["types-boto3-medical-imaging (>=1.37.0,<1.38.0)"] -memorydb = ["types-boto3-memorydb (>=1.37.0,<1.38.0)"] -meteringmarketplace = ["types-boto3-meteringmarketplace (>=1.37.0,<1.38.0)"] -mgh = ["types-boto3-mgh (>=1.37.0,<1.38.0)"] -mgn = ["types-boto3-mgn (>=1.37.0,<1.38.0)"] -migration-hub-refactor-spaces = ["types-boto3-migration-hub-refactor-spaces (>=1.37.0,<1.38.0)"] -migrationhub-config = ["types-boto3-migrationhub-config (>=1.37.0,<1.38.0)"] -migrationhuborchestrator = ["types-boto3-migrationhuborchestrator (>=1.37.0,<1.38.0)"] -migrationhubstrategy = ["types-boto3-migrationhubstrategy (>=1.37.0,<1.38.0)"] -mq = ["types-boto3-mq (>=1.37.0,<1.38.0)"] -mturk = ["types-boto3-mturk (>=1.37.0,<1.38.0)"] -mwaa = ["types-boto3-mwaa (>=1.37.0,<1.38.0)"] -neptune = ["types-boto3-neptune (>=1.37.0,<1.38.0)"] -neptune-graph = ["types-boto3-neptune-graph (>=1.37.0,<1.38.0)"] -neptunedata = ["types-boto3-neptunedata (>=1.37.0,<1.38.0)"] -network-firewall = ["types-boto3-network-firewall (>=1.37.0,<1.38.0)"] -networkflowmonitor = ["types-boto3-networkflowmonitor (>=1.37.0,<1.38.0)"] -networkmanager = ["types-boto3-networkmanager (>=1.37.0,<1.38.0)"] -networkmonitor = ["types-boto3-networkmonitor (>=1.37.0,<1.38.0)"] -notifications = ["types-boto3-notifications (>=1.37.0,<1.38.0)"] -notificationscontacts = ["types-boto3-notificationscontacts (>=1.37.0,<1.38.0)"] -oam = ["types-boto3-oam (>=1.37.0,<1.38.0)"] -observabilityadmin = ["types-boto3-observabilityadmin (>=1.37.0,<1.38.0)"] -omics = ["types-boto3-omics (>=1.37.0,<1.38.0)"] -opensearch = ["types-boto3-opensearch (>=1.37.0,<1.38.0)"] -opensearchserverless = ["types-boto3-opensearchserverless (>=1.37.0,<1.38.0)"] -opsworks = ["types-boto3-opsworks (>=1.37.0,<1.38.0)"] -opsworkscm = ["types-boto3-opsworkscm (>=1.37.0,<1.38.0)"] -organizations = ["types-boto3-organizations (>=1.37.0,<1.38.0)"] -osis = ["types-boto3-osis (>=1.37.0,<1.38.0)"] -outposts = ["types-boto3-outposts (>=1.37.0,<1.38.0)"] -panorama = ["types-boto3-panorama (>=1.37.0,<1.38.0)"] -partnercentral-selling = ["types-boto3-partnercentral-selling (>=1.37.0,<1.38.0)"] -payment-cryptography = ["types-boto3-payment-cryptography (>=1.37.0,<1.38.0)"] -payment-cryptography-data = ["types-boto3-payment-cryptography-data (>=1.37.0,<1.38.0)"] -pca-connector-ad = ["types-boto3-pca-connector-ad (>=1.37.0,<1.38.0)"] -pca-connector-scep = ["types-boto3-pca-connector-scep (>=1.37.0,<1.38.0)"] -pcs = ["types-boto3-pcs (>=1.37.0,<1.38.0)"] -personalize = ["types-boto3-personalize (>=1.37.0,<1.38.0)"] -personalize-events = ["types-boto3-personalize-events (>=1.37.0,<1.38.0)"] -personalize-runtime = ["types-boto3-personalize-runtime (>=1.37.0,<1.38.0)"] -pi = ["types-boto3-pi (>=1.37.0,<1.38.0)"] -pinpoint = ["types-boto3-pinpoint (>=1.37.0,<1.38.0)"] -pinpoint-email = ["types-boto3-pinpoint-email (>=1.37.0,<1.38.0)"] -pinpoint-sms-voice = ["types-boto3-pinpoint-sms-voice (>=1.37.0,<1.38.0)"] -pinpoint-sms-voice-v2 = ["types-boto3-pinpoint-sms-voice-v2 (>=1.37.0,<1.38.0)"] -pipes = ["types-boto3-pipes (>=1.37.0,<1.38.0)"] -polly = ["types-boto3-polly (>=1.37.0,<1.38.0)"] -pricing = ["types-boto3-pricing (>=1.37.0,<1.38.0)"] -privatenetworks = ["types-boto3-privatenetworks (>=1.37.0,<1.38.0)"] -proton = ["types-boto3-proton (>=1.37.0,<1.38.0)"] -qapps = ["types-boto3-qapps (>=1.37.0,<1.38.0)"] -qbusiness = ["types-boto3-qbusiness (>=1.37.0,<1.38.0)"] -qconnect = ["types-boto3-qconnect (>=1.37.0,<1.38.0)"] -qldb = ["types-boto3-qldb (>=1.37.0,<1.38.0)"] -qldb-session = ["types-boto3-qldb-session (>=1.37.0,<1.38.0)"] -quicksight = ["types-boto3-quicksight (>=1.37.0,<1.38.0)"] -ram = ["types-boto3-ram (>=1.37.0,<1.38.0)"] -rbin = ["types-boto3-rbin (>=1.37.0,<1.38.0)"] -rds = ["types-boto3-rds (>=1.37.0,<1.38.0)"] -rds-data = ["types-boto3-rds-data (>=1.37.0,<1.38.0)"] -redshift = ["types-boto3-redshift (>=1.37.0,<1.38.0)"] -redshift-data = ["types-boto3-redshift-data (>=1.37.0,<1.38.0)"] -redshift-serverless = ["types-boto3-redshift-serverless (>=1.37.0,<1.38.0)"] -rekognition = ["types-boto3-rekognition (>=1.37.0,<1.38.0)"] -repostspace = ["types-boto3-repostspace (>=1.37.0,<1.38.0)"] -resiliencehub = ["types-boto3-resiliencehub (>=1.37.0,<1.38.0)"] -resource-explorer-2 = ["types-boto3-resource-explorer-2 (>=1.37.0,<1.38.0)"] -resource-groups = ["types-boto3-resource-groups (>=1.37.0,<1.38.0)"] -resourcegroupstaggingapi = ["types-boto3-resourcegroupstaggingapi (>=1.37.0,<1.38.0)"] -robomaker = ["types-boto3-robomaker (>=1.37.0,<1.38.0)"] -rolesanywhere = ["types-boto3-rolesanywhere (>=1.37.0,<1.38.0)"] -route53 = ["types-boto3-route53 (>=1.37.0,<1.38.0)"] -route53-recovery-cluster = ["types-boto3-route53-recovery-cluster (>=1.37.0,<1.38.0)"] -route53-recovery-control-config = ["types-boto3-route53-recovery-control-config (>=1.37.0,<1.38.0)"] -route53-recovery-readiness = ["types-boto3-route53-recovery-readiness (>=1.37.0,<1.38.0)"] -route53domains = ["types-boto3-route53domains (>=1.37.0,<1.38.0)"] -route53profiles = ["types-boto3-route53profiles (>=1.37.0,<1.38.0)"] -route53resolver = ["types-boto3-route53resolver (>=1.37.0,<1.38.0)"] -rum = ["types-boto3-rum (>=1.37.0,<1.38.0)"] -s3 = ["types-boto3-s3 (>=1.37.0,<1.38.0)"] -s3control = ["types-boto3-s3control (>=1.37.0,<1.38.0)"] -s3outposts = ["types-boto3-s3outposts (>=1.37.0,<1.38.0)"] -s3tables = ["types-boto3-s3tables (>=1.37.0,<1.38.0)"] -sagemaker = ["types-boto3-sagemaker (>=1.37.0,<1.38.0)"] -sagemaker-a2i-runtime = ["types-boto3-sagemaker-a2i-runtime (>=1.37.0,<1.38.0)"] -sagemaker-edge = ["types-boto3-sagemaker-edge (>=1.37.0,<1.38.0)"] -sagemaker-featurestore-runtime = ["types-boto3-sagemaker-featurestore-runtime (>=1.37.0,<1.38.0)"] -sagemaker-geospatial = ["types-boto3-sagemaker-geospatial (>=1.37.0,<1.38.0)"] -sagemaker-metrics = ["types-boto3-sagemaker-metrics (>=1.37.0,<1.38.0)"] -sagemaker-runtime = ["types-boto3-sagemaker-runtime (>=1.37.0,<1.38.0)"] -savingsplans = ["types-boto3-savingsplans (>=1.37.0,<1.38.0)"] -scheduler = ["types-boto3-scheduler (>=1.37.0,<1.38.0)"] -schemas = ["types-boto3-schemas (>=1.37.0,<1.38.0)"] -sdb = ["types-boto3-sdb (>=1.37.0,<1.38.0)"] -secretsmanager = ["types-boto3-secretsmanager (>=1.37.0,<1.38.0)"] -security-ir = ["types-boto3-security-ir (>=1.37.0,<1.38.0)"] -securityhub = ["types-boto3-securityhub (>=1.37.0,<1.38.0)"] -securitylake = ["types-boto3-securitylake (>=1.37.0,<1.38.0)"] -serverlessrepo = ["types-boto3-serverlessrepo (>=1.37.0,<1.38.0)"] -service-quotas = ["types-boto3-service-quotas (>=1.37.0,<1.38.0)"] -servicecatalog = ["types-boto3-servicecatalog (>=1.37.0,<1.38.0)"] -servicecatalog-appregistry = ["types-boto3-servicecatalog-appregistry (>=1.37.0,<1.38.0)"] -servicediscovery = ["types-boto3-servicediscovery (>=1.37.0,<1.38.0)"] -ses = ["types-boto3-ses (>=1.37.0,<1.38.0)"] -sesv2 = ["types-boto3-sesv2 (>=1.37.0,<1.38.0)"] -shield = ["types-boto3-shield (>=1.37.0,<1.38.0)"] -signer = ["types-boto3-signer (>=1.37.0,<1.38.0)"] -simspaceweaver = ["types-boto3-simspaceweaver (>=1.37.0,<1.38.0)"] -sms = ["types-boto3-sms (>=1.37.0,<1.38.0)"] -sms-voice = ["types-boto3-sms-voice (>=1.37.0,<1.38.0)"] -snow-device-management = ["types-boto3-snow-device-management (>=1.37.0,<1.38.0)"] -snowball = ["types-boto3-snowball (>=1.37.0,<1.38.0)"] -sns = ["types-boto3-sns (>=1.37.0,<1.38.0)"] -socialmessaging = ["types-boto3-socialmessaging (>=1.37.0,<1.38.0)"] -sqs = ["types-boto3-sqs (>=1.37.0,<1.38.0)"] -ssm = ["types-boto3-ssm (>=1.37.0,<1.38.0)"] -ssm-contacts = ["types-boto3-ssm-contacts (>=1.37.0,<1.38.0)"] -ssm-incidents = ["types-boto3-ssm-incidents (>=1.37.0,<1.38.0)"] -ssm-quicksetup = ["types-boto3-ssm-quicksetup (>=1.37.0,<1.38.0)"] -ssm-sap = ["types-boto3-ssm-sap (>=1.37.0,<1.38.0)"] -sso = ["types-boto3-sso (>=1.37.0,<1.38.0)"] -sso-admin = ["types-boto3-sso-admin (>=1.37.0,<1.38.0)"] -sso-oidc = ["types-boto3-sso-oidc (>=1.37.0,<1.38.0)"] -stepfunctions = ["types-boto3-stepfunctions (>=1.37.0,<1.38.0)"] -storagegateway = ["types-boto3-storagegateway (>=1.37.0,<1.38.0)"] -sts = ["types-boto3-sts (>=1.37.0,<1.38.0)"] -supplychain = ["types-boto3-supplychain (>=1.37.0,<1.38.0)"] -support = ["types-boto3-support (>=1.37.0,<1.38.0)"] -support-app = ["types-boto3-support-app (>=1.37.0,<1.38.0)"] -swf = ["types-boto3-swf (>=1.37.0,<1.38.0)"] -synthetics = ["types-boto3-synthetics (>=1.37.0,<1.38.0)"] -taxsettings = ["types-boto3-taxsettings (>=1.37.0,<1.38.0)"] -textract = ["types-boto3-textract (>=1.37.0,<1.38.0)"] -timestream-influxdb = ["types-boto3-timestream-influxdb (>=1.37.0,<1.38.0)"] -timestream-query = ["types-boto3-timestream-query (>=1.37.0,<1.38.0)"] -timestream-write = ["types-boto3-timestream-write (>=1.37.0,<1.38.0)"] -tnb = ["types-boto3-tnb (>=1.37.0,<1.38.0)"] -transcribe = ["types-boto3-transcribe (>=1.37.0,<1.38.0)"] -transfer = ["types-boto3-transfer (>=1.37.0,<1.38.0)"] -translate = ["types-boto3-translate (>=1.37.0,<1.38.0)"] -trustedadvisor = ["types-boto3-trustedadvisor (>=1.37.0,<1.38.0)"] -verifiedpermissions = ["types-boto3-verifiedpermissions (>=1.37.0,<1.38.0)"] -voice-id = ["types-boto3-voice-id (>=1.37.0,<1.38.0)"] -vpc-lattice = ["types-boto3-vpc-lattice (>=1.37.0,<1.38.0)"] -waf = ["types-boto3-waf (>=1.37.0,<1.38.0)"] -waf-regional = ["types-boto3-waf-regional (>=1.37.0,<1.38.0)"] -wafv2 = ["types-boto3-wafv2 (>=1.37.0,<1.38.0)"] -wellarchitected = ["types-boto3-wellarchitected (>=1.37.0,<1.38.0)"] -wisdom = ["types-boto3-wisdom (>=1.37.0,<1.38.0)"] -workdocs = ["types-boto3-workdocs (>=1.37.0,<1.38.0)"] -workmail = ["types-boto3-workmail (>=1.37.0,<1.38.0)"] -workmailmessageflow = ["types-boto3-workmailmessageflow (>=1.37.0,<1.38.0)"] -workspaces = ["types-boto3-workspaces (>=1.37.0,<1.38.0)"] -workspaces-thin-client = ["types-boto3-workspaces-thin-client (>=1.37.0,<1.38.0)"] -workspaces-web = ["types-boto3-workspaces-web (>=1.37.0,<1.38.0)"] -xray = ["types-boto3-xray (>=1.37.0,<1.38.0)"] - -[[package]] -name = "types-boto3-cognito-idp" -version = "1.37.5" -description = "Type annotations for boto3 CognitoIdentityProvider 1.37.5 service generated with mypy-boto3-builder 8.10.0" -optional = false -python-versions = ">=3.8" -groups = ["dev"] -files = [ - {file = "types_boto3_cognito_idp-1.37.5-py3-none-any.whl", hash = "sha256:909004c296c563fbaa4c4c230d6680b8d47b02416572d962d46a286f858e3495"}, - {file = "types_boto3_cognito_idp-1.37.5.tar.gz", hash = "sha256:aeda0e907a26529f7431b1d1a20a5c0245427fee5da9e097b8fb38dda1a7b8d3"}, -] - -[package.dependencies] -typing-extensions = {version = "*", markers = "python_version < \"3.12\""} - -[[package]] -name = "types-s3transfer" -version = "0.11.4" -description = "Type annotations and code completion for s3transfer" -optional = false -python-versions = ">=3.8" -groups = ["dev"] -files = [ - {file = "types_s3transfer-0.11.4-py3-none-any.whl", hash = "sha256:2a76d92c07d4a3cb469e5343b2e7560e0b8078b2e03696a65407b8c44c861b61"}, - {file = "types_s3transfer-0.11.4.tar.gz", hash = "sha256:05fde593c84270f19fd053f0b1e08f5a057d7c5f036b9884e68fb8cd3041ac30"}, -] - -[[package]] -name = "typing-extensions" -version = "4.12.2" -description = "Backported and Experimental Type Hints for Python 3.8+" -optional = false -python-versions = ">=3.8" -groups = ["dev"] -markers = "python_version < \"3.12\"" -files = [ - {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, - {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, -] - -[[package]] -name = "urllib3" -version = "2.3.0" -description = "HTTP library with thread-safe connection pooling, file post, and more." -optional = false -python-versions = ">=3.9" -groups = ["main", "dev"] -files = [ - {file = "urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df"}, - {file = "urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d"}, -] - -[package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] -h2 = ["h2 (>=4,<5)"] -socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] -zstd = ["zstandard (>=0.18.0)"] - -[metadata] -lock-version = "2.1" -python-versions = ">=3.11" -content-hash = "6720b46d07aef25a658bdec366d5dc177427cc001c4edd453fa92d5ce0b044f5" From 438faf3701266ce109cf84964e046d1e6389903a Mon Sep 17 00:00:00 2001 From: Emmanuel Hadoux Date: Wed, 12 Mar 2025 17:43:29 +0000 Subject: [PATCH 7/9] fix build --- .github/workflows/release-please.yml | 1 + .github/workflows/test.yml | 1 + .github/workflows/update-doc.yml | 1 + 3 files changed, 3 insertions(+) diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index 254d69f..93e1d58 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -25,6 +25,7 @@ jobs: with: python-version: '3.11' cache: 'poetry' + cache-dependency-path: 'poetry.lock' - run: poetry install --without dev if: ${{ steps.release.outputs.release_created }} - run: poetry publish --build --username __token__ --password ${{ secrets.PYPI_PASSWORD }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 3f6a6d0..0d1ebeb 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -21,6 +21,7 @@ jobs: with: python-version: '3.11' cache: 'poetry' + cache-dependency-path: 'poetry.lock' - name: Install deps run: poetry install - name: Run tests diff --git a/.github/workflows/update-doc.yml b/.github/workflows/update-doc.yml index 70b9a58..aee26b3 100644 --- a/.github/workflows/update-doc.yml +++ b/.github/workflows/update-doc.yml @@ -17,6 +17,7 @@ jobs: with: python-version: '3.11' cache: 'poetry' + cache-dependency-path: 'poetry.lock' - name: Install deps run: poetry install - name: Create md files From 826ed800885237e8cee912eb4be36c88b9dc2bf6 Mon Sep 17 00:00:00 2001 From: Emmanuel Hadoux Date: Wed, 12 Mar 2025 17:48:35 +0000 Subject: [PATCH 8/9] temporarily remove caching in workflow --- .github/workflows/release-please.yml | 2 -- .github/workflows/test.yml | 2 -- .github/workflows/update-doc.yml | 2 -- 3 files changed, 6 deletions(-) diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index 93e1d58..e654efc 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -24,8 +24,6 @@ jobs: if: ${{ steps.release.outputs.release_created }} with: python-version: '3.11' - cache: 'poetry' - cache-dependency-path: 'poetry.lock' - run: poetry install --without dev if: ${{ steps.release.outputs.release_created }} - run: poetry publish --build --username __token__ --password ${{ secrets.PYPI_PASSWORD }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 0d1ebeb..3628398 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -20,8 +20,6 @@ jobs: - uses: actions/setup-python@v5 with: python-version: '3.11' - cache: 'poetry' - cache-dependency-path: 'poetry.lock' - name: Install deps run: poetry install - name: Run tests diff --git a/.github/workflows/update-doc.yml b/.github/workflows/update-doc.yml index aee26b3..142fc2e 100644 --- a/.github/workflows/update-doc.yml +++ b/.github/workflows/update-doc.yml @@ -16,8 +16,6 @@ jobs: - uses: actions/setup-python@v5 with: python-version: '3.11' - cache: 'poetry' - cache-dependency-path: 'poetry.lock' - name: Install deps run: poetry install - name: Create md files From fd4420c32bb4e893e92d0853b5a35197cc1bafdb Mon Sep 17 00:00:00 2001 From: Emmanuel Hadoux Date: Wed, 12 Mar 2025 17:56:22 +0000 Subject: [PATCH 9/9] fix coverage workflow fix coverage fix coverage fix coverage for real fix coverage for real --- .github/workflows/test.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 3628398..aca2c0d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -23,7 +23,7 @@ jobs: - name: Install deps run: poetry install - name: Run tests - run: poetry run pytest + run: poetry run coverage run -m pytest env: CLIENT_ID: ${{ secrets.CLIENT_ID }} USERNAME: ${{ secrets.USERNAME }} @@ -32,8 +32,8 @@ jobs: OTPCODE: ${{ secrets.OTPCODE }} USER_POOL_ID: ${{ secrets.USER_POOL_ID }} - name: Publish code coverage - uses: paambaati/codeclimate-action@v6.0.0 + uses: paambaati/codeclimate-action@v9.0.0 env: CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }} with: - coverageCommand: coverage xml + coverageCommand: poetry run coverage xml