From 6a0a1fc8641a98bf5097ed231b01042edfb48def Mon Sep 17 00:00:00 2001 From: Avram Lubkin Date: Tue, 25 Oct 2022 13:45:40 -0400 Subject: [PATCH 1/6] Create __main__.py --- lisa/__main__.py | 7 +++++++ lisa/main.py | 10 +++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 lisa/__main__.py diff --git a/lisa/__main__.py b/lisa/__main__.py new file mode 100644 index 0000000000..94b5445e04 --- /dev/null +++ b/lisa/__main__.py @@ -0,0 +1,7 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT license. + +from lisa.main import cli + +if __name__ == "__main__": + cli() diff --git a/lisa/main.py b/lisa/main.py index c603ea0bf9..d6a1701e29 100644 --- a/lisa/main.py +++ b/lisa/main.py @@ -151,7 +151,11 @@ def main() -> int: return exit_code -if __name__ == "__main__": +def cli() -> int: + """ + CLI entry point + """ + exit_code = 0 try: exit_code = main() @@ -166,3 +170,7 @@ def main() -> int: traceback.print_exc() finally: sys.exit(exit_code) + + +if __name__ == "__main__": + cli() From 12c1258639da13b828f031b60e9a059594c674ab Mon Sep 17 00:00:00 2001 From: Avram Lubkin Date: Tue, 25 Oct 2022 13:48:29 -0400 Subject: [PATCH 2/6] Linting Fixes --- lisa/sut_orchestrator/libvirt/platform.py | 2 +- lisa/util/shell.py | 10 ++++++++-- typings/assertpy/base.pyi | 1 - typings/pluggy/__init__.pyi | 9 ++++----- typings/pluggy/manager.pyi | 7 +++---- typings/semver/__init__.pyi | 3 ++- 6 files changed, 18 insertions(+), 14 deletions(-) diff --git a/lisa/sut_orchestrator/libvirt/platform.py b/lisa/sut_orchestrator/libvirt/platform.py index abddbb7040..69503f1dac 100644 --- a/lisa/sut_orchestrator/libvirt/platform.py +++ b/lisa/sut_orchestrator/libvirt/platform.py @@ -17,7 +17,7 @@ from typing import Any, Dict, List, Optional, Tuple, Type, cast import libvirt # type: ignore -import pycdlib +import pycdlib # type: ignore import yaml from lisa import schema, search_space diff --git a/lisa/util/shell.py b/lisa/util/shell.py index 7744ac6eda..4e14fdcd62 100644 --- a/lisa/util/shell.py +++ b/lisa/util/shell.py @@ -379,7 +379,10 @@ def remove(self, path: PurePath, recursive: bool = False) -> None: self.spawn(command=["rm", path_str]) def chmod(self, path: PurePath, mode: int) -> None: - """Change the file mode bits of each given file according to mode (Posix targets only) + """ + Change the file mode bits of each given file according to mode + (Posix targets only) + Inputs: path: target path. (Absolute. Use a PurePosixPath, if the target node is a Posix one, because LISA @@ -693,7 +696,10 @@ def remove(self, path: PurePath, recursive: bool = False) -> None: path.unlink() def chmod(self, path: PurePath, mode: int) -> None: - """Change the file mode bits of each given file according to mode (Posix targets only) + """ + Change the file mode bits of each given file according to mode + (Posix targets only) + Inputs: path: target path. (Absolute) mode: numerical chmod mode entry diff --git a/typings/assertpy/base.pyi b/typings/assertpy/base.pyi index ed772a1c4f..cc28e5ea64 100644 --- a/typings/assertpy/base.pyi +++ b/typings/assertpy/base.pyi @@ -2,7 +2,6 @@ from typing import Any from .assertpy import AssertionBuilder - class BaseMixin: description: Any = ... def described_as(self, description: Any) -> AssertionBuilder: ... diff --git a/typings/pluggy/__init__.pyi b/typings/pluggy/__init__.pyi index 029263671e..8c0b1c524f 100644 --- a/typings/pluggy/__init__.pyi +++ b/typings/pluggy/__init__.pyi @@ -1,7 +1,6 @@ -from .hooks import HookimplMarker as HookimplMarker, HookspecMarker as HookspecMarker -from .manager import ( - PluginManager as PluginManager, - PluginValidationError as PluginValidationError, -) +from .hooks import HookimplMarker as HookimplMarker +from .hooks import HookspecMarker as HookspecMarker +from .manager import PluginManager as PluginManager +from .manager import PluginValidationError as PluginValidationError class HookCallError(Exception): ... diff --git a/typings/pluggy/manager.pyi b/typings/pluggy/manager.pyi index 1cc7abe703..59872f44bb 100644 --- a/typings/pluggy/manager.pyi +++ b/typings/pluggy/manager.pyi @@ -1,9 +1,8 @@ -from .hooks import ( - HookImpl as HookImpl, - normalize_hookimpl_opts as normalize_hookimpl_opts, -) from typing import Any, Optional +from .hooks import HookImpl as HookImpl +from .hooks import normalize_hookimpl_opts as normalize_hookimpl_opts + class PluginValidationError(Exception): plugin: Any = ... def __init__(self, plugin: Any, message: Any) -> None: ... diff --git a/typings/semver/__init__.pyi b/typings/semver/__init__.pyi index 341c2cfd2f..1bb86bf2f4 100644 --- a/typings/semver/__init__.pyi +++ b/typings/semver/__init__.pyi @@ -2,8 +2,9 @@ This type stub file was generated by pyright. """ -import argparse from __future__ import print_function + +import argparse from typing import ( Any, Dict, From 99c011046bc1eb903f50db6fa53323db18b53dad Mon Sep 17 00:00:00 2001 From: Avram Lubkin Date: Thu, 3 Nov 2022 13:33:40 -0400 Subject: [PATCH 3/6] Switch from poetry to setuptools / nox --- .flake8 | 6 - .gitignore | 25 +- MANIFEST.in | 9 + Makefile | 46 - lisa.cmd | 1 - lisa.sh | 3 - noxfile.py | 211 ++++ poetry.lock | 2901 ------------------------------------------------ pyproject.toml | 232 ++-- 9 files changed, 383 insertions(+), 3051 deletions(-) delete mode 100644 .flake8 create mode 100644 MANIFEST.in delete mode 100644 Makefile delete mode 100644 lisa.cmd delete mode 100755 lisa.sh create mode 100644 noxfile.py delete mode 100644 poetry.lock diff --git a/.flake8 b/.flake8 deleted file mode 100644 index 1a2da81475..0000000000 --- a/.flake8 +++ /dev/null @@ -1,6 +0,0 @@ -[flake8] -max-line-length = 88 -select = B,BLK,C90,E,F,I,W,N -max-complexity = 15 -extend-ignore = E203 -exclude = .git,.venv,.vscode,__pycache__,runtime,*.pyi diff --git a/.gitignore b/.gitignore index 2d428fbf35..3688257f13 100644 --- a/.gitignore +++ b/.gitignore @@ -1,26 +1,33 @@ # IDE Settings -/.vscode -/.dir-locals.el +.vscode +.dir-locals.el # lisa runtime folder -/runtime/* +runtime/* # python cache __pycache__ *.py[co] -# it's auto generated by poetry -lisa.egg-info +# egg info +*.egg-info # code coverage result .coverage htmlcov # html pages generated by sphinx -/docs/_build +docs/_build # auto-generated test table & specifications -/docs/run_test/test_summary.rst -/docs/run_test/test_spec.rst +docs/run_test/test_summary.rst +docs/run_test/test_spec.rst -[.][v]env/ \ No newline at end of file +[.][v]env/ + +# Virtual environments +.nox + +# Packaging directories +build +dist diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000000..5dda3f17db --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,9 @@ +# This file provides fine-grain control over what files are included in a +# Python source distribution (sdist). +# For more details see https://packaging.python.org/en/latest/guides/using-manifest-in/ + +# These get included because they are tracked by git, so explicitly exclude +prune .github +exclude .git* + +# Everything else tracked by git is include automatically by setuptools-scm diff --git a/Makefile b/Makefile deleted file mode 100644 index 8d57f3eed3..0000000000 --- a/Makefile +++ /dev/null @@ -1,46 +0,0 @@ -# This Makefile simply automates all our tasks. Its use is optional. - -all: setup run test check - -# Install Python packages -setup: - @poetry install --no-ansi --remove-untracked -E "azure libvirt doc legacy aws" - -# Run LISA -run: - @poetry run python -X dev lisa/main.py --debug - -# Run unit tests -test: - @poetry run python -X dev -m unittest discover - -# Generate coverage report (slow, reruns LISA and tests) -coverage: - @poetry run coverage erase - @poetry run coverage run lisa/main.py - @poetry run coverage run --append -m unittest discover - @poetry run coverage report --skip-empty --include=lisa*,examples*,microsoft/testsuites* --omit=lisa/tests/* --precision 2 - -# Run syntactic, semantic, formatting and type checkers -check: flake8 mypy - -# This also runs Black and isort via plugins -flake8: - @poetry run flake8 - -# This runs the static type checking -mypy: - @poetry run mypy --strict --exclude '.venv/.*' --namespace-packages --implicit-reexport --config-file pyproject.toml -p docs -p lisa -p microsoft - -# Print current Python virtualenv -venv: - @poetry env list --no-ansi --full-path - -# Auto fix style issues. -fix: fix-isort fix-black - -fix-isort: - @poetry run isort ./lisa ./microsoft - -fix-black: - @poetry run black ./lisa ./microsoft diff --git a/lisa.cmd b/lisa.cmd deleted file mode 100644 index 5391439473..0000000000 --- a/lisa.cmd +++ /dev/null @@ -1 +0,0 @@ -@poetry run python -m lisa.main %* diff --git a/lisa.sh b/lisa.sh deleted file mode 100755 index 1f831337e7..0000000000 --- a/lisa.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -poetry run python3 lisa/main.py "$@" diff --git a/noxfile.py b/noxfile.py new file mode 100644 index 0000000000..192824cfdf --- /dev/null +++ b/noxfile.py @@ -0,0 +1,211 @@ +""" +Nox configuration file +See https://nox.thea.codes/en/stable/config.html +""" + +import platform +import sys +from pathlib import Path + +import nox +import toml + +CURRENT_PYTHON = sys.executable or f"{sys.version_info.major}.{sys.version_info.minor}" +ON_WINDOWS = platform.system() == "Windows" + +CONFIG = toml.load("pyproject.toml") +DEPENDENCIES = CONFIG["project"]["dependencies"] +OPTIONAL_DEPENDENCIES = CONFIG["project"]["optional-dependencies"] +NOX_DEPENDENCIES = ("nox", "toml") + + +# Global options +nox.options.stop_on_first_error = False +nox.options.error_on_missing_interpreters = False + +# Require support for tags +nox.needs_version = ">=2022.8.7" + + +# --- Testing --- + + +@nox.session(python=CURRENT_PYTHON, tags=["test", "all"]) +def test(session: nox.Session) -> None: + """Run tests""" + session.install( + *DEPENDENCIES, *OPTIONAL_DEPENDENCIES["azure"], *OPTIONAL_DEPENDENCIES["test"] + ) + session.run("python", "-m", "unittest", "discover") + + +@nox.session(python=CURRENT_PYTHON, tags=["test", "all"]) +def example(session: nox.Session) -> None: + """Run example""" + session.install(".") + session.run("lisa", "--debug") + + +@nox.session(python=CURRENT_PYTHON, tags=["all"]) +def coverage(session: nox.Session) -> None: + """Check test coverage""" + session.install( + *DEPENDENCIES, + *OPTIONAL_DEPENDENCIES["azure"], + *OPTIONAL_DEPENDENCIES["test"], + "coverage", + ) + + session.run("coverage", "erase") + session.run("coverage", "run", "-m", "lisa") + session.run("coverage", "run", "--append", "-m", "unittest", "discover") + session.run("coverage", "report") + + +# --- Formatting --- + + +@nox.session(python=CURRENT_PYTHON, tags=["format", "all"]) +def black(session: nox.Session) -> None: + """Run black""" + session.install("black") + session.run("black", ".") + + +@nox.session(python=CURRENT_PYTHON, tags=["format", "all"]) +def isort(session: nox.Session) -> None: + """Run isort""" + session.install("isort") + session.run("isort", ".") + + +# --- Linting --- + + +@nox.session(python=CURRENT_PYTHON, tags=["lint", "all"]) +def flake8(session: nox.Session) -> None: + """Run flake8""" + session.install( + *OPTIONAL_DEPENDENCIES["flake8"], + ) + session.run("flake8") + + +@nox.session(python=CURRENT_PYTHON, tags=["typing", "all"]) +def mypy(session: nox.Session) -> None: + """Run mypy""" + session.install( + *DEPENDENCIES, + *OPTIONAL_DEPENDENCIES["azure"], + *OPTIONAL_DEPENDENCIES["typing"], + *NOX_DEPENDENCIES, + "mypy == 0.942", + ) + + session.run("mypy", "-p", "lisa") + session.run("mypy", "docs", "microsoft") + session.run("mypy", "noxfile.py") + + +# --- Utility --- + + +@nox.session(python=CURRENT_PYTHON, tags=["all"]) +def docs(session: nox.Session) -> None: + """Build docs""" + session.install( + *DEPENDENCIES, + *OPTIONAL_DEPENDENCIES["docs"], + *OPTIONAL_DEPENDENCIES["azure"], + *OPTIONAL_DEPENDENCIES["aws"], + ) + + session.run("sphinx-build", "-Eab", "html", "docs", "docs/_build/html") + + +@nox.session(python=CURRENT_PYTHON) +def dev(session: nox.Session) -> None: + """ + Create virtual environment for development + Positional arguments determine which extras to install, default azure,libvirt + Example: + nox -vs dev -- libvirt + """ + + # Determine which extra dependencies to install + if session.posargs: + for arg in session.posargs: + if arg not in OPTIONAL_DEPENDENCIES: + session.error(f"'{arg}' is not a valid extra dependency group") + + extras = ",".join(session.posargs) + elif ON_WINDOWS: + extras = "azure" + else: + extras = "azure,libvirt" + + # Determine paths + venv_path = ".venv" + + if ON_WINDOWS: + venv_python = str(Path(venv_path).resolve() / "Scripts" / "python.exe") + else: + venv_python = str(Path(venv_path).resolve() / "bin" / "python") + + # Install virtualenv, it's used to create the final virtual environment + session.install("virtualenv") + + # Create virtual environment + session.run( + "virtualenv", "--python", str(session.python), "--prompt", "lisa", venv_path + ) + + # Make sure pip and setuptools are up-to-date + session.run( + venv_python, + "-m", + "pip", + "install", + "--upgrade", + "pip", + "setuptools", + external=True, + ) + + # Editable install of lisa and dependencies + session.run( + venv_python, + "-m", + "pip", + "install", + "--editable", + f".[{extras}]", + external=True, + ) + + # Install dev tools + session.run( + venv_python, + "-m", + "pip", + "install", + "mypy", + "black", + "isort", + *OPTIONAL_DEPENDENCIES["flake8"], + *OPTIONAL_DEPENDENCIES["typing"], + *NOX_DEPENDENCIES, + external=True, + ) + + # Instruct user how to activate environment + print("\nVirtual environment installed\nTo activate:\n") + if ON_WINDOWS: + print( + f" {venv_path}\\Scripts\\activate.bat\n" + " OR\n" + f" {venv_path}\\Scripts\\activate.ps1\n" + ) + + else: + print(f" source {venv_path}/bin/activate\n") diff --git a/poetry.lock b/poetry.lock deleted file mode 100644 index 85d0638d61..0000000000 --- a/poetry.lock +++ /dev/null @@ -1,2901 +0,0 @@ -[[package]] -name = "alabaster" -version = "0.7.12" -description = "A configurable sidebar-enabled Sphinx theme" -category = "main" -optional = true -python-versions = "*" - -[[package]] -name = "assertpy" -version = "1.1" -description = "Simple assertion library for unit testing in python with a fluent API" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "asttokens" -version = "2.0.5" -description = "Annotate AST trees with source code positions" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -six = "*" - -[package.extras] -test = ["astroid", "pytest"] - -[[package]] -name = "atomicwrites" -version = "1.4.1" -description = "Atomic file writes." -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[[package]] -name = "attrs" -version = "22.1.0" -description = "Classes Without Boilerplate" -category = "main" -optional = false -python-versions = ">=3.5" - -[package.extras] -dev = ["cloudpickle", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "mypy (>=0.900,!=0.940)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "sphinx", "sphinx-notfound-page", "zope.interface"] -docs = ["furo", "sphinx", "sphinx-notfound-page", "zope.interface"] -tests = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "zope.interface"] -tests_no_zope = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins"] - -[[package]] -name = "azure-common" -version = "1.1.28" -description = "Microsoft Azure Client Library for Python (Common)" -category = "main" -optional = true -python-versions = "*" - -[[package]] -name = "azure-core" -version = "1.25.0" -description = "Microsoft Azure Core Library for Python" -category = "main" -optional = true -python-versions = ">=3.7" - -[package.dependencies] -requests = ">=2.18.4" -six = ">=1.11.0" -typing-extensions = ">=4.0.1" - -[[package]] -name = "azure-identity" -version = "1.10.0" -description = "Microsoft Azure Identity Library for Python" -category = "main" -optional = true -python-versions = ">=3.6" - -[package.dependencies] -azure-core = ">=1.11.0,<2.0.0" -cryptography = ">=2.5" -msal = ">=1.12.0,<2.0.0" -msal-extensions = ">=0.3.0,<2.0.0" -six = ">=1.12.0" - -[[package]] -name = "azure-mgmt-compute" -version = "26.1.0" -description = "Microsoft Azure Compute Management Client Library for Python" -category = "main" -optional = true -python-versions = ">=3.6" - -[package.dependencies] -azure-common = ">=1.1,<2.0" -azure-mgmt-core = ">=1.3.0,<2.0.0" -msrest = ">=0.6.21" - -[[package]] -name = "azure-mgmt-core" -version = "1.3.1" -description = "Microsoft Azure Management Core Library for Python" -category = "main" -optional = true -python-versions = ">=3.6" - -[package.dependencies] -azure-core = ">=1.23.0,<2.0.0" - -[[package]] -name = "azure-mgmt-marketplaceordering" -version = "1.1.0" -description = "Microsoft Azure Market Place Ordering Client Library for Python" -category = "main" -optional = true -python-versions = "*" - -[package.dependencies] -azure-common = ">=1.1,<2.0" -azure-mgmt-core = ">=1.2.0,<2.0.0" -msrest = ">=0.5.0" - -[[package]] -name = "azure-mgmt-network" -version = "19.3.0" -description = "Microsoft Azure Network Management Client Library for Python" -category = "main" -optional = true -python-versions = "*" - -[package.dependencies] -azure-common = ">=1.1,<2.0" -azure-mgmt-core = ">=1.2.0,<2.0.0" -msrest = ">=0.6.21" - -[[package]] -name = "azure-mgmt-privatedns" -version = "1.0.0" -description = "Microsoft Azure DNS Private Zones Client Library for Python" -category = "main" -optional = true -python-versions = "*" - -[package.dependencies] -azure-common = ">=1.1,<2.0" -azure-mgmt-core = ">=1.2.0,<2.0.0" -msrest = ">=0.5.0" - -[[package]] -name = "azure-mgmt-resource" -version = "21.1.0" -description = "Microsoft Azure Resource Management Client Library for Python" -category = "main" -optional = true -python-versions = ">=3.6" - -[package.dependencies] -azure-common = ">=1.1,<2.0" -azure-mgmt-core = ">=1.3.0,<2.0.0" -msrest = ">=0.6.21" - -[[package]] -name = "azure-mgmt-serialconsole" -version = "1.0.0" -description = "Microsoft Azure SerialConsole Client Library for Python" -category = "main" -optional = true -python-versions = "*" - -[package.dependencies] -azure-common = ">=1.1,<2.0" -azure-mgmt-core = ">=1.2.0,<2.0.0" -msrest = ">=0.6.21" - -[[package]] -name = "azure-mgmt-storage" -version = "20.0.0" -description = "Microsoft Azure Storage Management Client Library for Python" -category = "main" -optional = true -python-versions = ">=3.6" - -[package.dependencies] -azure-common = ">=1.1,<2.0" -azure-mgmt-core = ">=1.3.0,<2.0.0" -msrest = ">=0.6.21" - -[[package]] -name = "azure-storage-blob" -version = "12.13.0" -description = "Microsoft Azure Blob Storage Client Library for Python" -category = "main" -optional = true -python-versions = ">=3.6" - -[package.dependencies] -azure-core = ">=1.23.1,<2.0.0" -cryptography = ">=2.1.4" -msrest = ">=0.6.21" - -[[package]] -name = "azure-storage-file-share" -version = "12.4.0" -description = "Microsoft Azure Azure File Share Storage Client Library for Python" -category = "main" -optional = true -python-versions = "*" - -[package.dependencies] -azure-core = ">=1.10.0,<2.0.0" -cryptography = ">=2.1.4" -msrest = ">=0.6.10" - -[[package]] -name = "babel" -version = "2.10.3" -description = "Internationalization utilities" -category = "main" -optional = true -python-versions = ">=3.6" - -[package.dependencies] -pytz = ">=2015.7" - -[[package]] -name = "bcrypt" -version = "3.2.2" -description = "Modern password hashing for your software and your servers" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -cffi = ">=1.1" - -[package.extras] -tests = ["pytest (>=3.2.1,!=3.3.0)"] -typecheck = ["mypy"] - -[[package]] -name = "black" -version = "22.6.0" -description = "The uncompromising code formatter." -category = "dev" -optional = false -python-versions = ">=3.6.2" - -[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\""} -typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} - -[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.24.43" -description = "The AWS SDK for Python" -category = "main" -optional = true -python-versions = ">= 3.7" - -[package.dependencies] -botocore = ">=1.27.43,<1.28.0" -jmespath = ">=0.7.1,<2.0.0" -s3transfer = ">=0.6.0,<0.7.0" - -[package.extras] -crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] - -[[package]] -name = "boto3-stubs" -version = "1.24.55" -description = "Type annotations for boto3 1.24.55 generated with mypy-boto3-builder 7.11.6" -category = "main" -optional = true -python-versions = ">=3.7" - -[package.dependencies] -botocore-stubs = "*" -mypy-boto3-cloudformation = {version = ">=1.24.0,<1.25.0", optional = true, markers = "extra == \"essential\""} -mypy-boto3-dynamodb = {version = ">=1.24.0,<1.25.0", optional = true, markers = "extra == \"essential\""} -mypy-boto3-ec2 = {version = ">=1.24.0,<1.25.0", optional = true, markers = "extra == \"essential\""} -mypy-boto3-lambda = {version = ">=1.24.0,<1.25.0", optional = true, markers = "extra == \"essential\""} -mypy-boto3-rds = {version = ">=1.24.0,<1.25.0", optional = true, markers = "extra == \"essential\""} -mypy-boto3-s3 = {version = ">=1.24.0,<1.25.0", optional = true, markers = "extra == \"essential\""} -mypy-boto3-sqs = {version = ">=1.24.0,<1.25.0", optional = true, markers = "extra == \"essential\""} -types-s3transfer = "*" -typing-extensions = ">=4.1.0" - -[package.extras] -accessanalyzer = ["mypy-boto3-accessanalyzer (>=1.24.0,<1.25.0)"] -account = ["mypy-boto3-account (>=1.24.0,<1.25.0)"] -acm = ["mypy-boto3-acm (>=1.24.0,<1.25.0)"] -acm-pca = ["mypy-boto3-acm-pca (>=1.24.0,<1.25.0)"] -alexaforbusiness = ["mypy-boto3-alexaforbusiness (>=1.24.0,<1.25.0)"] -all = ["mypy-boto3-accessanalyzer (>=1.24.0,<1.25.0)", "mypy-boto3-account (>=1.24.0,<1.25.0)", "mypy-boto3-acm (>=1.24.0,<1.25.0)", "mypy-boto3-acm-pca (>=1.24.0,<1.25.0)", "mypy-boto3-alexaforbusiness (>=1.24.0,<1.25.0)", "mypy-boto3-amp (>=1.24.0,<1.25.0)", "mypy-boto3-amplify (>=1.24.0,<1.25.0)", "mypy-boto3-amplifybackend (>=1.24.0,<1.25.0)", "mypy-boto3-amplifyuibuilder (>=1.24.0,<1.25.0)", "mypy-boto3-apigateway (>=1.24.0,<1.25.0)", "mypy-boto3-apigatewaymanagementapi (>=1.24.0,<1.25.0)", "mypy-boto3-apigatewayv2 (>=1.24.0,<1.25.0)", "mypy-boto3-appconfig (>=1.24.0,<1.25.0)", "mypy-boto3-appconfigdata (>=1.24.0,<1.25.0)", "mypy-boto3-appflow (>=1.24.0,<1.25.0)", "mypy-boto3-appintegrations (>=1.24.0,<1.25.0)", "mypy-boto3-application-autoscaling (>=1.24.0,<1.25.0)", "mypy-boto3-application-insights (>=1.24.0,<1.25.0)", "mypy-boto3-applicationcostprofiler (>=1.24.0,<1.25.0)", "mypy-boto3-appmesh (>=1.24.0,<1.25.0)", "mypy-boto3-apprunner (>=1.24.0,<1.25.0)", "mypy-boto3-appstream (>=1.24.0,<1.25.0)", "mypy-boto3-appsync (>=1.24.0,<1.25.0)", "mypy-boto3-athena (>=1.24.0,<1.25.0)", "mypy-boto3-auditmanager (>=1.24.0,<1.25.0)", "mypy-boto3-autoscaling (>=1.24.0,<1.25.0)", "mypy-boto3-autoscaling-plans (>=1.24.0,<1.25.0)", "mypy-boto3-backup (>=1.24.0,<1.25.0)", "mypy-boto3-backup-gateway (>=1.24.0,<1.25.0)", "mypy-boto3-backupstorage (>=1.24.0,<1.25.0)", "mypy-boto3-batch (>=1.24.0,<1.25.0)", "mypy-boto3-billingconductor (>=1.24.0,<1.25.0)", "mypy-boto3-braket (>=1.24.0,<1.25.0)", "mypy-boto3-budgets (>=1.24.0,<1.25.0)", "mypy-boto3-ce (>=1.24.0,<1.25.0)", "mypy-boto3-chime (>=1.24.0,<1.25.0)", "mypy-boto3-chime-sdk-identity (>=1.24.0,<1.25.0)", "mypy-boto3-chime-sdk-media-pipelines (>=1.24.0,<1.25.0)", "mypy-boto3-chime-sdk-meetings (>=1.24.0,<1.25.0)", "mypy-boto3-chime-sdk-messaging (>=1.24.0,<1.25.0)", "mypy-boto3-cloud9 (>=1.24.0,<1.25.0)", "mypy-boto3-cloudcontrol (>=1.24.0,<1.25.0)", "mypy-boto3-clouddirectory (>=1.24.0,<1.25.0)", "mypy-boto3-cloudformation (>=1.24.0,<1.25.0)", "mypy-boto3-cloudfront (>=1.24.0,<1.25.0)", "mypy-boto3-cloudhsm (>=1.24.0,<1.25.0)", "mypy-boto3-cloudhsmv2 (>=1.24.0,<1.25.0)", "mypy-boto3-cloudsearch (>=1.24.0,<1.25.0)", "mypy-boto3-cloudsearchdomain (>=1.24.0,<1.25.0)", "mypy-boto3-cloudtrail (>=1.24.0,<1.25.0)", "mypy-boto3-cloudwatch (>=1.24.0,<1.25.0)", "mypy-boto3-codeartifact (>=1.24.0,<1.25.0)", "mypy-boto3-codebuild (>=1.24.0,<1.25.0)", "mypy-boto3-codecommit (>=1.24.0,<1.25.0)", "mypy-boto3-codedeploy (>=1.24.0,<1.25.0)", "mypy-boto3-codeguru-reviewer (>=1.24.0,<1.25.0)", "mypy-boto3-codeguruprofiler (>=1.24.0,<1.25.0)", "mypy-boto3-codepipeline (>=1.24.0,<1.25.0)", "mypy-boto3-codestar (>=1.24.0,<1.25.0)", "mypy-boto3-codestar-connections (>=1.24.0,<1.25.0)", "mypy-boto3-codestar-notifications (>=1.24.0,<1.25.0)", "mypy-boto3-cognito-identity (>=1.24.0,<1.25.0)", "mypy-boto3-cognito-idp (>=1.24.0,<1.25.0)", "mypy-boto3-cognito-sync (>=1.24.0,<1.25.0)", "mypy-boto3-comprehend (>=1.24.0,<1.25.0)", "mypy-boto3-comprehendmedical (>=1.24.0,<1.25.0)", "mypy-boto3-compute-optimizer (>=1.24.0,<1.25.0)", "mypy-boto3-config (>=1.24.0,<1.25.0)", "mypy-boto3-connect (>=1.24.0,<1.25.0)", "mypy-boto3-connect-contact-lens (>=1.24.0,<1.25.0)", "mypy-boto3-connectcampaigns (>=1.24.0,<1.25.0)", "mypy-boto3-connectparticipant (>=1.24.0,<1.25.0)", "mypy-boto3-cur (>=1.24.0,<1.25.0)", "mypy-boto3-customer-profiles (>=1.24.0,<1.25.0)", "mypy-boto3-databrew (>=1.24.0,<1.25.0)", "mypy-boto3-dataexchange (>=1.24.0,<1.25.0)", "mypy-boto3-datapipeline (>=1.24.0,<1.25.0)", "mypy-boto3-datasync (>=1.24.0,<1.25.0)", "mypy-boto3-dax (>=1.24.0,<1.25.0)", "mypy-boto3-detective (>=1.24.0,<1.25.0)", "mypy-boto3-devicefarm (>=1.24.0,<1.25.0)", "mypy-boto3-devops-guru (>=1.24.0,<1.25.0)", "mypy-boto3-directconnect (>=1.24.0,<1.25.0)", "mypy-boto3-discovery (>=1.24.0,<1.25.0)", "mypy-boto3-dlm (>=1.24.0,<1.25.0)", "mypy-boto3-dms (>=1.24.0,<1.25.0)", "mypy-boto3-docdb (>=1.24.0,<1.25.0)", "mypy-boto3-drs (>=1.24.0,<1.25.0)", "mypy-boto3-ds (>=1.24.0,<1.25.0)", "mypy-boto3-dynamodb (>=1.24.0,<1.25.0)", "mypy-boto3-dynamodbstreams (>=1.24.0,<1.25.0)", "mypy-boto3-ebs (>=1.24.0,<1.25.0)", "mypy-boto3-ec2 (>=1.24.0,<1.25.0)", "mypy-boto3-ec2-instance-connect (>=1.24.0,<1.25.0)", "mypy-boto3-ecr (>=1.24.0,<1.25.0)", "mypy-boto3-ecr-public (>=1.24.0,<1.25.0)", "mypy-boto3-ecs (>=1.24.0,<1.25.0)", "mypy-boto3-efs (>=1.24.0,<1.25.0)", "mypy-boto3-eks (>=1.24.0,<1.25.0)", "mypy-boto3-elastic-inference (>=1.24.0,<1.25.0)", "mypy-boto3-elasticache (>=1.24.0,<1.25.0)", "mypy-boto3-elasticbeanstalk (>=1.24.0,<1.25.0)", "mypy-boto3-elastictranscoder (>=1.24.0,<1.25.0)", "mypy-boto3-elb (>=1.24.0,<1.25.0)", "mypy-boto3-elbv2 (>=1.24.0,<1.25.0)", "mypy-boto3-emr (>=1.24.0,<1.25.0)", "mypy-boto3-emr-containers (>=1.24.0,<1.25.0)", "mypy-boto3-emr-serverless (>=1.24.0,<1.25.0)", "mypy-boto3-es (>=1.24.0,<1.25.0)", "mypy-boto3-events (>=1.24.0,<1.25.0)", "mypy-boto3-evidently (>=1.24.0,<1.25.0)", "mypy-boto3-finspace (>=1.24.0,<1.25.0)", "mypy-boto3-finspace-data (>=1.24.0,<1.25.0)", "mypy-boto3-firehose (>=1.24.0,<1.25.0)", "mypy-boto3-fis (>=1.24.0,<1.25.0)", "mypy-boto3-fms (>=1.24.0,<1.25.0)", "mypy-boto3-forecast (>=1.24.0,<1.25.0)", "mypy-boto3-forecastquery (>=1.24.0,<1.25.0)", "mypy-boto3-frauddetector (>=1.24.0,<1.25.0)", "mypy-boto3-fsx (>=1.24.0,<1.25.0)", "mypy-boto3-gamelift (>=1.24.0,<1.25.0)", "mypy-boto3-gamesparks (>=1.24.0,<1.25.0)", "mypy-boto3-glacier (>=1.24.0,<1.25.0)", "mypy-boto3-globalaccelerator (>=1.24.0,<1.25.0)", "mypy-boto3-glue (>=1.24.0,<1.25.0)", "mypy-boto3-grafana (>=1.24.0,<1.25.0)", "mypy-boto3-greengrass (>=1.24.0,<1.25.0)", "mypy-boto3-greengrassv2 (>=1.24.0,<1.25.0)", "mypy-boto3-groundstation (>=1.24.0,<1.25.0)", "mypy-boto3-guardduty (>=1.24.0,<1.25.0)", "mypy-boto3-health (>=1.24.0,<1.25.0)", "mypy-boto3-healthlake (>=1.24.0,<1.25.0)", "mypy-boto3-honeycode (>=1.24.0,<1.25.0)", "mypy-boto3-iam (>=1.24.0,<1.25.0)", "mypy-boto3-identitystore (>=1.24.0,<1.25.0)", "mypy-boto3-imagebuilder (>=1.24.0,<1.25.0)", "mypy-boto3-importexport (>=1.24.0,<1.25.0)", "mypy-boto3-inspector (>=1.24.0,<1.25.0)", "mypy-boto3-inspector2 (>=1.24.0,<1.25.0)", "mypy-boto3-iot (>=1.24.0,<1.25.0)", "mypy-boto3-iot-data (>=1.24.0,<1.25.0)", "mypy-boto3-iot-jobs-data (>=1.24.0,<1.25.0)", "mypy-boto3-iot1click-devices (>=1.24.0,<1.25.0)", "mypy-boto3-iot1click-projects (>=1.24.0,<1.25.0)", "mypy-boto3-iotanalytics (>=1.24.0,<1.25.0)", "mypy-boto3-iotdeviceadvisor (>=1.24.0,<1.25.0)", "mypy-boto3-iotevents (>=1.24.0,<1.25.0)", "mypy-boto3-iotevents-data (>=1.24.0,<1.25.0)", "mypy-boto3-iotfleethub (>=1.24.0,<1.25.0)", "mypy-boto3-iotsecuretunneling (>=1.24.0,<1.25.0)", "mypy-boto3-iotsitewise (>=1.24.0,<1.25.0)", "mypy-boto3-iotthingsgraph (>=1.24.0,<1.25.0)", "mypy-boto3-iottwinmaker (>=1.24.0,<1.25.0)", "mypy-boto3-iotwireless (>=1.24.0,<1.25.0)", "mypy-boto3-ivs (>=1.24.0,<1.25.0)", "mypy-boto3-ivschat (>=1.24.0,<1.25.0)", "mypy-boto3-kafka (>=1.24.0,<1.25.0)", "mypy-boto3-kafkaconnect (>=1.24.0,<1.25.0)", "mypy-boto3-kendra (>=1.24.0,<1.25.0)", "mypy-boto3-keyspaces (>=1.24.0,<1.25.0)", "mypy-boto3-kinesis (>=1.24.0,<1.25.0)", "mypy-boto3-kinesis-video-archived-media (>=1.24.0,<1.25.0)", "mypy-boto3-kinesis-video-media (>=1.24.0,<1.25.0)", "mypy-boto3-kinesis-video-signaling (>=1.24.0,<1.25.0)", "mypy-boto3-kinesisanalytics (>=1.24.0,<1.25.0)", "mypy-boto3-kinesisanalyticsv2 (>=1.24.0,<1.25.0)", "mypy-boto3-kinesisvideo (>=1.24.0,<1.25.0)", "mypy-boto3-kms (>=1.24.0,<1.25.0)", "mypy-boto3-lakeformation (>=1.24.0,<1.25.0)", "mypy-boto3-lambda (>=1.24.0,<1.25.0)", "mypy-boto3-lex-models (>=1.24.0,<1.25.0)", "mypy-boto3-lex-runtime (>=1.24.0,<1.25.0)", "mypy-boto3-lexv2-models (>=1.24.0,<1.25.0)", "mypy-boto3-lexv2-runtime (>=1.24.0,<1.25.0)", "mypy-boto3-license-manager (>=1.24.0,<1.25.0)", "mypy-boto3-license-manager-user-subscriptions (>=1.24.0,<1.25.0)", "mypy-boto3-lightsail (>=1.24.0,<1.25.0)", "mypy-boto3-location (>=1.24.0,<1.25.0)", "mypy-boto3-logs (>=1.24.0,<1.25.0)", "mypy-boto3-lookoutequipment (>=1.24.0,<1.25.0)", "mypy-boto3-lookoutmetrics (>=1.24.0,<1.25.0)", "mypy-boto3-lookoutvision (>=1.24.0,<1.25.0)", "mypy-boto3-m2 (>=1.24.0,<1.25.0)", "mypy-boto3-machinelearning (>=1.24.0,<1.25.0)", "mypy-boto3-macie (>=1.24.0,<1.25.0)", "mypy-boto3-macie2 (>=1.24.0,<1.25.0)", "mypy-boto3-managedblockchain (>=1.24.0,<1.25.0)", "mypy-boto3-marketplace-catalog (>=1.24.0,<1.25.0)", "mypy-boto3-marketplace-entitlement (>=1.24.0,<1.25.0)", "mypy-boto3-marketplacecommerceanalytics (>=1.24.0,<1.25.0)", "mypy-boto3-mediaconnect (>=1.24.0,<1.25.0)", "mypy-boto3-mediaconvert (>=1.24.0,<1.25.0)", "mypy-boto3-medialive (>=1.24.0,<1.25.0)", "mypy-boto3-mediapackage (>=1.24.0,<1.25.0)", "mypy-boto3-mediapackage-vod (>=1.24.0,<1.25.0)", "mypy-boto3-mediastore (>=1.24.0,<1.25.0)", "mypy-boto3-mediastore-data (>=1.24.0,<1.25.0)", "mypy-boto3-mediatailor (>=1.24.0,<1.25.0)", "mypy-boto3-memorydb (>=1.24.0,<1.25.0)", "mypy-boto3-meteringmarketplace (>=1.24.0,<1.25.0)", "mypy-boto3-mgh (>=1.24.0,<1.25.0)", "mypy-boto3-mgn (>=1.24.0,<1.25.0)", "mypy-boto3-migration-hub-refactor-spaces (>=1.24.0,<1.25.0)", "mypy-boto3-migrationhub-config (>=1.24.0,<1.25.0)", "mypy-boto3-migrationhubstrategy (>=1.24.0,<1.25.0)", "mypy-boto3-mobile (>=1.24.0,<1.25.0)", "mypy-boto3-mq (>=1.24.0,<1.25.0)", "mypy-boto3-mturk (>=1.24.0,<1.25.0)", "mypy-boto3-mwaa (>=1.24.0,<1.25.0)", "mypy-boto3-neptune (>=1.24.0,<1.25.0)", "mypy-boto3-network-firewall (>=1.24.0,<1.25.0)", "mypy-boto3-networkmanager (>=1.24.0,<1.25.0)", "mypy-boto3-nimble (>=1.24.0,<1.25.0)", "mypy-boto3-opensearch (>=1.24.0,<1.25.0)", "mypy-boto3-opsworks (>=1.24.0,<1.25.0)", "mypy-boto3-opsworkscm (>=1.24.0,<1.25.0)", "mypy-boto3-organizations (>=1.24.0,<1.25.0)", "mypy-boto3-outposts (>=1.24.0,<1.25.0)", "mypy-boto3-panorama (>=1.24.0,<1.25.0)", "mypy-boto3-personalize (>=1.24.0,<1.25.0)", "mypy-boto3-personalize-events (>=1.24.0,<1.25.0)", "mypy-boto3-personalize-runtime (>=1.24.0,<1.25.0)", "mypy-boto3-pi (>=1.24.0,<1.25.0)", "mypy-boto3-pinpoint (>=1.24.0,<1.25.0)", "mypy-boto3-pinpoint-email (>=1.24.0,<1.25.0)", "mypy-boto3-pinpoint-sms-voice (>=1.24.0,<1.25.0)", "mypy-boto3-pinpoint-sms-voice-v2 (>=1.24.0,<1.25.0)", "mypy-boto3-polly (>=1.24.0,<1.25.0)", "mypy-boto3-pricing (>=1.24.0,<1.25.0)", "mypy-boto3-privatenetworks (>=1.24.0,<1.25.0)", "mypy-boto3-proton (>=1.24.0,<1.25.0)", "mypy-boto3-qldb (>=1.24.0,<1.25.0)", "mypy-boto3-qldb-session (>=1.24.0,<1.25.0)", "mypy-boto3-quicksight (>=1.24.0,<1.25.0)", "mypy-boto3-ram (>=1.24.0,<1.25.0)", "mypy-boto3-rbin (>=1.24.0,<1.25.0)", "mypy-boto3-rds (>=1.24.0,<1.25.0)", "mypy-boto3-rds-data (>=1.24.0,<1.25.0)", "mypy-boto3-redshift (>=1.24.0,<1.25.0)", "mypy-boto3-redshift-data (>=1.24.0,<1.25.0)", "mypy-boto3-redshift-serverless (>=1.24.0,<1.25.0)", "mypy-boto3-rekognition (>=1.24.0,<1.25.0)", "mypy-boto3-resiliencehub (>=1.24.0,<1.25.0)", "mypy-boto3-resource-groups (>=1.24.0,<1.25.0)", "mypy-boto3-resourcegroupstaggingapi (>=1.24.0,<1.25.0)", "mypy-boto3-robomaker (>=1.24.0,<1.25.0)", "mypy-boto3-rolesanywhere (>=1.24.0,<1.25.0)", "mypy-boto3-route53 (>=1.24.0,<1.25.0)", "mypy-boto3-route53-recovery-cluster (>=1.24.0,<1.25.0)", "mypy-boto3-route53-recovery-control-config (>=1.24.0,<1.25.0)", "mypy-boto3-route53-recovery-readiness (>=1.24.0,<1.25.0)", "mypy-boto3-route53domains (>=1.24.0,<1.25.0)", "mypy-boto3-route53resolver (>=1.24.0,<1.25.0)", "mypy-boto3-rum (>=1.24.0,<1.25.0)", "mypy-boto3-s3 (>=1.24.0,<1.25.0)", "mypy-boto3-s3control (>=1.24.0,<1.25.0)", "mypy-boto3-s3outposts (>=1.24.0,<1.25.0)", "mypy-boto3-sagemaker (>=1.24.0,<1.25.0)", "mypy-boto3-sagemaker-a2i-runtime (>=1.24.0,<1.25.0)", "mypy-boto3-sagemaker-edge (>=1.24.0,<1.25.0)", "mypy-boto3-sagemaker-featurestore-runtime (>=1.24.0,<1.25.0)", "mypy-boto3-sagemaker-runtime (>=1.24.0,<1.25.0)", "mypy-boto3-savingsplans (>=1.24.0,<1.25.0)", "mypy-boto3-schemas (>=1.24.0,<1.25.0)", "mypy-boto3-sdb (>=1.24.0,<1.25.0)", "mypy-boto3-secretsmanager (>=1.24.0,<1.25.0)", "mypy-boto3-securityhub (>=1.24.0,<1.25.0)", "mypy-boto3-serverlessrepo (>=1.24.0,<1.25.0)", "mypy-boto3-service-quotas (>=1.24.0,<1.25.0)", "mypy-boto3-servicecatalog (>=1.24.0,<1.25.0)", "mypy-boto3-servicecatalog-appregistry (>=1.24.0,<1.25.0)", "mypy-boto3-servicediscovery (>=1.24.0,<1.25.0)", "mypy-boto3-ses (>=1.24.0,<1.25.0)", "mypy-boto3-sesv2 (>=1.24.0,<1.25.0)", "mypy-boto3-shield (>=1.24.0,<1.25.0)", "mypy-boto3-signer (>=1.24.0,<1.25.0)", "mypy-boto3-sms (>=1.24.0,<1.25.0)", "mypy-boto3-sms-voice (>=1.24.0,<1.25.0)", "mypy-boto3-snow-device-management (>=1.24.0,<1.25.0)", "mypy-boto3-snowball (>=1.24.0,<1.25.0)", "mypy-boto3-sns (>=1.24.0,<1.25.0)", "mypy-boto3-sqs (>=1.24.0,<1.25.0)", "mypy-boto3-ssm (>=1.24.0,<1.25.0)", "mypy-boto3-ssm-contacts (>=1.24.0,<1.25.0)", "mypy-boto3-ssm-incidents (>=1.24.0,<1.25.0)", "mypy-boto3-sso (>=1.24.0,<1.25.0)", "mypy-boto3-sso-admin (>=1.24.0,<1.25.0)", "mypy-boto3-sso-oidc (>=1.24.0,<1.25.0)", "mypy-boto3-stepfunctions (>=1.24.0,<1.25.0)", "mypy-boto3-storagegateway (>=1.24.0,<1.25.0)", "mypy-boto3-sts (>=1.24.0,<1.25.0)", "mypy-boto3-support (>=1.24.0,<1.25.0)", "mypy-boto3-swf (>=1.24.0,<1.25.0)", "mypy-boto3-synthetics (>=1.24.0,<1.25.0)", "mypy-boto3-textract (>=1.24.0,<1.25.0)", "mypy-boto3-timestream-query (>=1.24.0,<1.25.0)", "mypy-boto3-timestream-write (>=1.24.0,<1.25.0)", "mypy-boto3-transcribe (>=1.24.0,<1.25.0)", "mypy-boto3-transfer (>=1.24.0,<1.25.0)", "mypy-boto3-translate (>=1.24.0,<1.25.0)", "mypy-boto3-voice-id (>=1.24.0,<1.25.0)", "mypy-boto3-waf (>=1.24.0,<1.25.0)", "mypy-boto3-waf-regional (>=1.24.0,<1.25.0)", "mypy-boto3-wafv2 (>=1.24.0,<1.25.0)", "mypy-boto3-wellarchitected (>=1.24.0,<1.25.0)", "mypy-boto3-wisdom (>=1.24.0,<1.25.0)", "mypy-boto3-workdocs (>=1.24.0,<1.25.0)", "mypy-boto3-worklink (>=1.24.0,<1.25.0)", "mypy-boto3-workmail (>=1.24.0,<1.25.0)", "mypy-boto3-workmailmessageflow (>=1.24.0,<1.25.0)", "mypy-boto3-workspaces (>=1.24.0,<1.25.0)", "mypy-boto3-workspaces-web (>=1.24.0,<1.25.0)", "mypy-boto3-xray (>=1.24.0,<1.25.0)"] -amp = ["mypy-boto3-amp (>=1.24.0,<1.25.0)"] -amplify = ["mypy-boto3-amplify (>=1.24.0,<1.25.0)"] -amplifybackend = ["mypy-boto3-amplifybackend (>=1.24.0,<1.25.0)"] -amplifyuibuilder = ["mypy-boto3-amplifyuibuilder (>=1.24.0,<1.25.0)"] -apigateway = ["mypy-boto3-apigateway (>=1.24.0,<1.25.0)"] -apigatewaymanagementapi = ["mypy-boto3-apigatewaymanagementapi (>=1.24.0,<1.25.0)"] -apigatewayv2 = ["mypy-boto3-apigatewayv2 (>=1.24.0,<1.25.0)"] -appconfig = ["mypy-boto3-appconfig (>=1.24.0,<1.25.0)"] -appconfigdata = ["mypy-boto3-appconfigdata (>=1.24.0,<1.25.0)"] -appflow = ["mypy-boto3-appflow (>=1.24.0,<1.25.0)"] -appintegrations = ["mypy-boto3-appintegrations (>=1.24.0,<1.25.0)"] -application-autoscaling = ["mypy-boto3-application-autoscaling (>=1.24.0,<1.25.0)"] -application-insights = ["mypy-boto3-application-insights (>=1.24.0,<1.25.0)"] -applicationcostprofiler = ["mypy-boto3-applicationcostprofiler (>=1.24.0,<1.25.0)"] -appmesh = ["mypy-boto3-appmesh (>=1.24.0,<1.25.0)"] -apprunner = ["mypy-boto3-apprunner (>=1.24.0,<1.25.0)"] -appstream = ["mypy-boto3-appstream (>=1.24.0,<1.25.0)"] -appsync = ["mypy-boto3-appsync (>=1.24.0,<1.25.0)"] -athena = ["mypy-boto3-athena (>=1.24.0,<1.25.0)"] -auditmanager = ["mypy-boto3-auditmanager (>=1.24.0,<1.25.0)"] -autoscaling = ["mypy-boto3-autoscaling (>=1.24.0,<1.25.0)"] -autoscaling-plans = ["mypy-boto3-autoscaling-plans (>=1.24.0,<1.25.0)"] -backup = ["mypy-boto3-backup (>=1.24.0,<1.25.0)"] -backup-gateway = ["mypy-boto3-backup-gateway (>=1.24.0,<1.25.0)"] -backupstorage = ["mypy-boto3-backupstorage (>=1.24.0,<1.25.0)"] -batch = ["mypy-boto3-batch (>=1.24.0,<1.25.0)"] -billingconductor = ["mypy-boto3-billingconductor (>=1.24.0,<1.25.0)"] -braket = ["mypy-boto3-braket (>=1.24.0,<1.25.0)"] -budgets = ["mypy-boto3-budgets (>=1.24.0,<1.25.0)"] -ce = ["mypy-boto3-ce (>=1.24.0,<1.25.0)"] -chime = ["mypy-boto3-chime (>=1.24.0,<1.25.0)"] -chime-sdk-identity = ["mypy-boto3-chime-sdk-identity (>=1.24.0,<1.25.0)"] -chime-sdk-media-pipelines = ["mypy-boto3-chime-sdk-media-pipelines (>=1.24.0,<1.25.0)"] -chime-sdk-meetings = ["mypy-boto3-chime-sdk-meetings (>=1.24.0,<1.25.0)"] -chime-sdk-messaging = ["mypy-boto3-chime-sdk-messaging (>=1.24.0,<1.25.0)"] -cloud9 = ["mypy-boto3-cloud9 (>=1.24.0,<1.25.0)"] -cloudcontrol = ["mypy-boto3-cloudcontrol (>=1.24.0,<1.25.0)"] -clouddirectory = ["mypy-boto3-clouddirectory (>=1.24.0,<1.25.0)"] -cloudformation = ["mypy-boto3-cloudformation (>=1.24.0,<1.25.0)"] -cloudfront = ["mypy-boto3-cloudfront (>=1.24.0,<1.25.0)"] -cloudhsm = ["mypy-boto3-cloudhsm (>=1.24.0,<1.25.0)"] -cloudhsmv2 = ["mypy-boto3-cloudhsmv2 (>=1.24.0,<1.25.0)"] -cloudsearch = ["mypy-boto3-cloudsearch (>=1.24.0,<1.25.0)"] -cloudsearchdomain = ["mypy-boto3-cloudsearchdomain (>=1.24.0,<1.25.0)"] -cloudtrail = ["mypy-boto3-cloudtrail (>=1.24.0,<1.25.0)"] -cloudwatch = ["mypy-boto3-cloudwatch (>=1.24.0,<1.25.0)"] -codeartifact = ["mypy-boto3-codeartifact (>=1.24.0,<1.25.0)"] -codebuild = ["mypy-boto3-codebuild (>=1.24.0,<1.25.0)"] -codecommit = ["mypy-boto3-codecommit (>=1.24.0,<1.25.0)"] -codedeploy = ["mypy-boto3-codedeploy (>=1.24.0,<1.25.0)"] -codeguru-reviewer = ["mypy-boto3-codeguru-reviewer (>=1.24.0,<1.25.0)"] -codeguruprofiler = ["mypy-boto3-codeguruprofiler (>=1.24.0,<1.25.0)"] -codepipeline = ["mypy-boto3-codepipeline (>=1.24.0,<1.25.0)"] -codestar = ["mypy-boto3-codestar (>=1.24.0,<1.25.0)"] -codestar-connections = ["mypy-boto3-codestar-connections (>=1.24.0,<1.25.0)"] -codestar-notifications = ["mypy-boto3-codestar-notifications (>=1.24.0,<1.25.0)"] -cognito-identity = ["mypy-boto3-cognito-identity (>=1.24.0,<1.25.0)"] -cognito-idp = ["mypy-boto3-cognito-idp (>=1.24.0,<1.25.0)"] -cognito-sync = ["mypy-boto3-cognito-sync (>=1.24.0,<1.25.0)"] -comprehend = ["mypy-boto3-comprehend (>=1.24.0,<1.25.0)"] -comprehendmedical = ["mypy-boto3-comprehendmedical (>=1.24.0,<1.25.0)"] -compute-optimizer = ["mypy-boto3-compute-optimizer (>=1.24.0,<1.25.0)"] -config = ["mypy-boto3-config (>=1.24.0,<1.25.0)"] -connect = ["mypy-boto3-connect (>=1.24.0,<1.25.0)"] -connect-contact-lens = ["mypy-boto3-connect-contact-lens (>=1.24.0,<1.25.0)"] -connectcampaigns = ["mypy-boto3-connectcampaigns (>=1.24.0,<1.25.0)"] -connectparticipant = ["mypy-boto3-connectparticipant (>=1.24.0,<1.25.0)"] -cur = ["mypy-boto3-cur (>=1.24.0,<1.25.0)"] -customer-profiles = ["mypy-boto3-customer-profiles (>=1.24.0,<1.25.0)"] -databrew = ["mypy-boto3-databrew (>=1.24.0,<1.25.0)"] -dataexchange = ["mypy-boto3-dataexchange (>=1.24.0,<1.25.0)"] -datapipeline = ["mypy-boto3-datapipeline (>=1.24.0,<1.25.0)"] -datasync = ["mypy-boto3-datasync (>=1.24.0,<1.25.0)"] -dax = ["mypy-boto3-dax (>=1.24.0,<1.25.0)"] -detective = ["mypy-boto3-detective (>=1.24.0,<1.25.0)"] -devicefarm = ["mypy-boto3-devicefarm (>=1.24.0,<1.25.0)"] -devops-guru = ["mypy-boto3-devops-guru (>=1.24.0,<1.25.0)"] -directconnect = ["mypy-boto3-directconnect (>=1.24.0,<1.25.0)"] -discovery = ["mypy-boto3-discovery (>=1.24.0,<1.25.0)"] -dlm = ["mypy-boto3-dlm (>=1.24.0,<1.25.0)"] -dms = ["mypy-boto3-dms (>=1.24.0,<1.25.0)"] -docdb = ["mypy-boto3-docdb (>=1.24.0,<1.25.0)"] -drs = ["mypy-boto3-drs (>=1.24.0,<1.25.0)"] -ds = ["mypy-boto3-ds (>=1.24.0,<1.25.0)"] -dynamodb = ["mypy-boto3-dynamodb (>=1.24.0,<1.25.0)"] -dynamodbstreams = ["mypy-boto3-dynamodbstreams (>=1.24.0,<1.25.0)"] -ebs = ["mypy-boto3-ebs (>=1.24.0,<1.25.0)"] -ec2 = ["mypy-boto3-ec2 (>=1.24.0,<1.25.0)"] -ec2-instance-connect = ["mypy-boto3-ec2-instance-connect (>=1.24.0,<1.25.0)"] -ecr = ["mypy-boto3-ecr (>=1.24.0,<1.25.0)"] -ecr-public = ["mypy-boto3-ecr-public (>=1.24.0,<1.25.0)"] -ecs = ["mypy-boto3-ecs (>=1.24.0,<1.25.0)"] -efs = ["mypy-boto3-efs (>=1.24.0,<1.25.0)"] -eks = ["mypy-boto3-eks (>=1.24.0,<1.25.0)"] -elastic-inference = ["mypy-boto3-elastic-inference (>=1.24.0,<1.25.0)"] -elasticache = ["mypy-boto3-elasticache (>=1.24.0,<1.25.0)"] -elasticbeanstalk = ["mypy-boto3-elasticbeanstalk (>=1.24.0,<1.25.0)"] -elastictranscoder = ["mypy-boto3-elastictranscoder (>=1.24.0,<1.25.0)"] -elb = ["mypy-boto3-elb (>=1.24.0,<1.25.0)"] -elbv2 = ["mypy-boto3-elbv2 (>=1.24.0,<1.25.0)"] -emr = ["mypy-boto3-emr (>=1.24.0,<1.25.0)"] -emr-containers = ["mypy-boto3-emr-containers (>=1.24.0,<1.25.0)"] -emr-serverless = ["mypy-boto3-emr-serverless (>=1.24.0,<1.25.0)"] -es = ["mypy-boto3-es (>=1.24.0,<1.25.0)"] -essential = ["mypy-boto3-cloudformation (>=1.24.0,<1.25.0)", "mypy-boto3-dynamodb (>=1.24.0,<1.25.0)", "mypy-boto3-ec2 (>=1.24.0,<1.25.0)", "mypy-boto3-lambda (>=1.24.0,<1.25.0)", "mypy-boto3-rds (>=1.24.0,<1.25.0)", "mypy-boto3-s3 (>=1.24.0,<1.25.0)", "mypy-boto3-sqs (>=1.24.0,<1.25.0)"] -events = ["mypy-boto3-events (>=1.24.0,<1.25.0)"] -evidently = ["mypy-boto3-evidently (>=1.24.0,<1.25.0)"] -finspace = ["mypy-boto3-finspace (>=1.24.0,<1.25.0)"] -finspace-data = ["mypy-boto3-finspace-data (>=1.24.0,<1.25.0)"] -firehose = ["mypy-boto3-firehose (>=1.24.0,<1.25.0)"] -fis = ["mypy-boto3-fis (>=1.24.0,<1.25.0)"] -fms = ["mypy-boto3-fms (>=1.24.0,<1.25.0)"] -forecast = ["mypy-boto3-forecast (>=1.24.0,<1.25.0)"] -forecastquery = ["mypy-boto3-forecastquery (>=1.24.0,<1.25.0)"] -frauddetector = ["mypy-boto3-frauddetector (>=1.24.0,<1.25.0)"] -fsx = ["mypy-boto3-fsx (>=1.24.0,<1.25.0)"] -gamelift = ["mypy-boto3-gamelift (>=1.24.0,<1.25.0)"] -gamesparks = ["mypy-boto3-gamesparks (>=1.24.0,<1.25.0)"] -glacier = ["mypy-boto3-glacier (>=1.24.0,<1.25.0)"] -globalaccelerator = ["mypy-boto3-globalaccelerator (>=1.24.0,<1.25.0)"] -glue = ["mypy-boto3-glue (>=1.24.0,<1.25.0)"] -grafana = ["mypy-boto3-grafana (>=1.24.0,<1.25.0)"] -greengrass = ["mypy-boto3-greengrass (>=1.24.0,<1.25.0)"] -greengrassv2 = ["mypy-boto3-greengrassv2 (>=1.24.0,<1.25.0)"] -groundstation = ["mypy-boto3-groundstation (>=1.24.0,<1.25.0)"] -guardduty = ["mypy-boto3-guardduty (>=1.24.0,<1.25.0)"] -health = ["mypy-boto3-health (>=1.24.0,<1.25.0)"] -healthlake = ["mypy-boto3-healthlake (>=1.24.0,<1.25.0)"] -honeycode = ["mypy-boto3-honeycode (>=1.24.0,<1.25.0)"] -iam = ["mypy-boto3-iam (>=1.24.0,<1.25.0)"] -identitystore = ["mypy-boto3-identitystore (>=1.24.0,<1.25.0)"] -imagebuilder = ["mypy-boto3-imagebuilder (>=1.24.0,<1.25.0)"] -importexport = ["mypy-boto3-importexport (>=1.24.0,<1.25.0)"] -inspector = ["mypy-boto3-inspector (>=1.24.0,<1.25.0)"] -inspector2 = ["mypy-boto3-inspector2 (>=1.24.0,<1.25.0)"] -iot = ["mypy-boto3-iot (>=1.24.0,<1.25.0)"] -iot-data = ["mypy-boto3-iot-data (>=1.24.0,<1.25.0)"] -iot-jobs-data = ["mypy-boto3-iot-jobs-data (>=1.24.0,<1.25.0)"] -iot1click-devices = ["mypy-boto3-iot1click-devices (>=1.24.0,<1.25.0)"] -iot1click-projects = ["mypy-boto3-iot1click-projects (>=1.24.0,<1.25.0)"] -iotanalytics = ["mypy-boto3-iotanalytics (>=1.24.0,<1.25.0)"] -iotdeviceadvisor = ["mypy-boto3-iotdeviceadvisor (>=1.24.0,<1.25.0)"] -iotevents = ["mypy-boto3-iotevents (>=1.24.0,<1.25.0)"] -iotevents-data = ["mypy-boto3-iotevents-data (>=1.24.0,<1.25.0)"] -iotfleethub = ["mypy-boto3-iotfleethub (>=1.24.0,<1.25.0)"] -iotsecuretunneling = ["mypy-boto3-iotsecuretunneling (>=1.24.0,<1.25.0)"] -iotsitewise = ["mypy-boto3-iotsitewise (>=1.24.0,<1.25.0)"] -iotthingsgraph = ["mypy-boto3-iotthingsgraph (>=1.24.0,<1.25.0)"] -iottwinmaker = ["mypy-boto3-iottwinmaker (>=1.24.0,<1.25.0)"] -iotwireless = ["mypy-boto3-iotwireless (>=1.24.0,<1.25.0)"] -ivs = ["mypy-boto3-ivs (>=1.24.0,<1.25.0)"] -ivschat = ["mypy-boto3-ivschat (>=1.24.0,<1.25.0)"] -kafka = ["mypy-boto3-kafka (>=1.24.0,<1.25.0)"] -kafkaconnect = ["mypy-boto3-kafkaconnect (>=1.24.0,<1.25.0)"] -kendra = ["mypy-boto3-kendra (>=1.24.0,<1.25.0)"] -keyspaces = ["mypy-boto3-keyspaces (>=1.24.0,<1.25.0)"] -kinesis = ["mypy-boto3-kinesis (>=1.24.0,<1.25.0)"] -kinesis-video-archived-media = ["mypy-boto3-kinesis-video-archived-media (>=1.24.0,<1.25.0)"] -kinesis-video-media = ["mypy-boto3-kinesis-video-media (>=1.24.0,<1.25.0)"] -kinesis-video-signaling = ["mypy-boto3-kinesis-video-signaling (>=1.24.0,<1.25.0)"] -kinesisanalytics = ["mypy-boto3-kinesisanalytics (>=1.24.0,<1.25.0)"] -kinesisanalyticsv2 = ["mypy-boto3-kinesisanalyticsv2 (>=1.24.0,<1.25.0)"] -kinesisvideo = ["mypy-boto3-kinesisvideo (>=1.24.0,<1.25.0)"] -kms = ["mypy-boto3-kms (>=1.24.0,<1.25.0)"] -lakeformation = ["mypy-boto3-lakeformation (>=1.24.0,<1.25.0)"] -lambda = ["mypy-boto3-lambda (>=1.24.0,<1.25.0)"] -lex-models = ["mypy-boto3-lex-models (>=1.24.0,<1.25.0)"] -lex-runtime = ["mypy-boto3-lex-runtime (>=1.24.0,<1.25.0)"] -lexv2-models = ["mypy-boto3-lexv2-models (>=1.24.0,<1.25.0)"] -lexv2-runtime = ["mypy-boto3-lexv2-runtime (>=1.24.0,<1.25.0)"] -license-manager = ["mypy-boto3-license-manager (>=1.24.0,<1.25.0)"] -license-manager-user-subscriptions = ["mypy-boto3-license-manager-user-subscriptions (>=1.24.0,<1.25.0)"] -lightsail = ["mypy-boto3-lightsail (>=1.24.0,<1.25.0)"] -location = ["mypy-boto3-location (>=1.24.0,<1.25.0)"] -logs = ["mypy-boto3-logs (>=1.24.0,<1.25.0)"] -lookoutequipment = ["mypy-boto3-lookoutequipment (>=1.24.0,<1.25.0)"] -lookoutmetrics = ["mypy-boto3-lookoutmetrics (>=1.24.0,<1.25.0)"] -lookoutvision = ["mypy-boto3-lookoutvision (>=1.24.0,<1.25.0)"] -m2 = ["mypy-boto3-m2 (>=1.24.0,<1.25.0)"] -machinelearning = ["mypy-boto3-machinelearning (>=1.24.0,<1.25.0)"] -macie = ["mypy-boto3-macie (>=1.24.0,<1.25.0)"] -macie2 = ["mypy-boto3-macie2 (>=1.24.0,<1.25.0)"] -managedblockchain = ["mypy-boto3-managedblockchain (>=1.24.0,<1.25.0)"] -marketplace-catalog = ["mypy-boto3-marketplace-catalog (>=1.24.0,<1.25.0)"] -marketplace-entitlement = ["mypy-boto3-marketplace-entitlement (>=1.24.0,<1.25.0)"] -marketplacecommerceanalytics = ["mypy-boto3-marketplacecommerceanalytics (>=1.24.0,<1.25.0)"] -mediaconnect = ["mypy-boto3-mediaconnect (>=1.24.0,<1.25.0)"] -mediaconvert = ["mypy-boto3-mediaconvert (>=1.24.0,<1.25.0)"] -medialive = ["mypy-boto3-medialive (>=1.24.0,<1.25.0)"] -mediapackage = ["mypy-boto3-mediapackage (>=1.24.0,<1.25.0)"] -mediapackage-vod = ["mypy-boto3-mediapackage-vod (>=1.24.0,<1.25.0)"] -mediastore = ["mypy-boto3-mediastore (>=1.24.0,<1.25.0)"] -mediastore-data = ["mypy-boto3-mediastore-data (>=1.24.0,<1.25.0)"] -mediatailor = ["mypy-boto3-mediatailor (>=1.24.0,<1.25.0)"] -memorydb = ["mypy-boto3-memorydb (>=1.24.0,<1.25.0)"] -meteringmarketplace = ["mypy-boto3-meteringmarketplace (>=1.24.0,<1.25.0)"] -mgh = ["mypy-boto3-mgh (>=1.24.0,<1.25.0)"] -mgn = ["mypy-boto3-mgn (>=1.24.0,<1.25.0)"] -migration-hub-refactor-spaces = ["mypy-boto3-migration-hub-refactor-spaces (>=1.24.0,<1.25.0)"] -migrationhub-config = ["mypy-boto3-migrationhub-config (>=1.24.0,<1.25.0)"] -migrationhubstrategy = ["mypy-boto3-migrationhubstrategy (>=1.24.0,<1.25.0)"] -mobile = ["mypy-boto3-mobile (>=1.24.0,<1.25.0)"] -mq = ["mypy-boto3-mq (>=1.24.0,<1.25.0)"] -mturk = ["mypy-boto3-mturk (>=1.24.0,<1.25.0)"] -mwaa = ["mypy-boto3-mwaa (>=1.24.0,<1.25.0)"] -neptune = ["mypy-boto3-neptune (>=1.24.0,<1.25.0)"] -network-firewall = ["mypy-boto3-network-firewall (>=1.24.0,<1.25.0)"] -networkmanager = ["mypy-boto3-networkmanager (>=1.24.0,<1.25.0)"] -nimble = ["mypy-boto3-nimble (>=1.24.0,<1.25.0)"] -opensearch = ["mypy-boto3-opensearch (>=1.24.0,<1.25.0)"] -opsworks = ["mypy-boto3-opsworks (>=1.24.0,<1.25.0)"] -opsworkscm = ["mypy-boto3-opsworkscm (>=1.24.0,<1.25.0)"] -organizations = ["mypy-boto3-organizations (>=1.24.0,<1.25.0)"] -outposts = ["mypy-boto3-outposts (>=1.24.0,<1.25.0)"] -panorama = ["mypy-boto3-panorama (>=1.24.0,<1.25.0)"] -personalize = ["mypy-boto3-personalize (>=1.24.0,<1.25.0)"] -personalize-events = ["mypy-boto3-personalize-events (>=1.24.0,<1.25.0)"] -personalize-runtime = ["mypy-boto3-personalize-runtime (>=1.24.0,<1.25.0)"] -pi = ["mypy-boto3-pi (>=1.24.0,<1.25.0)"] -pinpoint = ["mypy-boto3-pinpoint (>=1.24.0,<1.25.0)"] -pinpoint-email = ["mypy-boto3-pinpoint-email (>=1.24.0,<1.25.0)"] -pinpoint-sms-voice = ["mypy-boto3-pinpoint-sms-voice (>=1.24.0,<1.25.0)"] -pinpoint-sms-voice-v2 = ["mypy-boto3-pinpoint-sms-voice-v2 (>=1.24.0,<1.25.0)"] -polly = ["mypy-boto3-polly (>=1.24.0,<1.25.0)"] -pricing = ["mypy-boto3-pricing (>=1.24.0,<1.25.0)"] -privatenetworks = ["mypy-boto3-privatenetworks (>=1.24.0,<1.25.0)"] -proton = ["mypy-boto3-proton (>=1.24.0,<1.25.0)"] -qldb = ["mypy-boto3-qldb (>=1.24.0,<1.25.0)"] -qldb-session = ["mypy-boto3-qldb-session (>=1.24.0,<1.25.0)"] -quicksight = ["mypy-boto3-quicksight (>=1.24.0,<1.25.0)"] -ram = ["mypy-boto3-ram (>=1.24.0,<1.25.0)"] -rbin = ["mypy-boto3-rbin (>=1.24.0,<1.25.0)"] -rds = ["mypy-boto3-rds (>=1.24.0,<1.25.0)"] -rds-data = ["mypy-boto3-rds-data (>=1.24.0,<1.25.0)"] -redshift = ["mypy-boto3-redshift (>=1.24.0,<1.25.0)"] -redshift-data = ["mypy-boto3-redshift-data (>=1.24.0,<1.25.0)"] -redshift-serverless = ["mypy-boto3-redshift-serverless (>=1.24.0,<1.25.0)"] -rekognition = ["mypy-boto3-rekognition (>=1.24.0,<1.25.0)"] -resiliencehub = ["mypy-boto3-resiliencehub (>=1.24.0,<1.25.0)"] -resource-groups = ["mypy-boto3-resource-groups (>=1.24.0,<1.25.0)"] -resourcegroupstaggingapi = ["mypy-boto3-resourcegroupstaggingapi (>=1.24.0,<1.25.0)"] -robomaker = ["mypy-boto3-robomaker (>=1.24.0,<1.25.0)"] -rolesanywhere = ["mypy-boto3-rolesanywhere (>=1.24.0,<1.25.0)"] -route53 = ["mypy-boto3-route53 (>=1.24.0,<1.25.0)"] -route53-recovery-cluster = ["mypy-boto3-route53-recovery-cluster (>=1.24.0,<1.25.0)"] -route53-recovery-control-config = ["mypy-boto3-route53-recovery-control-config (>=1.24.0,<1.25.0)"] -route53-recovery-readiness = ["mypy-boto3-route53-recovery-readiness (>=1.24.0,<1.25.0)"] -route53domains = ["mypy-boto3-route53domains (>=1.24.0,<1.25.0)"] -route53resolver = ["mypy-boto3-route53resolver (>=1.24.0,<1.25.0)"] -rum = ["mypy-boto3-rum (>=1.24.0,<1.25.0)"] -s3 = ["mypy-boto3-s3 (>=1.24.0,<1.25.0)"] -s3control = ["mypy-boto3-s3control (>=1.24.0,<1.25.0)"] -s3outposts = ["mypy-boto3-s3outposts (>=1.24.0,<1.25.0)"] -sagemaker = ["mypy-boto3-sagemaker (>=1.24.0,<1.25.0)"] -sagemaker-a2i-runtime = ["mypy-boto3-sagemaker-a2i-runtime (>=1.24.0,<1.25.0)"] -sagemaker-edge = ["mypy-boto3-sagemaker-edge (>=1.24.0,<1.25.0)"] -sagemaker-featurestore-runtime = ["mypy-boto3-sagemaker-featurestore-runtime (>=1.24.0,<1.25.0)"] -sagemaker-runtime = ["mypy-boto3-sagemaker-runtime (>=1.24.0,<1.25.0)"] -savingsplans = ["mypy-boto3-savingsplans (>=1.24.0,<1.25.0)"] -schemas = ["mypy-boto3-schemas (>=1.24.0,<1.25.0)"] -sdb = ["mypy-boto3-sdb (>=1.24.0,<1.25.0)"] -secretsmanager = ["mypy-boto3-secretsmanager (>=1.24.0,<1.25.0)"] -securityhub = ["mypy-boto3-securityhub (>=1.24.0,<1.25.0)"] -serverlessrepo = ["mypy-boto3-serverlessrepo (>=1.24.0,<1.25.0)"] -service-quotas = ["mypy-boto3-service-quotas (>=1.24.0,<1.25.0)"] -servicecatalog = ["mypy-boto3-servicecatalog (>=1.24.0,<1.25.0)"] -servicecatalog-appregistry = ["mypy-boto3-servicecatalog-appregistry (>=1.24.0,<1.25.0)"] -servicediscovery = ["mypy-boto3-servicediscovery (>=1.24.0,<1.25.0)"] -ses = ["mypy-boto3-ses (>=1.24.0,<1.25.0)"] -sesv2 = ["mypy-boto3-sesv2 (>=1.24.0,<1.25.0)"] -shield = ["mypy-boto3-shield (>=1.24.0,<1.25.0)"] -signer = ["mypy-boto3-signer (>=1.24.0,<1.25.0)"] -sms = ["mypy-boto3-sms (>=1.24.0,<1.25.0)"] -sms-voice = ["mypy-boto3-sms-voice (>=1.24.0,<1.25.0)"] -snow-device-management = ["mypy-boto3-snow-device-management (>=1.24.0,<1.25.0)"] -snowball = ["mypy-boto3-snowball (>=1.24.0,<1.25.0)"] -sns = ["mypy-boto3-sns (>=1.24.0,<1.25.0)"] -sqs = ["mypy-boto3-sqs (>=1.24.0,<1.25.0)"] -ssm = ["mypy-boto3-ssm (>=1.24.0,<1.25.0)"] -ssm-contacts = ["mypy-boto3-ssm-contacts (>=1.24.0,<1.25.0)"] -ssm-incidents = ["mypy-boto3-ssm-incidents (>=1.24.0,<1.25.0)"] -sso = ["mypy-boto3-sso (>=1.24.0,<1.25.0)"] -sso-admin = ["mypy-boto3-sso-admin (>=1.24.0,<1.25.0)"] -sso-oidc = ["mypy-boto3-sso-oidc (>=1.24.0,<1.25.0)"] -stepfunctions = ["mypy-boto3-stepfunctions (>=1.24.0,<1.25.0)"] -storagegateway = ["mypy-boto3-storagegateway (>=1.24.0,<1.25.0)"] -sts = ["mypy-boto3-sts (>=1.24.0,<1.25.0)"] -support = ["mypy-boto3-support (>=1.24.0,<1.25.0)"] -swf = ["mypy-boto3-swf (>=1.24.0,<1.25.0)"] -synthetics = ["mypy-boto3-synthetics (>=1.24.0,<1.25.0)"] -textract = ["mypy-boto3-textract (>=1.24.0,<1.25.0)"] -timestream-query = ["mypy-boto3-timestream-query (>=1.24.0,<1.25.0)"] -timestream-write = ["mypy-boto3-timestream-write (>=1.24.0,<1.25.0)"] -transcribe = ["mypy-boto3-transcribe (>=1.24.0,<1.25.0)"] -transfer = ["mypy-boto3-transfer (>=1.24.0,<1.25.0)"] -translate = ["mypy-boto3-translate (>=1.24.0,<1.25.0)"] -voice-id = ["mypy-boto3-voice-id (>=1.24.0,<1.25.0)"] -waf = ["mypy-boto3-waf (>=1.24.0,<1.25.0)"] -waf-regional = ["mypy-boto3-waf-regional (>=1.24.0,<1.25.0)"] -wafv2 = ["mypy-boto3-wafv2 (>=1.24.0,<1.25.0)"] -wellarchitected = ["mypy-boto3-wellarchitected (>=1.24.0,<1.25.0)"] -wisdom = ["mypy-boto3-wisdom (>=1.24.0,<1.25.0)"] -workdocs = ["mypy-boto3-workdocs (>=1.24.0,<1.25.0)"] -worklink = ["mypy-boto3-worklink (>=1.24.0,<1.25.0)"] -workmail = ["mypy-boto3-workmail (>=1.24.0,<1.25.0)"] -workmailmessageflow = ["mypy-boto3-workmailmessageflow (>=1.24.0,<1.25.0)"] -workspaces = ["mypy-boto3-workspaces (>=1.24.0,<1.25.0)"] -workspaces-web = ["mypy-boto3-workspaces-web (>=1.24.0,<1.25.0)"] -xray = ["mypy-boto3-xray (>=1.24.0,<1.25.0)"] - -[[package]] -name = "botocore" -version = "1.27.43" -description = "Low-level, data-driven core of boto 3." -category = "main" -optional = true -python-versions = ">= 3.7" - -[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 = "botocore-stubs" -version = "1.27.43" -description = "Type annotations and code completion for botocore" -category = "main" -optional = true -python-versions = ">=3.7,<4.0" - -[package.dependencies] -types-awscrt = "*" - -[[package]] -name = "cachetools" -version = "5.2.0" -description = "Extensible memoizing collections and decorators" -category = "main" -optional = false -python-versions = "~=3.7" - -[[package]] -name = "certifi" -version = "2022.6.15" -description = "Python package for providing Mozilla's CA Bundle." -category = "main" -optional = true -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.1.0" -description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -category = "main" -optional = true -python-versions = ">=3.6.0" - -[package.extras] -unicode_backport = ["unicodedata2"] - -[[package]] -name = "click" -version = "8.1.3" -description = "Composable command line interface toolkit" -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[[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 = "coverage" -version = "5.5" -description = "Code coverage measurement for Python" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" - -[package.extras] -toml = ["toml"] - -[[package]] -name = "cryptography" -version = "37.0.4" -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 (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx_rtd_theme"] -docstest = ["pyenchant (>=1.6.11)", "sphinxcontrib-spelling (>=4.0.1)", "twine (>=1.12.0)"] -pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"] -sdist = ["setuptools_rust (>=0.11.4)"] -ssh = ["bcrypt (>=3.1.5)"] -test = ["hypothesis (>=1.11.4,!=3.79.2)", "iso8601", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-subtests", "pytest-xdist", "pytz"] - -[[package]] -name = "dataclasses-json" -version = "0.5.7" -description = "Easily serialize dataclasses to and from JSON" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -marshmallow = ">=3.3.0,<4.0.0" -marshmallow-enum = ">=1.5.1,<2.0.0" -typing-inspect = ">=0.4.0" - -[package.extras] -dev = ["flake8", "hypothesis", "ipython", "mypy (>=0.710)", "portray", "pytest (>=6.2.3)", "simplejson", "types-dataclasses"] - -[[package]] -name = "decorator" -version = "5.1.1" -description = "Decorators for Humans" -category = "main" -optional = false -python-versions = ">=3.5" - -[[package]] -name = "docutils" -version = "0.16" -description = "Docutils -- Python Documentation Utilities" -category = "main" -optional = true -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[[package]] -name = "flake8" -version = "4.0.1" -description = "the modular source code checker: pep8 pyflakes and co" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -mccabe = ">=0.6.0,<0.7.0" -pycodestyle = ">=2.8.0,<2.9.0" -pyflakes = ">=2.4.0,<2.5.0" - -[[package]] -name = "flake8-black" -version = "0.3.3" -description = "flake8 plugin to call black as a code style validator" -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -black = ">=22.1.0" -flake8 = ">=3.0.0" -tomli = "*" - -[[package]] -name = "flake8-bugbear" -version = "22.7.1" -description = "A plugin for flake8 finding likely bugs and design problems in your program. Contains warnings that don't belong in pyflakes and pycodestyle." -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -attrs = ">=19.2.0" -flake8 = ">=3.0.0" - -[package.extras] -dev = ["coverage", "hypothesis", "hypothesmith (>=0.2)", "pre-commit"] - -[[package]] -name = "flake8-isort" -version = "4.1.2.post0" -description = "flake8 plugin that integrates isort ." -category = "dev" -optional = false -python-versions = "*" - -[package.dependencies] -flake8 = ">=3.2.1,<5" -isort = ">=4.3.5,<6" - -[package.extras] -test = ["pytest-cov"] - -[[package]] -name = "flake8-polyfill" -version = "1.0.2" -description = "Polyfill package for Flake8 plugins" -category = "dev" -optional = false -python-versions = "*" - -[package.dependencies] -flake8 = "*" - -[[package]] -name = "func-timeout" -version = "4.3.5" -description = "Python module which allows you to specify timeouts when calling any existing function. Also provides support for stoppable-threads" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "icontract" -version = "2.6.1" -description = "Provide design-by-contract with informative violation messages." -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -asttokens = ">=2,<3" -typing_extensions = "*" - -[package.extras] -dev = ["astor (==0.8.1)", "asyncstdlib (==3.9.1)", "coverage (>=4.5.1,<5)", "deal (==4.1.0)", "docutils (>=0.14,<1)", "dpcontracts (==0.6.0)", "mypy (==0.910)", "numpy (>=1,<2)", "py-cpuinfo (>=5.0.0,<6)", "pydocstyle (>=6.1.1,<7)", "pygments (>=2.2.0,<3)", "pylint (==2.9.6)", "tabulate (>=0.8.7,<1)", "tox (>=3.0.0)", "typeguard (>=2,<3)", "yapf (==0.20.2)"] - -[[package]] -name = "idna" -version = "3.3" -description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" -optional = true -python-versions = ">=3.5" - -[[package]] -name = "imagesize" -version = "1.4.1" -description = "Getting image size from png/jpeg/jpeg2000/gif file" -category = "main" -optional = true -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[[package]] -name = "importlib-metadata" -version = "4.12.0" -description = "Read metadata from Python packages" -category = "main" -optional = true -python-versions = ">=3.7" - -[package.dependencies] -zipp = ">=0.5" - -[package.extras] -docs = ["jaraco.packaging (>=9)", "rst.linker (>=1.9)", "sphinx"] -perf = ["ipython"] -testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)"] - -[[package]] -name = "iniconfig" -version = "1.1.1" -description = "iniconfig: brain-dead simple config-ini parsing" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "isodate" -version = "0.6.1" -description = "An ISO 8601 date/time/duration parser and formatter" -category = "main" -optional = true -python-versions = "*" - -[package.dependencies] -six = "*" - -[[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.1.2" -description = "A very fast and expressive template engine." -category = "main" -optional = true -python-versions = ">=3.7" - -[package.dependencies] -MarkupSafe = ">=2.0" - -[package.extras] -i18n = ["Babel (>=2.7)"] - -[[package]] -name = "jmespath" -version = "1.0.1" -description = "JSON Matching Expressions" -category = "main" -optional = true -python-versions = ">=3.7" - -[[package]] -name = "libvirt-python" -version = "8.9.0" -description = "The libvirt virtualization API python binding" -category = "main" -optional = true -python-versions = "*" - -[[package]] -name = "markupsafe" -version = "2.1.1" -description = "Safely add untrusted strings to HTML/XML markup." -category = "main" -optional = true -python-versions = ">=3.7" - -[[package]] -name = "marshmallow" -version = "3.17.0" -description = "A lightweight library for converting complex datatypes to and from native Python datatypes." -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -packaging = ">=17.0" - -[package.extras] -dev = ["flake8 (==4.0.1)", "flake8-bugbear (==22.6.22)", "mypy (==0.961)", "pre-commit (>=2.4,<3.0)", "pytest", "pytz", "simplejson", "tox"] -docs = ["alabaster (==0.7.12)", "autodocsumm (==0.2.8)", "sphinx (==4.5.0)", "sphinx-issues (==3.0.1)", "sphinx-version-warning (==1.1.2)"] -lint = ["flake8 (==4.0.1)", "flake8-bugbear (==22.6.22)", "mypy (==0.961)", "pre-commit (>=2.4,<3.0)"] -tests = ["pytest", "pytz", "simplejson"] - -[[package]] -name = "marshmallow-enum" -version = "1.5.1" -description = "Enum field for Marshmallow" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -marshmallow = ">=2.0.0" - -[[package]] -name = "mccabe" -version = "0.6.1" -description = "McCabe checker, plugin for flake8" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "msal" -version = "1.18.0" -description = "The Microsoft Authentication Library (MSAL) for Python library enables your app to access the Microsoft Cloud by supporting authentication of users with Microsoft Azure Active Directory accounts (AAD) and Microsoft Accounts (MSA) using industry standard OAuth2 and OpenID Connect." -category = "main" -optional = true -python-versions = "*" - -[package.dependencies] -cryptography = ">=0.6,<40" -PyJWT = {version = ">=1.0.0,<3", extras = ["crypto"]} -requests = ">=2.0.0,<3" - -[[package]] -name = "msal-extensions" -version = "1.0.0" -description = "Microsoft Authentication Library extensions (MSAL EX) provides a persistence API that can save your data on disk, encrypted on Windows, macOS and Linux. Concurrent data access will be coordinated by a file lock mechanism." -category = "main" -optional = true -python-versions = "*" - -[package.dependencies] -msal = ">=0.4.1,<2.0.0" -portalocker = [ - {version = ">=1.6,<3", markers = "python_version >= \"3.5\" and platform_system == \"Windows\""}, - {version = ">=1.0,<3", markers = "python_version >= \"3.5\" and platform_system != \"Windows\""}, -] - -[[package]] -name = "msrest" -version = "0.7.1" -description = "AutoRest swagger generator Python client runtime." -category = "main" -optional = true -python-versions = ">=3.6" - -[package.dependencies] -azure-core = ">=1.24.0" -certifi = ">=2017.4.17" -isodate = ">=0.6.0" -requests = ">=2.16,<3.0" -requests-oauthlib = ">=0.5.0" - -[package.extras] -async = ["aiodns", "aiohttp (>=3.0)"] - -[[package]] -name = "mypy" -version = "0.942" -description = "Optional static typing for Python" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -mypy-extensions = ">=0.4.3" -tomli = ">=1.1.0" -typing-extensions = ">=3.10" - -[package.extras] -dmypy = ["psutil (>=4.0)"] -python2 = ["typed-ast (>=1.4.0,<2)"] -reports = ["lxml"] - -[[package]] -name = "mypy-boto3-cloudformation" -version = "1.24.36.post1" -description = "Type annotations for boto3.CloudFormation 1.24.36 service generated with mypy-boto3-builder 7.10.0" -category = "main" -optional = true -python-versions = ">=3.7" - -[package.dependencies] -typing-extensions = ">=4.1.0" - -[[package]] -name = "mypy-boto3-dynamodb" -version = "1.24.36.post1" -description = "Type annotations for boto3.DynamoDB 1.24.36 service generated with mypy-boto3-builder 7.10.0" -category = "main" -optional = true -python-versions = ">=3.7" - -[package.dependencies] -typing-extensions = ">=4.1.0" - -[[package]] -name = "mypy-boto3-ec2" -version = "1.24.41" -description = "Type annotations for boto3.EC2 1.24.41 service generated with mypy-boto3-builder 7.10.2" -category = "main" -optional = true -python-versions = ">=3.7" - -[package.dependencies] -typing-extensions = ">=4.1.0" - -[[package]] -name = "mypy-boto3-lambda" -version = "1.24.40" -description = "Type annotations for boto3.Lambda 1.24.40 service generated with mypy-boto3-builder 7.10.1" -category = "main" -optional = true -python-versions = ">=3.7" - -[package.dependencies] -typing-extensions = ">=4.1.0" - -[[package]] -name = "mypy-boto3-rds" -version = "1.24.38" -description = "Type annotations for boto3.RDS 1.24.38 service generated with mypy-boto3-builder 7.10.1" -category = "main" -optional = true -python-versions = ">=3.7" - -[package.dependencies] -typing-extensions = ">=4.1.0" - -[[package]] -name = "mypy-boto3-s3" -version = "1.24.36.post1" -description = "Type annotations for boto3.S3 1.24.36 service generated with mypy-boto3-builder 7.10.0" -category = "main" -optional = true -python-versions = ">=3.7" - -[package.dependencies] -typing-extensions = ">=4.1.0" - -[[package]] -name = "mypy-boto3-sqs" -version = "1.24.40" -description = "Type annotations for boto3.SQS 1.24.40 service generated with mypy-boto3-builder 7.10.1" -category = "main" -optional = true -python-versions = ">=3.7" - -[package.dependencies] -typing-extensions = ">=4.1.0" - -[[package]] -name = "mypy-extensions" -version = "0.4.3" -description = "Experimental type system extensions for programs checked with the mypy typechecker." -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "oauthlib" -version = "3.2.1" -description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic" -category = "main" -optional = true -python-versions = ">=3.6" - -[package.extras] -rsa = ["cryptography (>=3.0.0)"] -signals = ["blinker (>=1.4.0)"] -signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"] - -[[package]] -name = "packaging" -version = "21.3" -description = "Core utilities for Python packages" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" - -[[package]] -name = "paramiko" -version = "2.11.0" -description = "SSH2 protocol library" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -bcrypt = ">=3.1.3" -cryptography = ">=2.5" -pynacl = ">=1.0.1" -six = "*" - -[package.extras] -all = ["bcrypt (>=3.1.3)", "gssapi (>=1.4.1)", "invoke (>=1.3)", "pyasn1 (>=0.1.7)", "pynacl (>=1.0.1)", "pywin32 (>=2.1.8)"] -ed25519 = ["bcrypt (>=3.1.3)", "pynacl (>=1.0.1)"] -gssapi = ["gssapi (>=1.4.1)", "pyasn1 (>=0.1.7)", "pywin32 (>=2.1.8)"] -invoke = ["invoke (>=1.3)"] - -[[package]] -name = "pathspec" -version = "0.9.0" -description = "Utility library for gitignore style pattern matching of file paths." -category = "dev" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" - -[[package]] -name = "pep8-naming" -version = "0.12.1" -description = "Check PEP-8 naming conventions, plugin for flake8" -category = "dev" -optional = false -python-versions = "*" - -[package.dependencies] -flake8 = ">=3.9.1" -flake8-polyfill = ">=1.0.2,<2" - -[[package]] -name = "pillow" -version = "9.2.0" -description = "Python Imaging Library (Fork)" -category = "main" -optional = true -python-versions = ">=3.7" - -[package.extras] -docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-issues (>=3.0.1)", "sphinx-removed-in", "sphinxext-opengraph"] -tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] - -[[package]] -name = "platformdirs" -version = "2.5.2" -description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.extras] -docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx (>=4)", "sphinx-autodoc-typehints (>=1.12)"] -test = ["appdirs (==1.4.4)", "pytest (>=6)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)"] - -[[package]] -name = "pluggy" -version = "0.13.1" -description = "plugin and hook calling mechanisms for python" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[package.extras] -dev = ["pre-commit", "tox"] - -[[package]] -name = "portalocker" -version = "2.5.1" -description = "Wraps the portalocker recipe for easy usage" -category = "main" -optional = true -python-versions = ">=3.5" - -[package.dependencies] -pywin32 = {version = ">=226", markers = "platform_system == \"Windows\""} - -[package.extras] -docs = ["sphinx (>=1.7.1)"] -redis = ["redis"] -tests = ["pytest (>=5.4.1)", "pytest-cov (>=2.8.1)", "pytest-mypy (>=0.8.0)", "pytest-timeout (>=2.1.0)", "redis", "sphinx (>=3.0.3)"] - -[[package]] -name = "py" -version = "1.11.0" -description = "library with cross-python path, ini-parsing, io, code, log facilities" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[[package]] -name = "pycairo" -version = "1.21.0" -description = "Python interface for cairo" -category = "main" -optional = true -python-versions = ">=3.7" - -[[package]] -name = "pycdlib" -version = "1.13.0" -description = "Pure python ISO manipulation library" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "pycodestyle" -version = "2.8.0" -description = "Python style guide checker" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[[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 = "2.4.0" -description = "passive checker of Python programs" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[[package]] -name = "pygments" -version = "2.12.0" -description = "Pygments is a syntax highlighting package written in Python." -category = "main" -optional = true -python-versions = ">=3.6" - -[[package]] -name = "pygobject" -version = "3.42.2" -description = "Python bindings for GObject Introspection" -category = "main" -optional = true -python-versions = ">=3.6, <4" - -[package.dependencies] -pycairo = ">=1.16,<2.0" - -[[package]] -name = "pyjwt" -version = "2.4.0" -description = "JSON Web Token implementation in Python" -category = "main" -optional = true -python-versions = ">=3.6" - -[package.dependencies] -cryptography = {version = ">=3.3.1", optional = true, markers = "extra == \"crypto\""} - -[package.extras] -crypto = ["cryptography (>=3.3.1)"] -dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.3.1)", "mypy", "pre-commit", "pytest (>=6.0.0,<7.0.0)", "sphinx", "sphinx-rtd-theme", "zope.interface"] -docs = ["sphinx", "sphinx-rtd-theme", "zope.interface"] -tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] - -[[package]] -name = "pynacl" -version = "1.5.0" -description = "Python binding to the Networking and Cryptography (NaCl) library" -category = "main" -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 = "pyparsing" -version = "3.0.9" -description = "pyparsing module - Classes and methods to define and execute parsing grammars" -category = "main" -optional = false -python-versions = ">=3.6.8" - -[package.extras] -diagrams = ["jinja2", "railroad-diagrams"] - -[[package]] -name = "pypiwin32" -version = "223" -description = "" -category = "main" -optional = true -python-versions = "*" - -[package.dependencies] -pywin32 = ">=223" - -[[package]] -name = "pytest" -version = "7.1.2" -description = "pytest: simple powerful testing with Python" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} -attrs = ">=19.2.0" -colorama = {version = "*", markers = "sys_platform == \"win32\""} -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 = "pytest-html" -version = "3.1.1" -description = "pytest plugin for generating HTML reports" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -pytest = ">=5.0,<6.0.0 || >6.0.0" -pytest-metadata = "*" - -[[package]] -name = "pytest-metadata" -version = "2.0.2" -description = "pytest plugin for test session metadata" -category = "main" -optional = false -python-versions = ">=3.7,<4.0" - -[package.dependencies] -pytest = ">=3.0.0,<8.0.0" - -[[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 = "pytoolconfig" -version = "1.2.2" -description = "Python tool configuration" -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -packaging = ">=21.3" -tomli = {version = ">=2.0", markers = "python_version < \"3.11\""} - -[package.extras] -doc = ["sphinx (>=4.5.0)", "tabulate (>=0.8.9)"] -gen_docs = ["pytoolconfig[doc]", "sphinx (>=4.5.0)", "sphinx-autodoc-typehints (>=1.18.1)", "sphinx-rtd-theme (>=1.0.0)"] -global = ["appdirs (>=1.4.4)"] -validation = ["pydantic (>=1.7.4)"] - -[[package]] -name = "pytz" -version = "2022.1" -description = "World timezone definitions, modern and historical" -category = "main" -optional = true -python-versions = "*" - -[[package]] -name = "pywin32" -version = "304" -description = "Python for Window Extensions" -category = "main" -optional = true -python-versions = "*" - -[[package]] -name = "pyyaml" -version = "5.4.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.*, !=3.5.*" - -[[package]] -name = "randmac" -version = "0.1" -description = "a random 12-digit mac address generator" -category = "main" -optional = false -python-versions = ">3.2," - -[[package]] -name = "requests" -version = "2.28.1" -description = "Python HTTP for Humans." -category = "main" -optional = true -python-versions = ">=3.7, <4" - -[package.dependencies] -certifi = ">=2017.4.17" -charset-normalizer = ">=2,<3" -idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<1.27" - -[package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use_chardet_on_py3 = ["chardet (>=3.0.2,<6)"] - -[[package]] -name = "requests-oauthlib" -version = "1.3.1" -description = "OAuthlib authentication support for Requests." -category = "main" -optional = true -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[package.dependencies] -oauthlib = ">=3.0.0" -requests = ">=2.0.0" - -[package.extras] -rsa = ["oauthlib[signedtoken] (>=3.0.0)"] - -[[package]] -name = "retry" -version = "0.9.2" -description = "Easy to use retry decorator." -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -decorator = ">=3.4.2" -py = ">=1.4.26,<2.0.0" - -[[package]] -name = "rope" -version = "1.3.0" -description = "a python refactoring library..." -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -pytoolconfig = ">=1.1.2" - -[package.extras] -dev = ["build (>=0.7.0)", "pytest (>=7.0.1)", "pytest-timeout (>=2.1.0)"] -doc = ["pytoolconfig[doc]", "sphinx (>=4.5.0)", "sphinx-autodoc-typehints (>=1.18.1)", "sphinx-rtd-theme (>=1.0.0)"] - -[[package]] -name = "rstcheck" -version = "3.5.0" -description = "Checks syntax of reStructuredText and code blocks nested within it" -category = "main" -optional = true -python-versions = "*" - -[package.dependencies] -docutils = ">=0.7" - -[[package]] -name = "s3transfer" -version = "0.6.0" -description = "An Amazon S3 Transfer Manager" -category = "main" -optional = true -python-versions = ">= 3.7" - -[package.dependencies] -botocore = ">=1.12.36,<2.0a.0" - -[package.extras] -crt = ["botocore[crt] (>=1.20.29,<2.0a.0)"] - -[[package]] -name = "semver" -version = "2.13.0" -description = "Python helper for Semantic Versioning (http://semver.org/)" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[[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 = "snowballstemmer" -version = "2.2.0" -description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." -category = "main" -optional = true -python-versions = "*" - -[[package]] -name = "sphinx" -version = "4.5.0" -description = "Python documentation generator" -category = "main" -optional = true -python-versions = ">=3.6" - -[package.dependencies] -alabaster = ">=0.7,<0.8" -babel = ">=1.3" -colorama = {version = ">=0.3.5", markers = "sys_platform == \"win32\""} -docutils = ">=0.14,<0.18" -imagesize = "*" -importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} -Jinja2 = ">=2.3" -packaging = "*" -Pygments = ">=2.0" -requests = ">=2.5.0" -snowballstemmer = ">=1.1" -sphinxcontrib-applehelp = "*" -sphinxcontrib-devhelp = "*" -sphinxcontrib-htmlhelp = ">=2.0.0" -sphinxcontrib-jsmath = "*" -sphinxcontrib-qthelp = "*" -sphinxcontrib-serializinghtml = ">=1.1.5" - -[package.extras] -docs = ["sphinxcontrib-websupport"] -lint = ["docutils-stubs", "flake8 (>=3.5.0)", "isort", "mypy (>=0.931)", "types-requests", "types-typed-ast"] -test = ["cython", "html5lib", "pytest", "pytest-cov", "typed-ast"] - -[[package]] -name = "sphinx-argparse" -version = "0.2.5" -description = "A sphinx extension that automatically documents argparse commands and options" -category = "main" -optional = true -python-versions = "*" - -[package.dependencies] -sphinx = ">=1.2.0" - -[package.extras] -dev = ["pytest", "sphinx_rtd_theme"] -markdown = ["CommonMark (>=0.5.6)"] - -[[package]] -name = "sphinx-copybutton" -version = "0.4.0" -description = "Add a copy button to each of your code cells." -category = "main" -optional = true -python-versions = ">=3.6" - -[package.dependencies] -sphinx = ">=1.8" - -[package.extras] -code_style = ["pre-commit (==2.12.1)"] -rtd = ["ipython", "sphinx", "sphinx-book-theme"] - -[[package]] -name = "sphinx-rtd-theme" -version = "0.5.2" -description = "Read the Docs theme for Sphinx" -category = "main" -optional = true -python-versions = "*" - -[package.dependencies] -docutils = "<0.17" -sphinx = "*" - -[package.extras] -dev = ["bump2version", "sphinxcontrib-httpdomain", "transifex-client"] - -[[package]] -name = "sphinxcontrib-applehelp" -version = "1.0.2" -description = "sphinxcontrib-applehelp is a sphinx extension which outputs Apple help books" -category = "main" -optional = true -python-versions = ">=3.5" - -[package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] -test = ["pytest"] - -[[package]] -name = "sphinxcontrib-devhelp" -version = "1.0.2" -description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." -category = "main" -optional = true -python-versions = ">=3.5" - -[package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] -test = ["pytest"] - -[[package]] -name = "sphinxcontrib-htmlhelp" -version = "2.0.0" -description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" -category = "main" -optional = true -python-versions = ">=3.6" - -[package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] -test = ["html5lib", "pytest"] - -[[package]] -name = "sphinxcontrib-jsmath" -version = "1.0.1" -description = "A sphinx extension which renders display math in HTML via JavaScript" -category = "main" -optional = true -python-versions = ">=3.5" - -[package.extras] -test = ["flake8", "mypy", "pytest"] - -[[package]] -name = "sphinxcontrib-qthelp" -version = "1.0.3" -description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." -category = "main" -optional = true -python-versions = ">=3.5" - -[package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] -test = ["pytest"] - -[[package]] -name = "sphinxcontrib-serializinghtml" -version = "1.1.5" -description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." -category = "main" -optional = true -python-versions = ">=3.5" - -[package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] -test = ["pytest"] - -[[package]] -name = "sphinxemoji" -version = "0.1.9" -description = "An extension to use emoji codes in your Sphinx documentation" -category = "main" -optional = true -python-versions = "*" - -[package.dependencies] -sphinx = ">=1.8" - -[[package]] -name = "spur" -version = "0.3.20" -description = "Run commands and manipulate files locally or over SSH using the same interface" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -paramiko = ">=1.13.1,<3" - -[[package]] -name = "spurplus" -version = "2.3.4" -description = "Manage remote machines and file operations over SSH." -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -icontract = ">=2.0.1,<3" -spur = "0.3.20" -temppathlib = ">=1.0.3,<2" -typing_extensions = ">=3.6.2.1" - -[package.extras] -dev = ["coverage (>=4.5.1,<5)", "mypy (==0.790)", "pydocstyle (>=2.1.1,<3)", "pylint (==2.6.0)", "tox (>=3.0.0)", "yapf (==0.20.2)"] - -[[package]] -name = "temppathlib" -version = "1.2.0" -description = "Wrap tempfile to give you pathlib.Path." -category = "main" -optional = false -python-versions = "*" - -[package.extras] -dev = ["coverage (>=5,<6)", "mypy (==0.941)", "pydocstyle (>=5,<6)", "pylint (==2.12.2)", "tox (>=3,<4)", "twine", "yapf (==0.20.2)"] - -[[package]] -name = "toml" -version = "0.10.2" -description = "Python Library for Tom's Obvious, Minimal Language" -category = "main" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" - -[[package]] -name = "tomli" -version = "2.0.1" -description = "A lil' TOML parser" -category = "main" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "types-awscrt" -version = "0.13.14" -description = "Type annotations and code completion for awscrt" -category = "main" -optional = true -python-versions = ">=3.7,<4.0" - -[[package]] -name = "types-cachetools" -version = "5.2.1" -description = "Typing stubs for cachetools" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "types-cryptography" -version = "3.3.21" -description = "Typing stubs for cryptography" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "types-paramiko" -version = "0.1.9" -description = "Typing stubs for paramiko" -category = "dev" -optional = false -python-versions = "*" - -[package.dependencies] -types-cryptography = "*" - -[[package]] -name = "types-pillow" -version = "8.3.11" -description = "Typing stubs for Pillow" -category = "main" -optional = true -python-versions = "*" - -[[package]] -name = "types-python-dateutil" -version = "0.1.6" -description = "Typing stubs for python-dateutil" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "types-pyyaml" -version = "5.4.12" -description = "Typing stubs for PyYAML" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "types-requests" -version = "2.28.7" -description = "Typing stubs for requests" -category = "dev" -optional = false -python-versions = "*" - -[package.dependencies] -types-urllib3 = "<1.27" - -[[package]] -name = "types-retry" -version = "0.1.5" -description = "Typing stubs for retry" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "types-s3transfer" -version = "0.6.0.post4" -description = "Type annotations and code completion for s3transfer" -category = "main" -optional = true -python-versions = ">=3.7,<4.0" - -[[package]] -name = "types-toml" -version = "0.1.5" -description = "Typing stubs for toml" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "types-urllib3" -version = "1.26.20" -description = "Typing stubs for urllib3" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "typing-extensions" -version = "4.3.0" -description = "Backported and Experimental Type Hints for Python 3.7+" -category = "main" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "typing-inspect" -version = "0.7.1" -description = "Runtime inspection utilities for typing module." -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -mypy-extensions = ">=0.3.0" -typing-extensions = ">=3.7.4" - -[[package]] -name = "urllib3" -version = "1.26.11" -description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "main" -optional = true -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, <4" - -[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)"] -socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] - -[[package]] -name = "websockets" -version = "10.3" -description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" -category = "main" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "zipp" -version = "3.8.1" -description = "Backport of pathlib-compatible object wrapper for zip files" -category = "main" -optional = true -python-versions = ">=3.7" - -[package.extras] -docs = ["jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx"] -testing = ["func-timeout", "jaraco.itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] - -[extras] -aws = ["boto3", "boto3-stubs"] -azure = ["azure-identity", "azure-storage-blob", "azure-mgmt-compute", "azure-mgmt-marketplaceordering", "azure-mgmt-network", "azure-mgmt-resource", "azure-mgmt-serialconsole", "azure-mgmt-storage", "azure-storage-file-share", "azure-mgmt-privatedns", "PyGObject", "Pillow", "types-Pillow"] -doc = ["Sphinx", "sphinx-argparse", "sphinx-rtd-theme", "sphinxemoji", "sphinx-copybutton", "rstcheck"] -legacy = ["pypiwin32"] -libvirt = ["libvirt-python"] - -[metadata] -lock-version = "1.1" -python-versions = ">=3.8,<4.0" -content-hash = "e489037acf90e29272395790404a8f40e499980ea9336b1bb6a206acf46e34d5" - -[metadata.files] -alabaster = [ - {file = "alabaster-0.7.12-py2.py3-none-any.whl", hash = "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359"}, - {file = "alabaster-0.7.12.tar.gz", hash = "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"}, -] -assertpy = [ - {file = "assertpy-1.1.tar.gz", hash = "sha256:acc64329934ad71a3221de185517a43af33e373bb44dc05b5a9b174394ef4833"}, -] -asttokens = [ - {file = "asttokens-2.0.5-py2.py3-none-any.whl", hash = "sha256:0844691e88552595a6f4a4281a9f7f79b8dd45ca4ccea82e5e05b4bbdb76705c"}, - {file = "asttokens-2.0.5.tar.gz", hash = "sha256:9a54c114f02c7a9480d56550932546a3f1fe71d8a02f1bc7ccd0ee3ee35cf4d5"}, -] -atomicwrites = [ - {file = "atomicwrites-1.4.1.tar.gz", hash = "sha256:81b2c9071a49367a7f770170e5eec8cb66567cfbbc8c73d20ce5ca4a8d71cf11"}, -] -attrs = [ - {file = "attrs-22.1.0-py2.py3-none-any.whl", hash = "sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c"}, - {file = "attrs-22.1.0.tar.gz", hash = "sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6"}, -] -azure-common = [ - {file = "azure-common-1.1.28.zip", hash = "sha256:4ac0cd3214e36b6a1b6a442686722a5d8cc449603aa833f3f0f40bda836704a3"}, - {file = "azure_common-1.1.28-py2.py3-none-any.whl", hash = "sha256:5c12d3dcf4ec20599ca6b0d3e09e86e146353d443e7fcc050c9a19c1f9df20ad"}, -] -azure-core = [ - {file = "azure-core-1.25.0.zip", hash = "sha256:c4a7d0d9e63a70dbde502b5d0cbe58b52244db4fbf247cca6768899e45fa3336"}, - {file = "azure_core-1.25.0-py3-none-any.whl", hash = "sha256:c26ad5f3612b8a2207cf2be0ef67e478a74acfa450b8d25d778c939921f650dc"}, -] -azure-identity = [ - {file = "azure-identity-1.10.0.zip", hash = "sha256:656e5034d9cef297cf9b35376ed620085273c18cfa52cea4a625bf0d5d2d6409"}, - {file = "azure_identity-1.10.0-py3-none-any.whl", hash = "sha256:b386f1ccbea6a48b9ab7e7f162adc456793c345193a7c1a713959562b08dcbbd"}, -] -azure-mgmt-compute = [ - {file = "azure-mgmt-compute-26.1.0.zip", hash = "sha256:2bade74fcb31d8f08816173ed5e080b3f22d1126eff7103ef060e7da16422475"}, - {file = "azure_mgmt_compute-26.1.0-py3-none-any.whl", hash = "sha256:d394a1772286e005009a3b40ebbeda135b4b1d5bda18f8af1ad4e87f6f3096e5"}, -] -azure-mgmt-core = [ - {file = "azure-mgmt-core-1.3.1.zip", hash = "sha256:c89ebf18c227bc98a1eecca95460b8a7e230590d456c8fa9c2d5acdc670f7808"}, - {file = "azure_mgmt_core-1.3.1-py3-none-any.whl", hash = "sha256:9667b9d65f2b41fed854e9d3a56f293739d327bf0d4e16252d9e785a6f4fe581"}, -] -azure-mgmt-marketplaceordering = [ - {file = "azure-mgmt-marketplaceordering-1.1.0.zip", hash = "sha256:68b381f52a4df4435dacad5a97e1c59ac4c981f667dcca8f9d04453417d60ad8"}, - {file = "azure_mgmt_marketplaceordering-1.1.0-py2.py3-none-any.whl", hash = "sha256:dbce4ea08ead3fce6c663a0b448f7e34e92ce4cdb23393aead0a65f082cb14f0"}, -] -azure-mgmt-network = [ - {file = "azure-mgmt-network-19.3.0.zip", hash = "sha256:0b6a1ccdffd76e057ab16a6c319740a0ca68d59fedf7e9c02f2437396e72aa11"}, - {file = "azure_mgmt_network-19.3.0-py2.py3-none-any.whl", hash = "sha256:00e391243ed772ebfe551dec3a3f50c4001ac622a4c5504ef4453001f8c63433"}, -] -azure-mgmt-privatedns = [ - {file = "azure-mgmt-privatedns-1.0.0.zip", hash = "sha256:b60f16e43f7b291582c5f57bae1b083096d8303e9d9958e2c29227a55cc27c45"}, - {file = "azure_mgmt_privatedns-1.0.0-py2.py3-none-any.whl", hash = "sha256:683a3eedb65b40c56b08b5636d2c1d125db58d536989a858fed8661d1ec011b6"}, -] -azure-mgmt-resource = [ - {file = "azure-mgmt-resource-21.1.0.zip", hash = "sha256:52965ade31cd059fea2b1513d65fe616046e433de0e583dcf5c9c9bebf3ebd69"}, - {file = "azure_mgmt_resource-21.1.0-py3-none-any.whl", hash = "sha256:5c8203f72bfb483adb345f73df1be65351072f25714fc6bb77eb0d5b970aba3b"}, -] -azure-mgmt-serialconsole = [ - {file = "azure-mgmt-serialconsole-1.0.0.zip", hash = "sha256:e8b480e82704b36a5d4523c51e986212b28ac82fcaa740e8a091edf00882153b"}, - {file = "azure_mgmt_serialconsole-1.0.0-py2.py3-none-any.whl", hash = "sha256:a35fe30b8bef92261c179a0521f9fe379ef82cb320c01c157a3f789743c2c2bc"}, -] -azure-mgmt-storage = [ - {file = "azure-mgmt-storage-20.0.0.zip", hash = "sha256:6ee476b5622ff6f5954edee6eb0d8dd427b3217022855adf1ec8633ca04cdee2"}, - {file = "azure_mgmt_storage-20.0.0-py3-none-any.whl", hash = "sha256:bc7a79d16b2979a2d6e6adb0b90b323ddbd91457848095c89f73119df6c34565"}, -] -azure-storage-blob = [ - {file = "azure-storage-blob-12.13.0.zip", hash = "sha256:53f0d4cd32970ac9ff9b9753f83dd2fb3f9ac30e1d01e71638c436c509bfd884"}, - {file = "azure_storage_blob-12.13.0-py3-none-any.whl", hash = "sha256:280a6ab032845bab9627582bee78a50497ca2f14772929b5c5ee8b4605af0cb3"}, -] -azure-storage-file-share = [ - {file = "azure-storage-file-share-12.4.0.zip", hash = "sha256:fe420825ab87df7077ba2737d2889dddd702d595b88d6e0180f2e3b061602c55"}, - {file = "azure_storage_file_share-12.4.0-py2.py3-none-any.whl", hash = "sha256:ed8092a0f96323666d53b2c587a3974d9295a196744c99636afe22705a0e3774"}, -] -babel = [ - {file = "Babel-2.10.3-py3-none-any.whl", hash = "sha256:ff56f4892c1c4bf0d814575ea23471c230d544203c7748e8c68f0089478d48eb"}, - {file = "Babel-2.10.3.tar.gz", hash = "sha256:7614553711ee97490f732126dc077f8d0ae084ebc6a96e23db1482afabdb2c51"}, -] -bcrypt = [ - {file = "bcrypt-3.2.2-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:7180d98a96f00b1050e93f5b0f556e658605dd9f524d0b0e68ae7944673f525e"}, - {file = "bcrypt-3.2.2-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:61bae49580dce88095d669226d5076d0b9d927754cedbdf76c6c9f5099ad6f26"}, - {file = "bcrypt-3.2.2-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88273d806ab3a50d06bc6a2fc7c87d737dd669b76ad955f449c43095389bc8fb"}, - {file = "bcrypt-3.2.2-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:6d2cb9d969bfca5bc08e45864137276e4c3d3d7de2b162171def3d188bf9d34a"}, - {file = "bcrypt-3.2.2-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b02d6bfc6336d1094276f3f588aa1225a598e27f8e3388f4db9948cb707b521"}, - {file = "bcrypt-3.2.2-cp36-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a2c46100e315c3a5b90fdc53e429c006c5f962529bc27e1dfd656292c20ccc40"}, - {file = "bcrypt-3.2.2-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:7d9ba2e41e330d2af4af6b1b6ec9e6128e91343d0b4afb9282e54e5508f31baa"}, - {file = "bcrypt-3.2.2-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:cd43303d6b8a165c29ec6756afd169faba9396a9472cdff753fe9f19b96ce2fa"}, - {file = "bcrypt-3.2.2-cp36-abi3-win32.whl", hash = "sha256:4e029cef560967fb0cf4a802bcf4d562d3d6b4b1bf81de5ec1abbe0f1adb027e"}, - {file = "bcrypt-3.2.2-cp36-abi3-win_amd64.whl", hash = "sha256:7ff2069240c6bbe49109fe84ca80508773a904f5a8cb960e02a977f7f519b129"}, - {file = "bcrypt-3.2.2.tar.gz", hash = "sha256:433c410c2177057705da2a9f2cd01dd157493b2a7ac14c8593a16b3dab6b6bfb"}, -] -black = [ - {file = "black-22.6.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f586c26118bc6e714ec58c09df0157fe2d9ee195c764f630eb0d8e7ccce72e69"}, - {file = "black-22.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b270a168d69edb8b7ed32c193ef10fd27844e5c60852039599f9184460ce0807"}, - {file = "black-22.6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6797f58943fceb1c461fb572edbe828d811e719c24e03375fd25170ada53825e"}, - {file = "black-22.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c85928b9d5f83b23cee7d0efcb310172412fbf7cb9d9ce963bd67fd141781def"}, - {file = "black-22.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:f6fe02afde060bbeef044af7996f335fbe90b039ccf3f5eb8f16df8b20f77666"}, - {file = "black-22.6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cfaf3895a9634e882bf9d2363fed5af8888802d670f58b279b0bece00e9a872d"}, - {file = "black-22.6.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94783f636bca89f11eb5d50437e8e17fbc6a929a628d82304c80fa9cd945f256"}, - {file = "black-22.6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2ea29072e954a4d55a2ff58971b83365eba5d3d357352a07a7a4df0d95f51c78"}, - {file = "black-22.6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e439798f819d49ba1c0bd9664427a05aab79bfba777a6db94fd4e56fae0cb849"}, - {file = "black-22.6.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:187d96c5e713f441a5829e77120c269b6514418f4513a390b0499b0987f2ff1c"}, - {file = "black-22.6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:074458dc2f6e0d3dab7928d4417bb6957bb834434516f21514138437accdbe90"}, - {file = "black-22.6.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a218d7e5856f91d20f04e931b6f16d15356db1c846ee55f01bac297a705ca24f"}, - {file = "black-22.6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:568ac3c465b1c8b34b61cd7a4e349e93f91abf0f9371eda1cf87194663ab684e"}, - {file = "black-22.6.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6c1734ab264b8f7929cef8ae5f900b85d579e6cbfde09d7387da8f04771b51c6"}, - {file = "black-22.6.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9a3ac16efe9ec7d7381ddebcc022119794872abce99475345c5a61aa18c45ad"}, - {file = "black-22.6.0-cp38-cp38-win_amd64.whl", hash = "sha256:b9fd45787ba8aa3f5e0a0a98920c1012c884622c6c920dbe98dbd05bc7c70fbf"}, - {file = "black-22.6.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7ba9be198ecca5031cd78745780d65a3f75a34b2ff9be5837045dce55db83d1c"}, - {file = "black-22.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a3db5b6409b96d9bd543323b23ef32a1a2b06416d525d27e0f67e74f1446c8f2"}, - {file = "black-22.6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:560558527e52ce8afba936fcce93a7411ab40c7d5fe8c2463e279e843c0328ee"}, - {file = "black-22.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b154e6bbde1e79ea3260c4b40c0b7b3109ffcdf7bc4ebf8859169a6af72cd70b"}, - {file = "black-22.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:4af5bc0e1f96be5ae9bd7aaec219c901a94d6caa2484c21983d043371c733fc4"}, - {file = "black-22.6.0-py3-none-any.whl", hash = "sha256:ac609cf8ef5e7115ddd07d85d988d074ed00e10fbc3445aee393e70164a2219c"}, - {file = "black-22.6.0.tar.gz", hash = "sha256:6c6d39e28aed379aec40da1c65434c77d75e65bb59a1e1c283de545fb4e7c6c9"}, -] -boto3 = [ - {file = "boto3-1.24.43-py3-none-any.whl", hash = "sha256:52f16ba56e47f8393cae2d09bbfca26083958adde08027c46265bc9012f6d4bc"}, - {file = "boto3-1.24.43.tar.gz", hash = "sha256:edcfd95c2fd8335e2228ca7876e8e3967c506e1c6b42371fb557606ce7233f5a"}, -] -boto3-stubs = [ - {file = "boto3-stubs-1.24.55.tar.gz", hash = "sha256:c015920905895221d6d979d8e2939f1811a30859c80083ad59b395f27e2715ac"}, - {file = "boto3_stubs-1.24.55-py3-none-any.whl", hash = "sha256:82982097e785d86e0f041b77232ca322655e2d39941d0d2948fb8d90c779c638"}, -] -botocore = [ - {file = "botocore-1.27.43-py3-none-any.whl", hash = "sha256:3cfe585e90069e8e7b6ec10855976d974ec13a53bbf9b1a0f77193804be7cb17"}, - {file = "botocore-1.27.43.tar.gz", hash = "sha256:ade148d0e29f633f429ea6c7ea215e173c64e8b155e574950892aa4eade969d0"}, -] -botocore-stubs = [ - {file = "botocore-stubs-1.27.43.tar.gz", hash = "sha256:b1f872ea65a27ed09eb69a904e89c03bbcb2011e99180d09bb93c0aabb056bdd"}, - {file = "botocore_stubs-1.27.43-py3-none-any.whl", hash = "sha256:d5770667e229c1738753ab51faf9eb55d5d87a946f0699942d90bcca2d347cd1"}, -] -cachetools = [ - {file = "cachetools-5.2.0-py3-none-any.whl", hash = "sha256:f9f17d2aec496a9aa6b76f53e3b614c965223c061982d434d160f930c698a9db"}, - {file = "cachetools-5.2.0.tar.gz", hash = "sha256:6a94c6402995a99c3970cc7e4884bb60b4a8639938157eeed436098bf9831757"}, -] -certifi = [ - {file = "certifi-2022.6.15-py3-none-any.whl", hash = "sha256:fe86415d55e84719d75f8b69414f6438ac3547d2078ab91b67e779ef69378412"}, - {file = "certifi-2022.6.15.tar.gz", hash = "sha256:84c85a9078b11105f04f3036a9482ae10e4621616db313fe045dd24743a0820d"}, -] -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.1.0.tar.gz", hash = "sha256:575e708016ff3a5e3681541cb9d79312c416835686d054a23accb873b254f413"}, - {file = "charset_normalizer-2.1.0-py3-none-any.whl", hash = "sha256:5189b6f22b01957427f35b6a08d9a0bc45b46d3788ef5a92e978433c7a35f8a5"}, -] -click = [ - {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, - {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, -] -colorama = [ - {file = "colorama-0.4.5-py2.py3-none-any.whl", hash = "sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da"}, - {file = "colorama-0.4.5.tar.gz", hash = "sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4"}, -] -coverage = [ - {file = "coverage-5.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:b6d534e4b2ab35c9f93f46229363e17f63c53ad01330df9f2d6bd1187e5eaacf"}, - {file = "coverage-5.5-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:b7895207b4c843c76a25ab8c1e866261bcfe27bfaa20c192de5190121770672b"}, - {file = "coverage-5.5-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:c2723d347ab06e7ddad1a58b2a821218239249a9e4365eaff6649d31180c1669"}, - {file = "coverage-5.5-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:900fbf7759501bc7807fd6638c947d7a831fc9fdf742dc10f02956ff7220fa90"}, - {file = "coverage-5.5-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:004d1880bed2d97151facef49f08e255a20ceb6f9432df75f4eef018fdd5a78c"}, - {file = "coverage-5.5-cp27-cp27m-win32.whl", hash = "sha256:06191eb60f8d8a5bc046f3799f8a07a2d7aefb9504b0209aff0b47298333302a"}, - {file = "coverage-5.5-cp27-cp27m-win_amd64.whl", hash = "sha256:7501140f755b725495941b43347ba8a2777407fc7f250d4f5a7d2a1050ba8e82"}, - {file = "coverage-5.5-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:372da284cfd642d8e08ef606917846fa2ee350f64994bebfbd3afb0040436905"}, - {file = "coverage-5.5-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:8963a499849a1fc54b35b1c9f162f4108017b2e6db2c46c1bed93a72262ed083"}, - {file = "coverage-5.5-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:869a64f53488f40fa5b5b9dcb9e9b2962a66a87dab37790f3fcfb5144b996ef5"}, - {file = "coverage-5.5-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:4a7697d8cb0f27399b0e393c0b90f0f1e40c82023ea4d45d22bce7032a5d7b81"}, - {file = "coverage-5.5-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:8d0a0725ad7c1a0bcd8d1b437e191107d457e2ec1084b9f190630a4fb1af78e6"}, - {file = "coverage-5.5-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:51cb9476a3987c8967ebab3f0fe144819781fca264f57f89760037a2ea191cb0"}, - {file = "coverage-5.5-cp310-cp310-win_amd64.whl", hash = "sha256:c0891a6a97b09c1f3e073a890514d5012eb256845c451bd48f7968ef939bf4ae"}, - {file = "coverage-5.5-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:3487286bc29a5aa4b93a072e9592f22254291ce96a9fbc5251f566b6b7343cdb"}, - {file = "coverage-5.5-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:deee1077aae10d8fa88cb02c845cfba9b62c55e1183f52f6ae6a2df6a2187160"}, - {file = "coverage-5.5-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:f11642dddbb0253cc8853254301b51390ba0081750a8ac03f20ea8103f0c56b6"}, - {file = "coverage-5.5-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:6c90e11318f0d3c436a42409f2749ee1a115cd8b067d7f14c148f1ce5574d701"}, - {file = "coverage-5.5-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:30c77c1dc9f253283e34c27935fded5015f7d1abe83bc7821680ac444eaf7793"}, - {file = "coverage-5.5-cp35-cp35m-win32.whl", hash = "sha256:9a1ef3b66e38ef8618ce5fdc7bea3d9f45f3624e2a66295eea5e57966c85909e"}, - {file = "coverage-5.5-cp35-cp35m-win_amd64.whl", hash = "sha256:972c85d205b51e30e59525694670de6a8a89691186012535f9d7dbaa230e42c3"}, - {file = "coverage-5.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:af0e781009aaf59e25c5a678122391cb0f345ac0ec272c7961dc5455e1c40066"}, - {file = "coverage-5.5-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:74d881fc777ebb11c63736622b60cb9e4aee5cace591ce274fb69e582a12a61a"}, - {file = "coverage-5.5-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:92b017ce34b68a7d67bd6d117e6d443a9bf63a2ecf8567bb3d8c6c7bc5014465"}, - {file = "coverage-5.5-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:d636598c8305e1f90b439dbf4f66437de4a5e3c31fdf47ad29542478c8508bbb"}, - {file = "coverage-5.5-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:41179b8a845742d1eb60449bdb2992196e211341818565abded11cfa90efb821"}, - {file = "coverage-5.5-cp36-cp36m-win32.whl", hash = "sha256:040af6c32813fa3eae5305d53f18875bedd079960822ef8ec067a66dd8afcd45"}, - {file = "coverage-5.5-cp36-cp36m-win_amd64.whl", hash = "sha256:5fec2d43a2cc6965edc0bb9e83e1e4b557f76f843a77a2496cbe719583ce8184"}, - {file = "coverage-5.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:18ba8bbede96a2c3dde7b868de9dcbd55670690af0988713f0603f037848418a"}, - {file = "coverage-5.5-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:2910f4d36a6a9b4214bb7038d537f015346f413a975d57ca6b43bf23d6563b53"}, - {file = "coverage-5.5-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:f0b278ce10936db1a37e6954e15a3730bea96a0997c26d7fee88e6c396c2086d"}, - {file = "coverage-5.5-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:796c9c3c79747146ebd278dbe1e5c5c05dd6b10cc3bcb8389dfdf844f3ead638"}, - {file = "coverage-5.5-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:53194af30d5bad77fcba80e23a1441c71abfb3e01192034f8246e0d8f99528f3"}, - {file = "coverage-5.5-cp37-cp37m-win32.whl", hash = "sha256:184a47bbe0aa6400ed2d41d8e9ed868b8205046518c52464fde713ea06e3a74a"}, - {file = "coverage-5.5-cp37-cp37m-win_amd64.whl", hash = "sha256:2949cad1c5208b8298d5686d5a85b66aae46d73eec2c3e08c817dd3513e5848a"}, - {file = "coverage-5.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:217658ec7187497e3f3ebd901afdca1af062b42cfe3e0dafea4cced3983739f6"}, - {file = "coverage-5.5-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1aa846f56c3d49205c952d8318e76ccc2ae23303351d9270ab220004c580cfe2"}, - {file = "coverage-5.5-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:24d4a7de75446be83244eabbff746d66b9240ae020ced65d060815fac3423759"}, - {file = "coverage-5.5-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:d1f8bf7b90ba55699b3a5e44930e93ff0189aa27186e96071fac7dd0d06a1873"}, - {file = "coverage-5.5-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:970284a88b99673ccb2e4e334cfb38a10aab7cd44f7457564d11898a74b62d0a"}, - {file = "coverage-5.5-cp38-cp38-win32.whl", hash = "sha256:01d84219b5cdbfc8122223b39a954820929497a1cb1422824bb86b07b74594b6"}, - {file = "coverage-5.5-cp38-cp38-win_amd64.whl", hash = "sha256:2e0d881ad471768bf6e6c2bf905d183543f10098e3b3640fc029509530091502"}, - {file = "coverage-5.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d1f9ce122f83b2305592c11d64f181b87153fc2c2bbd3bb4a3dde8303cfb1a6b"}, - {file = "coverage-5.5-cp39-cp39-manylinux1_i686.whl", hash = "sha256:13c4ee887eca0f4c5a247b75398d4114c37882658300e153113dafb1d76de529"}, - {file = "coverage-5.5-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:52596d3d0e8bdf3af43db3e9ba8dcdaac724ba7b5ca3f6358529d56f7a166f8b"}, - {file = "coverage-5.5-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:2cafbbb3af0733db200c9b5f798d18953b1a304d3f86a938367de1567f4b5bff"}, - {file = "coverage-5.5-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:44d654437b8ddd9eee7d1eaee28b7219bec228520ff809af170488fd2fed3e2b"}, - {file = "coverage-5.5-cp39-cp39-win32.whl", hash = "sha256:d314ed732c25d29775e84a960c3c60808b682c08d86602ec2c3008e1202e3bb6"}, - {file = "coverage-5.5-cp39-cp39-win_amd64.whl", hash = "sha256:13034c4409db851670bc9acd836243aeee299949bd5673e11844befcb0149f03"}, - {file = "coverage-5.5-pp36-none-any.whl", hash = "sha256:f030f8873312a16414c0d8e1a1ddff2d3235655a2174e3648b4fa66b3f2f1079"}, - {file = "coverage-5.5-pp37-none-any.whl", hash = "sha256:2a3859cb82dcbda1cfd3e6f71c27081d18aa251d20a17d87d26d4cd216fb0af4"}, - {file = "coverage-5.5.tar.gz", hash = "sha256:ebe78fe9a0e874362175b02371bdfbee64d8edc42a044253ddf4ee7d3c15212c"}, -] -cryptography = [ - {file = "cryptography-37.0.4-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:549153378611c0cca1042f20fd9c5030d37a72f634c9326e225c9f666d472884"}, - {file = "cryptography-37.0.4-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:a958c52505c8adf0d3822703078580d2c0456dd1d27fabfb6f76fe63d2971cd6"}, - {file = "cryptography-37.0.4-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f721d1885ecae9078c3f6bbe8a88bc0786b6e749bf32ccec1ef2b18929a05046"}, - {file = "cryptography-37.0.4-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:3d41b965b3380f10e4611dbae366f6dc3cefc7c9ac4e8842a806b9672ae9add5"}, - {file = "cryptography-37.0.4-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:80f49023dd13ba35f7c34072fa17f604d2f19bf0989f292cedf7ab5770b87a0b"}, - {file = "cryptography-37.0.4-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2dcb0b3b63afb6df7fd94ec6fbddac81b5492513f7b0436210d390c14d46ee8"}, - {file = "cryptography-37.0.4-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:b7f8dd0d4c1f21759695c05a5ec8536c12f31611541f8904083f3dc582604280"}, - {file = "cryptography-37.0.4-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:30788e070800fec9bbcf9faa71ea6d8068f5136f60029759fd8c3efec3c9dcb3"}, - {file = "cryptography-37.0.4-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:190f82f3e87033821828f60787cfa42bff98404483577b591429ed99bed39d59"}, - {file = "cryptography-37.0.4-cp36-abi3-win32.whl", hash = "sha256:b62439d7cd1222f3da897e9a9fe53bbf5c104fff4d60893ad1355d4c14a24157"}, - {file = "cryptography-37.0.4-cp36-abi3-win_amd64.whl", hash = "sha256:f7a6de3e98771e183645181b3627e2563dcde3ce94a9e42a3f427d2255190327"}, - {file = "cryptography-37.0.4-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc95ed67b6741b2607298f9ea4932ff157e570ef456ef7ff0ef4884a134cc4b"}, - {file = "cryptography-37.0.4-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:f8c0a6e9e1dd3eb0414ba320f85da6b0dcbd543126e30fcc546e7372a7fbf3b9"}, - {file = "cryptography-37.0.4-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:e007f052ed10cc316df59bc90fbb7ff7950d7e2919c9757fd42a2b8ecf8a5f67"}, - {file = "cryptography-37.0.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bc997818309f56c0038a33b8da5c0bfbb3f1f067f315f9abd6fc07ad359398d"}, - {file = "cryptography-37.0.4-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:d204833f3c8a33bbe11eda63a54b1aad7aa7456ed769a982f21ec599ba5fa282"}, - {file = "cryptography-37.0.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:75976c217f10d48a8b5a8de3d70c454c249e4b91851f6838a4e48b8f41eb71aa"}, - {file = "cryptography-37.0.4-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:7099a8d55cd49b737ffc99c17de504f2257e3787e02abe6d1a6d136574873441"}, - {file = "cryptography-37.0.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2be53f9f5505673eeda5f2736bea736c40f051a739bfae2f92d18aed1eb54596"}, - {file = "cryptography-37.0.4-pp39-pypy39_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:91ce48d35f4e3d3f1d83e29ef4a9267246e6a3be51864a5b7d2247d5086fa99a"}, - {file = "cryptography-37.0.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:4c590ec31550a724ef893c50f9a97a0c14e9c851c85621c5650d699a7b88f7ab"}, - {file = "cryptography-37.0.4.tar.gz", hash = "sha256:63f9c17c0e2474ccbebc9302ce2f07b55b3b3fcb211ded18a42d5764f5c10a82"}, -] -dataclasses-json = [ - {file = "dataclasses-json-0.5.7.tar.gz", hash = "sha256:c2c11bc8214fbf709ffc369d11446ff6945254a7f09128154a7620613d8fda90"}, - {file = "dataclasses_json-0.5.7-py3-none-any.whl", hash = "sha256:bc285b5f892094c3a53d558858a88553dd6a61a11ab1a8128a0e554385dcc5dd"}, -] -decorator = [ - {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, - {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, -] -docutils = [ - {file = "docutils-0.16-py2.py3-none-any.whl", hash = "sha256:0c5b78adfbf7762415433f5515cd5c9e762339e23369dbe8000d84a4bf4ab3af"}, - {file = "docutils-0.16.tar.gz", hash = "sha256:c2de3a60e9e7d07be26b7f2b00ca0309c207e06c100f9cc2a94931fc75a478fc"}, -] -flake8 = [ - {file = "flake8-4.0.1-py2.py3-none-any.whl", hash = "sha256:479b1304f72536a55948cb40a32dce8bb0ffe3501e26eaf292c7e60eb5e0428d"}, - {file = "flake8-4.0.1.tar.gz", hash = "sha256:806e034dda44114815e23c16ef92f95c91e4c71100ff52813adf7132a6ad870d"}, -] -flake8-black = [ - {file = "flake8-black-0.3.3.tar.gz", hash = "sha256:8211f5e20e954cb57c709acccf2f3281ce27016d4c4b989c3e51f878bb7ce12a"}, - {file = "flake8_black-0.3.3-py3-none-any.whl", hash = "sha256:7d667d0059fd1aa468de1669d77cc934b7f1feeac258d57bdae69a8e73c4cd90"}, -] -flake8-bugbear = [ - {file = "flake8-bugbear-22.7.1.tar.gz", hash = "sha256:e450976a07e4f9d6c043d4f72b17ec1baf717fe37f7997009c8ae58064f88305"}, - {file = "flake8_bugbear-22.7.1-py3-none-any.whl", hash = "sha256:db5d7a831ef4412a224b26c708967ff816818cabae415e76b8c58df156c4b8e5"}, -] -flake8-isort = [ - {file = "flake8-isort-4.1.2.post0.tar.gz", hash = "sha256:dee69bc3c09f0832df88acf795845db8a6673b79237371a05fa927ce095248e5"}, - {file = "flake8_isort-4.1.2.post0-py3-none-any.whl", hash = "sha256:4f95b40706dbb507cff872b34683283662e945d6028d3c8257e69de5fc6b7446"}, -] -flake8-polyfill = [ - {file = "flake8-polyfill-1.0.2.tar.gz", hash = "sha256:e44b087597f6da52ec6393a709e7108b2905317d0c0b744cdca6208e670d8eda"}, - {file = "flake8_polyfill-1.0.2-py2.py3-none-any.whl", hash = "sha256:12be6a34ee3ab795b19ca73505e7b55826d5f6ad7230d31b18e106400169b9e9"}, -] -func-timeout = [ - {file = "func_timeout-4.3.5.tar.gz", hash = "sha256:74cd3c428ec94f4edfba81f9b2f14904846d5ffccc27c92433b8b5939b5575dd"}, -] -icontract = [ - {file = "icontract-2.6.1.tar.gz", hash = "sha256:dacfc55009993058cd17576faa291ab76b6f39d80ec9d1e524778cd79da11857"}, -] -idna = [ - {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, - {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, -] -imagesize = [ - {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, - {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, -] -importlib-metadata = [ - {file = "importlib_metadata-4.12.0-py3-none-any.whl", hash = "sha256:7401a975809ea1fdc658c3aa4f78cc2195a0e019c5cbc4c06122884e9ae80c23"}, - {file = "importlib_metadata-4.12.0.tar.gz", hash = "sha256:637245b8bab2b6502fcbc752cc4b7a6f6243bb02b31c5c26156ad103d3d45670"}, -] -iniconfig = [ - {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, - {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, -] -isodate = [ - {file = "isodate-0.6.1-py2.py3-none-any.whl", hash = "sha256:0751eece944162659049d35f4f549ed815792b38793f07cf73381c1c87cbed96"}, - {file = "isodate-0.6.1.tar.gz", hash = "sha256:48c5881de7e8b0a0d648cb024c8062dc84e7b840ed81e864c7614fd3c127bde9"}, -] -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.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, - {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, -] -jmespath = [ - {file = "jmespath-1.0.1-py3-none-any.whl", hash = "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980"}, - {file = "jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe"}, -] -libvirt-python = [ - {file = "libvirt-python-8.9.0.tar.gz", hash = "sha256:2e1cfc3b9bd288b3cac400a6b03593633814236dbd1ecf5a900057bb90181c65"}, -] -markupsafe = [ - {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-win32.whl", hash = "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-win32.whl", hash = "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-win32.whl", hash = "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-win32.whl", hash = "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247"}, - {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"}, -] -marshmallow = [ - {file = "marshmallow-3.17.0-py3-none-any.whl", hash = "sha256:00040ab5ea0c608e8787137627a8efae97fabd60552a05dc889c888f814e75eb"}, - {file = "marshmallow-3.17.0.tar.gz", hash = "sha256:635fb65a3285a31a30f276f30e958070f5214c7196202caa5c7ecf28f5274bc7"}, -] -marshmallow-enum = [ - {file = "marshmallow-enum-1.5.1.tar.gz", hash = "sha256:38e697e11f45a8e64b4a1e664000897c659b60aa57bfa18d44e226a9920b6e58"}, - {file = "marshmallow_enum-1.5.1-py2.py3-none-any.whl", hash = "sha256:57161ab3dbfde4f57adeb12090f39592e992b9c86d206d02f6bd03ebec60f072"}, -] -mccabe = [ - {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, - {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, -] -msal = [ - {file = "msal-1.18.0-py2.py3-none-any.whl", hash = "sha256:9c10e6cb32e0b6b8eaafc1c9a68bc3b2ff71505e0c5b8200799582d8b9f22947"}, - {file = "msal-1.18.0.tar.gz", hash = "sha256:576af55866038b60edbcb31d831325a1bd8241ed272186e2832968fd4717d202"}, -] -msal-extensions = [ - {file = "msal-extensions-1.0.0.tar.gz", hash = "sha256:c676aba56b0cce3783de1b5c5ecfe828db998167875126ca4b47dc6436451354"}, - {file = "msal_extensions-1.0.0-py2.py3-none-any.whl", hash = "sha256:91e3db9620b822d0ed2b4d1850056a0f133cba04455e62f11612e40f5502f2ee"}, -] -msrest = [ - {file = "msrest-0.7.1-py3-none-any.whl", hash = "sha256:21120a810e1233e5e6cc7fe40b474eeb4ec6f757a15d7cf86702c369f9567c32"}, - {file = "msrest-0.7.1.zip", hash = "sha256:6e7661f46f3afd88b75667b7187a92829924446c7ea1d169be8c4bb7eeb788b9"}, -] -mypy = [ - {file = "mypy-0.942-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5bf44840fb43ac4074636fd47ee476d73f0039f4f54e86d7265077dc199be24d"}, - {file = "mypy-0.942-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dcd955f36e0180258a96f880348fbca54ce092b40fbb4b37372ae3b25a0b0a46"}, - {file = "mypy-0.942-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6776e5fa22381cc761df53e7496a805801c1a751b27b99a9ff2f0ca848c7eca0"}, - {file = "mypy-0.942-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:edf7237137a1a9330046dbb14796963d734dd740a98d5e144a3eb1d267f5f9ee"}, - {file = "mypy-0.942-cp310-cp310-win_amd64.whl", hash = "sha256:64235137edc16bee6f095aba73be5334677d6f6bdb7fa03cfab90164fa294a17"}, - {file = "mypy-0.942-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b840cfe89c4ab6386c40300689cd8645fc8d2d5f20101c7f8bd23d15fca14904"}, - {file = "mypy-0.942-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2b184db8c618c43c3a31b32ff00cd28195d39e9c24e7c3b401f3db7f6e5767f5"}, - {file = "mypy-0.942-cp36-cp36m-win_amd64.whl", hash = "sha256:1a0459c333f00e6a11cbf6b468b870c2b99a906cb72d6eadf3d1d95d38c9352c"}, - {file = "mypy-0.942-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4c3e497588afccfa4334a9986b56f703e75793133c4be3a02d06a3df16b67a58"}, - {file = "mypy-0.942-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6f6ad963172152e112b87cc7ec103ba0f2db2f1cd8997237827c052a3903eaa6"}, - {file = "mypy-0.942-cp37-cp37m-win_amd64.whl", hash = "sha256:0e2dd88410937423fba18e57147dd07cd8381291b93d5b1984626f173a26543e"}, - {file = "mypy-0.942-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:246e1aa127d5b78488a4a0594bd95f6d6fb9d63cf08a66dafbff8595d8891f67"}, - {file = "mypy-0.942-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d8d3ba77e56b84cd47a8ee45b62c84b6d80d32383928fe2548c9a124ea0a725c"}, - {file = "mypy-0.942-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2bc249409a7168d37c658e062e1ab5173300984a2dada2589638568ddc1db02b"}, - {file = "mypy-0.942-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9521c1265ccaaa1791d2c13582f06facf815f426cd8b07c3a485f486a8ffc1f3"}, - {file = "mypy-0.942-cp38-cp38-win_amd64.whl", hash = "sha256:e865fec858d75b78b4d63266c9aff770ecb6a39dfb6d6b56c47f7f8aba6baba8"}, - {file = "mypy-0.942-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6ce34a118d1a898f47def970a2042b8af6bdcc01546454726c7dd2171aa6dfca"}, - {file = "mypy-0.942-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:10daab80bc40f84e3f087d896cdb53dc811a9f04eae4b3f95779c26edee89d16"}, - {file = "mypy-0.942-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3841b5433ff936bff2f4dc8d54cf2cdbfea5d8e88cedfac45c161368e5770ba6"}, - {file = "mypy-0.942-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6f7106cbf9cc2f403693bf50ed7c9fa5bb3dfa9007b240db3c910929abe2a322"}, - {file = "mypy-0.942-cp39-cp39-win_amd64.whl", hash = "sha256:7742d2c4e46bb5017b51c810283a6a389296cda03df805a4f7869a6f41246534"}, - {file = "mypy-0.942-py3-none-any.whl", hash = "sha256:a1b383fe99678d7402754fe90448d4037f9512ce70c21f8aee3b8bf48ffc51db"}, - {file = "mypy-0.942.tar.gz", hash = "sha256:17e44649fec92e9f82102b48a3bf7b4a5510ad0cd22fa21a104826b5db4903e2"}, -] -mypy-boto3-cloudformation = [ - {file = "mypy-boto3-cloudformation-1.24.36.post1.tar.gz", hash = "sha256:ed7df9ae3a8390a145229122a1489d0a58bbf9986cb54f0d7a65ed54f12c8e63"}, - {file = "mypy_boto3_cloudformation-1.24.36.post1-py3-none-any.whl", hash = "sha256:b39020c13a876bb18908aad22326478d0ac3faec0bdac0d2c11dc318c9dcf149"}, -] -mypy-boto3-dynamodb = [ - {file = "mypy-boto3-dynamodb-1.24.36.post1.tar.gz", hash = "sha256:98effbb0fba61e88530aad75169ddf1edb29c50686af1f87ef21be6292ba0169"}, - {file = "mypy_boto3_dynamodb-1.24.36.post1-py3-none-any.whl", hash = "sha256:73d67be16aadfbd71504e462b0c8c1cd4c6779c02e816c88ba5dfe9545101188"}, -] -mypy-boto3-ec2 = [ - {file = "mypy-boto3-ec2-1.24.41.tar.gz", hash = "sha256:905dbabf810fda113360c541aee1b82d88e83893b40b8158588a749aedf508f0"}, - {file = "mypy_boto3_ec2-1.24.41-py3-none-any.whl", hash = "sha256:ea56af2e03e28b88132f3362a49a2f897588a8b1a9c0af70df7db86264fe3c4f"}, -] -mypy-boto3-lambda = [ - {file = "mypy-boto3-lambda-1.24.40.tar.gz", hash = "sha256:df7a0e0d7eb74e6414fbf0514565c849d00380cabab2e2c6211af89836080fc9"}, - {file = "mypy_boto3_lambda-1.24.40-py3-none-any.whl", hash = "sha256:c8882308b62617313c78ab43c5c5ca16aa43ca496da9c5d7f855393d2ef42166"}, -] -mypy-boto3-rds = [ - {file = "mypy-boto3-rds-1.24.38.tar.gz", hash = "sha256:7345f519780b1ce2bc910ae658df1b2107efb089663c15b21d72f5af5e3163cc"}, - {file = "mypy_boto3_rds-1.24.38-py3-none-any.whl", hash = "sha256:72db5c95c8422160dec32ff4e9cf0d6b9e777047252fe28624f0f8078da46e86"}, -] -mypy-boto3-s3 = [ - {file = "mypy-boto3-s3-1.24.36.post1.tar.gz", hash = "sha256:3bd7e06f9ade5059eae2181d7a9f1a41e7fa807ad3e94c01c9901838e87e0abe"}, - {file = "mypy_boto3_s3-1.24.36.post1-py3-none-any.whl", hash = "sha256:30ae59b33c55f8b7b693170f9519ea5b91a2fbf31a73de79cdef57a27d784e5a"}, -] -mypy-boto3-sqs = [ - {file = "mypy-boto3-sqs-1.24.40.tar.gz", hash = "sha256:7d1abf1a95f8113cd40637f46a30a820cee871cb53d65c9a20495fcda3be3073"}, - {file = "mypy_boto3_sqs-1.24.40-py3-none-any.whl", hash = "sha256:875a1b411665771fc7398546b18639f4e4c1a9fb3cf161bf77891ac869ac40f8"}, -] -mypy-extensions = [ - {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, - {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, -] -oauthlib = [ - {file = "oauthlib-3.2.1-py3-none-any.whl", hash = "sha256:88e912ca1ad915e1dcc1c06fc9259d19de8deacd6fd17cc2df266decc2e49066"}, - {file = "oauthlib-3.2.1.tar.gz", hash = "sha256:1565237372795bf6ee3e5aba5e2a85bd5a65d0e2aa5c628b9a97b7d7a0da3721"}, -] -packaging = [ - {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, - {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, -] -paramiko = [ - {file = "paramiko-2.11.0-py2.py3-none-any.whl", hash = "sha256:655f25dc8baf763277b933dfcea101d636581df8d6b9774d1fb653426b72c270"}, - {file = "paramiko-2.11.0.tar.gz", hash = "sha256:003e6bee7c034c21fbb051bf83dc0a9ee4106204dd3c53054c71452cc4ec3938"}, -] -pathspec = [ - {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"}, - {file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"}, -] -pep8-naming = [ - {file = "pep8-naming-0.12.1.tar.gz", hash = "sha256:bb2455947757d162aa4cad55dba4ce029005cd1692f2899a21d51d8630ca7841"}, - {file = "pep8_naming-0.12.1-py2.py3-none-any.whl", hash = "sha256:4a8daeaeb33cfcde779309fc0c9c0a68a3bbe2ad8a8308b763c5068f86eb9f37"}, -] -pillow = [ - {file = "Pillow-9.2.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:a9c9bc489f8ab30906d7a85afac4b4944a572a7432e00698a7239f44a44e6efb"}, - {file = "Pillow-9.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:510cef4a3f401c246cfd8227b300828715dd055463cdca6176c2e4036df8bd4f"}, - {file = "Pillow-9.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7888310f6214f19ab2b6df90f3f06afa3df7ef7355fc025e78a3044737fab1f5"}, - {file = "Pillow-9.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:831e648102c82f152e14c1a0938689dbb22480c548c8d4b8b248b3e50967b88c"}, - {file = "Pillow-9.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1cc1d2451e8a3b4bfdb9caf745b58e6c7a77d2e469159b0d527a4554d73694d1"}, - {file = "Pillow-9.2.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:136659638f61a251e8ed3b331fc6ccd124590eeff539de57c5f80ef3a9594e58"}, - {file = "Pillow-9.2.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:6e8c66f70fb539301e064f6478d7453e820d8a2c631da948a23384865cd95544"}, - {file = "Pillow-9.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:37ff6b522a26d0538b753f0b4e8e164fdada12db6c6f00f62145d732d8a3152e"}, - {file = "Pillow-9.2.0-cp310-cp310-win32.whl", hash = "sha256:c79698d4cd9318d9481d89a77e2d3fcaeff5486be641e60a4b49f3d2ecca4e28"}, - {file = "Pillow-9.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:254164c57bab4b459f14c64e93df11eff5ded575192c294a0c49270f22c5d93d"}, - {file = "Pillow-9.2.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:adabc0bce035467fb537ef3e5e74f2847c8af217ee0be0455d4fec8adc0462fc"}, - {file = "Pillow-9.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:336b9036127eab855beec9662ac3ea13a4544a523ae273cbf108b228ecac8437"}, - {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50dff9cc21826d2977ef2d2a205504034e3a4563ca6f5db739b0d1026658e004"}, - {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cb6259196a589123d755380b65127ddc60f4c64b21fc3bb46ce3a6ea663659b0"}, - {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b0554af24df2bf96618dac71ddada02420f946be943b181108cac55a7a2dcd4"}, - {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:15928f824870535c85dbf949c09d6ae7d3d6ac2d6efec80f3227f73eefba741c"}, - {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:bdd0de2d64688ecae88dd8935012c4a72681e5df632af903a1dca8c5e7aa871a"}, - {file = "Pillow-9.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d5b87da55a08acb586bad5c3aa3b86505f559b84f39035b233d5bf844b0834b1"}, - {file = "Pillow-9.2.0-cp311-cp311-win32.whl", hash = "sha256:b6d5e92df2b77665e07ddb2e4dbd6d644b78e4c0d2e9272a852627cdba0d75cf"}, - {file = "Pillow-9.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:6bf088c1ce160f50ea40764f825ec9b72ed9da25346216b91361eef8ad1b8f8c"}, - {file = "Pillow-9.2.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:2c58b24e3a63efd22554c676d81b0e57f80e0a7d3a5874a7e14ce90ec40d3069"}, - {file = "Pillow-9.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eef7592281f7c174d3d6cbfbb7ee5984a671fcd77e3fc78e973d492e9bf0eb3f"}, - {file = "Pillow-9.2.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dcd7b9c7139dc8258d164b55696ecd16c04607f1cc33ba7af86613881ffe4ac8"}, - {file = "Pillow-9.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a138441e95562b3c078746a22f8fca8ff1c22c014f856278bdbdd89ca36cff1b"}, - {file = "Pillow-9.2.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:93689632949aff41199090eff5474f3990b6823404e45d66a5d44304e9cdc467"}, - {file = "Pillow-9.2.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:f3fac744f9b540148fa7715a435d2283b71f68bfb6d4aae24482a890aed18b59"}, - {file = "Pillow-9.2.0-cp37-cp37m-win32.whl", hash = "sha256:fa768eff5f9f958270b081bb33581b4b569faabf8774726b283edb06617101dc"}, - {file = "Pillow-9.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:69bd1a15d7ba3694631e00df8de65a8cb031911ca11f44929c97fe05eb9b6c1d"}, - {file = "Pillow-9.2.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:030e3460861488e249731c3e7ab59b07c7853838ff3b8e16aac9561bb345da14"}, - {file = "Pillow-9.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:74a04183e6e64930b667d321524e3c5361094bb4af9083db5c301db64cd341f3"}, - {file = "Pillow-9.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d33a11f601213dcd5718109c09a52c2a1c893e7461f0be2d6febc2879ec2402"}, - {file = "Pillow-9.2.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fd6f5e3c0e4697fa7eb45b6e93996299f3feee73a3175fa451f49a74d092b9f"}, - {file = "Pillow-9.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a647c0d4478b995c5e54615a2e5360ccedd2f85e70ab57fbe817ca613d5e63b8"}, - {file = "Pillow-9.2.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:4134d3f1ba5f15027ff5c04296f13328fecd46921424084516bdb1b2548e66ff"}, - {file = "Pillow-9.2.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:bc431b065722a5ad1dfb4df354fb9333b7a582a5ee39a90e6ffff688d72f27a1"}, - {file = "Pillow-9.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:1536ad017a9f789430fb6b8be8bf99d2f214c76502becc196c6f2d9a75b01b76"}, - {file = "Pillow-9.2.0-cp38-cp38-win32.whl", hash = "sha256:2ad0d4df0f5ef2247e27fc790d5c9b5a0af8ade9ba340db4a73bb1a4a3e5fb4f"}, - {file = "Pillow-9.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:ec52c351b35ca269cb1f8069d610fc45c5bd38c3e91f9ab4cbbf0aebc136d9c8"}, - {file = "Pillow-9.2.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0ed2c4ef2451de908c90436d6e8092e13a43992f1860275b4d8082667fbb2ffc"}, - {file = "Pillow-9.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ad2f835e0ad81d1689f1b7e3fbac7b01bb8777d5a985c8962bedee0cc6d43da"}, - {file = "Pillow-9.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea98f633d45f7e815db648fd7ff0f19e328302ac36427343e4432c84432e7ff4"}, - {file = "Pillow-9.2.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7761afe0126d046974a01e030ae7529ed0ca6a196de3ec6937c11df0df1bc91c"}, - {file = "Pillow-9.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a54614049a18a2d6fe156e68e188da02a046a4a93cf24f373bffd977e943421"}, - {file = "Pillow-9.2.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:5aed7dde98403cd91d86a1115c78d8145c83078e864c1de1064f52e6feb61b20"}, - {file = "Pillow-9.2.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:13b725463f32df1bfeacbf3dd197fb358ae8ebcd8c5548faa75126ea425ccb60"}, - {file = "Pillow-9.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:808add66ea764ed97d44dda1ac4f2cfec4c1867d9efb16a33d158be79f32b8a4"}, - {file = "Pillow-9.2.0-cp39-cp39-win32.whl", hash = "sha256:337a74fd2f291c607d220c793a8135273c4c2ab001b03e601c36766005f36885"}, - {file = "Pillow-9.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:fac2d65901fb0fdf20363fbd345c01958a742f2dc62a8dd4495af66e3ff502a4"}, - {file = "Pillow-9.2.0-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:ad2277b185ebce47a63f4dc6302e30f05762b688f8dc3de55dbae4651872cdf3"}, - {file = "Pillow-9.2.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c7b502bc34f6e32ba022b4a209638f9e097d7a9098104ae420eb8186217ebbb"}, - {file = "Pillow-9.2.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d1f14f5f691f55e1b47f824ca4fdcb4b19b4323fe43cc7bb105988cad7496be"}, - {file = "Pillow-9.2.0-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:dfe4c1fedfde4e2fbc009d5ad420647f7730d719786388b7de0999bf32c0d9fd"}, - {file = "Pillow-9.2.0-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:f07f1f00e22b231dd3d9b9208692042e29792d6bd4f6639415d2f23158a80013"}, - {file = "Pillow-9.2.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1802f34298f5ba11d55e5bb09c31997dc0c6aed919658dfdf0198a2fe75d5490"}, - {file = "Pillow-9.2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17d4cafe22f050b46d983b71c707162d63d796a1235cdf8b9d7a112e97b15bac"}, - {file = "Pillow-9.2.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:96b5e6874431df16aee0c1ba237574cb6dff1dcb173798faa6a9d8b399a05d0e"}, - {file = "Pillow-9.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:0030fdbd926fb85844b8b92e2f9449ba89607231d3dd597a21ae72dc7fe26927"}, - {file = "Pillow-9.2.0.tar.gz", hash = "sha256:75e636fd3e0fb872693f23ccb8a5ff2cd578801251f3a4f6854c6a5d437d3c04"}, -] -platformdirs = [ - {file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"}, - {file = "platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"}, -] -pluggy = [ - {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"}, - {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"}, -] -portalocker = [ - {file = "portalocker-2.5.1-py2.py3-none-any.whl", hash = "sha256:400bae275366e7b840d4baad0654c6ec5994e07c40c423d78e9e1340279b8352"}, - {file = "portalocker-2.5.1.tar.gz", hash = "sha256:ae8e9cc2660da04bf41fa1a0eef7e300bb5e4a5869adfb1a6d8551632b559b2b"}, -] -py = [ - {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, - {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, -] -pycairo = [ - {file = "pycairo-1.21.0-cp310-cp310-win32.whl", hash = "sha256:44a2ecf34968de07b3b9dfdcdbccbd25aa3cab267200f234f84e81481a73bbf6"}, - {file = "pycairo-1.21.0-cp310-cp310-win_amd64.whl", hash = "sha256:f63c153a9ea3d21aff85e2caeee4b0c5d566b2368b4ed64826020d12953d76a4"}, - {file = "pycairo-1.21.0-cp37-cp37m-win32.whl", hash = "sha256:70936b19f967fa3cb3cd200c2608911227fa5d09dae21c166f64bc15e714ee41"}, - {file = "pycairo-1.21.0-cp37-cp37m-win_amd64.whl", hash = "sha256:31e1c4850db03201d33929cbe1905ce1b33202683ebda7bb0d4dba489115066b"}, - {file = "pycairo-1.21.0-cp38-cp38-win32.whl", hash = "sha256:dace6b356c476de27f8e1522428ac21a799c225703f746e2957d441f885dcb6c"}, - {file = "pycairo-1.21.0-cp38-cp38-win_amd64.whl", hash = "sha256:4357f20a6b1de8f1e8072a74ff68ab4c9a0ae698cd9f5c0f2b2cdd9b28b635f6"}, - {file = "pycairo-1.21.0-cp39-cp39-win32.whl", hash = "sha256:6d37375aab9f2bb6136f076c19815d72108383baae89fbc0d6cb8e5092217d02"}, - {file = "pycairo-1.21.0-cp39-cp39-win_amd64.whl", hash = "sha256:26b72b813c6f9d495f71057eab89c13e70a21c92360e9265abc049e0a931fa39"}, - {file = "pycairo-1.21.0.tar.gz", hash = "sha256:251907f18a552df938aa3386657ff4b5a4937dde70e11aa042bc297957f4b74b"}, -] -pycdlib = [ - {file = "pycdlib-1.13.0-py2.py3-none-any.whl", hash = "sha256:cb4a9b55a3ee59c24b0b024aff7f46c2f1982452c7c8e153742f008f24a69930"}, - {file = "pycdlib-1.13.0.tar.gz", hash = "sha256:38c033be82d3a671da5f779d441942907299c2113a6c50e1fb399a91ea1612f0"}, -] -pycodestyle = [ - {file = "pycodestyle-2.8.0-py2.py3-none-any.whl", hash = "sha256:720f8b39dde8b293825e7ff02c475f3077124006db4f440dcbc9a20b76548a20"}, - {file = "pycodestyle-2.8.0.tar.gz", hash = "sha256:eddd5847ef438ea1c7870ca7eb78a9d47ce0cdb4851a5523949f2601d0cbbe7f"}, -] -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-2.4.0-py2.py3-none-any.whl", hash = "sha256:3bb3a3f256f4b7968c9c788781e4ff07dce46bdf12339dcda61053375426ee2e"}, - {file = "pyflakes-2.4.0.tar.gz", hash = "sha256:05a85c2872edf37a4ed30b0cce2f6093e1d0581f8c19d7393122da7e25b2b24c"}, -] -pygments = [ - {file = "Pygments-2.12.0-py3-none-any.whl", hash = "sha256:dc9c10fb40944260f6ed4c688ece0cd2048414940f1cea51b8b226318411c519"}, - {file = "Pygments-2.12.0.tar.gz", hash = "sha256:5eb116118f9612ff1ee89ac96437bb6b49e8f04d8a13b514ba26f620208e26eb"}, -] -pygobject = [ - {file = "PyGObject-3.42.2.tar.gz", hash = "sha256:21524cef33100c8fd59dc135948b703d79d303e368ce71fa60521cc971cd8aa7"}, -] -pyjwt = [ - {file = "PyJWT-2.4.0-py3-none-any.whl", hash = "sha256:72d1d253f32dbd4f5c88eaf1fdc62f3a19f676ccbadb9dbc5d07e951b2b26daf"}, - {file = "PyJWT-2.4.0.tar.gz", hash = "sha256:d42908208c699b3b973cbeb01a969ba6a96c821eefb1c5bfe4c390c01d67abba"}, -] -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"}, -] -pyparsing = [ - {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, - {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, -] -pypiwin32 = [ - {file = "pypiwin32-223-py3-none-any.whl", hash = "sha256:67adf399debc1d5d14dffc1ab5acacb800da569754fafdc576b2a039485aa775"}, - {file = "pypiwin32-223.tar.gz", hash = "sha256:71be40c1fbd28594214ecaecb58e7aa8b708eabfa0125c8a109ebd51edbd776a"}, -] -pytest = [ - {file = "pytest-7.1.2-py3-none-any.whl", hash = "sha256:13d0e3ccfc2b6e26be000cb6568c832ba67ba32e719443bfe725814d3c42433c"}, - {file = "pytest-7.1.2.tar.gz", hash = "sha256:a06a0425453864a270bc45e71f783330a7428defb4230fb5e6a731fde06ecd45"}, -] -pytest-html = [ - {file = "pytest-html-3.1.1.tar.gz", hash = "sha256:3ee1cf319c913d19fe53aeb0bc400e7b0bc2dbeb477553733db1dad12eb75ee3"}, - {file = "pytest_html-3.1.1-py3-none-any.whl", hash = "sha256:b7f82f123936a3f4d2950bc993c2c1ca09ce262c9ae12f9ac763a2401380b455"}, -] -pytest-metadata = [ - {file = "pytest-metadata-2.0.2.tar.gz", hash = "sha256:fcd2f416f15be295943527b3c8ba16a44ae5a7141939c90c3dc5ce9d167cf2a5"}, - {file = "pytest_metadata-2.0.2-py3-none-any.whl", hash = "sha256:39261ee0086f17649b180baf2a8633e1922a4c4b6fcc28a2de7d8127a82541bf"}, -] -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"}, -] -pytoolconfig = [ - {file = "pytoolconfig-1.2.2-py3-none-any.whl", hash = "sha256:825d97b052e58b609c2684b04efeb543075588d33a4916a6dc2ae39676458c7d"}, - {file = "pytoolconfig-1.2.2.tar.gz", hash = "sha256:2512a1f261a40e73cef2e58e786184261b60c802ae7ed01249342b1949ec3aa2"}, -] -pytz = [ - {file = "pytz-2022.1-py2.py3-none-any.whl", hash = "sha256:e68985985296d9a66a881eb3193b0906246245294a881e7c8afe623866ac6a5c"}, - {file = "pytz-2022.1.tar.gz", hash = "sha256:1e760e2fe6a8163bc0b3d9a19c4f84342afa0a2affebfaa84b01b978a02ecaa7"}, -] -pywin32 = [ - {file = "pywin32-304-cp310-cp310-win32.whl", hash = "sha256:3c7bacf5e24298c86314f03fa20e16558a4e4138fc34615d7de4070c23e65af3"}, - {file = "pywin32-304-cp310-cp310-win_amd64.whl", hash = "sha256:4f32145913a2447736dad62495199a8e280a77a0ca662daa2332acf849f0be48"}, - {file = "pywin32-304-cp310-cp310-win_arm64.whl", hash = "sha256:d3ee45adff48e0551d1aa60d2ec066fec006083b791f5c3527c40cd8aefac71f"}, - {file = "pywin32-304-cp311-cp311-win32.whl", hash = "sha256:30c53d6ce44c12a316a06c153ea74152d3b1342610f1b99d40ba2795e5af0269"}, - {file = "pywin32-304-cp311-cp311-win_amd64.whl", hash = "sha256:7ffa0c0fa4ae4077e8b8aa73800540ef8c24530057768c3ac57c609f99a14fd4"}, - {file = "pywin32-304-cp311-cp311-win_arm64.whl", hash = "sha256:cbbe34dad39bdbaa2889a424d28752f1b4971939b14b1bb48cbf0182a3bcfc43"}, - {file = "pywin32-304-cp36-cp36m-win32.whl", hash = "sha256:be253e7b14bc601718f014d2832e4c18a5b023cbe72db826da63df76b77507a1"}, - {file = "pywin32-304-cp36-cp36m-win_amd64.whl", hash = "sha256:de9827c23321dcf43d2f288f09f3b6d772fee11e809015bdae9e69fe13213988"}, - {file = "pywin32-304-cp37-cp37m-win32.whl", hash = "sha256:f64c0377cf01b61bd5e76c25e1480ca8ab3b73f0c4add50538d332afdf8f69c5"}, - {file = "pywin32-304-cp37-cp37m-win_amd64.whl", hash = "sha256:bb2ea2aa81e96eee6a6b79d87e1d1648d3f8b87f9a64499e0b92b30d141e76df"}, - {file = "pywin32-304-cp38-cp38-win32.whl", hash = "sha256:94037b5259701988954931333aafd39cf897e990852115656b014ce72e052e96"}, - {file = "pywin32-304-cp38-cp38-win_amd64.whl", hash = "sha256:ead865a2e179b30fb717831f73cf4373401fc62fbc3455a0889a7ddac848f83e"}, - {file = "pywin32-304-cp39-cp39-win32.whl", hash = "sha256:25746d841201fd9f96b648a248f731c1dec851c9a08b8e33da8b56148e4c65cc"}, - {file = "pywin32-304-cp39-cp39-win_amd64.whl", hash = "sha256:d24a3382f013b21aa24a5cfbfad5a2cd9926610c0affde3e8ab5b3d7dbcf4ac9"}, -] -pyyaml = [ - {file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"}, - {file = "PyYAML-5.4.1-cp27-cp27m-win32.whl", hash = "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393"}, - {file = "PyYAML-5.4.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8"}, - {file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"}, - {file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"}, - {file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"}, - {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347"}, - {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541"}, - {file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"}, - {file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"}, - {file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"}, - {file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"}, - {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa"}, - {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"}, - {file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"}, - {file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"}, - {file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"}, - {file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"}, - {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247"}, - {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc"}, - {file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"}, - {file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"}, - {file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"}, - {file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"}, - {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122"}, - {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6"}, - {file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"}, - {file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"}, - {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"}, -] -randmac = [ - {file = "randmac-0.1-py2.py3-none-any.whl", hash = "sha256:d7694f0be05c8d4b76a7da6b2d76d18265e7c3b3f69cfc91c7083ed0390ee56a"}, - {file = "randmac-0.1.tar.gz", hash = "sha256:5dd6e7ac87bc4d66cb1c2c7e34c3d8bf6cf275ef5b5f0ed9a34e05bc829c3001"}, -] -requests = [ - {file = "requests-2.28.1-py3-none-any.whl", hash = "sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349"}, - {file = "requests-2.28.1.tar.gz", hash = "sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983"}, -] -requests-oauthlib = [ - {file = "requests-oauthlib-1.3.1.tar.gz", hash = "sha256:75beac4a47881eeb94d5ea5d6ad31ef88856affe2332b9aafb52c6452ccf0d7a"}, - {file = "requests_oauthlib-1.3.1-py2.py3-none-any.whl", hash = "sha256:2577c501a2fb8d05a304c09d090d6e47c306fef15809d102b327cf8364bddab5"}, -] -retry = [ - {file = "retry-0.9.2-py2.py3-none-any.whl", hash = "sha256:ccddf89761fa2c726ab29391837d4327f819ea14d244c232a1d24c67a2f98606"}, - {file = "retry-0.9.2.tar.gz", hash = "sha256:f8bfa8b99b69c4506d6f5bd3b0aabf77f98cdb17f3c9fc3f5ca820033336fba4"}, -] -rope = [ - {file = "rope-1.3.0-py3-none-any.whl", hash = "sha256:f0c82bd7167c2926339c6f0d9ecf7c93d6866cbe380c78639fa1bc4ac037c097"}, - {file = "rope-1.3.0.tar.gz", hash = "sha256:4e8ede637d8f43eb83847ef9ea7edbf4ceb9d641deea592ed38a8875cde64265"}, -] -rstcheck = [ - {file = "rstcheck-3.5.0-py3-none-any.whl", hash = "sha256:30c36768c4bd617a85ab93c31facaf410582e53803fde624845eb00c1430070c"}, - {file = "rstcheck-3.5.0.tar.gz", hash = "sha256:d4b035300b7d898403544f38c3a4980171ce85f487d25e188347bbafb6ee58c0"}, -] -s3transfer = [ - {file = "s3transfer-0.6.0-py3-none-any.whl", hash = "sha256:06176b74f3a15f61f1b4f25a1fc29a4429040b7647133a463da8fa5bd28d5ecd"}, - {file = "s3transfer-0.6.0.tar.gz", hash = "sha256:2ed07d3866f523cc561bf4a00fc5535827981b117dd7876f036b0c1aca42c947"}, -] -semver = [ - {file = "semver-2.13.0-py2.py3-none-any.whl", hash = "sha256:ced8b23dceb22134307c1b8abfa523da14198793d9787ac838e70e29e77458d4"}, - {file = "semver-2.13.0.tar.gz", hash = "sha256:fa0fe2722ee1c3f57eac478820c3a5ae2f624af8264cbdf9000c980ff7f75e3f"}, -] -six = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, -] -snowballstemmer = [ - {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, - {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, -] -sphinx = [ - {file = "Sphinx-4.5.0-py3-none-any.whl", hash = "sha256:ebf612653238bcc8f4359627a9b7ce44ede6fdd75d9d30f68255c7383d3a6226"}, - {file = "Sphinx-4.5.0.tar.gz", hash = "sha256:7bf8ca9637a4ee15af412d1a1d9689fec70523a68ca9bb9127c2f3eeb344e2e6"}, -] -sphinx-argparse = [ - {file = "sphinx-argparse-0.2.5.tar.gz", hash = "sha256:60ab98f80ffd38731d62e267171388a421abbc96c74901b7785a8e058b438c17"}, -] -sphinx-copybutton = [ - {file = "sphinx-copybutton-0.4.0.tar.gz", hash = "sha256:8daed13a87afd5013c3a9af3575cc4d5bec052075ccd3db243f895c07a689386"}, - {file = "sphinx_copybutton-0.4.0-py3-none-any.whl", hash = "sha256:4340d33c169dac6dd82dce2c83333412aa786a42dd01a81a8decac3b130dc8b0"}, -] -sphinx-rtd-theme = [ - {file = "sphinx_rtd_theme-0.5.2-py2.py3-none-any.whl", hash = "sha256:4a05bdbe8b1446d77a01e20a23ebc6777c74f43237035e76be89699308987d6f"}, - {file = "sphinx_rtd_theme-0.5.2.tar.gz", hash = "sha256:32bd3b5d13dc8186d7a42fc816a23d32e83a4827d7d9882948e7b837c232da5a"}, -] -sphinxcontrib-applehelp = [ - {file = "sphinxcontrib-applehelp-1.0.2.tar.gz", hash = "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58"}, - {file = "sphinxcontrib_applehelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a"}, -] -sphinxcontrib-devhelp = [ - {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, - {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, -] -sphinxcontrib-htmlhelp = [ - {file = "sphinxcontrib-htmlhelp-2.0.0.tar.gz", hash = "sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2"}, - {file = "sphinxcontrib_htmlhelp-2.0.0-py2.py3-none-any.whl", hash = "sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07"}, -] -sphinxcontrib-jsmath = [ - {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, - {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, -] -sphinxcontrib-qthelp = [ - {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, - {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, -] -sphinxcontrib-serializinghtml = [ - {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, - {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, -] -sphinxemoji = [ - {file = "sphinxemoji-0.1.9.tar.gz", hash = "sha256:faf788e5b33a4e309b721b9fa1dba4f12fec74193e5aa30040f9d4d36736444b"}, -] -spur = [ - {file = "spur-0.3.20-py2.py3-none-any.whl", hash = "sha256:f9446f418f419c046f49543ca55b35eff2e96b13cf7e0cf8605d657e5fa530ee"}, - {file = "spur-0.3.20.tar.gz", hash = "sha256:f359e0573c0e4aaf8427494d6e67bc2bfac4f0c719e47f05e4750921b5804760"}, -] -spurplus = [ - {file = "spurplus-2.3.4.tar.gz", hash = "sha256:667a88c06d43f4008ded2ee8706c8f20808f138dbd777ea07b8d9be277470116"}, -] -temppathlib = [ - {file = "temppathlib-1.2.0.tar.gz", hash = "sha256:993356dce9544b432a6202227640fc8b5aced3fbd828dff0f5d5ebaac2330f58"}, -] -toml = [ - {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, - {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, -] -tomli = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, -] -types-awscrt = [ - {file = "types-awscrt-0.13.14.tar.gz", hash = "sha256:39a69df579036fa5c390c5721a9470cb8a34e1dc216c38198f83e42d5c62f3be"}, - {file = "types_awscrt-0.13.14-py3-none-any.whl", hash = "sha256:786b99c86833bede6e848ef91d274c0ea97caad8c5fba9d9f61c05564ad56633"}, -] -types-cachetools = [ - {file = "types-cachetools-5.2.1.tar.gz", hash = "sha256:069cfc825697cd51445c1feabbe4edc1fae2b2315870e7a9a179a7c4a5851bee"}, - {file = "types_cachetools-5.2.1-py3-none-any.whl", hash = "sha256:b496b7e364ba050c4eaadcc6582f2c9fbb04f8ee7141eb3b311a8589dbd4506a"}, -] -types-cryptography = [ - {file = "types-cryptography-3.3.21.tar.gz", hash = "sha256:ad1b9c63159c009f8676c7e41a4d595dfb96e8c03affa2e693e1617908bb409e"}, - {file = "types_cryptography-3.3.21-py3-none-any.whl", hash = "sha256:bdeb6dd07280ac724e05f02e0d8ef01fdef729b18bb07d635d64de83171a4e70"}, -] -types-paramiko = [ - {file = "types-paramiko-0.1.9.tar.gz", hash = "sha256:161f368940648230d5a3b7982b5cfc7995c893ee5f2f1c3b24af5d0a86739f12"}, - {file = "types_paramiko-0.1.9-py3-none-any.whl", hash = "sha256:e176389cd6c8884a90e2d0d0eaad5a4ec549a43d863308ff9ea0324925f65407"}, -] -types-pillow = [ - {file = "types-Pillow-8.3.11.tar.gz", hash = "sha256:aa96a739184f48f69e6f30218400623fc5a95f5fec199c447663a32538440405"}, - {file = "types_Pillow-8.3.11-py3-none-any.whl", hash = "sha256:998189334e616b1dd42c9634669efbf726184039e96e9a23ec95246e0ecff3fc"}, -] -types-python-dateutil = [ - {file = "types-python-dateutil-0.1.6.tar.gz", hash = "sha256:b02de39a54ce6e3fadfdc7dba77d8519fbfb6ca049920e190b5f89c74d5f9de6"}, - {file = "types_python_dateutil-0.1.6-py3-none-any.whl", hash = "sha256:5b6241ea9fca2d8878cc152017d9524da62a7a856b98e31006e68b02aab47442"}, -] -types-pyyaml = [ - {file = "types-PyYAML-5.4.12.tar.gz", hash = "sha256:3f4daa754357491625ae8c3a39c9e1b0d7cd5632bc4e1c35e7a7f75a64aa124b"}, - {file = "types_PyYAML-5.4.12-py3-none-any.whl", hash = "sha256:e06083f85375a5678e4c19452ed6467ce2167b71db222313e1792cb8fc76859a"}, -] -types-requests = [ - {file = "types-requests-2.28.7.tar.gz", hash = "sha256:36385618d4bd2ee3211d4d2e78b44f067ceb5984865c0f253f3c9ecb964526cf"}, - {file = "types_requests-2.28.7-py3-none-any.whl", hash = "sha256:38015d310d13cf7d4d712d2507178349e13fd5dab85259dab7d9a9884c2c9c2a"}, -] -types-retry = [ - {file = "types-retry-0.1.5.tar.gz", hash = "sha256:d4634dfb072f2208bd0cd919c9c46c9f4fe517d57f683aad3897098478d1dcb0"}, - {file = "types_retry-0.1.5-py3-none-any.whl", hash = "sha256:d40287362de2bac4b18e7d6764f4bee7b0d8667c4f806a7efb542398156394a2"}, -] -types-s3transfer = [ - {file = "types-s3transfer-0.6.0.post4.tar.gz", hash = "sha256:0c45331bfd0db210f5043efd2bc3ecd4b3482a02c28faea33edf719b6be38431"}, - {file = "types_s3transfer-0.6.0.post4-py3-none-any.whl", hash = "sha256:78f9ea029fedc97e1a5d323edd149a827d4ab361d11cd92bb1b5f235ff84ba72"}, -] -types-toml = [ - {file = "types-toml-0.1.5.tar.gz", hash = "sha256:fc5e1df92c245404e4360c63568e9f0e732b0cabea7a220a4788d52b78f5dc59"}, - {file = "types_toml-0.1.5-py3-none-any.whl", hash = "sha256:dd00526680595aad0eade682bd8a9e9513e9b4b8932daed159925fe446fc90a9"}, -] -types-urllib3 = [ - {file = "types-urllib3-1.26.20.tar.gz", hash = "sha256:1fb6e2af519a7216a19dd6be8cd2ee787b402a754ccb4a13ca1c0e5b202aea5a"}, - {file = "types_urllib3-1.26.20-py3-none-any.whl", hash = "sha256:6249b6223226cb2012db3b4ff6945c9cb0e12ece9b24f5e29787c4f05028a979"}, -] -typing-extensions = [ - {file = "typing_extensions-4.3.0-py3-none-any.whl", hash = "sha256:25642c956049920a5aa49edcdd6ab1e06d7e5d467fc00e0506c44ac86fbfca02"}, - {file = "typing_extensions-4.3.0.tar.gz", hash = "sha256:e6d2677a32f47fc7eb2795db1dd15c1f34eff616bcaf2cfb5e997f854fa1c4a6"}, -] -typing-inspect = [ - {file = "typing_inspect-0.7.1-py2-none-any.whl", hash = "sha256:b1f56c0783ef0f25fb064a01be6e5407e54cf4a4bf4f3ba3fe51e0bd6dcea9e5"}, - {file = "typing_inspect-0.7.1-py3-none-any.whl", hash = "sha256:3cd7d4563e997719a710a3bfe7ffb544c6b72069b6812a02e9b414a8fa3aaa6b"}, - {file = "typing_inspect-0.7.1.tar.gz", hash = "sha256:047d4097d9b17f46531bf6f014356111a1b6fb821a24fe7ac909853ca2a782aa"}, -] -urllib3 = [ - {file = "urllib3-1.26.11-py2.py3-none-any.whl", hash = "sha256:c33ccba33c819596124764c23a97d25f32b28433ba0dedeb77d873a38722c9bc"}, - {file = "urllib3-1.26.11.tar.gz", hash = "sha256:ea6e8fb210b19d950fab93b60c9009226c63a28808bc8386e05301e25883ac0a"}, -] -websockets = [ - {file = "websockets-10.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:661f641b44ed315556a2fa630239adfd77bd1b11cb0b9d96ed8ad90b0b1e4978"}, - {file = "websockets-10.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b529fdfa881b69fe563dbd98acce84f3e5a67df13de415e143ef053ff006d500"}, - {file = "websockets-10.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f351c7d7d92f67c0609329ab2735eee0426a03022771b00102816a72715bb00b"}, - {file = "websockets-10.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:379e03422178436af4f3abe0aa8f401aa77ae2487843738542a75faf44a31f0c"}, - {file = "websockets-10.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e904c0381c014b914136c492c8fa711ca4cced4e9b3d110e5e7d436d0fc289e8"}, - {file = "websockets-10.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e7e6f2d6fd48422071cc8a6f8542016f350b79cc782752de531577d35e9bd677"}, - {file = "websockets-10.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b9c77f0d1436ea4b4dc089ed8335fa141e6a251a92f75f675056dac4ab47a71e"}, - {file = "websockets-10.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e6fa05a680e35d0fcc1470cb070b10e6fe247af54768f488ed93542e71339d6f"}, - {file = "websockets-10.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2f94fa3ae454a63ea3a19f73b95deeebc9f02ba2d5617ca16f0bbdae375cda47"}, - {file = "websockets-10.3-cp310-cp310-win32.whl", hash = "sha256:6ed1d6f791eabfd9808afea1e068f5e59418e55721db8b7f3bfc39dc831c42ae"}, - {file = "websockets-10.3-cp310-cp310-win_amd64.whl", hash = "sha256:347974105bbd4ea068106ec65e8e8ebd86f28c19e529d115d89bd8cc5cda3079"}, - {file = "websockets-10.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fab7c640815812ed5f10fbee7abbf58788d602046b7bb3af9b1ac753a6d5e916"}, - {file = "websockets-10.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:994cdb1942a7a4c2e10098d9162948c9e7b235df755de91ca33f6e0481366fdb"}, - {file = "websockets-10.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:aad5e300ab32036eb3fdc350ad30877210e2f51bceaca83fb7fef4d2b6c72b79"}, - {file = "websockets-10.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e49ea4c1a9543d2bd8a747ff24411509c29e4bdcde05b5b0895e2120cb1a761d"}, - {file = "websockets-10.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:6ea6b300a6bdd782e49922d690e11c3669828fe36fc2471408c58b93b5535a98"}, - {file = "websockets-10.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:ef5ce841e102278c1c2e98f043db99d6755b1c58bde475516aef3a008ed7f28e"}, - {file = "websockets-10.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d1655a6fc7aecd333b079d00fb3c8132d18988e47f19740c69303bf02e9883c6"}, - {file = "websockets-10.3-cp37-cp37m-win32.whl", hash = "sha256:83e5ca0d5b743cde3d29fda74ccab37bdd0911f25bd4cdf09ff8b51b7b4f2fa1"}, - {file = "websockets-10.3-cp37-cp37m-win_amd64.whl", hash = "sha256:da4377904a3379f0c1b75a965fff23b28315bcd516d27f99a803720dfebd94d4"}, - {file = "websockets-10.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a1e15b230c3613e8ea82c9fc6941b2093e8eb939dd794c02754d33980ba81e36"}, - {file = "websockets-10.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:31564a67c3e4005f27815634343df688b25705cccb22bc1db621c781ddc64c69"}, - {file = "websockets-10.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c8d1d14aa0f600b5be363077b621b1b4d1eb3fbf90af83f9281cda668e6ff7fd"}, - {file = "websockets-10.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8fbd7d77f8aba46d43245e86dd91a8970eac4fb74c473f8e30e9c07581f852b2"}, - {file = "websockets-10.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:210aad7fdd381c52e58777560860c7e6110b6174488ef1d4b681c08b68bf7f8c"}, - {file = "websockets-10.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6075fd24df23133c1b078e08a9b04a3bc40b31a8def4ee0b9f2c8865acce913e"}, - {file = "websockets-10.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7f6d96fdb0975044fdd7953b35d003b03f9e2bcf85f2d2cf86285ece53e9f991"}, - {file = "websockets-10.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c7250848ce69559756ad0086a37b82c986cd33c2d344ab87fea596c5ac6d9442"}, - {file = "websockets-10.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:28dd20b938a57c3124028680dc1600c197294da5db4292c76a0b48efb3ed7f76"}, - {file = "websockets-10.3-cp38-cp38-win32.whl", hash = "sha256:54c000abeaff6d8771a4e2cef40900919908ea7b6b6a30eae72752607c6db559"}, - {file = "websockets-10.3-cp38-cp38-win_amd64.whl", hash = "sha256:7ab36e17af592eec5747c68ef2722a74c1a4a70f3772bc661079baf4ae30e40d"}, - {file = "websockets-10.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a141de3d5a92188234afa61653ed0bbd2dde46ad47b15c3042ffb89548e77094"}, - {file = "websockets-10.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:97bc9d41e69a7521a358f9b8e44871f6cdeb42af31815c17aed36372d4eec667"}, - {file = "websockets-10.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d6353ba89cfc657a3f5beabb3b69be226adbb5c6c7a66398e17809b0ce3c4731"}, - {file = "websockets-10.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec2b0ab7edc8cd4b0eb428b38ed89079bdc20c6bdb5f889d353011038caac2f9"}, - {file = "websockets-10.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:85506b3328a9e083cc0a0fb3ba27e33c8db78341b3eb12eb72e8afd166c36680"}, - {file = "websockets-10.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8af75085b4bc0b5c40c4a3c0e113fa95e84c60f4ed6786cbb675aeb1ee128247"}, - {file = "websockets-10.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:07cdc0a5b2549bcfbadb585ad8471ebdc7bdf91e32e34ae3889001c1c106a6af"}, - {file = "websockets-10.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:5b936bf552e4f6357f5727579072ff1e1324717902127ffe60c92d29b67b7be3"}, - {file = "websockets-10.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e4e08305bfd76ba8edab08dcc6496f40674f44eb9d5e23153efa0a35750337e8"}, - {file = "websockets-10.3-cp39-cp39-win32.whl", hash = "sha256:bb621ec2dbbbe8df78a27dbd9dd7919f9b7d32a73fafcb4d9252fc4637343582"}, - {file = "websockets-10.3-cp39-cp39-win_amd64.whl", hash = "sha256:51695d3b199cd03098ae5b42833006a0f43dc5418d3102972addc593a783bc02"}, - {file = "websockets-10.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:907e8247480f287aa9bbc9391bd6de23c906d48af54c8c421df84655eef66af7"}, - {file = "websockets-10.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b1359aba0ff810d5830d5ab8e2c4a02bebf98a60aa0124fb29aa78cfdb8031f"}, - {file = "websockets-10.3-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:93d5ea0b5da8d66d868b32c614d2b52d14304444e39e13a59566d4acb8d6e2e4"}, - {file = "websockets-10.3-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7934e055fd5cd9dee60f11d16c8d79c4567315824bacb1246d0208a47eca9755"}, - {file = "websockets-10.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:3eda1cb7e9da1b22588cefff09f0951771d6ee9fa8dbe66f5ae04cc5f26b2b55"}, - {file = "websockets-10.3.tar.gz", hash = "sha256:fc06cc8073c8e87072138ba1e431300e2d408f054b27047d047b549455066ff4"}, -] -zipp = [ - {file = "zipp-3.8.1-py3-none-any.whl", hash = "sha256:47c40d7fe183a6f21403a199b3e4192cca5774656965b0a4988ad2f8feb5f009"}, - {file = "zipp-3.8.1.tar.gz", hash = "sha256:05b45f1ee8f807d0cc928485ca40a07cb491cf092ff587c0df9cb1fd154848d2"}, -] diff --git a/pyproject.toml b/pyproject.toml index ee8f2a2649..0030b0f451 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,91 +1,145 @@ -[tool.poetry] -name = "LISA" -version = "3.0.0.dev1" +[build-system] +requires = ["setuptools >= 65", "setuptools_scm[toml] >= 6.2"] +build-backend = "setuptools.build_meta" + + +[project] +name = "lisa" description = "Linux Integration Services Automation" -authors = ["contributors "] -license = "MIT" -packages = [ - { include = "lisa" }, - { include = "microsoft" }, +classifiers = [ + "Programming Language :: Python :: 3", + "Development Status :: 5 - Production/Stable", + "Topic :: Software Development :: Testing", +] +dependencies = [ + "assertpy ~= 1.1", + "func-timeout ~= 4.3.5", + "dataclasses-json ~= 0.5.2", + "paramiko ~= 2.10.1", + "pluggy ~= 0.13.1", + "python-dateutil ~= 2.8.1", + "pytest-html >= 3.2.0", + "PyYAML ~= 5.4.1", + "randmac ~= 0.1", + "retry ~= 0.9.2", + "semver ~= 2.13.0", + "spurplus ~= 2.3.4", + "websockets ~= 10.3", +] +dynamic = ["version"] +license = {text = "MIT"} +readme = "README.rst" +requires-python = ">=3.8, <3.11" + + +[project.optional-dependencies] +aws = [ + "boto3 ~= 1.21.37", +] + +azure = [ + "azure-identity ~= 1.9.0", + "azure-mgmt-compute ~= 26.1.0", + "azure-mgmt-marketplaceordering ~= 1.1.0", + "azure-mgmt-network ~= 19.3.0", + "azure-mgmt-privatedns ~= 1.0.0", + "azure-mgmt-resource ~= 21.0.0", + "azure-mgmt-serialconsole ~= 1.0.0", + "azure-mgmt-storage ~= 20.0.0", + "azure-storage-blob ~= 12.11.0", + "azure-storage-file-share ~= 12.4.0", + "cachetools ~= 5.2.0", + "requests", + "Pillow ~= 9.0.0", + "PyGObject ~= 3.38.0; platform_system == 'Linux'", +] + +docs = [ + "Sphinx >= 4.1.0", + "sphinx-argparse >= 0.2.5", + "sphinx-rtd-theme >= 0.5.2", + "sphinxemoji >= 0.1.8", + "sphinx-copybutton >= 0.4.0", +] + +flake8 = [ + "flake8 >= 4.0.1", + "Flake8-pyproject", + "flake8-black >= 0.3.2", + "flake8-bugbear >= 22.3.23", + "flake8-isort >= 4.1.1", + "pep8-naming >= 0.12.1", +] + +legacy = [ + "pypiwin32; platform_system == 'Windows'", +] + +libvirt = [ + "libvirt-python ~= 8.9.0; platform_system != 'Windows'", + "pycdlib ~= 1.12.0; platform_system != 'Windows'", +] + +test = [ +] + +typing = [ + "types-retry ~= 0.1.3", + "types-paramiko ~= 0.1.7", + "types-requests ~= 2.25.0", + "types-python-dateutil ~= 0.1.4", + "types-PyYAML ~= 5.4.3", + "types-cachetools ~= 5.2.1", + "types-Pillow ~= 8.3.3", + "types-toml", + "boto3-stubs ~= 1.21.37", + "mypy-boto3-ec2", ] -[tool.poetry.dependencies] -PyGObject = {version = "^3.38.0", platform = 'linux', optional=true} -PyYAML = "^5.4.1" -assertpy = "^1.1" -azure-identity = {version = "^1.9.0", optional = true} -azure-storage-blob = {version = "^12.11.0", optional = true} -azure-mgmt-compute = {version = "^26.1.0", optional = true} -azure-mgmt-marketplaceordering = {version = "^1.1.0", optional = true} -azure-mgmt-network = {version = "^19.3.0", optional = true} -azure-mgmt-resource = {version = "^21.0.0", optional = true} -azure-mgmt-serialconsole = {version = "^1.0.0", optional = true} -azure-mgmt-storage = {version = "^20.0.0", optional = true} -azure-storage-file-share = {version = "12.4.0", optional = true} -azure-mgmt-privatedns = {version="1.0.0", optional=true} -cachetools = "^5.2.0" -dataclasses-json = "^0.5.2" -func-timeout = "^4.3.5" -paramiko = "^2.10.1" -pluggy = "^0.13.1" -pypiwin32 = {version = "^223", platform = "win32", optional=true} -pytest-html = "^3.1.1" -python = ">=3.8,<4.0" -python-dateutil = "^2.8.1" -retry = "^0.9.2" -spurplus = "^2.3.4" -semver = "^2.13.0" -types-toml = "^0.1.5" -libvirt-python = {version = "^8.9.0", platform = 'linux', optional=true} -pycdlib = "^1.12.0" -randmac = "^0.1" -toml = "^0.10.2" -Pillow = {version="^9.0.0", optional=true} -websockets = "^10.3" - -# AWS related packages -boto3 = {version = "^1.21.37", optional = true} -boto3-stubs = {version = "^1.21.37", extras = ["essential"], optional = true} - -# dev dependencies. Optional isn't supported, so put them here. -Sphinx = {version="^4.1.0", optional=true} -sphinx-argparse = {version="^0.2.5", optional=true} -sphinx-rtd-theme = {version="^0.5.2", optional=true} -sphinxemoji = {version="^0.1.8", optional=true} -sphinx-copybutton = {version="^0.4.0", optional=true} -rstcheck = {version="^3.3.1", optional=true} -types-Pillow = {version="^8.3.3", optional=true} - -[tool.poetry.dev-dependencies] -black = "^22.3.0" -coverage = "^5.3" -flake8 = "^4.0.1" -flake8-black = "^0.3.2" -flake8-bugbear = "^22.3.23" -flake8-isort = "^4.1.1" -isort = "^5.10.1" -mypy = "^0.942" -pep8-naming = "^0.12.1" -rope = "^1.0.0" -types-retry = "^0.1.3" -types-paramiko = "^0.1.7" -types-requests = "^2.25.0" -types-python-dateutil = "^0.1.4" -types-PyYAML = "^5.4.3" -types-cachetools = "^5.2.1" - - -[tool.poetry.extras] -azure = ["azure-identity", "azure-storage-blob", "azure-mgmt-compute", "azure-mgmt-marketplaceordering", "azure-mgmt-network", "azure-mgmt-resource", "azure-mgmt-serialconsole", "azure-mgmt-storage", "azure-storage-file-share", "azure-mgmt-privatedns", "PyGObject", "Pillow", "types-Pillow"] -libvirt = ["libvirt-python"] -aws = ["boto3", "boto3-stubs"] -legacy = ["pypiwin32"] -doc = ["Sphinx", "sphinx-argparse", "sphinx-rtd-theme", "sphinxemoji", "sphinx-copybutton", "snooty-lextudio", "rstcheck"] + +[project.scripts] +lisa = "lisa.main:cli" + + +[project.urls] +homepage = "https://github.com/microsoft/lisa" +documentation = "https://mslisa.readthedocs.io" + [tool.black] line-length = 88 target-version = ['py38'] + +[tool.coverage.report] +skip_empty = true +include = [ + "lisa*", + "examples*", + "microsoft/testsuites*", +] +omit = [ + "lisa/tests/*", +] +precision = 2 + + +[tool.flake8] +max-line-length = 88 +select = ["B", "BLK", "C90", "E", "F", "I", "W", "N"] +max-complexity = 15 +extend-ignore = ["E203", "W503", "N818"] +exclude = [ + ".git", + ".nox", + "__pycache__", + "*.pyi", + "runtime", + ".venv", + ".vscode", +] + + [tool.isort] multi_line_output = 3 include_trailing_comma = true @@ -94,13 +148,21 @@ use_parentheses = true ensure_newline_before_comments = true line_length = 88 -[build-system] -requires = ["poetry>=0.12"] -build-backend = "poetry.masonry.api" [tool.mypy] +exclude = ".venv/.*" +implicit_reexport = true mypy_path = "./typings" strict = true namespace_packages = true -implicit_reexport = true -show_column_numbers = true \ No newline at end of file +show_column_numbers = true +explicit_package_bases = true + + +[tool.setuptools] +packages = ["lisa"] + + +[tool.setuptools_scm] +version_scheme = "post-release" +local_scheme = "no-local-version" From f5c7769f4bddcfa44efb901c311f2b10bd9c6150 Mon Sep 17 00:00:00 2001 From: Avram Lubkin Date: Thu, 3 Nov 2022 13:34:51 -0400 Subject: [PATCH 4/6] Update sphinx config --- docs/Makefile | 4 ++-- docs/conf.py | 39 ++------------------------------------- docs/requirements.txt | 35 ----------------------------------- readthedocs.yaml | 7 ++++++- 4 files changed, 10 insertions(+), 75 deletions(-) delete mode 100644 docs/requirements.txt diff --git a/docs/Makefile b/docs/Makefile index bc56834923..bcb59c5734 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -10,11 +10,11 @@ BUILDDIR = _build # Put it first so that "make" without argument is like "make help". help: - @poetry run $(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + $(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) .PHONY: help Makefile # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile - @poetry run $(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + $(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/conf.py b/docs/conf.py index 4e26475e7a..7c5901cbff 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -15,52 +15,17 @@ from pathlib import Path from typing import List -import toml - -root_dir = Path(__file__).parent.parent -pyproj = root_dir / "pyproject.toml" -requirement = root_dir / "docs" / "requirements.txt" - # to import lisa package +root_dir = Path(__file__).parent.parent sys.path.insert(0, str(root_dir)) sys.path.insert(0, str(root_dir / "docs")) from tools import update_file, update_summary # type: ignore # noqa: E402 -data = toml.load(pyproj) -dependencies = data["tool"]["poetry"]["dependencies"] -sphinx_dependencies = data["tool"]["poetry"]["dev-dependencies"] - -with open(requirement, "w") as req: - for module, value in dependencies.items(): - if isinstance(value, dict): - # Remove platform specific dependencies. - if "platform" in value: - continue - version = value["version"] - else: - version = str(value) - assert isinstance(module, str) - if module in ["python"]: - continue - if version.startswith("^"): - version = version[1:] - req.write(module) - req.write(">=") - req.write(version) - req.write("\n") - - for module, version in sphinx_dependencies.items(): - if str(module)[:6].lower() == "sphinx": - req.write(str(module)) - req.write(">=") - req.write(str(version)[1:]) - req.write("\n") - # -- Project information ----------------------------------------------------- project = "Linux Integration Services Automation (LISA)" -copyright = "2021, Microsoft" +copyright = "Microsoft Corporation" author = "Microsoft" release = "" diff --git a/docs/requirements.txt b/docs/requirements.txt deleted file mode 100644 index b4d43e6a2e..0000000000 --- a/docs/requirements.txt +++ /dev/null @@ -1,35 +0,0 @@ -PyYAML>=5.4.1 -assertpy>=1.1 -azure-identity>=1.9.0 -azure-storage-blob>=12.11.0 -azure-mgmt-compute>=26.1.0 -azure-mgmt-marketplaceordering>=1.1.0 -azure-mgmt-network>=19.3.0 -azure-mgmt-resource>=21.0.0 -azure-mgmt-serialconsole>=1.0.0 -azure-mgmt-storage>=20.0.0 -azure-storage-file-share>=12.4.0 -dataclasses-json>=0.5.2 -func-timeout>=4.3.5 -paramiko>=2.10.1 -pluggy>=0.13.1 -pytest-html>=3.1.1 -python-dateutil>=2.8.1 -retry>=0.9.2 -spurplus>=2.3.4 -semver>=2.13.0 -types-toml>=0.1.5 -pycdlib>=1.12.0 -randmac>=0.1 -toml>=0.10.2 -Pillow>=9.0.0 -websockets>=10.3 -boto3>=1.21.37 -boto3-stubs>=1.21.37 -Sphinx>=4.1.0 -sphinx-argparse>=0.2.5 -sphinx-rtd-theme>=0.5.2 -sphinxemoji>=0.1.8 -sphinx-copybutton>=0.4.0 -rstcheck>=3.3.1 -types-Pillow>=8.3.3 diff --git a/readthedocs.yaml b/readthedocs.yaml index bffcdcb1a7..b82f525541 100644 --- a/readthedocs.yaml +++ b/readthedocs.yaml @@ -8,4 +8,9 @@ sphinx: python: version: 3.8 install: - - requirements: docs/requirements.txt + - method: pip + path: . + extra_requirements: + - docs + - aws + - azure From 26f5c2eb4c6090b2d5cf8f28133d2d8954f3d97e Mon Sep 17 00:00:00 2001 From: Avram Lubkin Date: Thu, 3 Nov 2022 13:35:06 -0400 Subject: [PATCH 5/6] Update GitHub Actions --- .../continuous-integration-workflow.yml | 88 +++++++++++-------- 1 file changed, 50 insertions(+), 38 deletions(-) diff --git a/.github/workflows/continuous-integration-workflow.yml b/.github/workflows/continuous-integration-workflow.yml index 8269421b8c..24e6706d72 100644 --- a/.github/workflows/continuous-integration-workflow.yml +++ b/.github/workflows/continuous-integration-workflow.yml @@ -2,60 +2,72 @@ name: CI Workflow on: push: - branches: - - main pull_request: branches: - main jobs: - build: + Check: + continue-on-error: ${{ matrix.optional || false }} runs-on: ${{ matrix.os }} + name: >- + ${{ matrix.nox-session || matrix.task }} + (${{ matrix.os }}, ${{ matrix.python-version }}) + ${{ matrix.optional && '[OPTIONAL]' }} + strategy: + fail-fast: false matrix: os: [ubuntu-20.04, windows-2019] - python-version: ["3.8", "3.9", "3.10"] - fail-fast: false + python-version: ['3.9', '3.10'] + nox-session: [test, example] + include: + + - os: ubuntu-latest + python-version: '' + nox-session: '' + task: shellcheck + + - os: ubuntu-latest + python-version: '3.8' + nox-session: flake8 + + - os: ubuntu-latest + python-version: '3.8' + nox-session: mypy + + - os: ubuntu-latest + python-version: '3.8' + nox-session: docs + + - os: ubuntu-latest + python-version: '3.8' + nox-session: coverage + + env: + NOXSESSION: ${{ matrix.nox-session }} + steps: - - name: Checkout repository to $GITHUB_WORKSPACE - uses: actions/checkout@v2 + - uses: actions/checkout@v2 - - name: Setup bootstrap Python + - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} + if: matrix.python-version - - name: Install Poetry for Linux - if: runner.os == 'Linux' + - name: Install system dependencies run: | - curl -sSL https://install.python-poetry.org/ | python - --version 1.1.5 - echo "$HOME/.local/bin" >> $GITHUB_PATH - - name: Install Poetry for Windows - if: runner.os == 'Windows' - run: | - (Invoke-WebRequest -Uri https://raw.githubusercontent.com/python-poetry/poetry/master/install-poetry.py -UseBasicParsing).Content | python - --version 1.1.5 - echo "$env:APPDATA\Python\Scripts" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append - - name: Install Python dependencies (Linux-only) - if: runner.os == 'Linux' - run: | - sudo apt update - sudo apt install libgirepository1.0-dev libcairo2-dev qemu-utils libvirt-dev - - name: Install Python dependencies - run: make setup - - - name: Run hello-world - run: make run - - - name: Run unit tests - run: make test + sudo apt install libgirepository1.0-dev + if: startsWith(matrix.os, 'ubuntu') - - name: Calculate code coverage - run: make coverage - if: matrix.python-version == '3.8' + - name: Install Nox + run: pip install nox toml + if: matrix.nox-session - - name: Run black/flake8/isort/mypy - run: make check - if: matrix.python-version == '3.8' + - name: Run Nox + run: nox -v + if: matrix.nox-session - name: Run ShellCheck - if: runner.os == 'Linux' && matrix.python-version == '3.8' - uses: ludeeus/action-shellcheck@0.5.0 \ No newline at end of file + uses: ludeeus/action-shellcheck@1.1.0 + if: matrix.task == 'shellcheck' From 411d489c4515118d9ad5da4f9a283f0c2f2c15e9 Mon Sep 17 00:00:00 2001 From: Avram Lubkin Date: Thu, 3 Nov 2022 13:35:54 -0400 Subject: [PATCH 6/6] Update docs for nox / setuptools changes --- docs/extras.rst | 35 +++++ docs/install.rst | 3 +- docs/installation_linux.rst | 110 +++++++++------- docs/installation_windows.rst | 87 +++++++------ docs/troubleshooting.rst | 83 +----------- docs/update.rst | 21 ++- docs/write_test/dev_setup.rst | 239 +++++++++++++++++++++++++++++++--- 7 files changed, 396 insertions(+), 182 deletions(-) create mode 100644 docs/extras.rst diff --git a/docs/extras.rst b/docs/extras.rst new file mode 100644 index 0000000000..89a9e0ea22 --- /dev/null +++ b/docs/extras.rst @@ -0,0 +1,35 @@ +Extra Dependencies +================== + +What are extras? +---------------- + +Python has a concept of `Extras`, which are groups of dependencies that can be +with a package to provide additional functionality. + +To `install extras`_, simply include the name(s) in square brackets after the +package name. + +.. code:: bash + + pip install lisa[azure,libvirt] + +LISA's extras +------------- + +LISA has several supported extra dependency groups. + +aws + Provides dependencies for running LISA on Amazon Web Services + +azure + Provides dependencies for running LISA on Microsoft Azure + +legacy + Provides dependencies for running LISA v2 tests + +libvirt + Provides dependencies for running LISA on libvirt-managed hypervisors + + +.. _install extras: https://packaging.python.org/en/latest/tutorials/installing-packages/#installing-extras \ No newline at end of file diff --git a/docs/install.rst b/docs/install.rst index bb3e4ab037..ed8534ecd5 100644 --- a/docs/install.rst +++ b/docs/install.rst @@ -5,7 +5,8 @@ Currently we support installation on Linux & Windows. .. toctree:: :maxdepth: 2 - + Installation on Linux Installation on Windows Updating LISA + extras diff --git a/docs/installation_linux.rst b/docs/installation_linux.rst index ee0d1adfde..c03823f226 100644 --- a/docs/installation_linux.rst +++ b/docs/installation_linux.rst @@ -1,41 +1,79 @@ Install LISA on Linux ===================== -Minimum System Requirement --------------------------- -1. Your favourite Linux distro supporting Python 3.8+ +Minimum System Requirements +--------------------------- + +1. Your favorite Linux distribution supporting Python 3.8 - 3.10 2. Dual core processor 3. 4 GB system memory -We will guide you through the installation of LISA on Linux. The following commands assume Ubuntu 18.04 as the underlying Linux distro. +We will guide you through the installation of LISA on Linux. +The following commands assume Ubuntu is being used. + Install Python on Linux ----------------------- -LISA has been tested to work with `Python 3.8 64-bit -`__. The latest version of Python 3 is -recommended. If you find that LISA is not compatible with higher version -Python, `please file an -issue `__. +LISA has been tested to work with `Python 3.8 - 3.10 64-bit `__. +Python 3.10 is recommended. Support for 3.11+ is under development. +If you find that LISA is not compatible with a supported version, +`please file an issue `__. + +To check which version of Python is used on your system, run the following: + +.. code:: bash + + python3 --version -Run following commands to install Python 3.8: +If you need to install a different Python package, there are likely packaged versions for +your distro. + +Here is an example to install Python 3.10 on Ubuntu 20.04 .. code:: bash sudo apt update sudo apt install software-properties-common -y sudo add-apt-repository ppa:deadsnakes/ppa -y - sudo apt install python3.8 python3.8-dev -y + sudo apt install python3.10 python3.10-dev -y + -Install dependencies on Linux ------------------------------ +Install system dependencies +--------------------------- -Run the command below to install the dependencies: +Run the command below to install the dependencies on Ubuntu: .. code:: bash sudo apt install git gcc libgirepository1.0-dev libcairo2-dev qemu-utils libvirt-dev python3-pip python3-venv -y +If you're using a different distribution or python version, adjust the command as needed + + +Check PATH +---------- + +When installing Python packages via ``pip``, they will be installed as a local user unless invoked +as root. Some Python packages contain entry point scripts which act as user-facing commands +for the Python package. When installed as a user, these scripts are placed in ``$HOME/.local/bin``. + +To ensure you're able to run these commands, make sure ``$HOME/.local/bin`` is at the beginning +of your ``$PATH``. The following command will highlight this section of the ``$PATH`` variable +if it exists. + +.. code:: bash + + echo $PATH | grep --color=always "$HOME/\.local/bin\|$ + +Ideally, this section is at the beginning of your ``$PATH``. If not, you can add the following to +the bottom of your ``~/.profile`` or ``~.bash_profile`` files. + +.. code:: bash + + export PATH="$HOME/.local/bin:$PATH + + Clone code ---------- @@ -44,54 +82,36 @@ Clone code git clone https://github.com/microsoft/lisa.git cd lisa -Install Poetry on Linux ------------------------ - -Poetry is used to manage Python dependencies of LISA. -.. warning:: +Directly install LISA (Option 1) +-------------------------------- - Please enter the root folder of LISA source code to run - following commands to install poetry, since Poetry manages dependencies - by the working folder. +This will install LISA directly for the invoking user. +To install system-wide, preface the command with ``sudo``. .. code:: bash - curl -sSL https://install.python-poetry.org | python3 - + python3 -m pip install .[azure, libvirt] -After running this, you should see -``Add export PATH="/home/YOURUSERNAME/.local/bin:$PATH" to your shell configuration file`` -message on the console. Follow the message and add the necessary exports to ``$HOME/.profile`` file. -.. code:: bash - - source $HOME/.profile -[Optional] Create poetry virtual environment in the same folder as LISA for VS Code to automatically -pick up the python environment. Run the following commands to update poetry configuration: - -.. code:: bash +Install LISA in a virtual environment (Option 2) +------------------------------------------------ - poetry config virtualenvs.in-project true +If you wish to keep LISA and it's dependencies separate, you can install it +into a virtual environment. This `guide`_ can be used if you wish to do this manually. +Or, to use a development virtual environment, follow the instructions in :ref:`DevVirtEnv`. -Install python dependencies +.. _guide: https://sublime-and-sphinx-guide.readthedocs.io/en/latest/references.html -.. code:: bash - make setup Verify installation ------------------- -``lisa.sh`` is provided in Linux to wrap ``Poetry`` for you to run LISA -test. - -In Linux, you could create an alias for this simple script. For example, -add below line to add to ``.bashrc``: - -.. code:: bash +Ensure LISA is installed or a virtual environment is activated. - alias lisa="./lisa.sh" +Run LISA with the ``lisa`` command With no argument specified, LISA will run some sample test cases with the default runbook (``examples/runbook/hello_world.yml``) on your local diff --git a/docs/installation_windows.rst b/docs/installation_windows.rst index 2848bed13b..2b8acf259e 100644 --- a/docs/installation_windows.rst +++ b/docs/installation_windows.rst @@ -5,28 +5,45 @@ We will guide you through the installation of LISA on Windows. .. note:: - On Windows, after you finished an installation, or made an + On Windows, after you finished an installation, or make an environment variable change, you might need to restart your shell before moving - to next step, to make sure your changes take effect. + to next step to make sure your changes take effect. .. note:: Please run your command prompt or shell with elevated privilege (such as ``'Run as Administrator'`` on Windows) when you see access denied - message when install tools. + message when installing tools. + Install Python on Windows ------------------------- -LISA has been tested on `Python 3.8 64 -bits `__. The latest version of Python 3 is -recommended. If you found LISA is not compatible with higher version -Python, `please file an -issue `__. +LISA has been tested to work with `Python 3.8 64-bit `__ and above. +The latest version of Python 3 is recommended. If you find that LISA is not compatible +with higher version Python, `please file an issue `__. + +Install from Microsoft Store (recommended) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +It is recommended to install Python from the Microsoft Store. Packages are regularly +published by the Python Software Foundation and will set up paths as needed. + +To install from the Microsoft Store, search for Python in the store interface or, +if no other Python version is installed, running `python3` from the command line +will bring up the latest version. +More details can be found `here`. -Navigate to `Python releases for -Windows `__. Download and -install *Windows installer (64-bit)* for Python 3.8 64-bits or higher -version. +Install using full installer (alternative) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The full installer allows greater customization and doesn't have the security restriction +of the Microsoft Store packages, so may be preferred in some situations. + +Navigate to `Python releases for Windows `__. +Download and install *Windows installer (64-bit)* for Python 3.8 - 3.10 64-bit. + +More information on the full installer, including installation without a GUI, +can be found `here `_. .. warning:: @@ -48,15 +65,13 @@ please manually add these two paths. If this is your first time installing Python, simply check “add Python to PATH” option in installation. -Install dependencies on Windows -------------------------------- -Please install ``git`` on your computer to clone LISA source code from -this repo and ``pip`` for later installation of Poetry. +Install system dependencies on Windows +-------------------------------------- In Windows, you need to install `git `__, -``virtualenv``\ (by running ``pip install virtualenv``) and `Visual C++ -redistributive package `__ +and `Visual C++ redistributive package `__ + Clone code ---------- @@ -66,38 +81,34 @@ Clone code git clone https://github.com/microsoft/lisa.git cd lisa -Install Poetry on Windows -------------------------- - -Poetry is used to manage Python dependencies of LISA. -Enter the ``PowerShell`` command prompt and then execute below commands: - -.. code:: powershell +Directly install LISA (Option 1) +-------------------------------- - (Invoke-WebRequest -Uri https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py -UseBasicParsing).Content | python - +This will install LISA directly for the invoking user. +To install system-wide, run from and Administrator console. - # Add poetry.exe's path to your `PATH` environment variable. - $env:PATH += ";$env:APPDATA\Python\Scripts" +.. code:: bash -[Optional] Create poetry virtual environment in the same folder as LISA for VS Code to automatically -pick up the python environment. Run the following commands to update poetry configuration: + pip3 install .[azure] -.. code:: powershell - poetry config virtualenvs.in-project true -Install python dependencies +Install LISA in a virtual environment (Option 2) +------------------------------------------------ -.. code:: powershell +If you wish to keep LISA and it's dependencies separate, you can install it +into a virtual environment. This `guide`_ can be used if you wish to do this manually. +Or, to use a development virtual environment, follow the instructions in :ref:`DevVirtEnv`. - poetry install -E "azure libvirt" +.. _guide: https://sublime-and-sphinx-guide.readthedocs.io/en/latest/references.html Verify installation ------------------- -``lisa.cmd`` is provided in Windows to wrap ``Poetry`` for you to run -LISA test. +Ensure LISA is installed or a virtual environment is activated. + +Run LISA with the ``lisa`` command With no argument specified, LISA will run some sample test cases with the default runbook (``examples/runbook/hello_world.yml``) on your local @@ -107,7 +118,7 @@ computer. .. code:: bash - .\lisa + lisa FAQ and Troubleshooting ----------------------- diff --git a/docs/troubleshooting.rst b/docs/troubleshooting.rst index 183466bb31..d90565758d 100644 --- a/docs/troubleshooting.rst +++ b/docs/troubleshooting.rst @@ -1,55 +1,14 @@ Troubleshooting =============== -- `Installation <#installation>`__ +.. contents:: + :local: + :depth: 2 - - `How to use LISA in WSL <#how-to-use-lisa-in-wsl>`__ - - `Many missing packages <#many-missing-packages>`__ - - `Error: Poetry could not find a pyproject.toml - file <#error-poetry-could-not-find-a-pyproject-toml-file>`__ - - `Error: Poetry \"The virtual environment seems to be broken\" - <#error-poetry-the-virtual-environment-seems-to-be-broken>`__ - -- `Using VSCode <#using-vscode>`__ - - - `Cannot find Python Interpreter by Poetry <#cannot-find-python-interpreter-by-poetry>`__ - - `VSCode Python extension no longer supports “python.pythonPath” in “setting.json” <#vscode-python-extension-no-longer-supports-python-pythonpath-in-setting-json>`__ - -- `Other issues <#other-issues>`__ - - - `Poetry related questions <#poetry-related-questions>`__ Installation ------------ -How to use LISA in WSL -~~~~~~~~~~~~~~~~~~~~~~ - -If you are using WSL, installing Poetry on both Windows and WSL may -cause both platforms’ versions of Poetry to be on your path, as Windows -binaries are mapped into ``PATH`` of WSL. This means that the WSL -``poetry`` binary *must* appear in your ``PATH`` before the Windows -version, otherwise this error will appear: - -``/usr/bin/env: ‘python\r’: No such file or directory`` - -Many missing packages -~~~~~~~~~~~~~~~~~~~~~ - -Poetry is case sensitive, which means it differentiates directories like -``C:\abc`` and ``C:\ABC`` in Windows, although Windows in fact does not allow -this (as a case insensitive system). When reading the path, please make sure -there’s no case mismatch in the path. Then run ``poetry install`` again at the -root folder (where your LISA source code is) to make sure all packages are -correctly installed. - -Error: Poetry could not find a pyproject.toml file -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Poetry provides different packages according to the folder, and depends -on the ``pyproject.toml`` file in the current folder. Make sure to run -``poetry`` in the root folder of LISA. - Error: (For Windows installation) Cannot open Scripts folder ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -58,32 +17,15 @@ The Shell interface tries to locate the Scripts folder inside python.exe. Error line: Cannot open \\Microsoft\\WindowsApps\ \PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\\python.exe\\Scripts' -Reason: This could happen when you install the Python version via Microsoft -store. +Reason: This can happen when you install the Python version via Microsoft +store or use a user installation. Fix: uninstall the Microsoft Store version and install the standalone version from https://www.python.org/downloads/windows/ -Error: Poetry "The virtual environment seems to be broken" -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Ensure that ``python3 --version`` returns python3.8 before trying to install poetry. If the command points to an older version of python3, you must uninstall then reinstall poetry after ensuring that virtualenv is installed with pip3 using python3.8. - Using VSCode ------------ -Cannot find Python Interpreter by Poetry -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -In the root folder of LISA, run the command below. It will return the -path of the virtual environment that Poetry set up. Use that path to -find the Python interpreter accordingly (in most cases open the path and -look for ``\Scripts\python.exe``). - -.. code:: powershell - - poetry env info -p - VSCode Python extension no longer supports “python.pythonPath” in “setting.json” ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -98,9 +40,8 @@ for more information. can get the path of your selected interpreter in the Python output channel." -An alternative way is to simply select the Poetry Python interpreter as -the default interpreter in the workspace, as in `Cannot find Python -Interpreter by Poetry <#cannot-find-python-interpreter-by-poetry>`__ +An alternative way is to simply select the virtual environment ``.venv`` as +the default interpreter in the workspace. Other issues ------------ @@ -108,13 +49,3 @@ Other issues Please check `known issues `__ or `file a new issue `__ if it doesn’t exist. - -Poetry related questions -~~~~~~~~~~~~~~~~~~~~~~~~ - -Poetry is very useful to manage dependencies of Python. It’s a virtual -environment, not a complete interpreter like Conda. So make sure the -right and effective version of Python interpreter is installed. You can -learn more about Poetry in the official documentation like -`installation `__ or -`commands `__. diff --git a/docs/update.rst b/docs/update.rst index d7f9d92537..a0f6bedeae 100644 --- a/docs/update.rst +++ b/docs/update.rst @@ -1,20 +1,27 @@ Updating LISA ============= -Once LISA has been successfully installed on your computer, simply follow below -steps to update. +Once LISA has been successfully installed on your computer, +the steps below can be used to keep it updated. + +To update the the local repo, ensure you are in the main branch and run -In the root folder of LISA ``(...\lisa\)``, run .. code:: bash git pull -to keep your local source code in sync with the latest code in repo, and then -run +If you installed LISA, reinstall to get the latest version. .. code:: bash - poetry install -E "azure libvirt" + python3 -m pip install .[azure, libvirt] + + +If you're using a virtual environment, recreate the virtual environment. + +.. code:: bash + + nox -vs dev + -to keep all packages up-to-date as well. diff --git a/docs/write_test/dev_setup.rst b/docs/write_test/dev_setup.rst index 336e7527f5..abbd76ed4c 100644 --- a/docs/write_test/dev_setup.rst +++ b/docs/write_test/dev_setup.rst @@ -4,15 +4,10 @@ Development setup This document describes the existing developer tooling we have in place (and what to expect of it). -- `Environment Setup <#environment-setup>`__ +.. contents:: + :local: + :depth: 2 - - `Visual Studio Code <#visual-studio-code>`__ - - `Emacs <#emacs>`__ - - `Other setups <#other-setups>`__ - -- `Code checks <#code-checks>`__ -- `Local Documentation <#local-documentation>`__ -- `Extended reading <#extended-reading>`__ Environment Setup ----------------- @@ -21,6 +16,77 @@ Follow the :ref:`quick_start:installation` steps to prepare the source code. Then follow the steps below to set up the corresponding development environment. +.. _DevVirtEnv: + +Creating a LISA development virtual environment +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Nox is used to manage virtual environments for LISA. +See `Using Nox`_ for more information. + +Nox can be installed with `pip`. + +.. code:: bash + + pip3 install nox toml + + +The following creates a virtual environment in ``.venv`` with an editable install +of LISA. An editable install allows code changes in the repo to immediately affect +the virtual environment. This is useful for iterative development. + +From the root of the LISA repo, run the following to create or update virtual environment. + +.. code:: bash + + nox -vs dev + +By default, the extra dependencies for Azure will be installed. +On Linux, the extra dependencies for libvirt will also be installed. +This behavior can be overridden by passing dependency groups as additional arguments. + +For example, the following will only install extra dependencies for Azure. + +.. code:: bash + + nox -vs dev -- azure + +Information on what extra dependency groups are supported can be found in +:ref:`extras:LISA's extras`. + + +VSCode should automatically detect and activate the virtual environment on startup +and you can manually activate it in a shell with the following commands. + + +Activate virtual environment (Bash) + +.. code:: bash + + source .venv/bin/activate + +Activate virtual environment (Powershell) + +.. code:: powershell + + .venv\Scripts\activate.ps1 + +Activate virtual environment (cmd) + +.. code:: batch + + .venv\Scripts\activate.bat + + +When the virtual environment is active, your command prompt will be prefixed with `(lisa)`. + +If you wish to deactivate the virtual environment, use the ``deactivate`` command. + +.. code:: bash + + deactivate + + Visual Studio Code ~~~~~~~~~~~~~~~~~~ @@ -117,7 +183,7 @@ a ``.dir-locals.el`` file as follows: ;;; Directory Local Variables ;;; For more information see (info "(emacs) Directory Variables") - ((python-mode . ((pyvenv-activate . "~/.cache/pypoetry/virtualenvs/lisa-s7Q404Ij-py3.8")))) + ((python-mode . ((pyvenv-activate . ".venv")))) Other setups ~~~~~~~~~~~~ @@ -150,24 +216,167 @@ manually. - `rope `__, provides completion and renaming support for pyls. +Using Nox +--------- + +Nox is test automation utility that allows running tests and utilities in +virtual environments. This allows isolation and consistency for these actions. + +Sessions +~~~~~~~~ + +Nox tasks are called sessions. A number of Nox sessions have been configured +for LISA. They can be displayed by running ``nox --list``. + +.. code:: console + + $ nox --list + Nox configuration file + See https://nox.thea.codes/en/stable/config.html + + Sessions defined in /srv/Development/lisa/noxfile.py: + + * test -> Run tests + * example -> Run example + * coverage -> Check test coverage + * black -> Run black + * isort -> Run isort + * flake8 -> Run flake8 + * mypy -> Run mypy + * docs -> Build docs + * dev -> Create virtual environment for development + + sessions marked with * are selected, sessions marked with - are skipped. + +An individual session can be run with ``nox -vs ``. + +.. code:: console + + $ nox -vs flake8 + nox > Running session flake8 + nox > Creating virtual environment (virtualenv) using python3 in .nox/flake8 + ... + nox > flake8 + nox > Session flake8 was successful. + +Tags +~~~~ + +Another way to call Nox sessions is with tags. Tags can not currently be +listed on the command line, but the following have been define: + +all + Runs various checks and tests to do before pushing a commit + +format + Run formatting tools such as isort and black + +linting + Run linting tools such as flake8 + +test + Run unit tests and test scenarios + +typing + Run typing tools such as mypy + + +To execute all sessions with a given tag, use the ``-t`` option. + +.. code:: console + + $ nox -vt format + nox > Running session black + ... + nox > Running session isort + ... + nox > Ran multiple sessions: + nox > * black: success + nox > * isort: success + + +To determine which sessions will be called for a tag without running them, +use the ``--list`` option. + +.. code:: console + + $ nox -t format --list + Nox configuration file + See https://nox.thea.codes/en/stable/config.html + + Sessions defined in /srv/Development/lisa/noxfile.py: + + - test -> Run tests + - example -> Run example + - coverage -> Check test coverage + * black -> Run black + * isort -> Run isort + - flake8 -> Run flake8 + - mypy -> Run mypy + - docs -> Build docs + - dev -> Create virtual environment for development + +Running with a different Python interpreter +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The Nox sessions for LISA are configured to run with the same Python interpreter +used to run Nox. To use a different interpreter, use the `--force-python` option. +You can either specify a Python version or the path to an executable. + +.. code:: console + + $ nox -vs test --force-python 3.11 + +.. code:: console + + $ nox -vs test --force-python /usr/bin/python3.11 + +Speeding up Nox +~~~~~~~~~~~~~~~ + +By default, Nox will recreate a virtual environment every time it runs. +This ensures there are no stale dependencies, but is not always necessary. +To reuse a virtual environment, use the ``-r`` option. To reuse the virtual +environment without reinstalling any dependencies, use the ``-R`` option. +This will have a greater impact for sessions with a large number of +dependencies. + + +.. code:: console + + $ time nox -vs flake8 + ... + real 0m9.827s + + $ time nox -vrs flake8 + ... + real 0m6.433s + + $ time nox -vRs flake8 + ... + real 0m5.638s + + + +Additional information +~~~~~~~~~~~~~~~~~~~~~~ + +More information on Nox can be found `here `_. + Local Documentation ------------------- It's recommended to build the documentation locally using ``Sphinx`` for preview. -To do so, in ``./lisa/docs``, run +To do so, run .. code:: bash - poetry run make html + nox -vs docs You can find all generated documents in ``./lisa/docs/_build/html`` folder. Open them with a browser to view. -.. note:: - If there are already generated documents in ``./lisa/docs/_build/html``, run - ``poetry run make clean`` to ensure the documentation is clean and not - affected by the previous build. Extended reading ----------------