From a1c70c647a3a3612b06e7ba2bb9688215abde74d Mon Sep 17 00:00:00 2001 From: Aleksei Filatov <68555560+aalexfvk@users.noreply.github.com> Date: Mon, 14 Aug 2023 10:13:27 +0300 Subject: [PATCH] Use Poetry as a dependency tool (#33) * Use poetry as dependenct tool --- .github/actions/setup_dependencies/action.yml | 31 + .github/workflows/workflow.yml | 173 +- .gitignore | 16 +- .pylintrc | 3 +- AUTHORS | 2 +- Makefile | 396 +++- README.md | 35 +- {src/ch_tools => ch_tools}/__init__.py | 0 {src/ch_tools => ch_tools}/chadmin/README.md | 0 .../ch_tools => ch_tools}/chadmin/__init__.py | 0 .../chadmin/chadmin_cli.py | 0 .../chadmin/cli/__init__.py | 0 .../chadmin/cli/chs3_backup_group.py | 0 .../chadmin/cli/config_command.py | 0 .../chadmin/cli/crash_log_group.py | 0 .../chadmin/cli/data_store_group.py | 0 .../chadmin/cli/database_group.py | 0 .../chadmin/cli/diagnostics_command.py | 0 .../chadmin/cli/dictionary_group.py | 0 .../chadmin/cli/disk_group.py | 0 .../chadmin/cli/list_async_metrics_command.py | 0 .../chadmin/cli/list_events_command.py | 0 .../chadmin/cli/list_functions_command.py | 0 .../chadmin/cli/list_macros_command.py | 0 .../chadmin/cli/list_metrics_command.py | 0 .../chadmin/cli/list_settings_command.py | 0 .../chadmin/cli/merge_group.py | 0 .../chadmin/cli/mutation_group.py | 0 .../chadmin/cli/object_storage_group.py | 0 .../chadmin/cli/part_group.py | 0 .../chadmin/cli/part_log_group.py | 0 .../chadmin/cli/partition_group.py | 0 .../chadmin/cli/process_group.py | 0 .../chadmin/cli/query_log_group.py | 0 .../chadmin/cli/replicated_fetch_group.py | 0 .../chadmin/cli/replication_queue_group.py | 0 .../chadmin/cli/restore_replica_command.py | 0 .../chadmin/cli/stack_trace_command.py | 0 .../chadmin/cli/table_group.py | 0 .../chadmin/cli/table_replica_group.py | 0 .../chadmin/cli/thread_log_group.py | 0 .../chadmin/cli/wait_started_command.py | 0 .../chadmin/cli/zookeeper_group.py | 0 .../chadmin/internal/__init__.py | 0 .../chadmin/internal/backup.py | 0 .../chadmin/internal/diagnostics/__init__.py | 0 .../chadmin/internal/diagnostics/data.py | 0 .../chadmin/internal/diagnostics/diagnose.py | 0 .../chadmin/internal/diagnostics/formatter.py | 0 .../chadmin/internal/diagnostics/query.py | 0 .../chadmin/internal/diagnostics/utils.py | 0 .../chadmin/internal/dictionary.py | 0 .../internal/object_storage/__init__.py | 0 .../object_storage/collect_metadata.py | 0 .../internal/object_storage/s3_cleanup.py | 0 .../object_storage/s3_disk_configuration.py | 0 .../internal/object_storage/s3_iterator.py | 0 .../object_storage/s3_local_metadata.py | 0 .../chadmin/internal/part.py | 0 .../chadmin/internal/partition.py | 0 .../chadmin/internal/process.py | 0 .../chadmin/internal/system.py | 0 .../chadmin/internal/table.py | 0 .../chadmin/internal/table_replica.py | 0 .../chadmin/internal/utils.py | 0 .../chadmin/internal/zookeeper.py | 0 {src/ch_tools => ch_tools}/common/__init__.py | 0 {src/ch_tools => ch_tools}/common/backup.py | 0 .../common/cli/__init__.py | 0 .../common/cli/context_settings.py | 0 .../common/cli/formatting.py | 0 .../common/cli/locale_resolver.py | 0 .../common/cli/parameters.py | 0 .../common/cli/progress_bar.py | 0 .../ch_tools => ch_tools}/common/cli/utils.py | 0 {src/ch_tools => ch_tools}/common/cli/yaml.py | 0 .../common/clickhouse/__init__.py | 0 .../common/clickhouse/client/__init__.py | 0 .../clickhouse/client/clickhouse_client.py | 0 .../common/clickhouse/client/error.py | 0 .../clickhouse/client/query_output_format.py | 0 .../common/clickhouse/client/retry.py | 0 .../common/clickhouse/client/utils.py | 0 .../common/clickhouse/config/__init__.py | 0 .../common/clickhouse/config/clickhouse.py | 0 .../clickhouse/config/clickhouse_keeper.py | 0 .../common/clickhouse/config/path.py | 0 .../common/clickhouse/config/users.py | 0 .../common/clickhouse/config/utils.py | 0 .../common/clickhouse/config/zookeeper.py | 0 {src/ch_tools => ch_tools}/common/dbaas.py | 0 {src/ch_tools => ch_tools}/common/result.py | 0 .../common/type/__init__.py | 0 .../common/type/typed_enum.py | 0 {src/ch_tools => ch_tools}/common/utils.py | 0 .../monrun_checks/README.md | 0 .../monrun_checks/__init__.py | 0 .../monrun_checks/ch_backup.py | 0 .../monrun_checks/ch_core_dumps.py | 0 .../monrun_checks/ch_dist_tables.py | 0 .../monrun_checks/ch_geobase.py | 0 .../monrun_checks/ch_keeper.py | 0 .../monrun_checks/ch_log_errors.py | 0 .../monrun_checks/ch_ping.py | 0 .../monrun_checks/ch_replication_lag.py | 0 .../monrun_checks/ch_resetup_state.py | 0 .../monrun_checks/ch_ro_replica.py | 0 .../monrun_checks/ch_s3_backup_orphaned.py | 0 .../monrun_checks/ch_system_queues.py | 0 .../monrun_checks/ch_tls.py | 0 .../monrun_checks/clickhouse_client.py | 0 .../monrun_checks/clickhouse_info.py | 0 .../monrun_checks/exceptions.py | 0 .../monrun_checks/ext_ip_dns.py | 0 .../monrun_checks/main.py | 0 .../monrun_checks/status.py | 0 .../monrun_checks_keeper/README.md | 0 .../monrun_checks_keeper/__init__.py | 0 .../monrun_checks_keeper/keeper_commands.py | 0 .../monrun_checks_keeper/main.py | 0 .../monrun_checks_keeper/status.py | 0 .../s3_credentials/README.md | 0 .../s3_credentials/__init__.py | 0 .../s3_credentials/main.py | 0 debian/.gitignore | 2 + debian/changelog | 3 +- debian/compat | 2 +- debian/control | 4 +- debian/copyright | 2 +- debian/rules | 0 mypy.ini | 4 - poetry.lock | 1916 +++++++++++++++++ pyproject.toml | 170 +- 133 files changed, 2437 insertions(+), 322 deletions(-) create mode 100644 .github/actions/setup_dependencies/action.yml rename {src/ch_tools => ch_tools}/__init__.py (100%) rename {src/ch_tools => ch_tools}/chadmin/README.md (100%) rename {src/ch_tools => ch_tools}/chadmin/__init__.py (100%) rename {src/ch_tools => ch_tools}/chadmin/chadmin_cli.py (100%) rename {src/ch_tools => ch_tools}/chadmin/cli/__init__.py (100%) rename {src/ch_tools => ch_tools}/chadmin/cli/chs3_backup_group.py (100%) rename {src/ch_tools => ch_tools}/chadmin/cli/config_command.py (100%) rename {src/ch_tools => ch_tools}/chadmin/cli/crash_log_group.py (100%) rename {src/ch_tools => ch_tools}/chadmin/cli/data_store_group.py (100%) rename {src/ch_tools => ch_tools}/chadmin/cli/database_group.py (100%) rename {src/ch_tools => ch_tools}/chadmin/cli/diagnostics_command.py (100%) rename {src/ch_tools => ch_tools}/chadmin/cli/dictionary_group.py (100%) rename {src/ch_tools => ch_tools}/chadmin/cli/disk_group.py (100%) rename {src/ch_tools => ch_tools}/chadmin/cli/list_async_metrics_command.py (100%) rename {src/ch_tools => ch_tools}/chadmin/cli/list_events_command.py (100%) rename {src/ch_tools => ch_tools}/chadmin/cli/list_functions_command.py (100%) rename {src/ch_tools => ch_tools}/chadmin/cli/list_macros_command.py (100%) rename {src/ch_tools => ch_tools}/chadmin/cli/list_metrics_command.py (100%) rename {src/ch_tools => ch_tools}/chadmin/cli/list_settings_command.py (100%) rename {src/ch_tools => ch_tools}/chadmin/cli/merge_group.py (100%) rename {src/ch_tools => ch_tools}/chadmin/cli/mutation_group.py (100%) rename {src/ch_tools => ch_tools}/chadmin/cli/object_storage_group.py (100%) rename {src/ch_tools => ch_tools}/chadmin/cli/part_group.py (100%) rename {src/ch_tools => ch_tools}/chadmin/cli/part_log_group.py (100%) rename {src/ch_tools => ch_tools}/chadmin/cli/partition_group.py (100%) rename {src/ch_tools => ch_tools}/chadmin/cli/process_group.py (100%) rename {src/ch_tools => ch_tools}/chadmin/cli/query_log_group.py (100%) rename {src/ch_tools => ch_tools}/chadmin/cli/replicated_fetch_group.py (100%) rename {src/ch_tools => ch_tools}/chadmin/cli/replication_queue_group.py (100%) rename {src/ch_tools => ch_tools}/chadmin/cli/restore_replica_command.py (100%) rename {src/ch_tools => ch_tools}/chadmin/cli/stack_trace_command.py (100%) rename {src/ch_tools => ch_tools}/chadmin/cli/table_group.py (100%) rename {src/ch_tools => ch_tools}/chadmin/cli/table_replica_group.py (100%) rename {src/ch_tools => ch_tools}/chadmin/cli/thread_log_group.py (100%) rename {src/ch_tools => ch_tools}/chadmin/cli/wait_started_command.py (100%) rename {src/ch_tools => ch_tools}/chadmin/cli/zookeeper_group.py (100%) rename {src/ch_tools => ch_tools}/chadmin/internal/__init__.py (100%) rename {src/ch_tools => ch_tools}/chadmin/internal/backup.py (100%) rename {src/ch_tools => ch_tools}/chadmin/internal/diagnostics/__init__.py (100%) rename {src/ch_tools => ch_tools}/chadmin/internal/diagnostics/data.py (100%) rename {src/ch_tools => ch_tools}/chadmin/internal/diagnostics/diagnose.py (100%) rename {src/ch_tools => ch_tools}/chadmin/internal/diagnostics/formatter.py (100%) rename {src/ch_tools => ch_tools}/chadmin/internal/diagnostics/query.py (100%) rename {src/ch_tools => ch_tools}/chadmin/internal/diagnostics/utils.py (100%) rename {src/ch_tools => ch_tools}/chadmin/internal/dictionary.py (100%) rename {src/ch_tools => ch_tools}/chadmin/internal/object_storage/__init__.py (100%) rename {src/ch_tools => ch_tools}/chadmin/internal/object_storage/collect_metadata.py (100%) rename {src/ch_tools => ch_tools}/chadmin/internal/object_storage/s3_cleanup.py (100%) rename {src/ch_tools => ch_tools}/chadmin/internal/object_storage/s3_disk_configuration.py (100%) rename {src/ch_tools => ch_tools}/chadmin/internal/object_storage/s3_iterator.py (100%) rename {src/ch_tools => ch_tools}/chadmin/internal/object_storage/s3_local_metadata.py (100%) rename {src/ch_tools => ch_tools}/chadmin/internal/part.py (100%) rename {src/ch_tools => ch_tools}/chadmin/internal/partition.py (100%) rename {src/ch_tools => ch_tools}/chadmin/internal/process.py (100%) rename {src/ch_tools => ch_tools}/chadmin/internal/system.py (100%) rename {src/ch_tools => ch_tools}/chadmin/internal/table.py (100%) rename {src/ch_tools => ch_tools}/chadmin/internal/table_replica.py (100%) rename {src/ch_tools => ch_tools}/chadmin/internal/utils.py (100%) rename {src/ch_tools => ch_tools}/chadmin/internal/zookeeper.py (100%) rename {src/ch_tools => ch_tools}/common/__init__.py (100%) rename {src/ch_tools => ch_tools}/common/backup.py (100%) rename {src/ch_tools => ch_tools}/common/cli/__init__.py (100%) rename {src/ch_tools => ch_tools}/common/cli/context_settings.py (100%) rename {src/ch_tools => ch_tools}/common/cli/formatting.py (100%) rename {src/ch_tools => ch_tools}/common/cli/locale_resolver.py (100%) rename {src/ch_tools => ch_tools}/common/cli/parameters.py (100%) rename {src/ch_tools => ch_tools}/common/cli/progress_bar.py (100%) rename {src/ch_tools => ch_tools}/common/cli/utils.py (100%) rename {src/ch_tools => ch_tools}/common/cli/yaml.py (100%) rename {src/ch_tools => ch_tools}/common/clickhouse/__init__.py (100%) rename {src/ch_tools => ch_tools}/common/clickhouse/client/__init__.py (100%) rename {src/ch_tools => ch_tools}/common/clickhouse/client/clickhouse_client.py (100%) rename {src/ch_tools => ch_tools}/common/clickhouse/client/error.py (100%) rename {src/ch_tools => ch_tools}/common/clickhouse/client/query_output_format.py (100%) rename {src/ch_tools => ch_tools}/common/clickhouse/client/retry.py (100%) rename {src/ch_tools => ch_tools}/common/clickhouse/client/utils.py (100%) rename {src/ch_tools => ch_tools}/common/clickhouse/config/__init__.py (100%) rename {src/ch_tools => ch_tools}/common/clickhouse/config/clickhouse.py (100%) rename {src/ch_tools => ch_tools}/common/clickhouse/config/clickhouse_keeper.py (100%) rename {src/ch_tools => ch_tools}/common/clickhouse/config/path.py (100%) rename {src/ch_tools => ch_tools}/common/clickhouse/config/users.py (100%) rename {src/ch_tools => ch_tools}/common/clickhouse/config/utils.py (100%) rename {src/ch_tools => ch_tools}/common/clickhouse/config/zookeeper.py (100%) rename {src/ch_tools => ch_tools}/common/dbaas.py (100%) rename {src/ch_tools => ch_tools}/common/result.py (100%) rename {src/ch_tools => ch_tools}/common/type/__init__.py (100%) rename {src/ch_tools => ch_tools}/common/type/typed_enum.py (100%) rename {src/ch_tools => ch_tools}/common/utils.py (100%) rename {src/ch_tools => ch_tools}/monrun_checks/README.md (100%) rename {src/ch_tools => ch_tools}/monrun_checks/__init__.py (100%) rename {src/ch_tools => ch_tools}/monrun_checks/ch_backup.py (100%) rename {src/ch_tools => ch_tools}/monrun_checks/ch_core_dumps.py (100%) rename {src/ch_tools => ch_tools}/monrun_checks/ch_dist_tables.py (100%) rename {src/ch_tools => ch_tools}/monrun_checks/ch_geobase.py (100%) rename {src/ch_tools => ch_tools}/monrun_checks/ch_keeper.py (100%) rename {src/ch_tools => ch_tools}/monrun_checks/ch_log_errors.py (100%) rename {src/ch_tools => ch_tools}/monrun_checks/ch_ping.py (100%) rename {src/ch_tools => ch_tools}/monrun_checks/ch_replication_lag.py (100%) rename {src/ch_tools => ch_tools}/monrun_checks/ch_resetup_state.py (100%) rename {src/ch_tools => ch_tools}/monrun_checks/ch_ro_replica.py (100%) rename {src/ch_tools => ch_tools}/monrun_checks/ch_s3_backup_orphaned.py (100%) rename {src/ch_tools => ch_tools}/monrun_checks/ch_system_queues.py (100%) rename {src/ch_tools => ch_tools}/monrun_checks/ch_tls.py (100%) rename {src/ch_tools => ch_tools}/monrun_checks/clickhouse_client.py (100%) rename {src/ch_tools => ch_tools}/monrun_checks/clickhouse_info.py (100%) rename {src/ch_tools => ch_tools}/monrun_checks/exceptions.py (100%) rename {src/ch_tools => ch_tools}/monrun_checks/ext_ip_dns.py (100%) rename {src/ch_tools => ch_tools}/monrun_checks/main.py (100%) rename {src/ch_tools => ch_tools}/monrun_checks/status.py (100%) rename {src/ch_tools => ch_tools}/monrun_checks_keeper/README.md (100%) rename {src/ch_tools => ch_tools}/monrun_checks_keeper/__init__.py (100%) rename {src/ch_tools => ch_tools}/monrun_checks_keeper/keeper_commands.py (100%) rename {src/ch_tools => ch_tools}/monrun_checks_keeper/main.py (100%) rename {src/ch_tools => ch_tools}/monrun_checks_keeper/status.py (100%) rename {src/ch_tools => ch_tools}/s3_credentials/README.md (100%) rename {src/ch_tools => ch_tools}/s3_credentials/__init__.py (100%) rename {src/ch_tools => ch_tools}/s3_credentials/main.py (100%) mode change 100644 => 100755 debian/rules delete mode 100644 mypy.ini create mode 100644 poetry.lock diff --git a/.github/actions/setup_dependencies/action.yml b/.github/actions/setup_dependencies/action.yml new file mode 100644 index 00000000..3abf977d --- /dev/null +++ b/.github/actions/setup_dependencies/action.yml @@ -0,0 +1,31 @@ +name: Setup Python dependencies +description: Create Python environment with all dependencies installed +inputs: + python-version: + required: true +runs: + using: "composite" + steps: + - name: Setup Python ${{ inputs.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ inputs.python-version }} + + - name: Get full Python version + id: full-python-version + shell: bash + run: echo version=$(python -c "import sys; print('-'.join(str(v) for v in sys.version_info))") >> $GITHUB_OUTPUT + + - name: Cache virtual environments + uses: actions/cache@v3 + with: + path: | + ~/.cache/pip + .venv + key: ${{ runner.os }}-${{ steps.full-python-version.outputs.version }}-poetry-${{ hashFiles('poetry.lock') }} + + - name: Install Python dependencies + shell: bash + run: | + sudo make install-poetry + make install-deps diff --git a/.github/workflows/workflow.yml b/.github/workflows/workflow.yml index 59e0e14e..6e184d16 100644 --- a/.github/workflows/workflow.yml +++ b/.github/workflows/workflow.yml @@ -1,19 +1,27 @@ name: main on: - push: { branches: [main] } - pull_request: { branches: [main] } + push: + branches: [main] + tags: "v*" + pull_request: + branches: [main] concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} cancel-in-progress: true +env: + BUILD_DEB_OUTPUT_DIR: out + BUILD_PYTHON_OUTPUT_DIR: dist + PROJECT_NAME: clickhouse-tools + PROJECT_NAME_UNDESCORE: clickhouse_tools jobs: lint: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-python@v4 - with: { python-version: "3.11", cache: pip } - - run: pip install .[test] + - uses: actions/checkout@v3 + - uses: ./.github/actions/setup_dependencies + with: + python-version: "3.10" - name: "lint: isort" run: make isort - name: "lint: black" @@ -24,6 +32,41 @@ jobs: run: make pylint - name: "lint: mypy" run: make mypy + + tests: + needs: lint + runs-on: ubuntu-${{ matrix.target.ubuntu }} + env: + CLICKHOUSE_VERSION: ${{ matrix.clickhouse }} + strategy: + fail-fast: false + matrix: + target: + - { python: "3.6", ubuntu: "20.04" } + - { python: "3.10", ubuntu: "latest" } + clickhouse: + - "21.8.15.7" + - "22.3.20.29" + - "22.8.19.10" + - "23.3.4.17" + - "23.4.4.16" + - "23.5.3.24" + - "latest" + steps: + - uses: actions/checkout@v3 + - uses: ./.github/actions/setup_dependencies + with: + python-version: ${{ matrix.target.python }} + + - run: make test-unit + - run: make test-integration + + - name: publish test report + uses: mikepenz/action-junit-report@v3 + if: always() + with: + report_paths: 'tests/reports/*.xml' + push_to_dockerhub: runs-on: ubuntu-latest @@ -43,129 +86,83 @@ jobs: files: tests/bake.hcl push: true - build: - needs: lint + + release: + needs: tests strategy: fail-fast: false matrix: target: - - {python: "3.6.15", ubuntu: "20.04"} - - {python: "3.10.12", ubuntu: "latest"} - # a copy-paste of the above as github CI can't use env context in matrices - clickhouse: - - "21.8.15.7" - - "22.3.20.29" - - "22.8.19.10" - - "23.3.4.17" - - "23.4.4.16" - - "23.5.3.24" - - "latest" + - {python: "3.6", ubuntu: "20.04"} + - {python: "3.10", ubuntu: "latest"} runs-on: ubuntu-${{ matrix.target.ubuntu }} steps: - uses: actions/checkout@v3 - - name: set up python ${{ matrix.target.python }} - uses: actions/setup-python@v4 + + - uses: ./.github/actions/setup_dependencies with: python-version: ${{ matrix.target.python }} - cache: pip - - - name: install dependencies - # language=sh - run: | - pip install '.[test]' - name: build project - # language=sh - run: | - make prepare-version - flit build --no-use-vcs + run: make build-python-packages - name: upload wheel uses: actions/upload-artifact@v3 - if: ${{ matrix.clickhouse == 'latest' }} with: - name: ch_tools_py${{ matrix.target.python }}.whl - path: dist/*.whl + name: ${{ env.PROJECT_NAME_UNDESCORE }}_py${{ matrix.target.python }}.whl + path: ${{ env.BUILD_PYTHON_OUTPUT_DIR }}/*.whl if-no-files-found: error - name: upload sdist uses: actions/upload-artifact@v3 - if: ${{ matrix.clickhouse == 'latest' }} with: - name: ch_tools_py${{ matrix.target.python }}.tar.gz - path: dist/*.tar.gz + name: ${{ env.PROJECT_NAME_UNDESCORE }}_py${{ matrix.target.python }}.tar.gz + path: ${{ env.BUILD_PYTHON_OUTPUT_DIR }}/*.tar.gz if-no-files-found: error - - {name: run unit tests, run: pytest} - - - name: prepare integration tests - # language=sh - run: | - cd tests - CLICKHOUSE_VERSION=${{ matrix.clickhouse }} python3 -m env_control create - cd .. - - - name: run integration tests - # language=sh - run: | - cd tests - behave --show-timings --junit -D skip_setup - cd .. - - - name: publish test report - uses: mikepenz/action-junit-report@v3 - if: always() - with: - report_paths: 'tests/reports/*.xml' - - - name: prepare build deb - if: ${{ matrix.clickhouse == 'latest' }} - run: sudo apt install python3-venv debhelper devscripts + - name: install prerequisites for DEB packaging tools + run: sudo make prepare-build-deb - - name: build deb - if: ${{ matrix.clickhouse == 'latest' }} - # language=sh - run: | - # deb building implicitly cleans dist/ - cp dist/*.tar.gz ch_tools.tar.gz - cp dist/*.whl ch_tools.whl + - name: build DEB package + run: | + # Speedup Debian package building echo "force-unsafe-io" | sudo tee /etc/dpkg/dpkg.cfg.d/force-unsafe-io - sudo make build-deb-package + make build-deb-package - - name: test deb - if: ${{ matrix.clickhouse == 'latest' }} - # language=sh + - name: test DEB package run: | sudo make uninstall - sudo apt-get install -q -y ./out/ch-tools*.deb + sudo apt-get install -q -y ./${{ env.BUILD_DEB_OUTPUT_DIR }}/*.deb sudo chadmin --help sudo ch-monitoring --no-user-check --help sudo keeper-monitoring --help sudo ch-s3-credentials --help - - name: upload deb package artifact + - name: upload DEB package artifact uses: actions/upload-artifact@v3 - if: ${{ matrix.clickhouse == 'latest' }} with: - name: ch-tools_py-${{ matrix.target.python }}_ubuntu-${{ matrix.target.ubuntu }}.deb - path: out/ch-tools*.deb + name: ${{ env.PROJECT_NAME }}_py-${{ matrix.target.python }}_ubuntu-${{ matrix.target.ubuntu }}.deb + path: ${{ env.BUILD_DEB_OUTPUT_DIR }}/*.deb if-no-files-found: error - name: create a release uses: softprops/action-gh-release@v1 - if: ${{ matrix.clickhouse == 'latest' && matrix.target.ubuntu == 'latest' && startsWith(github.ref, 'refs/tags/') }} + if: ${{ matrix.target.ubuntu == 'latest' && startsWith(github.ref, 'refs/tags/') }} with: generate_release_notes: true fail_on_unmatched_files: true files: | - *.whl - *.tar.gz - out/ch-tools*.deb - - - name: publish to pypi - if: ${{ matrix.clickhouse == 'latest' && matrix.target.ubuntu == 'latest' && startsWith(github.ref, 'refs/tags/') }} - run: flit publish --no-use-vcs + ${{ env.BUILD_PYTHON_OUTPUT_DIR }}/*.whl + ${{ env.BUILD_PYTHON_OUTPUT_DIR }}/*.tar.gz + ${{ env.BUILD_DEB_OUTPUT_DIR }}/*.deb + + - name: publish to PYPI + if: ${{ matrix.target.ubuntu == 'latest' && startsWith(github.ref, 'refs/tags/') }} + continue-on-error: true + run: make publish env: - FLIT_USERNAME: "__token__" - FLIT_PASSWORD: "${{ secrets.PYPI_TOKEN }}" + POETRY_HTTP_BASIC_PYPI_USERNAME: "__token__" + POETRY_HTTP_BASIC_PYPI_PASSWORD: "${{ secrets.PYPI_TOKEN }}" + # Disable using keyring for poetry to get password from env variable + PYTHON_KEYRING_BACKEND: keyring.backends.null.Keyring diff --git a/.gitignore b/.gitignore index 685d90b4..9d38dcf7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,14 +1,16 @@ .DS_Store .idea -build/ -dist/ -.python-version -__pycache__ -venv/ .mypy_cache/ +.python-version .pytype/ +.session_conf.sav +__pycache__ +build/ cython_debug/ -tests/staging/ +dist/ +out/ tests/reports/ -.session_conf.sav +tests/staging/ +venv/ version.txt +.install-deps diff --git a/.pylintrc b/.pylintrc index 97e162a1..bf1ce78f 100644 --- a/.pylintrc +++ b/.pylintrc @@ -52,7 +52,8 @@ ignore= # ignore-list. The regex matches against paths and can be in Posix or Windows # format. Because '\\' represents the directory delimiter on Windows systems, # it can't be used as an escape character. -ignore-paths= +ignore-paths='tests/staging/.*', + 'tests/images/.*' # Files or directories matching the regular expression patterns are skipped. # The regex matches against base names, not paths. The default value ignores diff --git a/AUTHORS b/AUTHORS index 84ce8d82..163ab15b 100644 --- a/AUTHORS +++ b/AUTHORS @@ -1,4 +1,4 @@ -The following authors have created the source code of "ch-tools" +The following authors have created the source code of "clickhouse-tools" published and distributed by YANDEX LLC as the owner: Alexander Burmak diff --git a/Makefile b/Makefile index 8511f143..5dc8ee0f 100644 --- a/Makefile +++ b/Makefile @@ -1,198 +1,360 @@ #!/usr/bin/make -f -PREFIX=/opt/yandex/ch-tools -INSTALL_DIR=$(DESTDIR)$(PREFIX) +ifndef VERBOSE +.SILENT: +endif + +SHELL := bash +.ONESHELL: +.SHELLFLAGS := -eu -o pipefail -c +.DELETE_ON_ERROR: +MAKEFLAGS += --warn-undefined-variables +MAKEFLAGS += --no-builtin-rules + +PROJECT_NAME ?= "clickhouse-tools" +PROJECT_NAME_UNDERSCORE ?= $(subst -,_,$(PROJECT_NAME)) + +PYTHON ?= python3 + +# The latest version supporting Python 3.6 +POETRY_VERSION ?= 1.1.15 +POETRY_HOME ?= /opt/poetry +POETRY := $(POETRY_HOME)/bin/poetry + +PREFIX ?= /opt/yandex/$(PROJECT_NAME) +BUILD_PYTHON_OUTPUT_DIR ?= dist +BUILD_DEB_OUTPUT_DIR ?= out +SRC_DIR ?= ch_tools +TESTS_DIR ?= tests + +# It is used by DEB building tools to install a program to temporary +# directory before packaging +DESTDIR ?= + +INSTALL_DIR = $(DESTDIR)$(PREFIX) +BIN_DIR = $(INSTALL_DIR)/bin +SYMLINK_BIN_DIR = $(DESTDIR)/usr/bin + +WHL_FILE := $(PROJECT_NAME_UNDERSCORE)-*.whl +VENV_DIR := .venv +VERSION_FILE := version.txt +INSTALL_DEPS_STAMP := .install-deps + +# Pass arguments for testing tools +BEHAVE_ARGS ?= +PYTEST_ARGS ?= + + +define ensure_poetry + if [ ! -e $(POETRY) ]; then + echo "Poetry could not be found. Please install it manually 'make install-poetry'"; + exit 1; + fi +endef + + +# Should be default target, because "make" is just run +# by debhelper(dh_auto_build stage) for building the program during +# creation of a DEB package +.PHONY: build +build: build-python-packages ; + +.PHONY: all +all: build lint test-unit test-integration .PHONY: install install: install-python-package install-symlinks install-bash-completions configure-logs ; + .PHONY: uninstall uninstall: uninstall-python-package uninstall-symlinks uninstall-bash-completions uninstall-logrotate ; + +.PHONY: install-deps +install-deps: $(INSTALL_DEPS_STAMP) ; + + +# Update dependencies in poetry.lock to their latest versions according to your pyproject.toml +.PHONY: update-deps +update-deps: + $(ensure_poetry) + $(POETRY) update + +$(INSTALL_DEPS_STAMP): $(VENV_DIR) pyproject.toml poetry.lock + $(ensure_poetry) + $(POETRY) install --no-root + touch $(INSTALL_DEPS_STAMP) + +.PHONY: install-poetry +install-poetry: + [ -e $(POETRY) ] && echo "Found installed poetry $$($(POETRY) --version)" && exit 0 + + echo "Installing poetry $(POETRY_VERSION)..." + $(PYTHON) -m venv $(POETRY_HOME) + $(POETRY_HOME)/bin/pip install poetry==$(POETRY_VERSION) + + # TODO: remove after getting rid of support Python 3.6 + # Fix "cannot import name 'appengine' from 'urllib3.contrib'..." error + # while 'poetry publish' for version poetry 1.1.15 due to incompatibility with urllib3 >= 2.0.0 + # https://urllib3.readthedocs.io/en/stable/v2-migration-guide.html#importerror-cannot-import-name-gaecontrib-from-requests-toolbelt-compat + $(POETRY_HOME)/bin/python -m pip install "urllib3<2.0.0" + + +.PHONY: uninstall-poetry +uninstall-poetry: + [ ! -e $(POETRY_HOME) ] && exit 0; + + rm -rf $(POETRY_HOME) + echo "Uninstalled poetry from $(POETRY_HOME)" + + +$(VENV_DIR): + $(ensure_poetry) + $(POETRY) config virtualenvs.in-project true + $(POETRY) env use $(PYTHON) + + +.PHONY: lint +lint: isort black flake8 pylint mypy + + +.PHONY: isort +isort: install-deps + $(POETRY) run isort --check --diff $(SRC_DIR) $(TESTS_DIR) + + +.PHONY: black +black: install-deps + $(POETRY) run black --check --diff $(SRC_DIR) $(TESTS_DIR) + + +.PHONY: flake8 +flake8: install-deps + $(POETRY) run flake8 $(SRC_DIR) $(TESTS_DIR) + + +.PHONY: pylint +pylint: install-deps + $(POETRY) run pylint $(SRC_DIR) + + +.PHONY: mypy +mypy: install-deps + $(POETRY) run mypy $(SRC_DIR) $(TESTS_DIR) + +.PHONY: format +format: install-deps + $(POETRY) run isort $(SRC_DIR) $(TESTS_DIR) + $(POETRY) run black $(SRC_DIR) $(TESTS_DIR) + + +.PHONY: test-unit +test-unit: install-deps + $(POETRY) run $(PYTHON) -m pytest $(PYTEST_ARGS) $(TESTS_DIR)/unit + + +.PHONY: test-integration +test-integration: install-deps build-python-packages + cd $(TESTS_DIR) + $(POETRY) run $(PYTHON) -m env_control create + $(POETRY) run behave --show-timings -D skip_setup --junit $(BEHAVE_ARGS) + + +.PHONY: publish +publish: + $(POETRY) publish + + .PHONY: install-python-package -install-python-package: build-python-package - @echo 'Installing ch-tools' +install-python-package: build-python-packages + echo 'Installing $(PROJECT_NAME)' - python3 -m venv $(INSTALL_DIR) - rm -f $(INSTALL_DIR)/bin/activate* - $(INSTALL_DIR)/bin/pip install -U pip + # Prepare new virual environment + $(POETRY) run $(PYTHON) -m venv $(INSTALL_DIR) + rm -f $(BIN_DIR)/activate* - $(INSTALL_DIR)/bin/pip install --no-compile ch_tools.tar.gz + # Install python package + $(BIN_DIR)/pip install --upgrade pip + $(BIN_DIR)/pip install --no-compile $(BUILD_PYTHON_OUTPUT_DIR)/$(WHL_FILE) + # Clean python's artefacts find $(INSTALL_DIR) -name __pycache__ -type d -exec rm -rf {} + + + # Remove DESTDIR prefix from script's shebangs if it's present test -n '$(DESTDIR)' \ && grep -l -r -F '#!$(INSTALL_DIR)' $(INSTALL_DIR) \ | xargs sed -i -e 's|$(INSTALL_DIR)|$(PREFIX)|' \ || true -.PHONY: build-python-package -build-python-package: ch_tools.tar.gz ; - @echo 'Cleaning up residuals from building of Python package' - rm -rf venv dist -ch_tools.tar.gz: venv-build prepare-version - @echo 'Building Python package' +.PHONY: build-python-packages +build-python-packages: install-deps prepare-version clean-dist + echo 'Building python packages...' + $(POETRY) build - venv/bin/flit build --no-use-vcs - mv dist/*.tar.gz $@ + # Normalize SDIST name for consistency + # (dashes are replaced by undescores in project name) + # Poetry >= 1.2 does this itself + cd $(BUILD_PYTHON_OUTPUT_DIR) + sdist=$$(echo $(PROJECT_NAME)*.gz) + mv $${sdist} $${sdist/$(PROJECT_NAME)/$(PROJECT_NAME_UNDERSCORE)} 2>/dev/null -.PHONY: venv-build -venv-build: venv/bin/python3 ; -venv/bin/python3: - @echo 'Setting up build venv' +.PHONY: clean-dist +clean-dist: + echo 'Cleaning up residuals from building of Python package' + rm -rf $(BUILD_PYTHON_OUTPUT_DIR) - python3 -m venv venv - venv/bin/pip install -U pip flit .PHONY: uninstall-python-package uninstall-python-package: - @echo 'Uninstalling ch-tools' + echo 'Uninstalling $(PROJECT_NAME)' rm -rf $(INSTALL_DIR) + .PHONY: install-symlinks install-symlinks: - @echo 'Creating symlinks to /usr/bin/' + echo 'Creating symlinks to $(SYMLINK_BIN_DIR)' - mkdir -p $(DESTDIR)/usr/bin/ + mkdir -p $(SYMLINK_BIN_DIR) $(foreach bin, chadmin ch-monitoring keeper-monitoring ch-s3-credentials, \ - ln -sf $(PREFIX)/bin/$(bin) $(DESTDIR)/usr/bin/ ; \ - ) + ln -sf $(PREFIX)/bin/$(bin) $(SYMLINK_BIN_DIR);) + .PHONY: uninstall-symlinks uninstall-symlinks: - @echo 'Removing symlinks from /usr/bin/' + echo 'Removing symlinks from $(SYMLINK_BIN_DIR)' $(foreach bin, chadmin ch-monitoring keeper-monitoring ch-s3-credentials, \ - rm -f $(DESTDIR)/usr/bin/$(bin) ; \ - ) + rm -f $(SYMLINK_BIN_DIR)/$(bin);) + .PHONY: install-bash-completions install-bash-completions: - @echo 'Creating bash completions' + echo 'Creating bash completions' mkdir -p $(DESTDIR)/etc/bash_completion.d/ $(foreach bin, chadmin ch-monitoring keeper-monitoring, \ - cp resources/completion/$(bin)-completion.bash $(DESTDIR)/etc/bash_completion.d/$(bin) ; \ - ) + cp resources/completion/$(bin)-completion.bash $(DESTDIR)/etc/bash_completion.d/$(bin);) + .PHONY: uninstall-bash-completions uninstall-bash-completions: - @echo 'Removing bash completions' + echo 'Removing bash completions' $(foreach bin, chadmin ch-monitoring keeper-monitoring, \ - rm -f $(DESTDIR)/etc/bash_completion.d/$(bin) ; \ - ) + rm -f $(DESTDIR)/etc/bash_completion.d/$(bin);) + .PHONY: configure-logs configure-logs: - @echo 'Configuring logging' + echo 'Configuring logging' mkdir -p $(DESTDIR)/etc/logrotate.d/ $(foreach bin, chadmin clickhouse-monitoring keeper-monitoring, \ mkdir -p $(DESTDIR)/var/log/$(bin) ; \ chmod 775 $(DESTDIR)/var/log/$(bin) ; \ - cp resources/logrotate/$(bin).logrotate $(DESTDIR)/etc/logrotate.d/$(bin) ; \ - ) + cp resources/logrotate/$(bin).logrotate $(DESTDIR)/etc/logrotate.d/$(bin);) + .PHONY: uninstall-logrotate uninstall-logrotate: - @echo 'Removing log rotation rules' + echo 'Removing log rotation rules' $(foreach bin, chadmin clickhouse-monitoring keeper-monitoring, \ - rm -f $(DESTDIR)/etc/logrotate.d/$(bin) ; \ - ) + rm -f $(DESTDIR)/etc/logrotate.d/$(bin);) + .PHONY: prepare-changelog prepare-changelog: prepare-version - @echo 'Bumping version into Debian package changelog' - DEBFULLNAME="Yandex LLC" DEBEMAIL="ch-tools@yandex-team.ru" dch --force-bad-version --distribution stable -v `cat version.txt` Autobuild + echo 'Bumping version into Debian package changelog' + DEBFULLNAME="Yandex LLC" DEBEMAIL="ch-tools@yandex-team.ru" dch --force-bad-version --distribution stable -v $$(cat $(VERSION_FILE)) Autobuild -.PHONY: prepare-version -prepare-version: version.txt - @echo "Version: `cat version.txt`" -version.txt: - @echo "2.$$(git rev-list HEAD --count).$$(git rev-parse --short HEAD | perl -ne 'print hex $$_')" > $@ - @# Replace version in pyproject.toml - sed -ie "s/__version__ = \"[0-9\.]\+\"/__version__ = \"`cat $@`\"/" src/ch_tools/__init__.py +.PHONY: prepare-version +prepare-version: $(VERSION_FILE) + echo "Version: $$(cat $(VERSION_FILE))" -.PHONY: build-deb-package -build-deb-package: prepare-changelog - cd debian && debuild --check-dirname-level 0 --preserve-env --no-lintian --no-tgz-check -uc -us - mkdir out && mv ../ch-tools*.deb out/ -.PHONY: clean -clean: - @echo 'Cleaning up' +$(VERSION_FILE): + # Generate version + echo "2.$$(git rev-list HEAD --count).$$(git rev-parse --short HEAD | xargs -I {} printf '%d' 0x{})" > $@ + # Replace version in $(SRC_DIR)/__init__.py + sed "s/__version__ = \"[0-9\.]\+\"/__version__ = \"$$(cat $@)\"/" $(SRC_DIR)/__init__.py + # Replace version in pyproject.toml + $(POETRY) version $$(cat $@) - rm -rf build - rm -rf debian/files debian/.debhelper - rm -rf debian/ch-tools* +.PHONY: prepare-build-deb +prepare-build-deb: + apt install python3-venv debhelper devscripts -.PHONY: lint -lint: isort black flake8 pylint mypy -.PHONY: isort -isort: - isort --check --diff src tests +.PHONY: build-deb-package +build-deb-package: prepare-changelog install-deps + # Build DEB package + (cd debian && $(POETRY) run debuild --check-dirname-level 0 --preserve-env --no-lintian --no-tgz-check -uc -us) + # Move DEB package to output dir + DEB_FILE=$$(echo ../$(PROJECT_NAME)*.deb) + mkdir -p $(BUILD_DEB_OUTPUT_DIR) && mv $$DEB_FILE $(BUILD_DEB_OUTPUT_DIR) -.PHONY: black -black: - black --check --diff src tests -.PHONY: flake8 -flake8: - flake8 src tests +.PHONY: clean_debuild +clean_debuild: + rm -rf debian/{files,.debhelper,$(PROJECT_NAME)*,*stamp} + rm -f ../$(PROJECT_NAME)_*{build,buildinfo,changes,deb,dsc,gz,xz} -.PHONY: pylint -pylint: - pylint src - pylint --disable=missing-docstring tests -.PHONY: mypy -mypy: - mypy src tests - -.PHONY: format -format: - isort src tests - black src tests +.PHONY: clean +clean: clean_debuild + echo 'Cleaning up' + rm -rf $(BUILD_DEB_OUTPUT_DIR) + rm -rf $(BUILD_PYTHON_OUTPUT_DIR) + rm -rf $(VENV_DIR) + rm -rf $(INSTALL_DEPS_STAMP) + .PHONY: help help: - @echo "Base targets:" - @echo " lint Run linters. Alias for \"isort black flake8 pylint mypy\"." - @echo " isort Perform isort checks." - @echo " black Perform black checks." - @echo " flake8 Perform flake8 checks." - @echo " pylint Perform pylint checks." - @echo " mypy Perform mypy checks." - @echo " format Re-format source code to conform style settings enforced by" - @echo " isort and black tools." - @echo " prepare-changelog Add an autobuild version entity to changelog" - @echo " prepare-version Update version based on latest commit" - @echo " build-python-package Build 'ch-tools' Python package" - @echo " build-deb-package Build 'ch-tools' debian package" - @echo " clean Clean up after building debian package" - @echo "" - @echo "--------------------------------------------------------------------------------" - @echo "" - @echo "Debian package build targets:" - @echo " install Install 'ch-tools' debian package" - @echo " uninstall Uninstall 'ch-tools' debian package" - @echo "" - @echo " install-python-package Install 'ch-tools' python package" - @echo " uninstall-python-package Uninstall 'ch-tools' python package" - @echo " install-symlinks Install symlinks to /usr/bin/" - @echo " uninstall-symlinks Uninstall symlinks from /usr/bin/" - @echo " install-bash-completions Install to /etc/bash_completion.d/" - @echo " uninstall-bash-completions Uninstall from /etc/bash_completion.d/" - @echo " configure-logs Install log rotation rules to /etc/logrotate.d/ and create log dirs" - @echo " uninstall-logrotate Uninstall log rotation rules from /etc/logrotate.d/" - @echo "" - @echo "--------------------------------------------------------------------------------" - @echo "" - @echo " help Show this help message." + echo "Base targets:" + echo " install-poetry Install Poetry" + echo " uninstall-poetry Uninstall Poetry" + echo " install-deps Install Python dependencies to local environment $(VENV_DIR)" + echo " update-deps Update dependencies in poetry.lock to their latest versions" + echo " publish Publish python package to PYPI" + echo " lint Run linters. Alias for \"isort black flake8 pylint mypy\"." + echo " test-unit Run unit tests." + echo " test-integration Run integration tests." + echo " isort Perform isort checks." + echo " black Perform black checks." + echo " flake8 Perform flake8 checks." + echo " pylint Perform pylint checks." + echo " mypy Perform mypy checks." + echo " format Re-format source code to conform style settings enforced by" + echo " isort and black tools." + echo " prepare-changelog Add an autobuild version entity to changelog" + echo " prepare-version Update version based on latest commit" + echo " build-python-packages Build '$(PROJECT_NAME)' Python packages (sdist and wheel)" + echo " prepare-build-deb Install prerequisites for DEB packaging tool" + echo " build-deb-package Build '$(PROJECT_NAME)' debian package" + echo " clean Clean-up all produced/generated files inside tree" + echo "" + echo "--------------------------------------------------------------------------------" + echo "" + echo "Debian package build targets:" + echo " install Install '$(PROJECT_NAME)' debian package" + echo " uninstall Uninstall '$(PROJECT_NAME)' debian package" + echo "" + echo " install-python-package Install '$(PROJECT_NAME)' python package" + echo " uninstall-python-package Uninstall '$(PROJECT_NAME)' python package" + echo " install-symlinks Install symlinks to /usr/bin/" + echo " uninstall-symlinks Uninstall symlinks from /usr/bin/" + echo " install-bash-completions Install to /etc/bash_completion.d/" + echo " uninstall-bash-completions Uninstall from /etc/bash_completion.d/" + echo " configure-logs Install log rotation rules to /etc/logrotate.d/ and create log dirs" + echo " uninstall-logrotate Uninstall log rotation rules from /etc/logrotate.d/" + echo "" + echo "--------------------------------------------------------------------------------" + echo "" + echo " help Show this help message." diff --git a/README.md b/README.md index 7f0e8081..41c22c3f 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,13 @@ [![license](https://img.shields.io/github/license/yandex/ch-tools)](https://github.com/yandex/ch-tools/blob/main/LICENSE) [![tests status](https://img.shields.io/github/actions/workflow/status/yandex/ch-tools/.github%2Fworkflows%2Fworkflow.yml?event=push&label=tests)](https://github.com/yandex/ch-tools/actions/workflows/workflow.yml?query=event%3Apush) -# ch-tools +# clickhouse-tools -**ch-tools** is a set of tools for administration and diagnostics of [ClickHouse](https://clickhouse.com/) DBMS. +**clickhouse-tools** is a set of tools for administration and diagnostics of [ClickHouse](https://clickhouse.com/) DBMS. ## Tools -**ch-tools** consist of following components: +**clickhouse-tools** consist of following components: - [chadmin](./src/chtools/chadmin/README.md) - ClickHouse administration tool - [ch-monitoring](./src/chtools/monrun_checks/README.md) - ClickHouse monitoring tool - [keeper-monitoring](./src/chtools/monrun_checks_keeper/README.md) - ClickHouse Keeper / ZooKeeper monitoring tool @@ -15,33 +15,32 @@ All of these tools must be run on the same host as ClickHouse server is running. -## Local development (using venv) +## Local development (using poetry) ```sh -python3 -m venv venv -source venv/bin/activate -pip install .[test] -flit build --no-use-vcs -flit install +sudo make install-poetry +# or to install in user's home directory +make POETRY_HOME=~/opt/poetry install-poetry # lint make lint # unit tests -pytest +make test-unit +make test-unit PYTEST_ARGS="-k test_name" # integration tests (rebuild docker images using a .whl file) -cd tests; behave - -# integration tests (do not rebuild docker images) -# useful when you didn't change source code -cd tests; behave -D skip_setup +make test-integration +make test-integration BEHAVE_ARGS="-i feature_name" # integration tests (supply a custom ClickHouse version to test against) -cd tests; CLICKHOUSE_VERSION="1.2.3.4" behave - +CLICKHOUSE_VERSION="1.2.3.4" make test-integration # If you want to have containers running on failure, supply a flag: -# behave -D no_stop_on_fail +# BEHAVE_ARGS="-D no_stop_on_fail" + +# For building deb packages +make prepare-build-deb +make build-deb-package ``` Please note: base images for tests are pulled from [chtools Dockerhub](https://hub.docker.com/u/chtools). diff --git a/src/ch_tools/__init__.py b/ch_tools/__init__.py similarity index 100% rename from src/ch_tools/__init__.py rename to ch_tools/__init__.py diff --git a/src/ch_tools/chadmin/README.md b/ch_tools/chadmin/README.md similarity index 100% rename from src/ch_tools/chadmin/README.md rename to ch_tools/chadmin/README.md diff --git a/src/ch_tools/chadmin/__init__.py b/ch_tools/chadmin/__init__.py similarity index 100% rename from src/ch_tools/chadmin/__init__.py rename to ch_tools/chadmin/__init__.py diff --git a/src/ch_tools/chadmin/chadmin_cli.py b/ch_tools/chadmin/chadmin_cli.py similarity index 100% rename from src/ch_tools/chadmin/chadmin_cli.py rename to ch_tools/chadmin/chadmin_cli.py diff --git a/src/ch_tools/chadmin/cli/__init__.py b/ch_tools/chadmin/cli/__init__.py similarity index 100% rename from src/ch_tools/chadmin/cli/__init__.py rename to ch_tools/chadmin/cli/__init__.py diff --git a/src/ch_tools/chadmin/cli/chs3_backup_group.py b/ch_tools/chadmin/cli/chs3_backup_group.py similarity index 100% rename from src/ch_tools/chadmin/cli/chs3_backup_group.py rename to ch_tools/chadmin/cli/chs3_backup_group.py diff --git a/src/ch_tools/chadmin/cli/config_command.py b/ch_tools/chadmin/cli/config_command.py similarity index 100% rename from src/ch_tools/chadmin/cli/config_command.py rename to ch_tools/chadmin/cli/config_command.py diff --git a/src/ch_tools/chadmin/cli/crash_log_group.py b/ch_tools/chadmin/cli/crash_log_group.py similarity index 100% rename from src/ch_tools/chadmin/cli/crash_log_group.py rename to ch_tools/chadmin/cli/crash_log_group.py diff --git a/src/ch_tools/chadmin/cli/data_store_group.py b/ch_tools/chadmin/cli/data_store_group.py similarity index 100% rename from src/ch_tools/chadmin/cli/data_store_group.py rename to ch_tools/chadmin/cli/data_store_group.py diff --git a/src/ch_tools/chadmin/cli/database_group.py b/ch_tools/chadmin/cli/database_group.py similarity index 100% rename from src/ch_tools/chadmin/cli/database_group.py rename to ch_tools/chadmin/cli/database_group.py diff --git a/src/ch_tools/chadmin/cli/diagnostics_command.py b/ch_tools/chadmin/cli/diagnostics_command.py similarity index 100% rename from src/ch_tools/chadmin/cli/diagnostics_command.py rename to ch_tools/chadmin/cli/diagnostics_command.py diff --git a/src/ch_tools/chadmin/cli/dictionary_group.py b/ch_tools/chadmin/cli/dictionary_group.py similarity index 100% rename from src/ch_tools/chadmin/cli/dictionary_group.py rename to ch_tools/chadmin/cli/dictionary_group.py diff --git a/src/ch_tools/chadmin/cli/disk_group.py b/ch_tools/chadmin/cli/disk_group.py similarity index 100% rename from src/ch_tools/chadmin/cli/disk_group.py rename to ch_tools/chadmin/cli/disk_group.py diff --git a/src/ch_tools/chadmin/cli/list_async_metrics_command.py b/ch_tools/chadmin/cli/list_async_metrics_command.py similarity index 100% rename from src/ch_tools/chadmin/cli/list_async_metrics_command.py rename to ch_tools/chadmin/cli/list_async_metrics_command.py diff --git a/src/ch_tools/chadmin/cli/list_events_command.py b/ch_tools/chadmin/cli/list_events_command.py similarity index 100% rename from src/ch_tools/chadmin/cli/list_events_command.py rename to ch_tools/chadmin/cli/list_events_command.py diff --git a/src/ch_tools/chadmin/cli/list_functions_command.py b/ch_tools/chadmin/cli/list_functions_command.py similarity index 100% rename from src/ch_tools/chadmin/cli/list_functions_command.py rename to ch_tools/chadmin/cli/list_functions_command.py diff --git a/src/ch_tools/chadmin/cli/list_macros_command.py b/ch_tools/chadmin/cli/list_macros_command.py similarity index 100% rename from src/ch_tools/chadmin/cli/list_macros_command.py rename to ch_tools/chadmin/cli/list_macros_command.py diff --git a/src/ch_tools/chadmin/cli/list_metrics_command.py b/ch_tools/chadmin/cli/list_metrics_command.py similarity index 100% rename from src/ch_tools/chadmin/cli/list_metrics_command.py rename to ch_tools/chadmin/cli/list_metrics_command.py diff --git a/src/ch_tools/chadmin/cli/list_settings_command.py b/ch_tools/chadmin/cli/list_settings_command.py similarity index 100% rename from src/ch_tools/chadmin/cli/list_settings_command.py rename to ch_tools/chadmin/cli/list_settings_command.py diff --git a/src/ch_tools/chadmin/cli/merge_group.py b/ch_tools/chadmin/cli/merge_group.py similarity index 100% rename from src/ch_tools/chadmin/cli/merge_group.py rename to ch_tools/chadmin/cli/merge_group.py diff --git a/src/ch_tools/chadmin/cli/mutation_group.py b/ch_tools/chadmin/cli/mutation_group.py similarity index 100% rename from src/ch_tools/chadmin/cli/mutation_group.py rename to ch_tools/chadmin/cli/mutation_group.py diff --git a/src/ch_tools/chadmin/cli/object_storage_group.py b/ch_tools/chadmin/cli/object_storage_group.py similarity index 100% rename from src/ch_tools/chadmin/cli/object_storage_group.py rename to ch_tools/chadmin/cli/object_storage_group.py diff --git a/src/ch_tools/chadmin/cli/part_group.py b/ch_tools/chadmin/cli/part_group.py similarity index 100% rename from src/ch_tools/chadmin/cli/part_group.py rename to ch_tools/chadmin/cli/part_group.py diff --git a/src/ch_tools/chadmin/cli/part_log_group.py b/ch_tools/chadmin/cli/part_log_group.py similarity index 100% rename from src/ch_tools/chadmin/cli/part_log_group.py rename to ch_tools/chadmin/cli/part_log_group.py diff --git a/src/ch_tools/chadmin/cli/partition_group.py b/ch_tools/chadmin/cli/partition_group.py similarity index 100% rename from src/ch_tools/chadmin/cli/partition_group.py rename to ch_tools/chadmin/cli/partition_group.py diff --git a/src/ch_tools/chadmin/cli/process_group.py b/ch_tools/chadmin/cli/process_group.py similarity index 100% rename from src/ch_tools/chadmin/cli/process_group.py rename to ch_tools/chadmin/cli/process_group.py diff --git a/src/ch_tools/chadmin/cli/query_log_group.py b/ch_tools/chadmin/cli/query_log_group.py similarity index 100% rename from src/ch_tools/chadmin/cli/query_log_group.py rename to ch_tools/chadmin/cli/query_log_group.py diff --git a/src/ch_tools/chadmin/cli/replicated_fetch_group.py b/ch_tools/chadmin/cli/replicated_fetch_group.py similarity index 100% rename from src/ch_tools/chadmin/cli/replicated_fetch_group.py rename to ch_tools/chadmin/cli/replicated_fetch_group.py diff --git a/src/ch_tools/chadmin/cli/replication_queue_group.py b/ch_tools/chadmin/cli/replication_queue_group.py similarity index 100% rename from src/ch_tools/chadmin/cli/replication_queue_group.py rename to ch_tools/chadmin/cli/replication_queue_group.py diff --git a/src/ch_tools/chadmin/cli/restore_replica_command.py b/ch_tools/chadmin/cli/restore_replica_command.py similarity index 100% rename from src/ch_tools/chadmin/cli/restore_replica_command.py rename to ch_tools/chadmin/cli/restore_replica_command.py diff --git a/src/ch_tools/chadmin/cli/stack_trace_command.py b/ch_tools/chadmin/cli/stack_trace_command.py similarity index 100% rename from src/ch_tools/chadmin/cli/stack_trace_command.py rename to ch_tools/chadmin/cli/stack_trace_command.py diff --git a/src/ch_tools/chadmin/cli/table_group.py b/ch_tools/chadmin/cli/table_group.py similarity index 100% rename from src/ch_tools/chadmin/cli/table_group.py rename to ch_tools/chadmin/cli/table_group.py diff --git a/src/ch_tools/chadmin/cli/table_replica_group.py b/ch_tools/chadmin/cli/table_replica_group.py similarity index 100% rename from src/ch_tools/chadmin/cli/table_replica_group.py rename to ch_tools/chadmin/cli/table_replica_group.py diff --git a/src/ch_tools/chadmin/cli/thread_log_group.py b/ch_tools/chadmin/cli/thread_log_group.py similarity index 100% rename from src/ch_tools/chadmin/cli/thread_log_group.py rename to ch_tools/chadmin/cli/thread_log_group.py diff --git a/src/ch_tools/chadmin/cli/wait_started_command.py b/ch_tools/chadmin/cli/wait_started_command.py similarity index 100% rename from src/ch_tools/chadmin/cli/wait_started_command.py rename to ch_tools/chadmin/cli/wait_started_command.py diff --git a/src/ch_tools/chadmin/cli/zookeeper_group.py b/ch_tools/chadmin/cli/zookeeper_group.py similarity index 100% rename from src/ch_tools/chadmin/cli/zookeeper_group.py rename to ch_tools/chadmin/cli/zookeeper_group.py diff --git a/src/ch_tools/chadmin/internal/__init__.py b/ch_tools/chadmin/internal/__init__.py similarity index 100% rename from src/ch_tools/chadmin/internal/__init__.py rename to ch_tools/chadmin/internal/__init__.py diff --git a/src/ch_tools/chadmin/internal/backup.py b/ch_tools/chadmin/internal/backup.py similarity index 100% rename from src/ch_tools/chadmin/internal/backup.py rename to ch_tools/chadmin/internal/backup.py diff --git a/src/ch_tools/chadmin/internal/diagnostics/__init__.py b/ch_tools/chadmin/internal/diagnostics/__init__.py similarity index 100% rename from src/ch_tools/chadmin/internal/diagnostics/__init__.py rename to ch_tools/chadmin/internal/diagnostics/__init__.py diff --git a/src/ch_tools/chadmin/internal/diagnostics/data.py b/ch_tools/chadmin/internal/diagnostics/data.py similarity index 100% rename from src/ch_tools/chadmin/internal/diagnostics/data.py rename to ch_tools/chadmin/internal/diagnostics/data.py diff --git a/src/ch_tools/chadmin/internal/diagnostics/diagnose.py b/ch_tools/chadmin/internal/diagnostics/diagnose.py similarity index 100% rename from src/ch_tools/chadmin/internal/diagnostics/diagnose.py rename to ch_tools/chadmin/internal/diagnostics/diagnose.py diff --git a/src/ch_tools/chadmin/internal/diagnostics/formatter.py b/ch_tools/chadmin/internal/diagnostics/formatter.py similarity index 100% rename from src/ch_tools/chadmin/internal/diagnostics/formatter.py rename to ch_tools/chadmin/internal/diagnostics/formatter.py diff --git a/src/ch_tools/chadmin/internal/diagnostics/query.py b/ch_tools/chadmin/internal/diagnostics/query.py similarity index 100% rename from src/ch_tools/chadmin/internal/diagnostics/query.py rename to ch_tools/chadmin/internal/diagnostics/query.py diff --git a/src/ch_tools/chadmin/internal/diagnostics/utils.py b/ch_tools/chadmin/internal/diagnostics/utils.py similarity index 100% rename from src/ch_tools/chadmin/internal/diagnostics/utils.py rename to ch_tools/chadmin/internal/diagnostics/utils.py diff --git a/src/ch_tools/chadmin/internal/dictionary.py b/ch_tools/chadmin/internal/dictionary.py similarity index 100% rename from src/ch_tools/chadmin/internal/dictionary.py rename to ch_tools/chadmin/internal/dictionary.py diff --git a/src/ch_tools/chadmin/internal/object_storage/__init__.py b/ch_tools/chadmin/internal/object_storage/__init__.py similarity index 100% rename from src/ch_tools/chadmin/internal/object_storage/__init__.py rename to ch_tools/chadmin/internal/object_storage/__init__.py diff --git a/src/ch_tools/chadmin/internal/object_storage/collect_metadata.py b/ch_tools/chadmin/internal/object_storage/collect_metadata.py similarity index 100% rename from src/ch_tools/chadmin/internal/object_storage/collect_metadata.py rename to ch_tools/chadmin/internal/object_storage/collect_metadata.py diff --git a/src/ch_tools/chadmin/internal/object_storage/s3_cleanup.py b/ch_tools/chadmin/internal/object_storage/s3_cleanup.py similarity index 100% rename from src/ch_tools/chadmin/internal/object_storage/s3_cleanup.py rename to ch_tools/chadmin/internal/object_storage/s3_cleanup.py diff --git a/src/ch_tools/chadmin/internal/object_storage/s3_disk_configuration.py b/ch_tools/chadmin/internal/object_storage/s3_disk_configuration.py similarity index 100% rename from src/ch_tools/chadmin/internal/object_storage/s3_disk_configuration.py rename to ch_tools/chadmin/internal/object_storage/s3_disk_configuration.py diff --git a/src/ch_tools/chadmin/internal/object_storage/s3_iterator.py b/ch_tools/chadmin/internal/object_storage/s3_iterator.py similarity index 100% rename from src/ch_tools/chadmin/internal/object_storage/s3_iterator.py rename to ch_tools/chadmin/internal/object_storage/s3_iterator.py diff --git a/src/ch_tools/chadmin/internal/object_storage/s3_local_metadata.py b/ch_tools/chadmin/internal/object_storage/s3_local_metadata.py similarity index 100% rename from src/ch_tools/chadmin/internal/object_storage/s3_local_metadata.py rename to ch_tools/chadmin/internal/object_storage/s3_local_metadata.py diff --git a/src/ch_tools/chadmin/internal/part.py b/ch_tools/chadmin/internal/part.py similarity index 100% rename from src/ch_tools/chadmin/internal/part.py rename to ch_tools/chadmin/internal/part.py diff --git a/src/ch_tools/chadmin/internal/partition.py b/ch_tools/chadmin/internal/partition.py similarity index 100% rename from src/ch_tools/chadmin/internal/partition.py rename to ch_tools/chadmin/internal/partition.py diff --git a/src/ch_tools/chadmin/internal/process.py b/ch_tools/chadmin/internal/process.py similarity index 100% rename from src/ch_tools/chadmin/internal/process.py rename to ch_tools/chadmin/internal/process.py diff --git a/src/ch_tools/chadmin/internal/system.py b/ch_tools/chadmin/internal/system.py similarity index 100% rename from src/ch_tools/chadmin/internal/system.py rename to ch_tools/chadmin/internal/system.py diff --git a/src/ch_tools/chadmin/internal/table.py b/ch_tools/chadmin/internal/table.py similarity index 100% rename from src/ch_tools/chadmin/internal/table.py rename to ch_tools/chadmin/internal/table.py diff --git a/src/ch_tools/chadmin/internal/table_replica.py b/ch_tools/chadmin/internal/table_replica.py similarity index 100% rename from src/ch_tools/chadmin/internal/table_replica.py rename to ch_tools/chadmin/internal/table_replica.py diff --git a/src/ch_tools/chadmin/internal/utils.py b/ch_tools/chadmin/internal/utils.py similarity index 100% rename from src/ch_tools/chadmin/internal/utils.py rename to ch_tools/chadmin/internal/utils.py diff --git a/src/ch_tools/chadmin/internal/zookeeper.py b/ch_tools/chadmin/internal/zookeeper.py similarity index 100% rename from src/ch_tools/chadmin/internal/zookeeper.py rename to ch_tools/chadmin/internal/zookeeper.py diff --git a/src/ch_tools/common/__init__.py b/ch_tools/common/__init__.py similarity index 100% rename from src/ch_tools/common/__init__.py rename to ch_tools/common/__init__.py diff --git a/src/ch_tools/common/backup.py b/ch_tools/common/backup.py similarity index 100% rename from src/ch_tools/common/backup.py rename to ch_tools/common/backup.py diff --git a/src/ch_tools/common/cli/__init__.py b/ch_tools/common/cli/__init__.py similarity index 100% rename from src/ch_tools/common/cli/__init__.py rename to ch_tools/common/cli/__init__.py diff --git a/src/ch_tools/common/cli/context_settings.py b/ch_tools/common/cli/context_settings.py similarity index 100% rename from src/ch_tools/common/cli/context_settings.py rename to ch_tools/common/cli/context_settings.py diff --git a/src/ch_tools/common/cli/formatting.py b/ch_tools/common/cli/formatting.py similarity index 100% rename from src/ch_tools/common/cli/formatting.py rename to ch_tools/common/cli/formatting.py diff --git a/src/ch_tools/common/cli/locale_resolver.py b/ch_tools/common/cli/locale_resolver.py similarity index 100% rename from src/ch_tools/common/cli/locale_resolver.py rename to ch_tools/common/cli/locale_resolver.py diff --git a/src/ch_tools/common/cli/parameters.py b/ch_tools/common/cli/parameters.py similarity index 100% rename from src/ch_tools/common/cli/parameters.py rename to ch_tools/common/cli/parameters.py diff --git a/src/ch_tools/common/cli/progress_bar.py b/ch_tools/common/cli/progress_bar.py similarity index 100% rename from src/ch_tools/common/cli/progress_bar.py rename to ch_tools/common/cli/progress_bar.py diff --git a/src/ch_tools/common/cli/utils.py b/ch_tools/common/cli/utils.py similarity index 100% rename from src/ch_tools/common/cli/utils.py rename to ch_tools/common/cli/utils.py diff --git a/src/ch_tools/common/cli/yaml.py b/ch_tools/common/cli/yaml.py similarity index 100% rename from src/ch_tools/common/cli/yaml.py rename to ch_tools/common/cli/yaml.py diff --git a/src/ch_tools/common/clickhouse/__init__.py b/ch_tools/common/clickhouse/__init__.py similarity index 100% rename from src/ch_tools/common/clickhouse/__init__.py rename to ch_tools/common/clickhouse/__init__.py diff --git a/src/ch_tools/common/clickhouse/client/__init__.py b/ch_tools/common/clickhouse/client/__init__.py similarity index 100% rename from src/ch_tools/common/clickhouse/client/__init__.py rename to ch_tools/common/clickhouse/client/__init__.py diff --git a/src/ch_tools/common/clickhouse/client/clickhouse_client.py b/ch_tools/common/clickhouse/client/clickhouse_client.py similarity index 100% rename from src/ch_tools/common/clickhouse/client/clickhouse_client.py rename to ch_tools/common/clickhouse/client/clickhouse_client.py diff --git a/src/ch_tools/common/clickhouse/client/error.py b/ch_tools/common/clickhouse/client/error.py similarity index 100% rename from src/ch_tools/common/clickhouse/client/error.py rename to ch_tools/common/clickhouse/client/error.py diff --git a/src/ch_tools/common/clickhouse/client/query_output_format.py b/ch_tools/common/clickhouse/client/query_output_format.py similarity index 100% rename from src/ch_tools/common/clickhouse/client/query_output_format.py rename to ch_tools/common/clickhouse/client/query_output_format.py diff --git a/src/ch_tools/common/clickhouse/client/retry.py b/ch_tools/common/clickhouse/client/retry.py similarity index 100% rename from src/ch_tools/common/clickhouse/client/retry.py rename to ch_tools/common/clickhouse/client/retry.py diff --git a/src/ch_tools/common/clickhouse/client/utils.py b/ch_tools/common/clickhouse/client/utils.py similarity index 100% rename from src/ch_tools/common/clickhouse/client/utils.py rename to ch_tools/common/clickhouse/client/utils.py diff --git a/src/ch_tools/common/clickhouse/config/__init__.py b/ch_tools/common/clickhouse/config/__init__.py similarity index 100% rename from src/ch_tools/common/clickhouse/config/__init__.py rename to ch_tools/common/clickhouse/config/__init__.py diff --git a/src/ch_tools/common/clickhouse/config/clickhouse.py b/ch_tools/common/clickhouse/config/clickhouse.py similarity index 100% rename from src/ch_tools/common/clickhouse/config/clickhouse.py rename to ch_tools/common/clickhouse/config/clickhouse.py diff --git a/src/ch_tools/common/clickhouse/config/clickhouse_keeper.py b/ch_tools/common/clickhouse/config/clickhouse_keeper.py similarity index 100% rename from src/ch_tools/common/clickhouse/config/clickhouse_keeper.py rename to ch_tools/common/clickhouse/config/clickhouse_keeper.py diff --git a/src/ch_tools/common/clickhouse/config/path.py b/ch_tools/common/clickhouse/config/path.py similarity index 100% rename from src/ch_tools/common/clickhouse/config/path.py rename to ch_tools/common/clickhouse/config/path.py diff --git a/src/ch_tools/common/clickhouse/config/users.py b/ch_tools/common/clickhouse/config/users.py similarity index 100% rename from src/ch_tools/common/clickhouse/config/users.py rename to ch_tools/common/clickhouse/config/users.py diff --git a/src/ch_tools/common/clickhouse/config/utils.py b/ch_tools/common/clickhouse/config/utils.py similarity index 100% rename from src/ch_tools/common/clickhouse/config/utils.py rename to ch_tools/common/clickhouse/config/utils.py diff --git a/src/ch_tools/common/clickhouse/config/zookeeper.py b/ch_tools/common/clickhouse/config/zookeeper.py similarity index 100% rename from src/ch_tools/common/clickhouse/config/zookeeper.py rename to ch_tools/common/clickhouse/config/zookeeper.py diff --git a/src/ch_tools/common/dbaas.py b/ch_tools/common/dbaas.py similarity index 100% rename from src/ch_tools/common/dbaas.py rename to ch_tools/common/dbaas.py diff --git a/src/ch_tools/common/result.py b/ch_tools/common/result.py similarity index 100% rename from src/ch_tools/common/result.py rename to ch_tools/common/result.py diff --git a/src/ch_tools/common/type/__init__.py b/ch_tools/common/type/__init__.py similarity index 100% rename from src/ch_tools/common/type/__init__.py rename to ch_tools/common/type/__init__.py diff --git a/src/ch_tools/common/type/typed_enum.py b/ch_tools/common/type/typed_enum.py similarity index 100% rename from src/ch_tools/common/type/typed_enum.py rename to ch_tools/common/type/typed_enum.py diff --git a/src/ch_tools/common/utils.py b/ch_tools/common/utils.py similarity index 100% rename from src/ch_tools/common/utils.py rename to ch_tools/common/utils.py diff --git a/src/ch_tools/monrun_checks/README.md b/ch_tools/monrun_checks/README.md similarity index 100% rename from src/ch_tools/monrun_checks/README.md rename to ch_tools/monrun_checks/README.md diff --git a/src/ch_tools/monrun_checks/__init__.py b/ch_tools/monrun_checks/__init__.py similarity index 100% rename from src/ch_tools/monrun_checks/__init__.py rename to ch_tools/monrun_checks/__init__.py diff --git a/src/ch_tools/monrun_checks/ch_backup.py b/ch_tools/monrun_checks/ch_backup.py similarity index 100% rename from src/ch_tools/monrun_checks/ch_backup.py rename to ch_tools/monrun_checks/ch_backup.py diff --git a/src/ch_tools/monrun_checks/ch_core_dumps.py b/ch_tools/monrun_checks/ch_core_dumps.py similarity index 100% rename from src/ch_tools/monrun_checks/ch_core_dumps.py rename to ch_tools/monrun_checks/ch_core_dumps.py diff --git a/src/ch_tools/monrun_checks/ch_dist_tables.py b/ch_tools/monrun_checks/ch_dist_tables.py similarity index 100% rename from src/ch_tools/monrun_checks/ch_dist_tables.py rename to ch_tools/monrun_checks/ch_dist_tables.py diff --git a/src/ch_tools/monrun_checks/ch_geobase.py b/ch_tools/monrun_checks/ch_geobase.py similarity index 100% rename from src/ch_tools/monrun_checks/ch_geobase.py rename to ch_tools/monrun_checks/ch_geobase.py diff --git a/src/ch_tools/monrun_checks/ch_keeper.py b/ch_tools/monrun_checks/ch_keeper.py similarity index 100% rename from src/ch_tools/monrun_checks/ch_keeper.py rename to ch_tools/monrun_checks/ch_keeper.py diff --git a/src/ch_tools/monrun_checks/ch_log_errors.py b/ch_tools/monrun_checks/ch_log_errors.py similarity index 100% rename from src/ch_tools/monrun_checks/ch_log_errors.py rename to ch_tools/monrun_checks/ch_log_errors.py diff --git a/src/ch_tools/monrun_checks/ch_ping.py b/ch_tools/monrun_checks/ch_ping.py similarity index 100% rename from src/ch_tools/monrun_checks/ch_ping.py rename to ch_tools/monrun_checks/ch_ping.py diff --git a/src/ch_tools/monrun_checks/ch_replication_lag.py b/ch_tools/monrun_checks/ch_replication_lag.py similarity index 100% rename from src/ch_tools/monrun_checks/ch_replication_lag.py rename to ch_tools/monrun_checks/ch_replication_lag.py diff --git a/src/ch_tools/monrun_checks/ch_resetup_state.py b/ch_tools/monrun_checks/ch_resetup_state.py similarity index 100% rename from src/ch_tools/monrun_checks/ch_resetup_state.py rename to ch_tools/monrun_checks/ch_resetup_state.py diff --git a/src/ch_tools/monrun_checks/ch_ro_replica.py b/ch_tools/monrun_checks/ch_ro_replica.py similarity index 100% rename from src/ch_tools/monrun_checks/ch_ro_replica.py rename to ch_tools/monrun_checks/ch_ro_replica.py diff --git a/src/ch_tools/monrun_checks/ch_s3_backup_orphaned.py b/ch_tools/monrun_checks/ch_s3_backup_orphaned.py similarity index 100% rename from src/ch_tools/monrun_checks/ch_s3_backup_orphaned.py rename to ch_tools/monrun_checks/ch_s3_backup_orphaned.py diff --git a/src/ch_tools/monrun_checks/ch_system_queues.py b/ch_tools/monrun_checks/ch_system_queues.py similarity index 100% rename from src/ch_tools/monrun_checks/ch_system_queues.py rename to ch_tools/monrun_checks/ch_system_queues.py diff --git a/src/ch_tools/monrun_checks/ch_tls.py b/ch_tools/monrun_checks/ch_tls.py similarity index 100% rename from src/ch_tools/monrun_checks/ch_tls.py rename to ch_tools/monrun_checks/ch_tls.py diff --git a/src/ch_tools/monrun_checks/clickhouse_client.py b/ch_tools/monrun_checks/clickhouse_client.py similarity index 100% rename from src/ch_tools/monrun_checks/clickhouse_client.py rename to ch_tools/monrun_checks/clickhouse_client.py diff --git a/src/ch_tools/monrun_checks/clickhouse_info.py b/ch_tools/monrun_checks/clickhouse_info.py similarity index 100% rename from src/ch_tools/monrun_checks/clickhouse_info.py rename to ch_tools/monrun_checks/clickhouse_info.py diff --git a/src/ch_tools/monrun_checks/exceptions.py b/ch_tools/monrun_checks/exceptions.py similarity index 100% rename from src/ch_tools/monrun_checks/exceptions.py rename to ch_tools/monrun_checks/exceptions.py diff --git a/src/ch_tools/monrun_checks/ext_ip_dns.py b/ch_tools/monrun_checks/ext_ip_dns.py similarity index 100% rename from src/ch_tools/monrun_checks/ext_ip_dns.py rename to ch_tools/monrun_checks/ext_ip_dns.py diff --git a/src/ch_tools/monrun_checks/main.py b/ch_tools/monrun_checks/main.py similarity index 100% rename from src/ch_tools/monrun_checks/main.py rename to ch_tools/monrun_checks/main.py diff --git a/src/ch_tools/monrun_checks/status.py b/ch_tools/monrun_checks/status.py similarity index 100% rename from src/ch_tools/monrun_checks/status.py rename to ch_tools/monrun_checks/status.py diff --git a/src/ch_tools/monrun_checks_keeper/README.md b/ch_tools/monrun_checks_keeper/README.md similarity index 100% rename from src/ch_tools/monrun_checks_keeper/README.md rename to ch_tools/monrun_checks_keeper/README.md diff --git a/src/ch_tools/monrun_checks_keeper/__init__.py b/ch_tools/monrun_checks_keeper/__init__.py similarity index 100% rename from src/ch_tools/monrun_checks_keeper/__init__.py rename to ch_tools/monrun_checks_keeper/__init__.py diff --git a/src/ch_tools/monrun_checks_keeper/keeper_commands.py b/ch_tools/monrun_checks_keeper/keeper_commands.py similarity index 100% rename from src/ch_tools/monrun_checks_keeper/keeper_commands.py rename to ch_tools/monrun_checks_keeper/keeper_commands.py diff --git a/src/ch_tools/monrun_checks_keeper/main.py b/ch_tools/monrun_checks_keeper/main.py similarity index 100% rename from src/ch_tools/monrun_checks_keeper/main.py rename to ch_tools/monrun_checks_keeper/main.py diff --git a/src/ch_tools/monrun_checks_keeper/status.py b/ch_tools/monrun_checks_keeper/status.py similarity index 100% rename from src/ch_tools/monrun_checks_keeper/status.py rename to ch_tools/monrun_checks_keeper/status.py diff --git a/src/ch_tools/s3_credentials/README.md b/ch_tools/s3_credentials/README.md similarity index 100% rename from src/ch_tools/s3_credentials/README.md rename to ch_tools/s3_credentials/README.md diff --git a/src/ch_tools/s3_credentials/__init__.py b/ch_tools/s3_credentials/__init__.py similarity index 100% rename from src/ch_tools/s3_credentials/__init__.py rename to ch_tools/s3_credentials/__init__.py diff --git a/src/ch_tools/s3_credentials/main.py b/ch_tools/s3_credentials/main.py similarity index 100% rename from src/ch_tools/s3_credentials/main.py rename to ch_tools/s3_credentials/main.py diff --git a/debian/.gitignore b/debian/.gitignore index 397b4a76..e34a43f0 100644 --- a/debian/.gitignore +++ b/debian/.gitignore @@ -1 +1,3 @@ *.log +.debhelper/ +clickhouse-tools diff --git a/debian/changelog b/debian/changelog index cb30719a..0469a70c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,5 +1,6 @@ -ch-tools (1.0.0) UNRELEASED; urgency=low +clickhouse-tools (1.0.0) UNRELEASED; urgency=low * Initial Release. -- Dmitry Starov Thu, 01 Jun 2023 16:00:00 +0300 + \ No newline at end of file diff --git a/debian/compat b/debian/compat index ec635144..b1bd38b6 100644 --- a/debian/compat +++ b/debian/compat @@ -1 +1 @@ -9 +13 diff --git a/debian/control b/debian/control index a1a774ae..28ec3a2e 100644 --- a/debian/control +++ b/debian/control @@ -1,4 +1,4 @@ -Source: ch-tools +Source: clickhouse-tools Section: database Priority: optional Maintainer: Yandex LLC @@ -18,7 +18,7 @@ Vcs-Browser: https://github.com/yandex/ch-tools.git Vcs-Git: git://github.com:yandex/ch-tools.git X-Python3-Version: >= 3.6 -Package: ch-tools +Package: clickhouse-tools Architecture: any Description: A set of tools for administration and diagnostics of ClickHouse DBMS. Replaces: mdb-ch-tools diff --git a/debian/copyright b/debian/copyright index 1d287f99..aa55cabe 100644 --- a/debian/copyright +++ b/debian/copyright @@ -1,5 +1,5 @@ Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ -Upstream-Name: ch-tools +Upstream-Name: clickhouse-tools Source: https://github.com/yandex/ch-tools Files: * diff --git a/debian/rules b/debian/rules old mode 100644 new mode 100755 diff --git a/mypy.ini b/mypy.ini deleted file mode 100644 index be1f37ae..00000000 --- a/mypy.ini +++ /dev/null @@ -1,4 +0,0 @@ -[mypy] -ignore_missing_imports = yes -disallow_incomplete_defs = yes -check_untyped_defs = yes diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 00000000..44af6b20 --- /dev/null +++ b/poetry.lock @@ -0,0 +1,1916 @@ +[[package]] +name = "astroid" +version = "2.15.6" +description = "An abstract syntax tree for Python with inference support." +category = "dev" +optional = false +python-versions = ">=3.7.2" + +[package.dependencies] +lazy-object-proxy = ">=1.4.0" +typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} +wrapt = [ + {version = ">=1.11,<2", markers = "python_version < \"3.11\""}, + {version = ">=1.14,<2", markers = "python_version >= \"3.11\""}, +] + +[[package]] +name = "atomicwrites" +version = "1.4.1" +description = "Atomic file writes." +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[[package]] +name = "attrs" +version = "22.2.0" +description = "Classes Without Boilerplate" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.extras] +cov = ["attrs", "coverage-enable-subprocess", "coverage[toml] (>=5.3)"] +dev = ["attrs"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope.interface"] +tests = ["attrs", "zope.interface"] +tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=0.971,<0.990)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist"] +tests_no_zope = ["cloudpickle", "hypothesis", "mypy (>=0.971,<0.990)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist"] + +[[package]] +name = "bcrypt" +version = "4.0.1" +description = "Modern password hashing for your software and your servers" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.extras] +tests = ["pytest (>=3.2.1,!=3.3.0)"] +typecheck = ["mypy"] + +[[package]] +name = "behave" +version = "1.2.6" +description = "behave is behaviour-driven development, Python style" +category = "dev" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" + +[package.dependencies] +parse = ">=1.8.2" +parse-type = ">=0.4.2" +six = ">=1.11" + +[package.extras] +develop = ["coverage", "invoke (>=0.21.0)", "modernize (>=0.5)", "path.py (>=8.1.2)", "pathlib", "pycmd", "pylint", "pytest (>=3.0)", "pytest-cov", "tox"] +docs = ["sphinx (>=1.6)", "sphinx-bootstrap-theme (>=0.6)"] + +[[package]] +name = "black" +version = "22.12.0" +description = "The uncompromising code formatter." +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +click = ">=8.0.0" +mypy-extensions = ">=0.4.3" +pathspec = ">=0.9.0" +platformdirs = ">=2" +tomli = {version = ">=1.1.0", markers = "python_full_version < \"3.11.0a7\""} + +[package.extras] +colorama = ["colorama (>=0.4.3)"] +d = ["aiohttp (>=3.7.4)"] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +uvloop = ["uvloop (>=0.15.2)"] + +[[package]] +name = "boto3" +version = "1.23.10" +description = "The AWS SDK for Python" +category = "main" +optional = false +python-versions = ">= 3.6" + +[package.dependencies] +botocore = ">=1.26.10,<1.27.0" +jmespath = ">=0.7.1,<2.0.0" +s3transfer = ">=0.5.0,<0.6.0" + +[package.extras] +crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] + +[[package]] +name = "botocore" +version = "1.26.10" +description = "Low-level, data-driven core of boto 3." +category = "main" +optional = false +python-versions = ">= 3.6" + +[package.dependencies] +jmespath = ">=0.7.1,<2.0.0" +python-dateutil = ">=2.1,<3.0.0" +urllib3 = ">=1.25.4,<1.27" + +[package.extras] +crt = ["awscrt (==0.13.8)"] + +[[package]] +name = "cached-property" +version = "1.5.2" +description = "A decorator for caching properties in classes." +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "certifi" +version = "2023.7.22" +description = "Python package for providing Mozilla's CA Bundle." +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "cffi" +version = "1.15.1" +description = "Foreign Function Interface for Python calling C code." +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +pycparser = "*" + +[[package]] +name = "charset-normalizer" +version = "2.0.12" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +category = "main" +optional = false +python-versions = ">=3.5.0" + +[package.extras] +unicode_backport = ["unicodedata2"] + +[[package]] +name = "click" +version = "8.0.4" +description = "Composable command line interface toolkit" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} + +[[package]] +name = "cloup" +version = "0.15.1" +description = "Adds features to Click: option groups, constraints, subcommand sections and help themes." +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +click = ">=7.1,<9.0" +typing-extensions = {version = "*", markers = "python_version <= \"3.8\""} + +[[package]] +name = "colorama" +version = "0.4.5" +description = "Cross-platform colored terminal text." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] +name = "cryptography" +version = "40.0.2" +description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +cffi = ">=1.12" + +[package.extras] +docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"] +docstest = ["pyenchant (>=1.6.11)", "sphinxcontrib-spelling (>=4.0.1)", "twine (>=1.12.0)"] +pep8test = ["black", "check-manifest", "mypy", "ruff"] +sdist = ["setuptools-rust (>=0.11.4)"] +ssh = ["bcrypt (>=3.1.5)"] +test = ["iso8601", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-shard (>=0.1.2)", "pytest-subtests", "pytest-xdist"] +test-randomorder = ["pytest-randomly"] +tox = ["tox"] + +[[package]] +name = "deepdiff" +version = "5.7.0" +description = "Deep Difference and Search of any Python object/data." +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +ordered-set = "4.0.2" + +[package.extras] +cli = ["clevercsv (==0.7.1)", "click (==8.0.3)", "pyyaml (==5.4.1)", "toml (==0.10.2)"] + +[[package]] +name = "dill" +version = "0.3.7" +description = "serialize all of Python" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.extras] +graph = ["objgraph (>=1.7.2)"] + +[[package]] +name = "distro" +version = "1.8.0" +description = "Distro - an OS platform information API" +category = "dev" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "dnspython" +version = "2.2.1" +description = "DNS toolkit" +category = "main" +optional = false +python-versions = ">=3.6,<4.0" + +[package.extras] +curio = ["curio (>=1.2,<2.0)", "sniffio (>=1.1,<2.0)"] +dnssec = ["cryptography (>=2.6,<37.0)"] +doh = ["h2 (>=4.1.0)", "httpx (>=0.21.1)", "requests (>=2.23.0,<3.0.0)", "requests-toolbelt (>=0.9.1,<0.10.0)"] +idna = ["idna (>=2.1,<4.0)"] +trio = ["trio (>=0.14,<0.20)"] +wmi = ["wmi (>=1.5.1,<2.0.0)"] + +[[package]] +name = "docker" +version = "5.0.3" +description = "A Python library for the Docker Engine API." +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +paramiko = {version = ">=2.4.2", optional = true, markers = "extra == \"ssh\""} +pywin32 = {version = "227", markers = "sys_platform == \"win32\""} +requests = ">=2.14.2,<2.18.0 || >2.18.0" +websocket-client = ">=0.32.0" + +[package.extras] +ssh = ["paramiko (>=2.4.2)"] +tls = ["cryptography (>=3.4.7)", "idna (>=2.0.0)", "pyOpenSSL (>=17.5.0)"] + +[[package]] +name = "docker-compose" +version = "1.29.2" +description = "Multi-container orchestration for Docker" +category = "dev" +optional = false +python-versions = ">=3.4" + +[package.dependencies] +cached-property = {version = ">=1.2.0,<2", markers = "python_version < \"3.8\""} +colorama = {version = ">=0.4,<1", markers = "sys_platform == \"win32\""} +distro = ">=1.5.0,<2" +docker = {version = ">=5", extras = ["ssh"]} +dockerpty = ">=0.4.1,<1" +docopt = ">=0.6.1,<1" +jsonschema = ">=2.5.1,<4" +python-dotenv = ">=0.13.0,<1" +PyYAML = ">=3.10,<6" +requests = ">=2.20.0,<3" +texttable = ">=0.9.0,<2" +websocket-client = ">=0.32.0,<1" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2)"] +tests = ["ddt (>=1.2.2,<2)", "pytest (<6)"] + +[[package]] +name = "dockerpty" +version = "0.4.1" +description = "Python library to use the pseudo-tty of a docker container" +category = "dev" +optional = false +python-versions = "*" + +[package.dependencies] +six = ">=1.3.0" + +[[package]] +name = "docopt" +version = "0.6.2" +description = "Pythonic argument parser, that will make you smile" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "file-read-backwards" +version = "3.0.0" +description = "Memory efficient way of reading files line-by-line from the end of file" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "flake8" +version = "6.1.0" +description = "the modular source code checker: pep8 pyflakes and co" +category = "dev" +optional = false +python-versions = ">=3.8.1" + +[package.dependencies] +mccabe = ">=0.7.0,<0.8.0" +pycodestyle = ">=2.11.0,<2.12.0" +pyflakes = ">=3.1.0,<3.2.0" + +[[package]] +name = "humanfriendly" +version = "10.0" +description = "Human friendly output for text interfaces using Python" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[package.dependencies] +pyreadline = {version = "*", markers = "sys_platform == \"win32\" and python_version < \"3.8\""} +pyreadline3 = {version = "*", markers = "sys_platform == \"win32\" and python_version >= \"3.8\""} + +[[package]] +name = "idna" +version = "3.4" +description = "Internationalized Domain Names in Applications (IDNA)" +category = "main" +optional = false +python-versions = ">=3.5" + +[[package]] +name = "importlib-metadata" +version = "4.8.3" +description = "Read metadata from Python packages" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} +zipp = ">=0.5" + +[package.extras] +docs = ["jaraco.packaging (>=8.2)", "rst.linker (>=1.9)", "sphinx"] +perf = ["ipython"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pep517", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-flake8", "pytest-mypy", "pytest-perf (>=0.9.2)"] + +[[package]] +name = "importlib-resources" +version = "5.4.0" +description = "Read resources from Python packages" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} + +[package.extras] +docs = ["jaraco.packaging (>=8.2)", "rst.linker (>=1.9)", "sphinx"] +testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-flake8", "pytest-mypy"] + +[[package]] +name = "iniconfig" +version = "1.1.1" +description = "iniconfig: brain-dead simple config-ini parsing" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "isort" +version = "5.10.1" +description = "A Python utility / library to sort Python imports." +category = "dev" +optional = false +python-versions = ">=3.6.1,<4.0" + +[package.extras] +colors = ["colorama (>=0.4.3,<0.5.0)"] +pipfile_deprecated_finder = ["pipreqs", "requirementslib"] +plugins = ["setuptools"] +requirements_deprecated_finder = ["pip-api", "pipreqs"] + +[[package]] +name = "jinja2" +version = "3.0.3" +description = "A very fast and expressive template engine." +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "jmespath" +version = "0.10.0" +description = "JSON Matching Expressions" +category = "main" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" + +[[package]] +name = "jsonschema" +version = "3.2.0" +description = "An implementation of JSON Schema validation for Python" +category = "dev" +optional = false +python-versions = "*" + +[package.dependencies] +attrs = ">=17.4.0" +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} +pyrsistent = ">=0.14.0" +six = ">=1.11.0" + +[package.extras] +format = ["idna", "jsonpointer (>1.13)", "rfc3987", "strict-rfc3339", "webcolors"] +format_nongpl = ["idna", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "webcolors"] + +[[package]] +name = "kazoo" +version = "2.9.0" +description = "\"Higher Level Zookeeper Client\"" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +six = "*" + +[package.extras] +alldeps = ["Sphinx (>=1.2.2)", "eventlet (>=0.17.1)", "flake8", "gevent (>=1.2)", "pure-sasl (>=0.5.1)"] +dev = ["flake8"] +docs = ["Sphinx (>=1.2.2)"] +eventlet = ["eventlet (>=0.17.1)"] +gevent = ["gevent (>=1.2)"] +sasl = ["pure-sasl (>=0.5.1)"] +test = ["eventlet (>=0.17.1)", "gevent (>=1.2)", "mock", "objgraph", "pytest", "pytest-cov"] + +[[package]] +name = "lazy-object-proxy" +version = "1.9.0" +description = "A fast and thorough lazy object proxy." +category = "dev" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "lxml" +version = "4.9.3" +description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" + +[package.extras] +cssselect = ["cssselect (>=0.7)"] +html5 = ["html5lib"] +htmlsoup = ["beautifulsoup4"] +source = ["Cython (>=0.29.35)"] + +[[package]] +name = "markupsafe" +version = "2.0.1" +description = "Safely add untrusted strings to HTML/XML markup." +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "mccabe" +version = "0.7.0" +description = "McCabe checker, plugin for flake8" +category = "dev" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "mypy" +version = "1.5.0" +description = "Optional static typing for Python" +category = "dev" +optional = false +python-versions = ">=3.8" + +[package.dependencies] +mypy-extensions = ">=1.0.0" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typing-extensions = ">=4.1.0" + +[package.extras] +dmypy = ["psutil (>=4.0)"] +install-types = ["pip"] +reports = ["lxml"] + +[[package]] +name = "mypy-extensions" +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." +category = "dev" +optional = false +python-versions = ">=3.5" + +[[package]] +name = "ordered-set" +version = "4.0.2" +description = "A set that remembers its order, and allows looking up its items by their index in that order." +category = "main" +optional = false +python-versions = ">=3.5" + +[[package]] +name = "packaging" +version = "21.3" +description = "Core utilities for Python packages" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" + +[[package]] +name = "paramiko" +version = "3.3.1" +description = "SSH2 protocol library" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +bcrypt = ">=3.2" +cryptography = ">=3.3" +pynacl = ">=1.5" + +[package.extras] +all = ["gssapi (>=1.4.1)", "invoke (>=2.0)", "pyasn1 (>=0.1.7)", "pywin32 (>=2.1.8)"] +gssapi = ["gssapi (>=1.4.1)", "pyasn1 (>=0.1.7)", "pywin32 (>=2.1.8)"] +invoke = ["invoke (>=2.0)"] + +[[package]] +name = "parse" +version = "1.19.1" +description = "parse() is the opposite of format()" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "parse-type" +version = "0.6.2" +description = "Simplifies to build parse types based on the parse module" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*" + +[package.dependencies] +parse = {version = ">=1.18.0", markers = "python_version >= \"3.0\""} +six = ">=1.15" + +[package.extras] +develop = ["build (>=0.5.1)", "coverage (>=4.4)", "pylint", "pytest (<5.0)", "pytest (>=5.0)", "pytest-cov", "pytest-html (>=1.19.0)", "ruff", "tox (>=2.8,<4.0)", "twine (>=1.13.0)", "virtualenv (<20.22.0)", "virtualenv (>=20.0.0)"] +docs = ["Sphinx (>=1.6)", "sphinx-bootstrap-theme (>=0.6.0)"] +testing = ["pytest (<5.0)", "pytest (>=5.0)", "pytest-html (>=1.19.0)"] + +[[package]] +name = "pathspec" +version = "0.11.2" +description = "Utility library for gitignore style pattern matching of file paths." +category = "dev" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "platformdirs" +version = "3.10.0" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.extras] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] + +[[package]] +name = "pluggy" +version = "1.0.0" +description = "plugin and hook calling mechanisms for python" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "psutil" +version = "5.9.5" +description = "Cross-platform lib for process and system monitoring in Python." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[package.extras] +test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] + +[[package]] +name = "py" +version = "1.11.0" +description = "library with cross-python path, ini-parsing, io, code, log facilities" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] +name = "pycodestyle" +version = "2.11.0" +description = "Python style guide checker" +category = "dev" +optional = false +python-versions = ">=3.8" + +[[package]] +name = "pycparser" +version = "2.21" +description = "C parser in Python" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[[package]] +name = "pyflakes" +version = "3.1.0" +description = "passive checker of Python programs" +category = "dev" +optional = false +python-versions = ">=3.8" + +[[package]] +name = "pygments" +version = "2.14.0" +description = "Pygments is a syntax highlighting package written in Python." +category = "main" +optional = false +python-versions = ">=3.6" + +[package.extras] +plugins = ["importlib-metadata"] + +[[package]] +name = "pyhamcrest" +version = "2.0.4" +description = "Hamcrest framework for matcher objects" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.extras] +dev = ["black", "flake8", "pyhamcrest", "pytest-mypy", "towncrier", "tox", "tox-asdf", "twine"] +docs = ["alabaster (>=0.7,<1.0)", "sphinx (>=4.0,<5.0)"] +tests = ["coverage", "dataclasses", "mypy (!=0.940)", "pytest (>=5.0)", "pytest-mypy-plugins", "pytest-sugar", "pytest-xdist", "types-dataclasses", "types-mock"] +tests-numpy = ["numpy", "pyhamcrest"] + +[[package]] +name = "pylint" +version = "2.17.5" +description = "python code static checker" +category = "dev" +optional = false +python-versions = ">=3.7.2" + +[package.dependencies] +astroid = ">=2.15.6,<=2.17.0-dev0" +colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} +dill = [ + {version = ">=0.2", markers = "python_version < \"3.11\""}, + {version = ">=0.3.6", markers = "python_version >= \"3.11\""}, +] +isort = ">=4.2.5,<6" +mccabe = ">=0.6,<0.8" +platformdirs = ">=2.2.0" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +tomlkit = ">=0.10.1" + +[package.extras] +spelling = ["pyenchant (>=3.2,<4.0)"] +testutils = ["gitpython (>3)"] + +[[package]] +name = "pynacl" +version = "1.5.0" +description = "Python binding to the Networking and Cryptography (NaCl) library" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +cffi = ">=1.4.1" + +[package.extras] +docs = ["sphinx (>=1.6.5)", "sphinx-rtd-theme"] +tests = ["hypothesis (>=3.27.0)", "pytest (>=3.2.1,!=3.3.0)"] + +[[package]] +name = "pyopenssl" +version = "23.2.0" +description = "Python wrapper module around the OpenSSL library" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +cryptography = ">=38.0.0,<40.0.0 || >40.0.0,<40.0.1 || >40.0.1,<42" + +[package.extras] +docs = ["sphinx (!=5.2.0,!=5.2.0.post0)", "sphinx-rtd-theme"] +test = ["flaky", "pretend", "pytest (>=3.0.1)"] + +[[package]] +name = "pyparsing" +version = "3.0.7" +description = "Python parsing module" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] + +[[package]] +name = "pyreadline" +version = "2.1" +description = "A python implmementation of GNU readline." +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "pyreadline3" +version = "3.4.1" +description = "A python implementation of GNU readline." +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "pyrsistent" +version = "0.18.0" +description = "Persistent/Functional/Immutable data structures" +category = "dev" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "pytest" +version = "7.0.1" +description = "pytest: simple powerful testing with Python" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} +attrs = ">=19.2.0" +colorama = {version = "*", markers = "sys_platform == \"win32\""} +importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=0.12,<2.0" +py = ">=1.8.2" +tomli = ">=1.0.0" + +[package.extras] +testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"] + +[[package]] +name = "python-dateutil" +version = "2.8.2" +description = "Extensions to the standard Python datetime module" +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "python-dotenv" +version = "0.20.0" +description = "Read key-value pairs from a .env file and set them as environment variables" +category = "dev" +optional = false +python-versions = ">=3.5" + +[package.extras] +cli = ["click (>=5.0)"] + +[[package]] +name = "pywin32" +version = "227" +description = "Python for Window Extensions" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "pyyaml" +version = "5.3.1" +description = "YAML parser and emitter for Python" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] +name = "requests" +version = "2.27.1" +description = "Python HTTP for Humans." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = {version = ">=2.0.0,<2.1.0", markers = "python_version >= \"3\""} +idna = {version = ">=2.5,<4", markers = "python_version >= \"3\""} +urllib3 = ">=1.21.1,<1.27" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"] +use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"] + +[[package]] +name = "s3transfer" +version = "0.5.2" +description = "An Amazon S3 Transfer Manager" +category = "main" +optional = false +python-versions = ">= 3.6" + +[package.dependencies] +botocore = ">=1.12.36,<2.0a.0" + +[package.extras] +crt = ["botocore[crt] (>=1.20.29,<2.0a.0)"] + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" + +[[package]] +name = "tabulate" +version = "0.8.10" +description = "Pretty-print tabular data" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[package.extras] +widechars = ["wcwidth"] + +[[package]] +name = "tenacity" +version = "8.2.2" +description = "Retry code until it succeeds" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.extras] +doc = ["reno", "sphinx", "tornado (>=4.5)"] + +[[package]] +name = "termcolor" +version = "1.1.0" +description = "ANSII Color formatting for output in terminal." +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "texttable" +version = "1.6.7" +description = "module to create simple ASCII tables" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "tomli" +version = "1.2.3" +description = "A lil' TOML parser" +category = "dev" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "tomlkit" +version = "0.12.1" +description = "Style preserving TOML library" +category = "dev" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "tqdm" +version = "4.64.1" +description = "Fast, Extensible Progress Meter" +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} +importlib-resources = {version = "*", markers = "python_version < \"3.7\""} + +[package.extras] +dev = ["py-make (>=0.1.0)", "twine", "wheel"] +notebook = ["ipywidgets (>=6)"] +slack = ["slack-sdk"] +telegram = ["requests"] + +[[package]] +name = "types-pyopenssl" +version = "23.2.0.2" +description = "Typing stubs for pyOpenSSL" +category = "dev" +optional = false +python-versions = "*" + +[package.dependencies] +cryptography = ">=35.0.0" + +[[package]] +name = "types-python-dateutil" +version = "2.8.19.14" +description = "Typing stubs for python-dateutil" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "types-pyyaml" +version = "6.0.12.11" +description = "Typing stubs for PyYAML" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "types-requests" +version = "2.31.0.2" +description = "Typing stubs for requests" +category = "dev" +optional = false +python-versions = "*" + +[package.dependencies] +types-urllib3 = "*" + +[[package]] +name = "types-setuptools" +version = "68.0.0.3" +description = "Typing stubs for setuptools" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "types-tabulate" +version = "0.9.0.3" +description = "Typing stubs for tabulate" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "types-urllib3" +version = "1.26.25.14" +description = "Typing stubs for urllib3" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "typing-extensions" +version = "4.1.1" +description = "Backported and Experimental Type Hints for Python 3.6+" +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "urllib3" +version = "1.26.16" +description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] +secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] + +[[package]] +name = "websocket-client" +version = "0.59.0" +description = "WebSocket client for Python with low level API options" +category = "dev" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[package.dependencies] +six = "*" + +[[package]] +name = "wrapt" +version = "1.15.0" +description = "Module for decorators, wrappers and monkey patching." +category = "dev" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" + +[[package]] +name = "xmltodict" +version = "0.13.0" +description = "Makes working with XML feel like you are working with JSON" +category = "main" +optional = false +python-versions = ">=3.4" + +[[package]] +name = "zipp" +version = "3.6.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.extras] +docs = ["jaraco.packaging (>=8.2)", "rst.linker (>=1.9)", "sphinx"] +testing = ["func-timeout", "jaraco.itertools", "pytest (>=4.6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-flake8", "pytest-mypy"] + +[metadata] +lock-version = "1.1" +python-versions = "^3.6.2" +content-hash = "32360c6d9287d5c5c540d5a3d7a680d0d283c59a653476c742499202b02b6376" + +[metadata.files] +astroid = [ + {file = "astroid-2.15.6-py3-none-any.whl", hash = "sha256:389656ca57b6108f939cf5d2f9a2a825a3be50ba9d589670f393236e0a03b91c"}, + {file = "astroid-2.15.6.tar.gz", hash = "sha256:903f024859b7c7687d7a7f3a3f73b17301f8e42dfd9cc9df9d4418172d3e2dbd"}, +] +atomicwrites = [ + {file = "atomicwrites-1.4.1.tar.gz", hash = "sha256:81b2c9071a49367a7f770170e5eec8cb66567cfbbc8c73d20ce5ca4a8d71cf11"}, +] +attrs = [ + {file = "attrs-22.2.0-py3-none-any.whl", hash = "sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836"}, + {file = "attrs-22.2.0.tar.gz", hash = "sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99"}, +] +bcrypt = [ + {file = "bcrypt-4.0.1-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:b1023030aec778185a6c16cf70f359cbb6e0c289fd564a7cfa29e727a1c38f8f"}, + {file = "bcrypt-4.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:08d2947c490093a11416df18043c27abe3921558d2c03e2076ccb28a116cb6d0"}, + {file = "bcrypt-4.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0eaa47d4661c326bfc9d08d16debbc4edf78778e6aaba29c1bc7ce67214d4410"}, + {file = "bcrypt-4.0.1-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae88eca3024bb34bb3430f964beab71226e761f51b912de5133470b649d82344"}, + {file = "bcrypt-4.0.1-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:a522427293d77e1c29e303fc282e2d71864579527a04ddcfda6d4f8396c6c36a"}, + {file = "bcrypt-4.0.1-cp36-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:fbdaec13c5105f0c4e5c52614d04f0bca5f5af007910daa8b6b12095edaa67b3"}, + {file = "bcrypt-4.0.1-cp36-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:ca3204d00d3cb2dfed07f2d74a25f12fc12f73e606fcaa6975d1f7ae69cacbb2"}, + {file = "bcrypt-4.0.1-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:089098effa1bc35dc055366740a067a2fc76987e8ec75349eb9484061c54f535"}, + {file = "bcrypt-4.0.1-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:e9a51bbfe7e9802b5f3508687758b564069ba937748ad7b9e890086290d2f79e"}, + {file = "bcrypt-4.0.1-cp36-abi3-win32.whl", hash = "sha256:2caffdae059e06ac23fce178d31b4a702f2a3264c20bfb5ff541b338194d8fab"}, + {file = "bcrypt-4.0.1-cp36-abi3-win_amd64.whl", hash = "sha256:8a68f4341daf7522fe8d73874de8906f3a339048ba406be6ddc1b3ccb16fc0d9"}, + {file = "bcrypt-4.0.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf4fa8b2ca74381bb5442c089350f09a3f17797829d958fad058d6e44d9eb83c"}, + {file = "bcrypt-4.0.1-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:67a97e1c405b24f19d08890e7ae0c4f7ce1e56a712a016746c8b2d7732d65d4b"}, + {file = "bcrypt-4.0.1-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b3b85202d95dd568efcb35b53936c5e3b3600c7cdcc6115ba461df3a8e89f38d"}, + {file = "bcrypt-4.0.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cbb03eec97496166b704ed663a53680ab57c5084b2fc98ef23291987b525cb7d"}, + {file = "bcrypt-4.0.1-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:5ad4d32a28b80c5fa6671ccfb43676e8c1cc232887759d1cd7b6f56ea4355215"}, + {file = "bcrypt-4.0.1-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b57adba8a1444faf784394de3436233728a1ecaeb6e07e8c22c8848f179b893c"}, + {file = "bcrypt-4.0.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:705b2cea8a9ed3d55b4491887ceadb0106acf7c6387699fca771af56b1cdeeda"}, + {file = "bcrypt-4.0.1-pp39-pypy39_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:2b3ac11cf45161628f1f3733263e63194f22664bf4d0c0f3ab34099c02134665"}, + {file = "bcrypt-4.0.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3100851841186c25f127731b9fa11909ab7b1df6fc4b9f8353f4f1fd952fbf71"}, + {file = "bcrypt-4.0.1.tar.gz", hash = "sha256:27d375903ac8261cfe4047f6709d16f7d18d39b1ec92aaf72af989552a650ebd"}, +] +behave = [ + {file = "behave-1.2.6-py2.py3-none-any.whl", hash = "sha256:ebda1a6c9e5bfe95c5f9f0a2794e01c7098b3dde86c10a95d8621c5907ff6f1c"}, + {file = "behave-1.2.6.tar.gz", hash = "sha256:b9662327aa53294c1351b0a9c369093ccec1d21026f050c3bd9b3e5cccf81a86"}, +] +black = [ + {file = "black-22.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eedd20838bd5d75b80c9f5487dbcb06836a43833a37846cf1d8c1cc01cef59d"}, + {file = "black-22.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:159a46a4947f73387b4d83e87ea006dbb2337eab6c879620a3ba52699b1f4351"}, + {file = "black-22.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d30b212bffeb1e252b31dd269dfae69dd17e06d92b87ad26e23890f3efea366f"}, + {file = "black-22.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:7412e75863aa5c5411886804678b7d083c7c28421210180d67dfd8cf1221e1f4"}, + {file = "black-22.12.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c116eed0efb9ff870ded8b62fe9f28dd61ef6e9ddd28d83d7d264a38417dcee2"}, + {file = "black-22.12.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1f58cbe16dfe8c12b7434e50ff889fa479072096d79f0a7f25e4ab8e94cd8350"}, + {file = "black-22.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77d86c9f3db9b1bf6761244bc0b3572a546f5fe37917a044e02f3166d5aafa7d"}, + {file = "black-22.12.0-cp38-cp38-win_amd64.whl", hash = "sha256:82d9fe8fee3401e02e79767016b4907820a7dc28d70d137eb397b92ef3cc5bfc"}, + {file = "black-22.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:101c69b23df9b44247bd88e1d7e90154336ac4992502d4197bdac35dd7ee3320"}, + {file = "black-22.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:559c7a1ba9a006226f09e4916060982fd27334ae1998e7a38b3f33a37f7a2148"}, + {file = "black-22.12.0-py3-none-any.whl", hash = "sha256:436cc9167dd28040ad90d3b404aec22cedf24a6e4d7de221bec2730ec0c97bcf"}, + {file = "black-22.12.0.tar.gz", hash = "sha256:229351e5a18ca30f447bf724d007f890f97e13af070bb6ad4c0a441cd7596a2f"}, +] +boto3 = [ + {file = "boto3-1.23.10-py3-none-any.whl", hash = "sha256:40d08614f17a69075e175c02c5d5aab69a6153fd50e40fa7057b913ac7bf40e7"}, + {file = "boto3-1.23.10.tar.gz", hash = "sha256:2a4395e3241c20eef441d7443a5e6eaa0ee3f7114653fb9d9cef41587526f7bd"}, +] +botocore = [ + {file = "botocore-1.26.10-py3-none-any.whl", hash = "sha256:8a4a984bf901ccefe40037da11ba2abd1ddbcb3b490a492b7f218509c99fc12f"}, + {file = "botocore-1.26.10.tar.gz", hash = "sha256:5df2cf7ebe34377470172bd0bbc582cf98c5cbd02da0909a14e9e2885ab3ae9c"}, +] +cached-property = [ + {file = "cached-property-1.5.2.tar.gz", hash = "sha256:9fa5755838eecbb2d234c3aa390bd80fbd3ac6b6869109bfc1b499f7bd89a130"}, + {file = "cached_property-1.5.2-py2.py3-none-any.whl", hash = "sha256:df4f613cf7ad9a588cc381aaf4a512d26265ecebd5eb9e1ba12f1319eb85a6a0"}, +] +certifi = [ + {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, + {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, +] +cffi = [ + {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, + {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, + {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, + {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, + {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, + {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, + {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, + {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, + {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, + {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, + {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, + {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, + {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, + {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, + {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, + {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, + {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, + {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, + {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, + {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, + {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, + {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, + {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, + {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, + {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, + {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, + {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, + {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, + {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, + {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, + {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, + {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, + {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, + {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, + {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, +] +charset-normalizer = [ + {file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"}, + {file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"}, +] +click = [ + {file = "click-8.0.4-py3-none-any.whl", hash = "sha256:6a7a62563bbfabfda3a38f3023a1db4a35978c0abd76f6c9605ecd6554d6d9b1"}, + {file = "click-8.0.4.tar.gz", hash = "sha256:8458d7b1287c5fb128c90e23381cf99dcde74beaf6c7ff6384ce84d6fe090adb"}, +] +cloup = [ + {file = "cloup-0.15.1-py2.py3-none-any.whl", hash = "sha256:9358fd1f4949ef88355d37e733d93d65045f4090b52b8de8d4c34cca9a1e7a08"}, + {file = "cloup-0.15.1.tar.gz", hash = "sha256:8008b480a77d8a112c78702f64675adbdf59fadc39e391f3ba8bcac9c4d4cd86"}, +] +colorama = [ + {file = "colorama-0.4.5-py2.py3-none-any.whl", hash = "sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da"}, + {file = "colorama-0.4.5.tar.gz", hash = "sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4"}, +] +cryptography = [ + {file = "cryptography-40.0.2-cp36-abi3-macosx_10_12_universal2.whl", hash = "sha256:8f79b5ff5ad9d3218afb1e7e20ea74da5f76943ee5edb7f76e56ec5161ec782b"}, + {file = "cryptography-40.0.2-cp36-abi3-macosx_10_12_x86_64.whl", hash = "sha256:05dc219433b14046c476f6f09d7636b92a1c3e5808b9a6536adf4932b3b2c440"}, + {file = "cryptography-40.0.2-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4df2af28d7bedc84fe45bd49bc35d710aede676e2a4cb7fc6d103a2adc8afe4d"}, + {file = "cryptography-40.0.2-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dcca15d3a19a66e63662dc8d30f8036b07be851a8680eda92d079868f106288"}, + {file = "cryptography-40.0.2-cp36-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:a04386fb7bc85fab9cd51b6308633a3c271e3d0d3eae917eebab2fac6219b6d2"}, + {file = "cryptography-40.0.2-cp36-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:adc0d980fd2760c9e5de537c28935cc32b9353baaf28e0814df417619c6c8c3b"}, + {file = "cryptography-40.0.2-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:d5a1bd0e9e2031465761dfa920c16b0065ad77321d8a8c1f5ee331021fda65e9"}, + {file = "cryptography-40.0.2-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:a95f4802d49faa6a674242e25bfeea6fc2acd915b5e5e29ac90a32b1139cae1c"}, + {file = "cryptography-40.0.2-cp36-abi3-win32.whl", hash = "sha256:aecbb1592b0188e030cb01f82d12556cf72e218280f621deed7d806afd2113f9"}, + {file = "cryptography-40.0.2-cp36-abi3-win_amd64.whl", hash = "sha256:b12794f01d4cacfbd3177b9042198f3af1c856eedd0a98f10f141385c809a14b"}, + {file = "cryptography-40.0.2-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:142bae539ef28a1c76794cca7f49729e7c54423f615cfd9b0b1fa90ebe53244b"}, + {file = "cryptography-40.0.2-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:956ba8701b4ffe91ba59665ed170a2ebbdc6fc0e40de5f6059195d9f2b33ca0e"}, + {file = "cryptography-40.0.2-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:4f01c9863da784558165f5d4d916093737a75203a5c5286fde60e503e4276c7a"}, + {file = "cryptography-40.0.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:3daf9b114213f8ba460b829a02896789751626a2a4e7a43a28ee77c04b5e4958"}, + {file = "cryptography-40.0.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:48f388d0d153350f378c7f7b41497a54ff1513c816bcbbcafe5b829e59b9ce5b"}, + {file = "cryptography-40.0.2-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c0764e72b36a3dc065c155e5b22f93df465da9c39af65516fe04ed3c68c92636"}, + {file = "cryptography-40.0.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:cbaba590180cba88cb99a5f76f90808a624f18b169b90a4abb40c1fd8c19420e"}, + {file = "cryptography-40.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7a38250f433cd41df7fcb763caa3ee9362777fdb4dc642b9a349721d2bf47404"}, + {file = "cryptography-40.0.2.tar.gz", hash = "sha256:c33c0d32b8594fa647d2e01dbccc303478e16fdd7cf98652d5b3ed11aa5e5c99"}, +] +deepdiff = [ + {file = "deepdiff-5.7.0-py3-none-any.whl", hash = "sha256:1ffb38c3b5d9174eb2df95850c93aee55ec00e19396925036a2e680f725079e0"}, + {file = "deepdiff-5.7.0.tar.gz", hash = "sha256:838766484e323dcd9dec6955926a893a83767dc3f3f94542773e6aa096efe5d4"}, +] +dill = [ + {file = "dill-0.3.7-py3-none-any.whl", hash = "sha256:76b122c08ef4ce2eedcd4d1abd8e641114bfc6c2867f49f3c41facf65bf19f5e"}, + {file = "dill-0.3.7.tar.gz", hash = "sha256:cc1c8b182eb3013e24bd475ff2e9295af86c1a38eb1aff128dac8962a9ce3c03"}, +] +distro = [ + {file = "distro-1.8.0-py3-none-any.whl", hash = "sha256:99522ca3e365cac527b44bde033f64c6945d90eb9f769703caaec52b09bbd3ff"}, + {file = "distro-1.8.0.tar.gz", hash = "sha256:02e111d1dc6a50abb8eed6bf31c3e48ed8b0830d1ea2a1b78c61765c2513fdd8"}, +] +dnspython = [ + {file = "dnspython-2.2.1-py3-none-any.whl", hash = "sha256:a851e51367fb93e9e1361732c1d60dab63eff98712e503ea7d92e6eccb109b4f"}, + {file = "dnspython-2.2.1.tar.gz", hash = "sha256:0f7569a4a6ff151958b64304071d370daa3243d15941a7beedf0c9fe5105603e"}, +] +docker = [ + {file = "docker-5.0.3-py2.py3-none-any.whl", hash = "sha256:7a79bb439e3df59d0a72621775d600bc8bc8b422d285824cb37103eab91d1ce0"}, + {file = "docker-5.0.3.tar.gz", hash = "sha256:d916a26b62970e7c2f554110ed6af04c7ccff8e9f81ad17d0d40c75637e227fb"}, +] +docker-compose = [ + {file = "docker-compose-1.29.2.tar.gz", hash = "sha256:4c8cd9d21d237412793d18bd33110049ee9af8dab3fe2c213bbd0733959b09b7"}, + {file = "docker_compose-1.29.2-py2.py3-none-any.whl", hash = "sha256:8d5589373b35c8d3b1c8c1182c6e4a4ff14bffa3dd0b605fcd08f73c94cef809"}, +] +dockerpty = [ + {file = "dockerpty-0.4.1.tar.gz", hash = "sha256:69a9d69d573a0daa31bcd1c0774eeed5c15c295fe719c61aca550ed1393156ce"}, +] +docopt = [ + {file = "docopt-0.6.2.tar.gz", hash = "sha256:49b3a825280bd66b3aa83585ef59c4a8c82f2c8a522dbe754a8bc8d08c85c491"}, +] +file-read-backwards = [ + {file = "file_read_backwards-3.0.0-py2.py3-none-any.whl", hash = "sha256:09fbac8bbf6d72c053c6e789768671002806c572d210fbe6861088a4a8bd0968"}, + {file = "file_read_backwards-3.0.0.tar.gz", hash = "sha256:512c3e534043527a8fae2a0b7151aa255f2da303e77fd40f7dcf42a1e091cc26"}, +] +flake8 = [ + {file = "flake8-6.1.0-py2.py3-none-any.whl", hash = "sha256:ffdfce58ea94c6580c77888a86506937f9a1a227dfcd15f245d694ae20a6b6e5"}, + {file = "flake8-6.1.0.tar.gz", hash = "sha256:d5b3857f07c030bdb5bf41c7f53799571d75c4491748a3adcd47de929e34cd23"}, +] +humanfriendly = [ + {file = "humanfriendly-10.0-py2.py3-none-any.whl", hash = "sha256:1697e1a8a8f550fd43c2865cd84542fc175a61dcb779b6fee18cf6b6ccba1477"}, + {file = "humanfriendly-10.0.tar.gz", hash = "sha256:6b0b831ce8f15f7300721aa49829fc4e83921a9a301cc7f606be6686a2288ddc"}, +] +idna = [ + {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, + {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, +] +importlib-metadata = [ + {file = "importlib_metadata-4.8.3-py3-none-any.whl", hash = "sha256:65a9576a5b2d58ca44d133c42a241905cc45e34d2c06fd5ba2bafa221e5d7b5e"}, + {file = "importlib_metadata-4.8.3.tar.gz", hash = "sha256:766abffff765960fcc18003801f7044eb6755ffae4521c8e8ce8e83b9c9b0668"}, +] +importlib-resources = [ + {file = "importlib_resources-5.4.0-py3-none-any.whl", hash = "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45"}, + {file = "importlib_resources-5.4.0.tar.gz", hash = "sha256:d756e2f85dd4de2ba89be0b21dba2a3bbec2e871a42a3a16719258a11f87506b"}, +] +iniconfig = [ + {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, + {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, +] +isort = [ + {file = "isort-5.10.1-py3-none-any.whl", hash = "sha256:6f62d78e2f89b4500b080fe3a81690850cd254227f27f75c3a0c491a1f351ba7"}, + {file = "isort-5.10.1.tar.gz", hash = "sha256:e8443a5e7a020e9d7f97f1d7d9cd17c88bcb3bc7e218bf9cf5095fe550be2951"}, +] +jinja2 = [ + {file = "Jinja2-3.0.3-py3-none-any.whl", hash = "sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8"}, + {file = "Jinja2-3.0.3.tar.gz", hash = "sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7"}, +] +jmespath = [ + {file = "jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"}, + {file = "jmespath-0.10.0.tar.gz", hash = "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9"}, +] +jsonschema = [ + {file = "jsonschema-3.2.0-py2.py3-none-any.whl", hash = "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163"}, + {file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"}, +] +kazoo = [ + {file = "kazoo-2.9.0-py2.py3-none-any.whl", hash = "sha256:b73dd6829ae6b3a78cd37ba393749f9d30860dbe39debb27c36eff159949a14e"}, + {file = "kazoo-2.9.0.tar.gz", hash = "sha256:800318c7f3dab648cdf616dfb25bdabeefab2a6837aa6951e0fa3ff80e656969"}, +] +lazy-object-proxy = [ + {file = "lazy-object-proxy-1.9.0.tar.gz", hash = "sha256:659fb5809fa4629b8a1ac5106f669cfc7bef26fbb389dda53b3e010d1ac4ebae"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b40387277b0ed2d0602b8293b94d7257e17d1479e257b4de114ea11a8cb7f2d7"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8c6cfb338b133fbdbc5cfaa10fe3c6aeea827db80c978dbd13bc9dd8526b7d4"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:721532711daa7db0d8b779b0bb0318fa87af1c10d7fe5e52ef30f8eff254d0cd"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:66a3de4a3ec06cd8af3f61b8e1ec67614fbb7c995d02fa224813cb7afefee701"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1aa3de4088c89a1b69f8ec0dcc169aa725b0ff017899ac568fe44ddc1396df46"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-win32.whl", hash = "sha256:f0705c376533ed2a9e5e97aacdbfe04cecd71e0aa84c7c0595d02ef93b6e4455"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:ea806fd4c37bf7e7ad82537b0757999264d5f70c45468447bb2b91afdbe73a6e"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:946d27deaff6cf8452ed0dba83ba38839a87f4f7a9732e8f9fd4107b21e6ff07"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79a31b086e7e68b24b99b23d57723ef7e2c6d81ed21007b6281ebcd1688acb0a"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f699ac1c768270c9e384e4cbd268d6e67aebcfae6cd623b4d7c3bfde5a35db59"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bfb38f9ffb53b942f2b5954e0f610f1e721ccebe9cce9025a38c8ccf4a5183a4"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:189bbd5d41ae7a498397287c408617fe5c48633e7755287b21d741f7db2706a9"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-win32.whl", hash = "sha256:81fc4d08b062b535d95c9ea70dbe8a335c45c04029878e62d744bdced5141586"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:f2457189d8257dd41ae9b434ba33298aec198e30adf2dcdaaa3a28b9994f6adb"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d9e25ef10a39e8afe59a5c348a4dbf29b4868ab76269f81ce1674494e2565a6e"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cbf9b082426036e19c6924a9ce90c740a9861e2bdc27a4834fd0a910742ac1e8"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f5fa4a61ce2438267163891961cfd5e32ec97a2c444e5b842d574251ade27d2"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:8fa02eaab317b1e9e03f69aab1f91e120e7899b392c4fc19807a8278a07a97e8"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e7c21c95cae3c05c14aafffe2865bbd5e377cfc1348c4f7751d9dc9a48ca4bda"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-win32.whl", hash = "sha256:f12ad7126ae0c98d601a7ee504c1122bcef553d1d5e0c3bfa77b16b3968d2734"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-win_amd64.whl", hash = "sha256:edd20c5a55acb67c7ed471fa2b5fb66cb17f61430b7a6b9c3b4a1e40293b1671"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2d0daa332786cf3bb49e10dc6a17a52f6a8f9601b4cf5c295a4f85854d61de63"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cd077f3d04a58e83d04b20e334f678c2b0ff9879b9375ed107d5d07ff160171"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:660c94ea760b3ce47d1855a30984c78327500493d396eac4dfd8bd82041b22be"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:212774e4dfa851e74d393a2370871e174d7ff0ebc980907723bb67d25c8a7c30"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f0117049dd1d5635bbff65444496c90e0baa48ea405125c088e93d9cf4525b11"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-win32.whl", hash = "sha256:0a891e4e41b54fd5b8313b96399f8b0e173bbbfc03c7631f01efbe29bb0bcf82"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:9990d8e71b9f6488e91ad25f322898c136b008d87bf852ff65391b004da5e17b"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9e7551208b2aded9c1447453ee366f1c4070602b3d932ace044715d89666899b"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f83ac4d83ef0ab017683d715ed356e30dd48a93746309c8f3517e1287523ef4"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7322c3d6f1766d4ef1e51a465f47955f1e8123caee67dd641e67d539a534d006"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:18b78ec83edbbeb69efdc0e9c1cb41a3b1b1ed11ddd8ded602464c3fc6020494"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:09763491ce220c0299688940f8dc2c5d05fd1f45af1e42e636b2e8b2303e4382"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-win32.whl", hash = "sha256:9090d8e53235aa280fc9239a86ae3ea8ac58eff66a705fa6aa2ec4968b95c821"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:db1c1722726f47e10e0b5fdbf15ac3b8adb58c091d12b3ab713965795036985f"}, +] +lxml = [ + {file = "lxml-4.9.3-cp27-cp27m-macosx_11_0_x86_64.whl", hash = "sha256:b0a545b46b526d418eb91754565ba5b63b1c0b12f9bd2f808c852d9b4b2f9b5c"}, + {file = "lxml-4.9.3-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:075b731ddd9e7f68ad24c635374211376aa05a281673ede86cbe1d1b3455279d"}, + {file = "lxml-4.9.3-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1e224d5755dba2f4a9498e150c43792392ac9b5380aa1b845f98a1618c94eeef"}, + {file = "lxml-4.9.3-cp27-cp27m-win32.whl", hash = "sha256:2c74524e179f2ad6d2a4f7caf70e2d96639c0954c943ad601a9e146c76408ed7"}, + {file = "lxml-4.9.3-cp27-cp27m-win_amd64.whl", hash = "sha256:4f1026bc732b6a7f96369f7bfe1a4f2290fb34dce00d8644bc3036fb351a4ca1"}, + {file = "lxml-4.9.3-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c0781a98ff5e6586926293e59480b64ddd46282953203c76ae15dbbbf302e8bb"}, + {file = "lxml-4.9.3-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cef2502e7e8a96fe5ad686d60b49e1ab03e438bd9123987994528febd569868e"}, + {file = "lxml-4.9.3-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:b86164d2cff4d3aaa1f04a14685cbc072efd0b4f99ca5708b2ad1b9b5988a991"}, + {file = "lxml-4.9.3-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:42871176e7896d5d45138f6d28751053c711ed4d48d8e30b498da155af39aebd"}, + {file = "lxml-4.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:ae8b9c6deb1e634ba4f1930eb67ef6e6bf6a44b6eb5ad605642b2d6d5ed9ce3c"}, + {file = "lxml-4.9.3-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:411007c0d88188d9f621b11d252cce90c4a2d1a49db6c068e3c16422f306eab8"}, + {file = "lxml-4.9.3-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:cd47b4a0d41d2afa3e58e5bf1f62069255aa2fd6ff5ee41604418ca925911d76"}, + {file = "lxml-4.9.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0e2cb47860da1f7e9a5256254b74ae331687b9672dfa780eed355c4c9c3dbd23"}, + {file = "lxml-4.9.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1247694b26342a7bf47c02e513d32225ededd18045264d40758abeb3c838a51f"}, + {file = "lxml-4.9.3-cp310-cp310-win32.whl", hash = "sha256:cdb650fc86227eba20de1a29d4b2c1bfe139dc75a0669270033cb2ea3d391b85"}, + {file = "lxml-4.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:97047f0d25cd4bcae81f9ec9dc290ca3e15927c192df17331b53bebe0e3ff96d"}, + {file = "lxml-4.9.3-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:1f447ea5429b54f9582d4b955f5f1985f278ce5cf169f72eea8afd9502973dd5"}, + {file = "lxml-4.9.3-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:57d6ba0ca2b0c462f339640d22882acc711de224d769edf29962b09f77129cbf"}, + {file = "lxml-4.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:9767e79108424fb6c3edf8f81e6730666a50feb01a328f4a016464a5893f835a"}, + {file = "lxml-4.9.3-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:71c52db65e4b56b8ddc5bb89fb2e66c558ed9d1a74a45ceb7dcb20c191c3df2f"}, + {file = "lxml-4.9.3-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d73d8ecf8ecf10a3bd007f2192725a34bd62898e8da27eb9d32a58084f93962b"}, + {file = "lxml-4.9.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0a3d3487f07c1d7f150894c238299934a2a074ef590b583103a45002035be120"}, + {file = "lxml-4.9.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e28c51fa0ce5674be9f560c6761c1b441631901993f76700b1b30ca6c8378d6"}, + {file = "lxml-4.9.3-cp311-cp311-win32.whl", hash = "sha256:0bfd0767c5c1de2551a120673b72e5d4b628737cb05414f03c3277bf9bed3305"}, + {file = "lxml-4.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:25f32acefac14ef7bd53e4218fe93b804ef6f6b92ffdb4322bb6d49d94cad2bc"}, + {file = "lxml-4.9.3-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:d3ff32724f98fbbbfa9f49d82852b159e9784d6094983d9a8b7f2ddaebb063d4"}, + {file = "lxml-4.9.3-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:48d6ed886b343d11493129e019da91d4039826794a3e3027321c56d9e71505be"}, + {file = "lxml-4.9.3-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9a92d3faef50658dd2c5470af249985782bf754c4e18e15afb67d3ab06233f13"}, + {file = "lxml-4.9.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b4e4bc18382088514ebde9328da057775055940a1f2e18f6ad2d78aa0f3ec5b9"}, + {file = "lxml-4.9.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fc9b106a1bf918db68619fdcd6d5ad4f972fdd19c01d19bdb6bf63f3589a9ec5"}, + {file = "lxml-4.9.3-cp312-cp312-win_amd64.whl", hash = "sha256:d37017287a7adb6ab77e1c5bee9bcf9660f90ff445042b790402a654d2ad81d8"}, + {file = "lxml-4.9.3-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:56dc1f1ebccc656d1b3ed288f11e27172a01503fc016bcabdcbc0978b19352b7"}, + {file = "lxml-4.9.3-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:578695735c5a3f51569810dfebd05dd6f888147a34f0f98d4bb27e92b76e05c2"}, + {file = "lxml-4.9.3-cp35-cp35m-win32.whl", hash = "sha256:704f61ba8c1283c71b16135caf697557f5ecf3e74d9e453233e4771d68a1f42d"}, + {file = "lxml-4.9.3-cp35-cp35m-win_amd64.whl", hash = "sha256:c41bfca0bd3532d53d16fd34d20806d5c2b1ace22a2f2e4c0008570bf2c58833"}, + {file = "lxml-4.9.3-cp36-cp36m-macosx_11_0_x86_64.whl", hash = "sha256:64f479d719dc9f4c813ad9bb6b28f8390360660b73b2e4beb4cb0ae7104f1c12"}, + {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:dd708cf4ee4408cf46a48b108fb9427bfa00b9b85812a9262b5c668af2533ea5"}, + {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c31c7462abdf8f2ac0577d9f05279727e698f97ecbb02f17939ea99ae8daa98"}, + {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e3cd95e10c2610c360154afdc2f1480aea394f4a4f1ea0a5eacce49640c9b190"}, + {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:4930be26af26ac545c3dffb662521d4e6268352866956672231887d18f0eaab2"}, + {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4aec80cde9197340bc353d2768e2a75f5f60bacda2bab72ab1dc499589b3878c"}, + {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:14e019fd83b831b2e61baed40cab76222139926b1fb5ed0e79225bc0cae14584"}, + {file = "lxml-4.9.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0c0850c8b02c298d3c7006b23e98249515ac57430e16a166873fc47a5d549287"}, + {file = "lxml-4.9.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:aca086dc5f9ef98c512bac8efea4483eb84abbf926eaeedf7b91479feb092458"}, + {file = "lxml-4.9.3-cp36-cp36m-win32.whl", hash = "sha256:50baa9c1c47efcaef189f31e3d00d697c6d4afda5c3cde0302d063492ff9b477"}, + {file = "lxml-4.9.3-cp36-cp36m-win_amd64.whl", hash = "sha256:bef4e656f7d98aaa3486d2627e7d2df1157d7e88e7efd43a65aa5dd4714916cf"}, + {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:46f409a2d60f634fe550f7133ed30ad5321ae2e6630f13657fb9479506b00601"}, + {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:4c28a9144688aef80d6ea666c809b4b0e50010a2aca784c97f5e6bf143d9f129"}, + {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:141f1d1a9b663c679dc524af3ea1773e618907e96075262726c7612c02b149a4"}, + {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:53ace1c1fd5a74ef662f844a0413446c0629d151055340e9893da958a374f70d"}, + {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:17a753023436a18e27dd7769e798ce302963c236bc4114ceee5b25c18c52c693"}, + {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7d298a1bd60c067ea75d9f684f5f3992c9d6766fadbc0bcedd39750bf344c2f4"}, + {file = "lxml-4.9.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:081d32421db5df44c41b7f08a334a090a545c54ba977e47fd7cc2deece78809a"}, + {file = "lxml-4.9.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:23eed6d7b1a3336ad92d8e39d4bfe09073c31bfe502f20ca5116b2a334f8ec02"}, + {file = "lxml-4.9.3-cp37-cp37m-win32.whl", hash = "sha256:1509dd12b773c02acd154582088820893109f6ca27ef7291b003d0e81666109f"}, + {file = "lxml-4.9.3-cp37-cp37m-win_amd64.whl", hash = "sha256:120fa9349a24c7043854c53cae8cec227e1f79195a7493e09e0c12e29f918e52"}, + {file = "lxml-4.9.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:4d2d1edbca80b510443f51afd8496be95529db04a509bc8faee49c7b0fb6d2cc"}, + {file = "lxml-4.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:8d7e43bd40f65f7d97ad8ef5c9b1778943d02f04febef12def25f7583d19baac"}, + {file = "lxml-4.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:71d66ee82e7417828af6ecd7db817913cb0cf9d4e61aa0ac1fde0583d84358db"}, + {file = "lxml-4.9.3-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:6fc3c450eaa0b56f815c7b62f2b7fba7266c4779adcf1cece9e6deb1de7305ce"}, + {file = "lxml-4.9.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:65299ea57d82fb91c7f019300d24050c4ddeb7c5a190e076b5f48a2b43d19c42"}, + {file = "lxml-4.9.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:eadfbbbfb41b44034a4c757fd5d70baccd43296fb894dba0295606a7cf3124aa"}, + {file = "lxml-4.9.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3e9bdd30efde2b9ccfa9cb5768ba04fe71b018a25ea093379c857c9dad262c40"}, + {file = "lxml-4.9.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fcdd00edfd0a3001e0181eab3e63bd5c74ad3e67152c84f93f13769a40e073a7"}, + {file = "lxml-4.9.3-cp38-cp38-win32.whl", hash = "sha256:57aba1bbdf450b726d58b2aea5fe47c7875f5afb2c4a23784ed78f19a0462574"}, + {file = "lxml-4.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:92af161ecbdb2883c4593d5ed4815ea71b31fafd7fd05789b23100d081ecac96"}, + {file = "lxml-4.9.3-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:9bb6ad405121241e99a86efff22d3ef469024ce22875a7ae045896ad23ba2340"}, + {file = "lxml-4.9.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:8ed74706b26ad100433da4b9d807eae371efaa266ffc3e9191ea436087a9d6a7"}, + {file = "lxml-4.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:fbf521479bcac1e25a663df882c46a641a9bff6b56dc8b0fafaebd2f66fb231b"}, + {file = "lxml-4.9.3-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:303bf1edce6ced16bf67a18a1cf8339d0db79577eec5d9a6d4a80f0fb10aa2da"}, + {file = "lxml-4.9.3-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:5515edd2a6d1a5a70bfcdee23b42ec33425e405c5b351478ab7dc9347228f96e"}, + {file = "lxml-4.9.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:690dafd0b187ed38583a648076865d8c229661ed20e48f2335d68e2cf7dc829d"}, + {file = "lxml-4.9.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b6420a005548ad52154c8ceab4a1290ff78d757f9e5cbc68f8c77089acd3c432"}, + {file = "lxml-4.9.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bb3bb49c7a6ad9d981d734ef7c7193bc349ac338776a0360cc671eaee89bcf69"}, + {file = "lxml-4.9.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d27be7405547d1f958b60837dc4c1007da90b8b23f54ba1f8b728c78fdb19d50"}, + {file = "lxml-4.9.3-cp39-cp39-win32.whl", hash = "sha256:8df133a2ea5e74eef5e8fc6f19b9e085f758768a16e9877a60aec455ed2609b2"}, + {file = "lxml-4.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:4dd9a263e845a72eacb60d12401e37c616438ea2e5442885f65082c276dfb2b2"}, + {file = "lxml-4.9.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6689a3d7fd13dc687e9102a27e98ef33730ac4fe37795d5036d18b4d527abd35"}, + {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:f6bdac493b949141b733c5345b6ba8f87a226029cbabc7e9e121a413e49441e0"}, + {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:05186a0f1346ae12553d66df1cfce6f251589fea3ad3da4f3ef4e34b2d58c6a3"}, + {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c2006f5c8d28dee289f7020f721354362fa304acbaaf9745751ac4006650254b"}, + {file = "lxml-4.9.3-pp38-pypy38_pp73-macosx_11_0_x86_64.whl", hash = "sha256:5c245b783db29c4e4fbbbfc9c5a78be496c9fea25517f90606aa1f6b2b3d5f7b"}, + {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:4fb960a632a49f2f089d522f70496640fdf1218f1243889da3822e0a9f5f3ba7"}, + {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:50670615eaf97227d5dc60de2dc99fb134a7130d310d783314e7724bf163f75d"}, + {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9719fe17307a9e814580af1f5c6e05ca593b12fb7e44fe62450a5384dbf61b4b"}, + {file = "lxml-4.9.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:3331bece23c9ee066e0fb3f96c61322b9e0f54d775fccefff4c38ca488de283a"}, + {file = "lxml-4.9.3-pp39-pypy39_pp73-macosx_11_0_x86_64.whl", hash = "sha256:ed667f49b11360951e201453fc3967344d0d0263aa415e1619e85ae7fd17b4e0"}, + {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:8b77946fd508cbf0fccd8e400a7f71d4ac0e1595812e66025bac475a8e811694"}, + {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e4da8ca0c0c0aea88fd46be8e44bd49716772358d648cce45fe387f7b92374a7"}, + {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:fe4bda6bd4340caa6e5cf95e73f8fea5c4bfc55763dd42f1b50a94c1b4a2fbd4"}, + {file = "lxml-4.9.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:f3df3db1d336b9356dd3112eae5f5c2b8b377f3bc826848567f10bfddfee77e9"}, + {file = "lxml-4.9.3.tar.gz", hash = "sha256:48628bd53a426c9eb9bc066a923acaa0878d1e86129fd5359aee99285f4eed9c"}, +] +markupsafe = [ + {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4dc8f9fb58f7364b63fd9f85013b780ef83c11857ae79f2feda41e270468dd9b"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:20dca64a3ef2d6e4d5d615a3fd418ad3bde77a47ec8a23d984a12b5b4c74491a"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cdfba22ea2f0029c9261a4bd07e830a8da012291fbe44dc794e488b6c9bb353a"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-win32.whl", hash = "sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:deb993cacb280823246a026e3b2d81c493c53de6acfd5e6bfe31ab3402bb37dd"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:63f3268ba69ace99cab4e3e3b5840b03340efed0948ab8f78d2fd87ee5442a4f"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:8d206346619592c6200148b01a2142798c989edcb9c896f9ac9722a99d4e77e6"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-win32.whl", hash = "sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d6c7ebd4e944c85e2c3421e612a7057a2f48d478d79e61800d81468a8d842207"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f0567c4dc99f264f49fe27da5f735f414c4e7e7dd850cfd8e69f0862d7c74ea9"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:89c687013cb1cd489a0f0ac24febe8c7a666e6e221b783e53ac50ebf68e45d86"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-win32.whl", hash = "sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aca6377c0cb8a8253e493c6b451565ac77e98c2951c45f913e0b52facdcff83f"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:04635854b943835a6ea959e948d19dcd311762c5c0c6e1f0e16ee57022669194"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6300b8454aa6930a24b9618fbb54b5a68135092bc666f7b06901f897fa5c2fee"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-win32.whl", hash = "sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4296f2b1ce8c86a6aea78613c34bb1a672ea0e3de9c6ba08a960efe0b0a09047"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f02365d4e99430a12647f09b6cc8bab61a6564363f313126f775eb4f6ef798e"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5b6d930f030f8ed98e3e6c98ffa0652bdb82601e7a016ec2ab5d7ff23baa78d1"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-win32.whl", hash = "sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8"}, + {file = "MarkupSafe-2.0.1.tar.gz", hash = "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a"}, +] +mccabe = [ + {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, + {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, +] +mypy = [ + {file = "mypy-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ad3109bec37cc33654de8db30fe8ff3a1bb57ea65144167d68185e6dced9868d"}, + {file = "mypy-1.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b4ea3a0241cb005b0ccdbd318fb99619b21ae51bcf1660b95fc22e0e7d3ba4a1"}, + {file = "mypy-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fe816e26e676c1311b9e04fd576543b873576d39439f7c24c8e5c7728391ecf"}, + {file = "mypy-1.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:42170e68adb1603ccdc55a30068f72bcfcde2ce650188e4c1b2a93018b826735"}, + {file = "mypy-1.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:d145b81a8214687cfc1f85c03663a5bbe736777410e5580e54d526e7e904f564"}, + {file = "mypy-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c36011320e452eb30bec38b9fd3ba20569dc9545d7d4540d967f3ea1fab9c374"}, + {file = "mypy-1.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f3940cf5845b2512b3ab95463198b0cdf87975dfd17fdcc6ce9709a9abe09e69"}, + {file = "mypy-1.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9166186c498170e1ff478a7f540846b2169243feb95bc228d39a67a1a450cdc6"}, + {file = "mypy-1.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:725b57a19b7408ef66a0fd9db59b5d3e528922250fb56e50bded27fea9ff28f0"}, + {file = "mypy-1.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:eec5c927aa4b3e8b4781840f1550079969926d0a22ce38075f6cfcf4b13e3eb4"}, + {file = "mypy-1.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:79c520aa24f21852206b5ff2cf746dc13020113aa73fa55af504635a96e62718"}, + {file = "mypy-1.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:769ddb6bfe55c2bd9c7d6d7020885a5ea14289619db7ee650e06b1ef0852c6f4"}, + {file = "mypy-1.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cbf18f8db7e5f060d61c91e334d3b96d6bb624ddc9ee8a1cde407b737acbca2c"}, + {file = "mypy-1.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a2500ad063413bc873ae102cf655bf49889e0763b260a3a7cf544a0cbbf7e70a"}, + {file = "mypy-1.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:84cf9f7d8a8a22bb6a36444480f4cbf089c917a4179fbf7eea003ea931944a7f"}, + {file = "mypy-1.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a551ed0fc02455fe2c1fb0145160df8336b90ab80224739627b15ebe2b45e9dc"}, + {file = "mypy-1.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:372fd97293ed0076d52695849f59acbbb8461c4ab447858cdaeaf734a396d823"}, + {file = "mypy-1.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c8a7444d6fcac7e2585b10abb91ad900a576da7af8f5cffffbff6065d9115813"}, + {file = "mypy-1.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:35b13335c6c46a386577a51f3d38b2b5d14aa619e9633bb756bd77205e4bd09f"}, + {file = "mypy-1.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:2c9d570f53908cbea326ad8f96028a673b814d9dca7515bf71d95fa662c3eb6f"}, + {file = "mypy-1.5.0-py3-none-any.whl", hash = "sha256:69b32d0dedd211b80f1b7435644e1ef83033a2af2ac65adcdc87c38db68a86be"}, + {file = "mypy-1.5.0.tar.gz", hash = "sha256:f3460f34b3839b9bc84ee3ed65076eb827cd99ed13ed08d723f9083cada4a212"}, +] +mypy-extensions = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] +ordered-set = [ + {file = "ordered-set-4.0.2.tar.gz", hash = "sha256:ba93b2df055bca202116ec44b9bead3df33ea63a7d5827ff8e16738b97f33a95"}, +] +packaging = [ + {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, + {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, +] +paramiko = [ + {file = "paramiko-3.3.1-py3-none-any.whl", hash = "sha256:b7bc5340a43de4287bbe22fe6de728aa2c22468b2a849615498dd944c2f275eb"}, + {file = "paramiko-3.3.1.tar.gz", hash = "sha256:6a3777a961ac86dbef375c5f5b8d50014a1a96d0fd7f054a43bc880134b0ff77"}, +] +parse = [ + {file = "parse-1.19.1-py2.py3-none-any.whl", hash = "sha256:371ed3800dc63983832159cc9373156613947707bc448b5215473a219dbd4362"}, + {file = "parse-1.19.1.tar.gz", hash = "sha256:cc3a47236ff05da377617ddefa867b7ba983819c664e1afe46249e5b469be464"}, +] +parse-type = [ + {file = "parse_type-0.6.2-py2.py3-none-any.whl", hash = "sha256:06d39a8b70fde873eb2a131141a0e79bb34a432941fb3d66fad247abafc9766c"}, + {file = "parse_type-0.6.2.tar.gz", hash = "sha256:79b1f2497060d0928bc46016793f1fca1057c4aacdf15ef876aa48d75a73a355"}, +] +pathspec = [ + {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"}, + {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, +] +platformdirs = [ + {file = "platformdirs-3.10.0-py3-none-any.whl", hash = "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"}, + {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"}, +] +pluggy = [ + {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, + {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, +] +psutil = [ + {file = "psutil-5.9.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:be8929ce4313f9f8146caad4272f6abb8bf99fc6cf59344a3167ecd74f4f203f"}, + {file = "psutil-5.9.5-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ab8ed1a1d77c95453db1ae00a3f9c50227ebd955437bcf2a574ba8adbf6a74d5"}, + {file = "psutil-5.9.5-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:4aef137f3345082a3d3232187aeb4ac4ef959ba3d7c10c33dd73763fbc063da4"}, + {file = "psutil-5.9.5-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:ea8518d152174e1249c4f2a1c89e3e6065941df2fa13a1ab45327716a23c2b48"}, + {file = "psutil-5.9.5-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:acf2aef9391710afded549ff602b5887d7a2349831ae4c26be7c807c0a39fac4"}, + {file = "psutil-5.9.5-cp27-none-win32.whl", hash = "sha256:5b9b8cb93f507e8dbaf22af6a2fd0ccbe8244bf30b1baad6b3954e935157ae3f"}, + {file = "psutil-5.9.5-cp27-none-win_amd64.whl", hash = "sha256:8c5f7c5a052d1d567db4ddd231a9d27a74e8e4a9c3f44b1032762bd7b9fdcd42"}, + {file = "psutil-5.9.5-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:3c6f686f4225553615612f6d9bc21f1c0e305f75d7d8454f9b46e901778e7217"}, + {file = "psutil-5.9.5-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a7dd9997128a0d928ed4fb2c2d57e5102bb6089027939f3b722f3a210f9a8da"}, + {file = "psutil-5.9.5-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89518112647f1276b03ca97b65cc7f64ca587b1eb0278383017c2a0dcc26cbe4"}, + {file = "psutil-5.9.5-cp36-abi3-win32.whl", hash = "sha256:104a5cc0e31baa2bcf67900be36acde157756b9c44017b86b2c049f11957887d"}, + {file = "psutil-5.9.5-cp36-abi3-win_amd64.whl", hash = "sha256:b258c0c1c9d145a1d5ceffab1134441c4c5113b2417fafff7315a917a026c3c9"}, + {file = "psutil-5.9.5-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:c607bb3b57dc779d55e1554846352b4e358c10fff3abf3514a7a6601beebdb30"}, + {file = "psutil-5.9.5.tar.gz", hash = "sha256:5410638e4df39c54d957fc51ce03048acd8e6d60abc0f5107af51e5fb566eb3c"}, +] +py = [ + {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, + {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, +] +pycodestyle = [ + {file = "pycodestyle-2.11.0-py2.py3-none-any.whl", hash = "sha256:5d1013ba8dc7895b548be5afb05740ca82454fd899971563d2ef625d090326f8"}, + {file = "pycodestyle-2.11.0.tar.gz", hash = "sha256:259bcc17857d8a8b3b4a2327324b79e5f020a13c16074670f9c8c8f872ea76d0"}, +] +pycparser = [ + {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, + {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, +] +pyflakes = [ + {file = "pyflakes-3.1.0-py2.py3-none-any.whl", hash = "sha256:4132f6d49cb4dae6819e5379898f2b8cce3c5f23994194c24b77d5da2e36f774"}, + {file = "pyflakes-3.1.0.tar.gz", hash = "sha256:a0aae034c444db0071aa077972ba4768d40c830d9539fd45bf4cd3f8f6992efc"}, +] +pygments = [ + {file = "Pygments-2.14.0-py3-none-any.whl", hash = "sha256:fa7bd7bd2771287c0de303af8bfdfc731f51bd2c6a47ab69d117138893b82717"}, + {file = "Pygments-2.14.0.tar.gz", hash = "sha256:b3ed06a9e8ac9a9aae5a6f5dbe78a8a58655d17b43b93c078f094ddc476ae297"}, +] +pyhamcrest = [ + {file = "pyhamcrest-2.0.4-py3-none-any.whl", hash = "sha256:60a41d4783b9d56c9ec8586635d2301db5072b3ea8a51c32dd03c408ae2b0f79"}, + {file = "pyhamcrest-2.0.4.tar.gz", hash = "sha256:b5d9ce6b977696286cf232ce2adf8969b4d0b045975b0936ac9005e84e67e9c1"}, +] +pylint = [ + {file = "pylint-2.17.5-py3-none-any.whl", hash = "sha256:73995fb8216d3bed149c8d51bba25b2c52a8251a2c8ac846ec668ce38fab5413"}, + {file = "pylint-2.17.5.tar.gz", hash = "sha256:f7b601cbc06fef7e62a754e2b41294c2aa31f1cb659624b9a85bcba29eaf8252"}, +] +pynacl = [ + {file = "PyNaCl-1.5.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858"}, + {file = "PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b"}, + {file = "PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:61f642bf2378713e2c2e1de73444a3778e5f0a38be6fee0fe532fe30060282ff"}, + {file = "PyNaCl-1.5.0-cp36-abi3-win32.whl", hash = "sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543"}, + {file = "PyNaCl-1.5.0-cp36-abi3-win_amd64.whl", hash = "sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93"}, + {file = "PyNaCl-1.5.0.tar.gz", hash = "sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba"}, +] +pyopenssl = [ + {file = "pyOpenSSL-23.2.0-py3-none-any.whl", hash = "sha256:24f0dc5227396b3e831f4c7f602b950a5e9833d292c8e4a2e06b709292806ae2"}, + {file = "pyOpenSSL-23.2.0.tar.gz", hash = "sha256:276f931f55a452e7dea69c7173e984eb2a4407ce413c918aa34b55f82f9b8bac"}, +] +pyparsing = [ + {file = "pyparsing-3.0.7-py3-none-any.whl", hash = "sha256:a6c06a88f252e6c322f65faf8f418b16213b51bdfaece0524c1c1bc30c63c484"}, + {file = "pyparsing-3.0.7.tar.gz", hash = "sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea"}, +] +pyreadline = [ + {file = "pyreadline-2.1.win-amd64.exe", hash = "sha256:9ce5fa65b8992dfa373bddc5b6e0864ead8f291c94fbfec05fbd5c836162e67b"}, + {file = "pyreadline-2.1.win32.exe", hash = "sha256:65540c21bfe14405a3a77e4c085ecfce88724743a4ead47c66b84defcf82c32e"}, + {file = "pyreadline-2.1.zip", hash = "sha256:4530592fc2e85b25b1a9f79664433da09237c1a270e4d78ea5aa3a2c7229e2d1"}, +] +pyreadline3 = [ + {file = "pyreadline3-3.4.1-py3-none-any.whl", hash = "sha256:b0efb6516fd4fb07b45949053826a62fa4cb353db5be2bbb4a7aa1fdd1e345fb"}, + {file = "pyreadline3-3.4.1.tar.gz", hash = "sha256:6f3d1f7b8a31ba32b73917cefc1f28cc660562f39aea8646d30bd6eff21f7bae"}, +] +pyrsistent = [ + {file = "pyrsistent-0.18.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f4c8cabb46ff8e5d61f56a037974228e978f26bfefce4f61a4b1ac0ba7a2ab72"}, + {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:da6e5e818d18459fa46fac0a4a4e543507fe1110e808101277c5a2b5bab0cd2d"}, + {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5e4395bbf841693eaebaa5bb5c8f5cdbb1d139e07c975c682ec4e4f8126e03d2"}, + {file = "pyrsistent-0.18.0-cp36-cp36m-win32.whl", hash = "sha256:527be2bfa8dc80f6f8ddd65242ba476a6c4fb4e3aedbf281dfbac1b1ed4165b1"}, + {file = "pyrsistent-0.18.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2aaf19dc8ce517a8653746d98e962ef480ff34b6bc563fc067be6401ffb457c7"}, + {file = "pyrsistent-0.18.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58a70d93fb79dc585b21f9d72487b929a6fe58da0754fa4cb9f279bb92369396"}, + {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:4916c10896721e472ee12c95cdc2891ce5890898d2f9907b1b4ae0f53588b710"}, + {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:73ff61b1411e3fb0ba144b8f08d6749749775fe89688093e1efef9839d2dcc35"}, + {file = "pyrsistent-0.18.0-cp37-cp37m-win32.whl", hash = "sha256:b29b869cf58412ca5738d23691e96d8aff535e17390128a1a52717c9a109da4f"}, + {file = "pyrsistent-0.18.0-cp37-cp37m-win_amd64.whl", hash = "sha256:097b96f129dd36a8c9e33594e7ebb151b1515eb52cceb08474c10a5479e799f2"}, + {file = "pyrsistent-0.18.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:772e94c2c6864f2cd2ffbe58bb3bdefbe2a32afa0acb1a77e472aac831f83427"}, + {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:c1a9ff320fa699337e05edcaae79ef8c2880b52720bc031b219e5b5008ebbdef"}, + {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:cd3caef37a415fd0dae6148a1b6957a8c5f275a62cca02e18474608cb263640c"}, + {file = "pyrsistent-0.18.0-cp38-cp38-win32.whl", hash = "sha256:e79d94ca58fcafef6395f6352383fa1a76922268fa02caa2272fff501c2fdc78"}, + {file = "pyrsistent-0.18.0-cp38-cp38-win_amd64.whl", hash = "sha256:a0c772d791c38bbc77be659af29bb14c38ced151433592e326361610250c605b"}, + {file = "pyrsistent-0.18.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d5ec194c9c573aafaceebf05fc400656722793dac57f254cd4741f3c27ae57b4"}, + {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:6b5eed00e597b5b5773b4ca30bd48a5774ef1e96f2a45d105db5b4ebb4bca680"}, + {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:48578680353f41dca1ca3dc48629fb77dfc745128b56fc01096b2530c13fd426"}, + {file = "pyrsistent-0.18.0-cp39-cp39-win32.whl", hash = "sha256:f3ef98d7b76da5eb19c37fda834d50262ff9167c65658d1d8f974d2e4d90676b"}, + {file = "pyrsistent-0.18.0-cp39-cp39-win_amd64.whl", hash = "sha256:404e1f1d254d314d55adb8d87f4f465c8693d6f902f67eb6ef5b4526dc58e6ea"}, + {file = "pyrsistent-0.18.0.tar.gz", hash = "sha256:773c781216f8c2900b42a7b638d5b517bb134ae1acbebe4d1e8f1f41ea60eb4b"}, +] +pytest = [ + {file = "pytest-7.0.1-py3-none-any.whl", hash = "sha256:9ce3ff477af913ecf6321fe337b93a2c0dcf2a0a1439c43f5452112c1e4280db"}, + {file = "pytest-7.0.1.tar.gz", hash = "sha256:e30905a0c131d3d94b89624a1cc5afec3e0ba2fbdb151867d8e0ebd49850f171"}, +] +python-dateutil = [ + {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, + {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, +] +python-dotenv = [ + {file = "python-dotenv-0.20.0.tar.gz", hash = "sha256:b7e3b04a59693c42c36f9ab1cc2acc46fa5df8c78e178fc33a8d4cd05c8d498f"}, + {file = "python_dotenv-0.20.0-py3-none-any.whl", hash = "sha256:d92a187be61fe482e4fd675b6d52200e7be63a12b724abbf931a40ce4fa92938"}, +] +pywin32 = [ + {file = "pywin32-227-cp27-cp27m-win32.whl", hash = "sha256:371fcc39416d736401f0274dd64c2302728c9e034808e37381b5e1b22be4a6b0"}, + {file = "pywin32-227-cp27-cp27m-win_amd64.whl", hash = "sha256:4cdad3e84191194ea6d0dd1b1b9bdda574ff563177d2adf2b4efec2a244fa116"}, + {file = "pywin32-227-cp35-cp35m-win32.whl", hash = "sha256:f4c5be1a293bae0076d93c88f37ee8da68136744588bc5e2be2f299a34ceb7aa"}, + {file = "pywin32-227-cp35-cp35m-win_amd64.whl", hash = "sha256:a929a4af626e530383a579431b70e512e736e9588106715215bf685a3ea508d4"}, + {file = "pywin32-227-cp36-cp36m-win32.whl", hash = "sha256:300a2db938e98c3e7e2093e4491439e62287d0d493fe07cce110db070b54c0be"}, + {file = "pywin32-227-cp36-cp36m-win_amd64.whl", hash = "sha256:9b31e009564fb95db160f154e2aa195ed66bcc4c058ed72850d047141b36f3a2"}, + {file = "pywin32-227-cp37-cp37m-win32.whl", hash = "sha256:47a3c7551376a865dd8d095a98deba954a98f326c6fe3c72d8726ca6e6b15507"}, + {file = "pywin32-227-cp37-cp37m-win_amd64.whl", hash = "sha256:31f88a89139cb2adc40f8f0e65ee56a8c585f629974f9e07622ba80199057511"}, + {file = "pywin32-227-cp38-cp38-win32.whl", hash = "sha256:7f18199fbf29ca99dff10e1f09451582ae9e372a892ff03a28528a24d55875bc"}, + {file = "pywin32-227-cp38-cp38-win_amd64.whl", hash = "sha256:7c1ae32c489dc012930787f06244426f8356e129184a02c25aef163917ce158e"}, + {file = "pywin32-227-cp39-cp39-win32.whl", hash = "sha256:c054c52ba46e7eb6b7d7dfae4dbd987a1bb48ee86debe3f245a2884ece46e295"}, + {file = "pywin32-227-cp39-cp39-win_amd64.whl", hash = "sha256:f27cec5e7f588c3d1051651830ecc00294f90728d19c3bf6916e6dba93ea357c"}, +] +pyyaml = [ + {file = "PyYAML-5.3.1-cp27-cp27m-win32.whl", hash = "sha256:74809a57b329d6cc0fdccee6318f44b9b8649961fa73144a98735b0aaf029f1f"}, + {file = "PyYAML-5.3.1-cp27-cp27m-win_amd64.whl", hash = "sha256:240097ff019d7c70a4922b6869d8a86407758333f02203e0fc6ff79c5dcede76"}, + {file = "PyYAML-5.3.1-cp35-cp35m-win32.whl", hash = "sha256:4f4b913ca1a7319b33cfb1369e91e50354d6f07a135f3b901aca02aa95940bd2"}, + {file = "PyYAML-5.3.1-cp35-cp35m-win_amd64.whl", hash = "sha256:cc8955cfbfc7a115fa81d85284ee61147059a753344bc51098f3ccd69b0d7e0c"}, + {file = "PyYAML-5.3.1-cp36-cp36m-win32.whl", hash = "sha256:7739fc0fa8205b3ee8808aea45e968bc90082c10aef6ea95e855e10abf4a37b2"}, + {file = "PyYAML-5.3.1-cp36-cp36m-win_amd64.whl", hash = "sha256:69f00dca373f240f842b2931fb2c7e14ddbacd1397d57157a9b005a6a9942648"}, + {file = "PyYAML-5.3.1-cp37-cp37m-win32.whl", hash = "sha256:d13155f591e6fcc1ec3b30685d50bf0711574e2c0dfffd7644babf8b5102ca1a"}, + {file = "PyYAML-5.3.1-cp37-cp37m-win_amd64.whl", hash = "sha256:73f099454b799e05e5ab51423c7bcf361c58d3206fa7b0d555426b1f4d9a3eaf"}, + {file = "PyYAML-5.3.1-cp38-cp38-win32.whl", hash = "sha256:06a0d7ba600ce0b2d2fe2e78453a470b5a6e000a985dd4a4e54e436cc36b0e97"}, + {file = "PyYAML-5.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:95f71d2af0ff4227885f7a6605c37fd53d3a106fcab511b8860ecca9fcf400ee"}, + {file = "PyYAML-5.3.1-cp39-cp39-win32.whl", hash = "sha256:ad9c67312c84def58f3c04504727ca879cb0013b2517c85a9a253f0cb6380c0a"}, + {file = "PyYAML-5.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:6034f55dab5fea9e53f436aa68fa3ace2634918e8b5994d82f3621c04ff5ed2e"}, + {file = "PyYAML-5.3.1.tar.gz", hash = "sha256:b8eac752c5e14d3eca0e6dd9199cd627518cb5ec06add0de9d32baeee6fe645d"}, +] +requests = [ + {file = "requests-2.27.1-py2.py3-none-any.whl", hash = "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"}, + {file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"}, +] +s3transfer = [ + {file = "s3transfer-0.5.2-py3-none-any.whl", hash = "sha256:7a6f4c4d1fdb9a2b640244008e142cbc2cd3ae34b386584ef044dd0f27101971"}, + {file = "s3transfer-0.5.2.tar.gz", hash = "sha256:95c58c194ce657a5f4fb0b9e60a84968c808888aed628cd98ab8771fe1db98ed"}, +] +six = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] +tabulate = [ + {file = "tabulate-0.8.10-py3-none-any.whl", hash = "sha256:0ba055423dbaa164b9e456abe7920c5e8ed33fcc16f6d1b2f2d152c8e1e8b4fc"}, + {file = "tabulate-0.8.10-py3.8.egg", hash = "sha256:436f1c768b424654fce8597290d2764def1eea6a77cfa5c33be00b1bc0f4f63d"}, + {file = "tabulate-0.8.10.tar.gz", hash = "sha256:6c57f3f3dd7ac2782770155f3adb2db0b1a269637e42f27599925e64b114f519"}, +] +tenacity = [ + {file = "tenacity-8.2.2-py3-none-any.whl", hash = "sha256:2f277afb21b851637e8f52e6a613ff08734c347dc19ade928e519d7d2d8569b0"}, + {file = "tenacity-8.2.2.tar.gz", hash = "sha256:43af037822bd0029025877f3b2d97cc4d7bb0c2991000a3d59d71517c5c969e0"}, +] +termcolor = [ + {file = "termcolor-1.1.0.tar.gz", hash = "sha256:1d6d69ce66211143803fbc56652b41d73b4a400a2891d7bf7a1cdf4c02de613b"}, +] +texttable = [ + {file = "texttable-1.6.7-py2.py3-none-any.whl", hash = "sha256:b7b68139aa8a6339d2c320ca8b1dc42d13a7831a346b446cb9eb385f0c76310c"}, + {file = "texttable-1.6.7.tar.gz", hash = "sha256:290348fb67f7746931bcdfd55ac7584ecd4e5b0846ab164333f0794b121760f2"}, +] +tomli = [ + {file = "tomli-1.2.3-py3-none-any.whl", hash = "sha256:e3069e4be3ead9668e21cb9b074cd948f7b3113fd9c8bba083f48247aab8b11c"}, + {file = "tomli-1.2.3.tar.gz", hash = "sha256:05b6166bff487dc068d322585c7ea4ef78deed501cc124060e0f238e89a9231f"}, +] +tomlkit = [ + {file = "tomlkit-0.12.1-py3-none-any.whl", hash = "sha256:712cbd236609acc6a3e2e97253dfc52d4c2082982a88f61b640ecf0817eab899"}, + {file = "tomlkit-0.12.1.tar.gz", hash = "sha256:38e1ff8edb991273ec9f6181244a6a391ac30e9f5098e7535640ea6be97a7c86"}, +] +tqdm = [ + {file = "tqdm-4.64.1-py2.py3-none-any.whl", hash = "sha256:6fee160d6ffcd1b1c68c65f14c829c22832bc401726335ce92c52d395944a6a1"}, + {file = "tqdm-4.64.1.tar.gz", hash = "sha256:5f4f682a004951c1b450bc753c710e9280c5746ce6ffedee253ddbcbf54cf1e4"}, +] +types-pyopenssl = [ + {file = "types-pyOpenSSL-23.2.0.2.tar.gz", hash = "sha256:6a010dac9ecd42b582d7dd2cc3e9e40486b79b3b64bb2fffba1474ff96af906d"}, + {file = "types_pyOpenSSL-23.2.0.2-py3-none-any.whl", hash = "sha256:19536aa3debfbe25a918cf0d898e9f5fbbe6f3594a429da7914bf331deb1b342"}, +] +types-python-dateutil = [ + {file = "types-python-dateutil-2.8.19.14.tar.gz", hash = "sha256:1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b"}, + {file = "types_python_dateutil-2.8.19.14-py3-none-any.whl", hash = "sha256:f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9"}, +] +types-pyyaml = [ + {file = "types-PyYAML-6.0.12.11.tar.gz", hash = "sha256:7d340b19ca28cddfdba438ee638cd4084bde213e501a3978738543e27094775b"}, + {file = "types_PyYAML-6.0.12.11-py3-none-any.whl", hash = "sha256:a461508f3096d1d5810ec5ab95d7eeecb651f3a15b71959999988942063bf01d"}, +] +types-requests = [ + {file = "types-requests-2.31.0.2.tar.gz", hash = "sha256:6aa3f7faf0ea52d728bb18c0a0d1522d9bfd8c72d26ff6f61bfc3d06a411cf40"}, + {file = "types_requests-2.31.0.2-py3-none-any.whl", hash = "sha256:56d181c85b5925cbc59f4489a57e72a8b2166f18273fd8ba7b6fe0c0b986f12a"}, +] +types-setuptools = [ + {file = "types-setuptools-68.0.0.3.tar.gz", hash = "sha256:d57ae6076100b5704b3cc869fdefc671e1baf4c2cd6643f84265dfc0b955bf05"}, + {file = "types_setuptools-68.0.0.3-py3-none-any.whl", hash = "sha256:fec09e5c18264c5c09351c00be01a34456fb7a88e457abe97401325f84ad9d36"}, +] +types-tabulate = [ + {file = "types-tabulate-0.9.0.3.tar.gz", hash = "sha256:197651f9d6467193cd166d8500116a6d3a26f2a4eb2db093bc9535ee1c0be55e"}, + {file = "types_tabulate-0.9.0.3-py3-none-any.whl", hash = "sha256:462d1b62e01728416e8277614d6a3eb172d53a8efaf04a04a973ff2dd45238f6"}, +] +types-urllib3 = [ + {file = "types-urllib3-1.26.25.14.tar.gz", hash = "sha256:229b7f577c951b8c1b92c1bc2b2fdb0b49847bd2af6d1cc2a2e3dd340f3bda8f"}, + {file = "types_urllib3-1.26.25.14-py3-none-any.whl", hash = "sha256:9683bbb7fb72e32bfe9d2be6e04875fbe1b3eeec3cbb4ea231435aa7fd6b4f0e"}, +] +typing-extensions = [ + {file = "typing_extensions-4.1.1-py3-none-any.whl", hash = "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2"}, + {file = "typing_extensions-4.1.1.tar.gz", hash = "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42"}, +] +urllib3 = [ + {file = "urllib3-1.26.16-py2.py3-none-any.whl", hash = "sha256:8d36afa7616d8ab714608411b4a3b13e58f463aee519024578e062e141dce20f"}, + {file = "urllib3-1.26.16.tar.gz", hash = "sha256:8f135f6502756bde6b2a9b28989df5fbe87c9970cecaa69041edcce7f0589b14"}, +] +websocket-client = [ + {file = "websocket-client-0.59.0.tar.gz", hash = "sha256:d376bd60eace9d437ab6d7ee16f4ab4e821c9dae591e1b783c58ebd8aaf80c5c"}, + {file = "websocket_client-0.59.0-py2.py3-none-any.whl", hash = "sha256:2e50d26ca593f70aba7b13a489435ef88b8fc3b5c5643c1ce8808ff9b40f0b32"}, +] +wrapt = [ + {file = "wrapt-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a"}, + {file = "wrapt-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923"}, + {file = "wrapt-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee"}, + {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727"}, + {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7"}, + {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0"}, + {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec"}, + {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90"}, + {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975"}, + {file = "wrapt-1.15.0-cp310-cp310-win32.whl", hash = "sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1"}, + {file = "wrapt-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e"}, + {file = "wrapt-1.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7"}, + {file = "wrapt-1.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72"}, + {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb"}, + {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e"}, + {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c"}, + {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3"}, + {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92"}, + {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98"}, + {file = "wrapt-1.15.0-cp311-cp311-win32.whl", hash = "sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416"}, + {file = "wrapt-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248"}, + {file = "wrapt-1.15.0-cp35-cp35m-win32.whl", hash = "sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559"}, + {file = "wrapt-1.15.0-cp35-cp35m-win_amd64.whl", hash = "sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639"}, + {file = "wrapt-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba"}, + {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752"}, + {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364"}, + {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475"}, + {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8"}, + {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418"}, + {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2"}, + {file = "wrapt-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1"}, + {file = "wrapt-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420"}, + {file = "wrapt-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317"}, + {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e"}, + {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e"}, + {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0"}, + {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019"}, + {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034"}, + {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653"}, + {file = "wrapt-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0"}, + {file = "wrapt-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e"}, + {file = "wrapt-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145"}, + {file = "wrapt-1.15.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f"}, + {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd"}, + {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b"}, + {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f"}, + {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6"}, + {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094"}, + {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7"}, + {file = "wrapt-1.15.0-cp38-cp38-win32.whl", hash = "sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b"}, + {file = "wrapt-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1"}, + {file = "wrapt-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86"}, + {file = "wrapt-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c"}, + {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d"}, + {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc"}, + {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29"}, + {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a"}, + {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8"}, + {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9"}, + {file = "wrapt-1.15.0-cp39-cp39-win32.whl", hash = "sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff"}, + {file = "wrapt-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6"}, + {file = "wrapt-1.15.0-py3-none-any.whl", hash = "sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640"}, + {file = "wrapt-1.15.0.tar.gz", hash = "sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a"}, +] +xmltodict = [ + {file = "xmltodict-0.13.0-py2.py3-none-any.whl", hash = "sha256:aa89e8fd76320154a40d19a0df04a4695fb9dc5ba977cbb68ab3e4eb225e7852"}, + {file = "xmltodict-0.13.0.tar.gz", hash = "sha256:341595a488e3e01a85a9d8911d8912fd922ede5fecc4dce437eb4b6c8d037e56"}, +] +zipp = [ + {file = "zipp-3.6.0-py3-none-any.whl", hash = "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"}, + {file = "zipp-3.6.0.tar.gz", hash = "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832"}, +] diff --git a/pyproject.toml b/pyproject.toml index 80ae699a..a468ed72 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,41 +1,44 @@ [build-system] -requires = ["flit_core >=3.2,<4"] -build-backend = "flit_core.buildapi" +requires = ["poetry-core>=1.0.0"] +build-backend = "poetry.core.masonry.api" -[project] -name = "ch-tools" -license = { file = "LICENSE" } -dynamic = ["version", "description"] +[tool.poetry] +name = "clickhouse-tools" +version = "0.1.0" +license = "MIT" +description = "clickhouse-tools is a set of tools for administration and diagnostics of ClickHouse DBMS." authors = [ - {name = "Alexander Burmak", email = "alex-burmak@yandex-team.ru"}, - {name = "Dmitry Starov", email="dstaroff@yandex-team.ru"}, - {name = "Anton Ivashkin", email="iantonspb@yandex-team.ru"}, - {name = "Grigory Pervakov", email="pervakovg@yandex-team.ru"}, - {name = "Petr Nuzhnov", email="petrnuzhnov@yandex-team.ru"}, - {name = "Egor Medvedev", email="egor-medvedev@yandex-team.ru"}, - {name = "Aleksei Filatov", email="alexfvk@yandex-team.ru"}, - {name = "Evgeny Dyukov", email="secwall@yandex-team.ru"}, - {name = "Evgeny Strizhnev", email="estrizhnev@yandex-team.ru"}, - {name = "Vadim Volodin", email="vadim-volodin@yandex-team.ru"}, - {name = "Anton Chaporgin", email="chapson@yandex-team.ru"}, - {name = "Evgenii Kopanev", email="ekopanev@yandex-team.ru"}, - {name = "Mikhail Kot", email="myrrc@yandex-team.ru"}, + "Alexander Burmak ", + "Dmitry Starov ", + "Anton Ivashkin ", + "Grigory Pervakov ", + "Petr Nuzhnov ", + "Egor Medvedev ", + "Aleksei Filatov ", + "Evgeny Dyukov ", + "Evgeny Strizhnev ", + "Vadim Volodin ", + "Anton Chaporgin ", + "Evgenii Kopanev ", + "Mikhail Kot ", ] maintainers = [ - {name = "Alexander Burmak", email = "alex-burmak@yandex-team.ru"}, - {name = "Dmitry Starov", email="dstaroff@yandex-team.ru"}, - {name = "Anton Ivashkin", email="iantonspb@yandex-team.ru"}, - {name = "Grigory Pervakov", email="pervakovg@yandex-team.ru"}, - {name = "Petr Nuzhnov", email="petrnuzhnov@yandex-team.ru"}, - {name = "Egor Medvedev", email="egor-medvedev@yandex-team.ru"}, - {name = "Aleksei Filatov", email="alexfvk@yandex-team.ru"}, - {name = "Evgenii Kopanev", email="ekopanev@yandex-team.ru"}, - {name = "Mikhail Kot", email="myrrc@yandex-team.ru"}, + "Alexander Burmak ", + "Dmitry Starov ", + "Anton Ivashkin ", + "Grigory Pervakov ", + "Petr Nuzhnov ", + "Egor Medvedev ", + "Aleksei Filatov ", + "Evgenii Kopanev ", + "Mikhail Kot ", ] readme = "README.md" +homepage = "https://github.com/yandex/ch-tools" +repository = "https://github.com/yandex/ch-tools" keywords=[ "clickhouse", @@ -67,64 +70,62 @@ classifiers = [ "Typing :: Typed", ] -requires-python = ">=3.6.2" - -dependencies = [ - "boto3", - "click", - "cloup", - "deepdiff", - "dnspython", - "file_read_backwards", - "humanfriendly", - "jinja2", - "kazoo", - "lxml", - "psutil", - "pygments", - "pyopenssl", - "python-dateutil", - "pyyaml", - "requests", - "tabulate", - "tenacity", - "termcolor", - "tqdm", - "xmltodict", - "typing-extensions" +packages = [ + { include = "ch_tools" }, ] -[tool.flit.sdist] include = ["resources/"] -[project.urls] -Source = "https://github.com/yandex/ch-tools" - -[project.optional-dependencies] -test = [ - "flit", - "black", - "isort", - "flake8", - "flake8-string-format", - "flake8-print", - "pylint", - "mypy", - "types-pyyaml", - "types-requests", - "types-python-dateutil", - "types-tabulate", - "types-pyOpenSSL", - "types-setuptools", - "behave", - "docker", - "docker-compose", - "pyhamcrest", - "pytest", - "flask" -] -[project.scripts] +[tool.poetry.dependencies] +python = "^3.6.2" + +boto3 = "~1.23.10" +click = "~8.0.4" +cloup = "*" +deepdiff = "*" +dnspython = "*" +file_read_backwards = "*" +humanfriendly = "*" +jinja2 = "*" +kazoo = "*" +lxml = "*" +psutil = "*" +pygments = "*" +pyopenssl = "*" +python-dateutil = "*" +pyyaml = "<5.4" +requests = "*" +tabulate = "*" +tenacity = "*" +termcolor = "*" +tqdm = "*" +typing-extensions = "~4.1.1" +xmltodict = "*" + +[tool.poetry.dev-dependencies] +# TODO: use groups in a modern version of poetry +# tests +behave = "*" +docker = "*" +docker-compose = "*" +pyhamcrest = "*" +pytest = "*" + +# lint +black = { version = "^22.0.0", python = ">=3.10" } +flake8 = { version = "^6.1.0", python = ">=3.10" } +isort = { version = "^5.0.0", extras = ["pyproject"] } +mypy = { version = "^1.4.1", python = ">=3.10" } +pylint = { version = "^2.17.5", python = ">=3.10" } +types-pyOpenSSL = { version = "*", python = ">=3.10" } +types-python-dateutil = { version = "*", python = ">=3.10" } +types-pyyaml = { version = "*", python = ">=3.10" } +types-requests = { version = "*", python = ">=3.10" } +types-setuptools = { version = "*", python = ">=3.10" } +types-tabulate = { version = "*", python = ">=3.10" } + +[tool.poetry.scripts] chadmin = "ch_tools.chadmin.chadmin_cli:main" ch-monitoring = "ch_tools.monrun_checks.main:main" keeper-monitoring = "ch_tools.monrun_checks_keeper.main:main" @@ -132,3 +133,10 @@ ch-s3-credentials = "ch_tools.s3_credentials.main:main" [tool.isort] profile = "black" + +[tool.mypy] +ignore_missing_imports = true +disallow_incomplete_defs = true +check_untyped_defs = true +exclude = ['tests/staging'] +